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

在 Go 中使用微服务架构的好处,掌握这些才能更好的使用

ccwgpt 2024-10-01 08:14 22 浏览 0 评论

前言

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

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

什么是微服务?

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

我们为什么使用微服务?

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

end:如果你觉得本文对你有帮助的话,记得关注点赞转发,你的支持就是我更新动力。

相关推荐

固识像系统曝光!类魂篝火点与多角色切换战斗有何亮点?

由Tipsworks开发,叠纸网络发行的全端游戏《万物契约》今日发布了第一支实机演示PV。火子哥一直以来还是比较关注这款游戏的,今天就带大家来看看这次的实机演示透露出什么新东西。开头在经过了一段预渲染...

Docker 架构详解与核心概念实战图解:一文读懂容器的前世今生

不懂Docker架构,你只是“用容器的人”;理解了它的底层逻辑,才能成为真正的高手!在学习Docker之前,很多同学可能会陷入一个误区:“反正我用dockerrun就能跑起服务,架构这种...

新考纲-系统架构设计师(软考高级)一站式通关课程(25章完结)

新考纲-系统架构设计师(软考高级)一站式通关课程(25章完结)获课》jzit.top/5255/针对新旧考纲中新增的云原生和AI架构考点,考生可以采取以下应对策略:一、云原生考点应对策略深入理解云原生...

前后端分离的项目管理系统框架

技术栈:Thinkphp、Vue3、Typescript、Element-plus、pinia、Echarts等

掌握这6种软件架构,构建可维护、可扩展的系统不再难

说实话,大多数人不会一觉醒来突然决定:“今天,我要成为一名软件架构师!”通常的故事是这样的:一个小项目不断长大,代码像野兽一样在每个角落咆哮,而你终于意识到:“也许我应该早点考虑怎么架构这玩意儿。”软...

Windows实时拓展架构-鸿道Intewell-win构型

鸿道Intewell操作系统软件采用开放式结构,具备较高的模块化程度,根据应用场景需要进行自由裁剪定制。实时扩展构型用于在多核处理器上使用硬件隔离技术,允许在同一台目标机上同时运行一个通用操作系统(G...

高手编写的自动化测试框架是如何管理用例?他们都会用到这个包。

本文是接口自动化测试框架系列篇的第四篇,主要介绍yaml包的使用。自动化测试的本质是将功能测试用例交给代码去执行,测试人员往往是在自动化框架添加对应的测试用例即可(也叫测试脚本)。而维护测试用例...

日资著名车企在自动化设备中采用的PLC程序标准框架

日资著名车企在自动化设备中采用的PLC程序标准框架,通常融合了先进的自动化控制理念与严谨的日式管理风格,注重程序的可靠性、可维护性和扩展性。以下是一个详细的PLC程序标准框架说明:一、程序框架的基本结...

Robot Framework实现多平台自动化测试框架搭建

RobotFramework官方站:https://robotframework.org/一、robotframework安装pipinstallrobotframework二、robotf...

chatgpt只用3秒钟就能写一个基于pytest的自动化框架

以下是一个使用pytest框架进行百度登录界面自动化测试的示例代码:1.安装pytest首先需要安装pytest,可以使用以下命令进行安装:pipinstallpytest2.编写测试用例在项目...

API 自动化测试框架分享

前言接口自动化逐渐成为各大公司投入产出最高的测试技术。但是如何在版本迅速迭代过程中提高接口自动化的测试效率,仍然是大部分公司需要解决的问题。框架定位数据驱动设计模式,无需写测试代码脚本即可实现自动化等...

资深测试必备技能!TestNG自动化测试框架实战详解

1、TestNG导言在软件测试工作中,自动测试框架是不可或缺的,之前有Junit和Nunit框架,后有TestNG。TestNG不但吸取了Junit和Nunit框架的思想,而且创造了更强大的功能,它不...

Java开发中的自动化测试框架:从零开始玩转测试工具

Java开发中的自动化测试框架:从零开始玩转测试工具在Java开发的世界里,自动化测试框架就像一位忠诚的助手,它不仅能帮你发现代码中的“隐形炸弹”,还能让你的程序更健壮、更可靠。那么,今天就让我们一起...

测试新手如何搭建自动化框架 ?手把手教会从0到1的搭建过程。

1.接口自动化测试自动化测试虽然是测试中比较热的一门技术,但凡一个测试岗位,你几乎都能看到有自动化测试的要求。但不得不说,最入门的自动化测试其实已经烂大街了,就像国产神车H6,随处可见。当然...

塞土族领导人:应在联合国决议规定框架内解决塞浦路斯问题

新华社尼科西亚10月31日电(记者张章)塞浦路斯媒体10月31日报道说,塞土耳其族领导人阿肯哲日前表示,塞浦路斯问题的解决应在联合国安理会决议规定的框架内进行。据报道,阿肯哲30日晚在土耳其伊斯坦布尔...

取消回复欢迎 发表评论: