• 服务的协作:服务间的消息传递——《微服务设计》读书笔记


         在微服务集成——《微服务设计》读书笔记文章中,我们说过服务间的消息传递有几种方式,一种是请求/响应技术,另一种是基于事件的机制。

    RPC(远程过程调用)

          RPC是Remote Procedure Call的简称。

          这是请求/响应技术的一种,它使用本地调用的方式和远程进行交互,如SOAP、Thrift等,比如我们常使用的WebService和Java RMI,就是这种类型。它先在本地生成桩代码,然后通过桩代码进行远程调用。

          RPC会带来一些问题,如Java RMI,其耦合性较紧,同时RPC会对调用进行大量的封装和解封装,同时修改接口时会造成服务的提供方和调用方都要修改。

     

    REST

          REST是受Web启发而产生的一种架构风格,REST风格包含的内容很多,Richardson的成熟度模型(http://martinfowler.com/articles/richardsonMaturityModel.html),其中有对REST不同风格的比较。

          REST本身并没有提到底层应该使用什么协议,最常用的是HTTP,HTTP本身提供了很多功能,这些功能对于实现REST风格非常有用,比如HTTP的动词(GET、POST、PUT等)就能很好地和资源一起使用。

          在使用REST时,传输的数据格式是XML还是JSON,这个没有一个定论。

          基于HTTP的REST也有缺点:1.它无法帮你生成桩代码,2.在要求低延迟的场景下,每个HTTP请求的封装开销可能是个问题,使用TCP、UDP可能更合适。

     

    基于事件的异步协作

           这种方式主要有两个部分需要考虑:微服务发布事件消费者接收事件机制。

          消息队列(如RabbitMQ)可以同进处理上述两方法的问题。生产者使用API向代理发布事件,代理可以向消费者提供订阅服务,并且在事件发生时通知消费者。这种代理甚至可以跟踪消费者的状态,如标记哪些消息是该消费者已经消费过的。这种系统通常具有较好的可伸缩性和弹性,但这么做会增加开发流程的复杂度,因为你需要一个额外的系统(即消息代理)才能开发及测试服务。

          另一种方式是使用HTTP来传播事件,ATOM是一个符合REST规范的协议,可以通过它提供资源聚合的发布服务,当服务提供方发生改变时,只需要简单地向该聚合发布一个事件即可,消费者会轮询该聚合以查看变化。它的缺点是:HTTP不擅长处理低延迟的场景,而且使用ATOM的话,用户还需要自己追踪消息是否送达及管理轮询等工作。

          异步架构有其复杂性,比如,消息丢失了怎么办?消息重试失败了怎么办?消息重发了怎么办?消息请求崩溃了怎么办?我们可以通过设置最大重试、黑名单、白名单等措施来解决这些问题。但这也意味着复杂性的增加。

    参考

          《微服务设计》(Sam Newman 著 / 崔力强 张骏 译)

  • 相关阅读:
    模态框 显示出模态框后在加载(可用模块框中加入editormd编辑器)
    python实现 列表内元素按照出现次数排序
    Selenium
    Python的Tqdm模块——进度条配置
    [Python3]selenium爬取淘宝商品信息
    如何用Matplotlib画一张好看的图
    maven如何引入本地jar
    tensorflow和bazel版本对应问题及对应的bazel安装
    tensorflow保存模型的3种方式的资源汇总
    利用率统计脚本
  • 原文地址:https://www.cnblogs.com/gudi/p/6624917.html
Copyright © 2020-2023  润新知