当前位置: 首页 > 后端技术 > Node.js

微服务指南北上(二):微服务架构的进程间通信(IPC)

时间:2023-04-03 20:56:40 Node.js

首先我们来问几个问题微服务架构有哪些交互方式?微服务常用的进程间通信技术有哪些?部分请求失败如何处理?API的定义需要注意什么?微服务的通信机制和SOA的通信机制有什么关系和区别?微服务架构的交互方式是一对一还是一对多?一对一:一个服务实例响应每个客户端请求一对多:多个服务实例响应每个客户端请求同步还是异步?同步模式:客户端请求需要服务器立即响应,甚至可能因等待而阻塞异步模式:客户端请求不会阻塞进程,服务器的响应可以是非即时的一对一交互模式有以下方法:request/Response:客户端向服务器发起请求,等待响应,客户端希望响应立即到达。在基于线程的应用程序中,等待进程可能会导致线程阻塞。通知(也称为单向请求):客户端请求发送到服务器,但服务器不期望响应。请求/异步响应:客户端向服务器发送请求,服务器异步响应请求。客户端不会阻塞,并且设计为默认响应不会立即到达。一对多交互模式有以下几种模式:发布/订阅模式:客户端发布通知消息,由零个或多个感兴趣的服务消费。发布/异步响应模式:客户端发布请求消息,然后等待感兴趣的服务返回响应。REST,一种微服务中常用的进程间通信技术:REST全称RepresentationalStateTransfer(简称REST),是RoyFielding博士在2000年的博士论文中提出的一种软件架构风格,是一种设计和开发方法网络应用,可以降低开发的复杂度,提高系统的可扩展性。Thrift:thrift是一个用于开发可扩展和跨语言服务的软件框架。它结合了强大的软件堆栈和代码生成引擎,构建在C++、Java、Python、PHP、Ruby、Erlang、Perl、Haskell、C#、Cocoa、JavaScript、Node.js、Smalltalk和OCaml编程语言之上。高效的服务API需要注意。IPC通信方式的选择:API的定义取决于所选择的IPC通信方式。如果是消息机制(比如AMQP或者STOMP),API由消息通道(channel)和消息类型组成;如果使用HTTP机制,它是基于请求/响应(url调用http)。API版本升级:服务的API往往会随着时间而改变。在单体应用程序中,API的使用者通常会被直接修改。但是在微服务中,通常不可能让所有的API消费者都与API同步更新,新旧版本的API可能会同时运行。消息格式的选择:为微服务确定最合适的消息格式是另一个关键因素。传统的单体软件使用复杂的二进制格式,而SOA/Web服务应用程序使用基于复杂消息格式(SOAP)和模式(xsd)的文本消息。在大多数微服务中,它们使用简单的基于文本的消息格式,例如基于HTTP资源API样式的JSON/XML。在某些情况下,当它们需要二进制格式时(文本消息在某些情况下很冗长),可以使用二进制Thrift、Protobuf和A??rvo等二进制协议。(摘自《微服务实战:从架构到部署》)处理部分请求失败对于分布式微服务来说,必须面对的一个主要问题就是部分请求失败的处理。Netflix提供了更好的解决方案,具体的应对措施包括(来自《ChrisRichardson微服务系列》):网络超时:在等待响应时,不设置无限阻塞,而是采用超时策略。使用超时策略可确保资源不会无限期保留。限制请求次数:可以为客户端对特定服务的请求设置访问限制。如果请求已达到上限,则必须立即终止请求服务。断路器模式(CircuitBreakerPattern):记录请求成功和失败的次数。如果失败率超过阈值,则触发断路器会导致后续请求立即失败。如果大量请求失败,可能是服务不可用,重新发送请求也没有意义。过期后,客户端可以重试,如果成功,关闭熔断器。提供回滚:当请求失败时可以执行回滚逻辑。例如,返回缓存数据或系统默认值。微服务的通信机制与SOA的通信机制的关系和区别在单个应用中,不同组件的业务功能是通过函数调用或语言级方法调用来实现的。在SOA中,这在WebService层面转化为更松耦合的消息,主要是基于HTTP、JMS等不同协议的SOAP。Webservice所包含的数十种操作和复杂的消息机制是阻碍WebServices普及的重要因素。对于微服务架构,必须要有简单轻量级的消息机制。参考文章:微服务实战:从架构到部署byLiuYingguang@火蜜工作室OpenBI交流群:495266201微服务微服务交流群:217722918邮箱:liuyg#liuyingguang.cn博主主页(==防止爬虫==):http:///blog.liuyingguang.cnOpenBI问答社区:http://www.openbi.tk