什么是微服务?
什么是微服务(microservice)?这是企业界正在向计算界提出的问题。一个产品的可持续性取决于它的可批改水平。
大型产品如果不能失常保护,就须要在某个工夫点停机保护。而微服务架构用细化的服务取代了传统的单体服务,这些服务定义了明确的 RPC 或音讯驱动的 API 边界。
微服务架构有别于更为传统的单体式计划,可将利用拆分成多个外围性能。每个性能都被称为一项服务,能够独自构建和部署,这意味着各项服务在工作(和呈现故障)时不会相互影响。
微服务带来了以下益处:
- 每个服务都能够由专一于此服务的团队独立开发。小团队能够通过在一组小的性能上工作来进行并行迭代。
- 开发人员能够自由选择开发技术, 对新的开发人员来说,可扩展性很强。
- 微服务架构能够使每个微服务独立部署。对系统的单个组件反对继续集成(CI)和继续交付(CD)。
- 微服务架构使得每个服务都可独立扩大。利用松耦合的架构提供更轻松的软件替换。
- 微服务架构不与特定的技术相分割。
在议论微服务时,编排和服务发现是微服务中十分重要的局部。像 Kubernetes 这样的工具能够用来编排和协调 Docker 容器。一般来说,微服务的最佳实际就是每个微服务有一个 Docker 容器。
服务发现 是对微服务实例的 IP 地址的自动检测。这种形式打消了硬编码 IP 地址的潜在威逼,硬编码会导致服务之间不足分割。
单体架构与微服务架构的区别
下图描述了单体架构和微服务架构的结构图。
图的右边就是单体架构的示意图,如图所示:单体架构将所有的性能(如 UI、日志、数据层、零碎逻辑、数据库等)都集成在一个零碎中,像是一个紧耦合的架构。
相同,微服务是独立的实体,每个性能都是独自的服务,如日志服务、文件服务、零碎逻辑服务等,更易于批改和替换,每个服务都能够通过各种近程传输机制进行沟通,如 HTTP、REST 或者 RPC。服务之间的替换的数据格式能够是 JSON 或者 Protocol buffers,微服务还能够解决各种申请点,如 UI 和 API 客户端。
微服务能够被任何语言实现(Java、Go、Python、Rust、NodeJS 等),因为其有着松耦合的性质,每个独立的服务还能够今后被任何其余新技术或业务所须要的技术所替换。
对于微服务的相干常识就简略介绍到这,感兴趣的同学能够看看文末的举荐浏览局部,都是十分好的微服务学习材料。
Go Micro 介绍
优良微服务框架一览
Java 社区中有着十分驰名的框架用于构建微服务零碎。如:
- Spring: Spring Boot 是用于编写微服务的风行 Java 框架。
- Spring Cloud:基于 Spring Boot,为微服务体系开发中的架构问题,提供了一整套的解决方案——服务注册与发现,服务生产,服务爱护与熔断,网关,分布式调用追踪,分布式配置管理等。
- Dropwizard:一个开源的 RESTful 疾速开发框架,对微服务的开发也极其敌对,而且性能很强
- Micronaut:是一个古代的、基于 JVM 的全栈微服务框架,旨在构建模块化、易于测试的微服务应用程序
- Apache Dubbo:由阿里巴巴开源的分布式服务化治理框架,是一款微服务框架,为大规模微服务实际提供高性能 RPC 通信、流量治理、可观测性等解决方案,涵盖 Java、Golang 等多种语言 SDK 实现。
以上都是十分有名的微服务框架,在 Go 语言中,也有很多驰名的框架(go-kit、go-kratos、go-zero 等),Go Micro 也是其中之一, 截止发文 Github Star 数量达到了 19.6k。
Go Micro 是一个基于 RPC 的可插拔库,它提供了在 Go 中编写微服务的根本构建块。它应用 consul 实现服务发现,但能够换成 etcd、zookeeper 或任何可能满足该接口的其余实现。通过 http 或应用 proto-rpc 或 json-rpc 进行通信,
Go Micro 解决了构建可扩大零碎的要害要求。它采纳微服务架构模式并将其转换为一组充当平台构建块的工具。Micro 解决分布式系统的复杂性,并提供开发人员曾经了解的简略形象。
Go Micro 提供了 RPC 实现和事件驱动架构(EDAs), 能够向其增加任何内部性能。如果你想换掉底层技术,代码重写率为零。
Go Micro 特点
Go Micro 的次要特点有:
- RPC Client/Server:基于 RPC 的申请 / 响应,反对双向流。为同步通信提供了一个形象层,向一个服务提出的申请将被主动解决、负载平衡、拨号和流化。
- 服务发现:主动服务注册和名称解析。服务发现是微服务开发的外围。当服务 A 须要与服务 B 对话时,它须要该服务的地位。默认的发现机制(zeroconf 零碎)是多播 DNS(mdns)机制。
- 负载平衡:客户端负载平衡建设在服务发现的根底上。一旦咱们有了一个服务的任何数量的实例的地址,咱们当初须要一种办法来决定哪个节点的路由。咱们应用随机散列的负载平衡来提供跨服务的均匀分布,并在呈现问题时重试一个不同的节点。
- 信息编码:基于内容类型的 动静信息编码。客户端和服务器将与内容类型一起应用编解码器,为你无缝编码和解码 Go 类型。任何品种的音讯都能够被编码并从不同的客户端发送。客户端和服务器默认会解决这个问题。这包含默认的 protobuf 和 json 格局。
- 信息同步:公布 / 订阅(PubSub)是作为异步通信和事件驱动架构的第一类公民而建设的。事件告诉是微服务开发的一个外围模式。默认的消息传递零碎是一个 HTTP 事件音讯代理。
- 事件流:PubSub 对于异步告诉来说是很好的,但对于更高级的用例,事件流是首选。提供持久性存储,从网络中的 offset(片偏移量)和 acking(确认字符)中进行生产。Go Micro 包含对 NATS Jetstream 和 Redis 流的反对。
- 同步化:分布式系统通常以最终统一的形式构建。对分布式锁和领导节点的反对是作为 Sync 接口建设的。当应用最终统一的数据库或调度时,应用 Sync 接口。
-
可插拔接口:Go Micro 对每个分布式系统的形象都应用了 Go 接口。正因为如此,这些接口是可插拔的,使 Go Micro 与运行工夫无关。您能够在底层应用任何可用技术。例如用于翻译的编解码器,用于存储系统的 brokers。
- 插件地址:https://github.com/micro/go-p…
接下来,让咱们入手写一个服务。
服务接口
顶层的服务接口是构建服务的次要组件。它把 Go Micro 的所有底层包都包装成一个不便的接口。
type Service interface {Init(...Option)
Options() Options
Client() client.Client
Server() server.Server
Run() error
String() string}
装置
应用上面的命令装置最新的 go-micro v4.9
go install go-micro.dev/[email protected]
本文在 Windows 11 装置胜利如下:
应用 micro.NewService
创立一个新服务:
package main
import ("go-micro.dev/v4")
// 创立新服务
service := micro.NewService(micro.Name("HelloWorld")
)
// 初始化 flags
service.Init()
// 启动服务
service.Run()
其余选项能够在创立时传入:
service := micro.NewService(micro.Name("greeter"),
micro.Version("latest"),
)
Options 全副参数如下图:
总结
本文介绍了微服务及其相干概念,重点比拟了单体架构和微服务架构的区别,最初介绍了 Go 优良的微服务框架之一的 Go-micro,并展现该框架的装置和应用,下一篇文章将介绍如何利用这一框架进行微服务利用的开发。敬请期待~
心愿本文能对你有所帮忙,如果喜爱本文,能够点个赞或关注。
这里是宇宙之一粟,下一篇文章见!
宇宙古今无有穷期,毕生不过顷刻,当思奋争。
举荐浏览:
- 微服务是什么?阮一峰的网络日志
- 凤凰架构 | 服务发现
- 微服务:从设计到部署
- 微服务架构设计
- go-micro 官网地址
- go-micro 示例
本文参加了思否技术征文,欢送正在浏览的你也退出。