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

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 著 / 崔力强 张骏 译)

相关文章:

  • 微服务的概念——《微服务设计》读书笔记

  • 微服务架构师的职责——《微服务设计读书笔记》

  • 建模:确定服务的边界——《微服务设计》读书笔记

  • 微服务集成——《微服务设计》读书笔记

原文地址:http://www.cnblogs.com/gudi/p/6624917.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

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

  1. 关于微服务,这些你都了解吗-微服务介绍

    文章目录 一 认识微服务 1.1 什么是微服务 1.2 微服务的特点 1.3 微服务诞生背景 1.4 微服务架构的优势 二 微服务生态 1.1 硬件层 1.2 通信层 1.3 应用平台层 1.4 微服 ...

  2. 一篇文章带你快速理解微服务架构,由浅入深带你走进微服务架构的核心

    戳蓝字"CSDN云计算"关注我们哦! 文章来自:Java和Android架构 什么是微服务 首先微服务并没有一个官方的定义,想要直接描述微服务比较困难,我们可以通过对比传统WEB应 ...

  3. 微服务 弹性伸缩_如何构建弹性微服务

    微服务 弹性伸缩 Kasun Indrasiri是WSO2的集成架构主管. 开发人员越来越依赖微服务体系结构将应用程序构建为一组细粒度,重点狭窄且独立的服务,每个服务均独立开发和部署. 尽管微服务方法 ...

  4. 微服务理论与实践[1]-什么是微服务

    微服务理论与实践[1]-什么是微服务 什么是微服务 微服务 (Microservices) 是一种软件架构风格,将应用程序构造为围绕业务的小型自治服务的集合 微服务以专注于单一责任与功能的小型功能区块 ...

  5. 多个微服务的接口依赖如何测试_微服务测试之接口测试和契约测试

    日常开发过程中,项目的接口通常由服务提供方约定和提供,微服务模式下接口被多个消费者调用更是常态,那么提供方接口的变更如何快速.高效.无遗漏的通知给消费者呢?另外,当一个service同时被多个使用者调 ...

  6. Java架构师-微服务:微服务架构【单体部署 --改造--> 微服务架构】【分布式:分散压力;微服务:分散能力】【RESTFul+Docker+K8S、SpringCloud】

    一.微服务概述 微服务架构是团队面对互联网产品爆发式增长的最优选择,要解决的是快速迭代.高可靠和高可用等问题,把复杂度很高的产品拆分成一些较小的模块,并遵循康威定律,每一个模块用5-9个小团队来维护, ...

  7. 【微服务】构建应用程序的顶级微服务设计模式

    在当今市场上,微服务已成为构建应用程序的首选解决方案.众所周知,它们可以解决各种挑战,但是,熟练的专业人员在使用此架构时经常面临挑战.因此,相反,开发人员可以探索这些问题中的常见模式,并可以创建可重用 ...

  8. 分布式服务框架原理与实践pdf_深度解析微服务治理的技术演进和架构实践

    为什么需要服务治理? 第一.业务需求 随着业务的发展,服务越来越多,如何协调线上运行的各个服务,保障服务的SLA,对服务架构和运维人员是一个很大的挑战.随着业务规模的不断扩大,小服务资源浪费等问题逐渐 ...

  9. 微服务 松耦合_超值干货:微服务架构下如何解耦,对于已经紧耦合下如何重构?...

    今天准备谈下微服务架构下各个微服务间如何解耦,以及对于已经紧耦合的微服务如何进行重构.要明白实际上微服务后续出现的诸多问题往往都是一开始微服务模块划分就不合理导致,对于具体的模块划分方法和原则,我总结 ...

  10. 微服务架构开发实战:如何实现微服务的自动扩展?

    微服务架构开发实战:如何实现微服务的自动扩展? 程序员高级码农II 2020-09-25 07:25:00 如何实现微服务的自动扩展 前面讲了一些关于自动扩展的理论知识,但如何实现自动扩展,并不是三言 ...

最新文章

  1. GANs中的明星StarGAN:使用单一模型执行多个域的图像转换,GAN之父点赞
  2. python常用模块实例_python中常用的各种数据库操作模块和连接实例
  3. Golang Context包的使用
  4. codesoft各个版本的 dll_win10安装pytorch-gpu版本
  5. 图解Oracle 11g physical standby Rolling Upgrade物理备库滚动升级特性
  6. Linux 笔记(持续补充)
  7. 模糊搜索怎么实现_干货 | 你真的了解自己是怎么搜索的吗_01
  8. vb 导出整数 科学计数法_可整数组的计数
  9. 柴犬为什么总是被卡住狗头?
  10. 在计算机结构的简化模型中,2.4 计算机结构的简化模型
  11. druid Approximate Histograms
  12. 触发C#Button的双击事件
  13. 绿联串口线linux驱动下载,usb转db9串口线驱动
  14. linux安装ADS软件,Ubuntu 10.10下安装ADS 2009 Update1
  15. 指数型组织:未来组织发展的必然趋势
  16. 移动终端应用开发上机3组件通信与广播
  17. python模拟登录163邮箱_Python实现模拟登录网易邮箱的方法示例
  18. 速卖通如何避免差评?
  19. IP欺骗种类有哪些?
  20. 他山之石 | 腾讯音乐知识图谱搜索实践

热门文章

  1. Google Chrome 总提示flash插件过期,用命令行模式解决
  2. view 背景透明
  3. NET框架下如何使用PaddleOCRSharp
  4. 字节前端终于开源!吹爆!
  5. 使用Blazor开发内部后台(一):认识Blazor
  6. Id都是“とつくとき”这样的怎么爬,在线等,急
  7. 构建属于你自己的dapr服务发现
  8. Redis 通过 RDB 方式进行数据备份与还原
  9. 如何在 C# 8 中使用默认接口方法
  10. .net:设计一个web应用