什么是微服务?微服务的概念最早是在 2014 年由 Martin Fowler 和 James Lewis 共同提出,他们定义了微服务是由单一应用程序构成的小服务,拥有自己的进程与轻量化处理,服务依业务功能设计,以全自动的方式部署,与其他服务使用 HTTP API 通讯 。同时,服务会使用最小规模的集中管理 (例如 Docker)技术,服务可以用不同的编程语言与数据库等 。微服务是SOA架构下的最终产物,该架构的设计目标是为了肢解业务,使得服务能够独立运行 。主要有一下几个特点
服务拆分粒度更细 微服务可以说是更细维度的服务化,小到一个子模块,只要该模块依赖的资源与其他模块都没有关系,那么就可以拆分为一个微服务 。
服务独立部署 每个微服务都严格遵循独立打包部署的准则,互不影响 。比如一台物理机上可以部署多个 Docker 实例,每个 Docker 实例可以部署一个微服务的代码 。
服务独立维护 每个微服务都可以交由一个小团队甚至个人来开发、测试、发布和运维,并对整个生命周期负责 。
服务治理能力要求高 因为拆分为微服务之后,服务的数量变多,因此需要有统一的服务治理平台,来对各个服务进行管理 。
微服务架构下,服务调用主要依赖下面几个基本组件:服务描述 注册中心 服务框架 服务监控 服务追踪 服务治理
开源RPC框架介绍Dubbo国内最早开源的 RPC 框架,由阿里巴巴公司开发并于 2011 年末对外开源,仅支持 JAVA 语言 。中间一度没人维护坑了不少人,17年重启维护焕发新春 。架构图如下
![微服务怎么选,读了这篇文章,毫无压力](http://img.jiangsulong.com/220411/05331H218-0.jpg)
文章插图
【微服务怎么选,读了这篇文章,毫无压力】官网: http://dubbo.io/
通信框架方面,Dubbo 默认采用了 Netty 作为通信框架 。
通信协议方面,Dubbo 除了支持私有的 Dubbo 协议外,还支持 RMI 协议、Hession 协议、HTTP 协议、Thrift 协议等 。
序列化格式方面,Dubbo 支持多种序列化格式,比如 Dubbo、Hession、JSON、Kryo、FST 等 。
性能: http://dubbo.Apache.org/zh-cn/docs/user/perf-test.html
TarsTars是基于名字服务使用Tars协议的高性能RPC开发框架,同时配套一体化的服务治理平台,帮助个人或者企业快速的以微服务的方式构建自己稳定可靠的分布式应用 。Tars是将腾讯内部使用的微服务架构TAF(Total Application Framework)多年的实践成果总结而成的开源项目 。
官网:https://github.com/TarsCloud/Tars
架构图如下
![微服务怎么选,读了这篇文章,毫无压力](http://img.jiangsulong.com/220411/05331H635-1.jpg)
文章插图
开源协议为:BSD-3-Clause
支持多语言 C++,Java,Nodejs,php,Go
性能:https://github.com/TarsCloud/Tars/blob/master/docs/tars_performce.md
gRPC一开始由 google 开发,是一款语言中立、平台中立、开源的远程过程调用(RPC)系统 。官网:https://grpc.io
![微服务怎么选,读了这篇文章,毫无压力](http://img.jiangsulong.com/220411/05331M430-2.jpg)
文章插图
基于HTTP/2 HTTP/2 提供了连接多路复用、双向流、服务器推送、请求优先级、首部压缩等机制 。可以节省带宽、降低TCP链接次数、节省CPU,帮助移动设备延长电池寿命等 。gRPC 的协议设计上使用了HTTP2 现有的语义,请求和响应的数据使用HTTP Body 发送,其他的控制信息则用Header 表示 。
IDL使用ProtoBuf gRPC使用ProtoBuf来定义服务,ProtoBuf是由Google开发的一种数据序列化协议(类似于XML、JSON、hessian) 。ProtoBuf能够将数据进行序列化,并广泛应用在数据存储、通信协议等方面 。压缩和传输效率高,语法简单,表达力强 。
多语言支持(C, C++, Python, PHP, Nodejs, C#, Objective-C、Golang、Java) gRPC支持多种语言,并能够基于语言自动生成客户端和服务端功能库 。目前已提供了C版本grpc、Java版本grpc-java 和 Go版本grpc-go,其它语言的版本正在积极开发中,其中,grpc支持C、C++、Node.js、Python、Ruby、Objective-C、PHP和C#等语言,grpc-java已经支持Android开发 。
MotanMotan 是国内另外一个比较有名的开源的 RPC 框架,同样也只支持 Java 语言实现,它的架构可以用下面这张图描述 。
![微服务怎么选,读了这篇文章,毫无压力](http://img.jiangsulong.com/220411/05331H439-3.jpg)
文章插图
Motan 与 Dubbo 的架构类似,都需要在 Client 端(服务消费者)和 Server 端(服务提供者)引入 SDK,其中 Motan 框架主要包含下面几个功能模块 。
register:用来和注册中心交互,包括注册服务、订阅服务、服务变更通知、服务心跳发送等功能 。Server 端会在系统初始化时通过 register 模块注册服务,Client 端会在系统初始化时通过 register 模块订阅到具体提供服务的 Server 列表,当 Server 列表发生变更时也由 register 模块通知 Client 。
推荐阅读
- 程序员告诉你微信营销号如何防封、解封
- 大门对阳台风水怎么样
- 怎么让好友看不出来开了情侣空间 情侣空间不在空间显示让别人看不到
- 长沙可妮婚庆公司怎么样
- 水晶吊灯怎么样 如何选购水晶吊灯
- 亚麻的衣服显档次吗 亚麻裙子一坐全是皱怎么解决
- 用什么溶解玻璃胶最快 玻璃胶怎么去除衣服上
- 经络养生健身操怎么做?
- 有氧瘦身健美体操怎么做?需要注意什么?
- 瑜伽放松练习怎么做