百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

在 Go 中使用微服务架构的好处 go搭建微服务

liuian 2024-12-26 15:05 40 浏览

点击上方蓝色“Go语言中文网”关注我们,领全套Go资料,每天学习 Go 语言

前言

我们已经讨论“微服务架构”很长一段时间了。它是软件架构中最新的热门话题。那么什么是微服务呢?我们为什么要使用它?为什么要在 Golang 中使用微服务架构?它有哪些优点?

本文中,我将会探讨一些相关的问题。废话不多说,让我们开始吧。

什么是微服务?

微服务是一种软件开发技术,属于 SOA(面向服务的架构)的一种形式。它的作用是,将应用程序构建为许多松耦合的服务的集合。在这种架构中,服务的编码通常是细粒度的,服务的协议更轻量。目前还没有对微服务的准确定义,但它有一些显著的特征:自动化部署、业务功能、去中心化的数据管理和智能端点。(译者注:对于这个定义有兴趣的同学,不妨去看看 Martin 大神关于微服务的文章[1]

我们为什么使用微服务?

这种架构有助于我们用各部分、小型模块描绘整个应用程序,使其更容易理解、开发和测试;有助于我们将各个服务视为独立且又清晰指明其用途的服务。更进一步地,它有助于保持项目架构的一致性(最初设计的架构和实际开发完成的架构差别不大)。它还可以通过建立不同的独立团队来进行服务的部署和扩展,从而各团队能够并行地开发。在这个架构中重构代码更容易。它也支持连续交付和部署流程(CI/CD)。

为什么使用 go 构建微服务?

在深入研究这个问题之前。首先,我说一下 Golang 的优势。虽然 Golang 是一门新的语言,但是与其他语言相比,它有很多优势。用 Golang 编写的程序更加健壮。它们能够承受程序使用运行的服务构建的繁重负载。Golang 更适合多处理器系统和 web 应用程序。此外,它容易地与 GitHub 集成,管理非集中的代码包。微服务架构的用处大部分体现在当程序需要伸缩(scalable)时。如果有一种语言可以完全符合标准,那么它就是 Golang。原因是它继承自 C-family 编程语言,用 Golang 编写的组件更容易与同一家族中其他语言编写的组件相结合。

尽管 Go 出身于 C-family,但它比 C / C ++更高效。它语法更简单,有点像 Python。它稳定语法, 自第一次公开发布以来,它没有太大变化,也就是说它是后向兼容的。与其他语言相比,这让 golang 占了上风。除此之外,Golang 的性能比 python 和 java 高出不少。锦上添花的是,它又像 C/C++ 简单的同时又易于阅读和理解,使它成为开发微服务应用的绝佳选择。

Golang中的微服务架构框架

下面,我们讨论一下可以用于微服务架构的框架。有以下些框架:

Go Micro

Go Micro 是目前为止我遇到的最流行的RPC框架。它是一个可插拔的RPC框架。Go Micro 为我们提供了以下功能:

  • 服务发现: 程序自动注册到服务发现系统
  • 负载均衡: 它提供了客户端负载均衡,这有助于平衡服务实例之间的请求
  • 同步通信: 提供 Request/Response 传输层
  • 异步通信: 具有内置的发布和订阅功能
  • 消息编码: 可以利用 header 中 Content-Type 进行编码和解码
  • RPC客户端/服务器端: 利用上述功能并提供构建微服务需要的接口

Go Micro 架构由三层组成。第一层抽象为服务层。第二层为 client-server 模型层。serrver 用于编写服务的块组成,而 client 为我们提供接口,其唯一目的是向 server model 中编写的服务发出请求。

第三层有以下类型的插件:

  • Broker: 在异步通信中为 message broker(消息代理)提供接口
  • Codec: 用于加密或解密消息
  • Registry: 提供服务搜索功能
  • Selector: 在 register 上构建了负载均衡
  • Transport: Transport是服务与服务之间同步请求/响应的通信接口

它还提供了一个名为 Sidecar 的功能。Sidecar 使您能够集成以Go以外的语言编写的服务。它还为我们提供了gRPC编码/解码、服务注册和HTTP 请求处理

GO Kit

Go Kit 是一个用于构建微服务的编程工具包。与 Go Micro不同,它是一个可以以二进制包导入的库。Go Kit 规则很简单。如下:

  • 没有全局变量
  • 声明式组合
  • 显式依赖
  • Interface as Contracts (接口合约)
  • 领域驱动设计(DDD)

Go Kit 提供以下代码包:

  • Authentication 鉴权: BasicAuth 和 JWT
  • Transport 协议: HTTP, gRPC 等
  • Logging 日志: 服务中的结构化日志接口
  • Metrics 度量: CloudWatch,Statsd, Graphite等
  • Tracing 分布式追踪: Zipkin and Opentracing
  • Service discovery 服务发现: Consul, Etcd, Eureka等
  • Circuitbreaker 限流熔断: Hystrix 在 Go 语言的实现

Go Kit 服务架构如下

Gizmo

Gizmo 是来自《纽约时报》的一个微服务工具包。它提供了将服务器守护进程和 pubsub 守护进程放在一起的包。它公开了以下包:

  • Server: 提供两个服务器实现: SimpleServer(HTTP)和 RPCServer(gRPC)
  • Server/kit: 基于Go Kit的实验代码包
  • Config 配置: 包含来自 JSON文件、Consul k/v 中的 JSON blob 或环境变量的配置功能
  • Pubsub: 提供用于从队列中发布和使用数据的通用接口
  • Pubsub/pubsubtest: 包含发布者和订阅者接口的测试实现
  • Web: 用于从请求查询和有效负载解析类型的外部函数

Pubsub包提供了处理以下队列的接口:

  • pubsub/aws: 用于 Amazon SNS/SQS
  • pubsub/gcp: 用于 Google Pubsub
  • pubsub/kafka: 用于 Kafka topics
  • pubsub/http: 用户 HTTP 推送

所以,在我看来,Gizmo 介于 Go Micro 和 Go Kit 之间。它不像 Go Micro 那样是一个完全的黑盒。同时,它也不像 Go Kit 那么原始。它提供了更高级别的构建组件,比如配置和 pubsub 包

Kite

Kite 是一个在 Go 中开发微服务的框架。它公开RPC client 和 Server 端代码包。创建的服务将自动注册到服务发现系统 Kontrol。Kontrol 是用 Kite 编写的,它本身就是一个 Kite service。这意味着 Kite 微服务在自身的环境中运行良好。如果需要将 Kite 微服务连接到另一个服务发现系统,则需要定制。这是我从列表中选择 Kite 并决定不介绍这个框架的重要原因之一

因此,如果您觉得这个博客很有用,并且想知道如何在 Golang 中创建多功能的微服务,那么请从我们这里雇佣 Golang开发者[2],并学习利用顶级的专业知识。


via: https://medium.com/datadriveninvestor/benefits-of-using-microservice-architecture-in-go-4440e4fcd9c9

作者:Katy Slemon[3]译者:Alex1996a[4]校对:dingdingzhou[5]

本文由 GCTT[6] 原创编译,Go 中文网[7] 荣誉推出

相关推荐

赶紧收藏!编程python基础知识,本文给你全部整理好了

想一起学习编程Python的同学,趁我粉丝少,可以留言、私信领编程资料~Python基础入门既然学习Python,那么至少得了解下这门编程语言,知道Python代码执行过程吧。Python的历...

创建绩效改进计划 (PIP) 的6个步骤

每个经理都必须与未能达到期望的员工抗衡,也许他们的表现下降了,他们被分配了新的任务并且无法处理它们,或者他们处理了自己的任务,但他们的行为对他人造成了破坏。许多公司转向警告系统,然后在这些情况下终止。...

PI3K/AKT信号通路全解析:核心分子、上游激活与下游效应分子

PI3K/AKT/mTOR(PAM)信号通路是真核细胞中高度保守的信号转导网络,作用于促进细胞存活、生长和细胞周期进程。PAM轴上生长因子向转录因子的信号传导受到与其他多条信号通路的多重交叉相互作用的...

互联网公司要求签PIP,裁员连N+1都没了?

2021年刚画上句号,令无数互联网公司从业者闻风丧胆的绩效公布时间就到了,脉脉上已然炸了锅。阿里3.25、腾讯二星、百度四挡、美团绩效C,虽然名称五花八门,实际上都代表了差绩效。拿到差绩效,非但不能晋...

Python自动化办公应用学习笔记3—— pip工具安装

3.1pip工具安装最常用且最高效的Python第三方库安装方式是采用pip工具安装。pip是Python包管理工具,提供了对Python包的查找、下载、安装、卸载的功能。pip是Python官方提...

单片机都是相通的_单片机是串行还是并行

作为一个七年的从业者,单片机对于我个人而言它是一种可编程的器件,现在长见到的电子产品中几乎都有单片机的身影,它们是以单片机为核心,根据不同的功能需求,搭建不同的电路,从8位的单片机到32位的单片机,甚...

STM32F0单片机快速入门八 聊聊 Coolie DMA

1.苦力DMA世上本没有路,走的人多了,便成了路。世上本没有DMA,需要搬运的数据多了,便有了DMA。大多数同学应该没有在项目中用过这个东西,因为一般情况下也真不需要这个东西。在早期的单片机中...

放弃51单片机,直接学习STM32开发可能会面临的问题

学习51单片机并非仅仅是为了学习51本身,而是通过它学习一种方法,即如何仅仅依靠Datasheet和例程来学习一种新的芯片。51单片机相对较简单,是这个过程中最容易上手的选择,而AVR单片机则更为复杂...

STM32串口通信基本原理_stm32串口原理图

通信接口背景知识设备之间通信的方式一般情况下,设备之间的通信方式可以分成并行通信和串行通信两种。并行与串行通信的区别如下表所示。串行通信的分类1、按照数据传送方向,分为:单工:数据传输只支持数据在一个...

单片机的程序有多大?_单片机的程序有多大内存

之前一直很奇怪一个问题,每次写好单片机程序之后,用烧录软件进行烧录时,能看到烧录文件也就是hex的文件大小:我用的单片机芯片是STM32F103C8T6,程序储存器(flash)只有64K。从...

解析STM32单片机定时器编码器模式及其应用场景

本文将对STM32单片机定时器编码器模式进行详细解析,包括介绍不同的编码器模式、各自的优缺点以及相同点和不同点的应用场景。通过阅读本文,读者将对STM32单片机定时器编码器模式有全面的了解。一、引言...

两STM32单片机串口通讯实验_两个32单片机间串口通信

一、实验思路连接两个STM32单片机的串口引脚,单片机A进行发送,单片机B进行接收。单片机B根据接收到单片机A的指令来点亮或熄灭板载LED灯,通过实验现象来验证是否通讯成功。二、实验器材两套STM32...

基于单片机的智能考勤机设计_基于51单片机的指纹考勤机

一、设计背景随着科技水平的不断发展,在这么一个信息化的时代,智能化信息处理已是提高效率、规范管理和客观审查的最有效途径。近几年来,国内很多公司都在加强对企业人员的管理,考勤作为企业的基础管理,是公司...

STM32单片机详细教学(二):STM32系列单片机的介绍

大家好,今天给大家介绍STM32系列单片机,文章末尾附有本毕业设计的论文和源码的获取方式,可进群免费领取。前言STM32系列芯片是为要求高性能、低成本、低功耗的嵌入式应用设计的ARMCortexM...

STM32单片机的 Hard-Fault 硬件错误问题追踪与分析

有过单片机开发经验的人应该都会遇到过硬件错误(Hard-Fault)的问题,对于这样的问题,有些问题比较容易查找,有些就查找起来很麻烦,甚至可能很久都找不到问题到底是出在哪里。特别是有时候出现一次,后...