请选择 进入手机版 | 继续访问电脑版

微服务架构实战学习(二):微服务间的通信

[复制链接]
小小海 发表于 2020-12-31 18:14:19 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
  在微服务中,采取中心化的思想,将单体应用拆分为多个中心,中心之间分布摆设,那么面临的问题之一就是,中心与中心之间怎么通信:

一、微服务的通信协议

IPC

IPC 全称是 Inter Process Communication,中文大抵可译为利用系统的进程之间的相互通信。
为什么利用系统的进程之间需要相互通信呢?为了资源的协调使用,使之可以大概调和共处。比如:两个进程A、B在执行的过程中都要访问 资源W,为了制止A和B同时抢夺资源,造成死锁的现象,我们规定在A使用完了资源以后,需要通知B可以使用资源了,这时就需要用到IPC,IPC提供了这种通信的规范(接口)。
RPC

RPC 全称是 Remote Procedure Call 中文直译为远程过程调用。
二、微服务的通信模式

微服务间的通信模式大概分如下两种:
2.1 一对一照旧一对多?


  • 一对一:每个客户端请求有一个服务实例来响应
    一对多:每个客户端请求有多个服务实例来响应
     
2.2 同步照旧异步?


  • 同步模式:客户端请求需要服务端即时响应,甚至大概由于等候而阻塞
  • 异步模式:客户端请求不会阻塞进程,服务端的响应可以是非即时的
     
2.3 一对一的交互模式


  • 请求/响应:一个客户端向服务器端发起请求,等候响应,客户端盼望此响应即时到达。在一个基于线程的应用中,等候过程大概造成线程阻塞。
  • 通知(也就是常说的单向请求):一个客户端请求发送到服务端,但是并不盼望服务端响应。
    小明发送一条消息给某分部的小姐姐并说道:“小姐姐你真漂亮”。他并不盼望小姐姐能回他,因为他知道小姐姐并不会理他...
  • 请求/异步响应:客户端发送请求到服务端,服务端异步响应请求。客户端不会阻塞,而且被设计成默认响应不会立即到达。
2.4一对多的交互模式


  • 发布/ 订阅模式:客户端发布通知消息,被零个大概多个感兴趣的服务消费。
  • 发布/异步响应模式:客户端发布请求消息,然后等候从感兴趣服务发回的响应。
2.5 处置处罚部门请求失败

对于分布式的微服务,必须要面临的一大问题就是局部请求失败的处置处罚。
  Hystrix [hɪst'rɪks],中文寄义是豪猪,因其背上长满棘刺,从而拥有了自我掩护的本事。本文所说的Hystrix是Netflix开源的一款容错框架,同样具有自我掩护本事。
  Hystrix是由Netflix开源的一个延迟和容错库,用于隔离访问远程系统、服务大概第三方库,防止级联失败,从而提升系统的可用性、容错性与局部应用的弹性,是一个实现了超时机制和断路器模式的工具类库。
  

  • 使用命令模式将所有对外部服务(或依赖关系)的调用包装在HystrixCommand或HystrixObservableCommand对象中,并将该对象放在单独的线程中执行。
  • 每个依赖都维护着一个线程池(或信号量),线程池被耗尽则拒绝请求(而不是让请求排队)。
  • 记录请求乐成,失败,超时和线程拒绝。
  • 服务错误百分比高出了阈值,熔断器开关自动打开,一段时间内停止对该服务的所有请求。
  • 请求失败,被拒绝,超时或熔断时执行降级逻辑。
  • 近实时地监控指标和设置的修改。
三、RPC 框架

RPC 框架就雷同于干了那些诸如派单、物流等等一系列事情的平台。而服务调用方只需要订阅另一个服务提供方的服务,RPC 框架就会把效果扔给服务调用方。
1.1 alibaba dubbo(Dubbox)

dubbo 是 alibaba 前几年开源的 RPC 框架,厥后停止维护。Dubbox 是当当在 alibaba 停止维护后基于 Dubbo 而维护的 RPC 框架项目。现在,alibaba 又开始了对 dubbo 的维护,而且项目已经募捐给了 apache 基金会,等候 ali 为开源项目提供更多的支持以及维护。
1 dubbo 架构图

 
Dubbo 架构图
从架构图上我们可以看到 0、1、2 这三步是服务启动时的初始化工作,其中 1 就雷同于某咖啡店跟某点餐平台注册账号一样,2 就雷同于需要点餐的用户也在点餐平台上来注册账号。
3 则表示如果服务提供者的地点发生了变革,就通知给服务调用者。这雷同于咖啡店的的电话变了,平台会通知到用户。
4 服务调用者从注册中心拿到服务提供者的地点并调用服务。这其中包罗负载平衡。
5 服务消费者与提供者和注册中心之间都使用的是长毗连,在调用过程中,会在内存中对调用次数举行统计,然后定时反馈给监控中心对调用举行监控。
注:


  • 图中实线表示的是同步调用,而虚线则表示的是异步调用。
  • 消费者与提供者之间使用的是非阻塞IO(NIO)
2 dubbo github 地点
 
  1. https://github.com/apache/incubator-dubbo
复制代码
3 dubbox 官方中文文档地点
 
  1. http://dubbo.apache.org/books/dubbo-user-book/
复制代码
1.2 sina motan

motan 是新浪开源的服务治理框架,听说使用简朴,我没使用过...
1 github 地点
 
  1. https://github.com/weibocom/motan
复制代码
2 中文文档地点
 
  1. https://github.com/weibocom/motan/wiki/zh_overview
复制代码
3 motan 架构

 
1.3 apache thrift

thrift 是 facebook 开发,厥后开源并募捐给了 apache 社区,且 thrift 是一个跨语言的 RPC 框架,且支持市面上的主要的编程语言
1 thrift 官方
 
  1. http://thrift.apache.org/
复制代码
2 文档
 
  1. http://thrift.apache.org/tutorial/
复制代码
1.4 google grpc

grpc 是 Google 开源 RPC 框架,高性能、开源、将移动和 HTTP/2 放在首位的通用的 RPC 框架,基于 HTTP/2, netty4.1, proto3, 拥有非常丰富而实用的特性,堪称 RPC 框架的典范。
但 grpc 它自己它不是分布式的
1 grpc github 地点
 
  1. https://github.com/grpc/grpc
复制代码
2 文档地点
 
  1. https://github.com/grpc/grpc/tree/master/doc
复制代码
1.5 spring cloud

Spring Cloud 完全基于 Spring Boot,服务调用方式是基于 REST API。整合了各种成熟的产物和架构,而且基于 spring boot 也使得整体的开发、设置、摆设都异常的方便。
1 官方地点
 
  1. http://projects.spring.io/spring-cloud/
复制代码
2 文档地点
 
  1. https://spring.io/docs
复制代码
接下来,会进一步对上方各框架举行一些横向对比。而且,会基于 spring cloud 来举行示例开发。敬请等候
四、RPC 框架对比

对市面上比力盛行的 RPC 框架的对比

 通过对比个人认为,Spring Cloud 照旧微服务架构中的一个十分优越的实现方案。
 Spring Cloud 各组件架构图

关注微信公众号有惊喜:

 

来源:https://blog.csdn.net/u013310119/article/details/111991881
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题

专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )