微服务架构设计要点

我对如何使微服务架构运行起来很感兴趣,所以将所调查的内容整理在下面。
下方附有参考URL。

微服务架构是什么?

“微服务架构” 是 James Lewis 先生提出的词汇,指的是采用一种特定的方法来设计软件应用程序,将其拆分成独立可部署的服务组合(suite)。


特点
由于服务被分离,因此可以针对每个服务选择不同的编程语言和存储方式,并且每个服务都可以独立进行部署。

与Rails的单体架构相比。
优点
能够构建具有强大适应性的系统,能够轻松应对变更。

缺点:需要管理分离后的API、网络和系统的一致性。


为了避免在分开时服务变得复杂。

由于存在微服务的设计模式,所以可以在每个模式中进行相应的处理。

- API Gateway:API群を一つにまとめる
- Service Registry / Service Discovery:API群を管理する
- Circuit Breaker:障害時に他のAPIを遮断し、波及を防ぐ
- Polyglot Persistence:異なるデータベースを扱える
- Command Query Responsibility Segregation (CQRS):読み込みと書き込みを分離する
- Tolerant Reader:送信を厳密に、受信を寛容に行う
- Chained Services:サービス同士を順列に接続する
- Asynchronous Messaging:メッセージを複数のサービスで共有する
- Service Instantiation:サービスをVM単位やホスト単位でインスタンス化する
- Consumer-Driven Contracts:消費者の期待するサービスを特化させ品質を上げる
- Domain Events...:サービス同士をつないで、分散型コレオグラフフィーを行うパターン


要将分散在多个地方的API进行整合

使用API Gateway和Service Registry / Service Discovery
提供一个集中管理API的服务
Kong软件是主流的,可以集中管理API
– Kong是一种开源软件,依赖于nginx和cassandra


要将API与前端对接在一起

有时候在需要减少API请求次数的情况下,可以准备BFF(用于前端的后端)来进行处理。
在用户和微服务之间插入一个整形服务。


当通信失败时的重试策略

反复尝试可能会造成负担和问题。考虑采用指数退避的方法,逐渐增加重新尝试的等待间隔。


要整合共通服务

可以使用Kong插件来进行整合
添加验证(OAuth2.0)
安全性(ACL, IP过滤, 机器人检测, 跨域资源共享, 动态SSL)
流量控制(速率限制)
日志(TCP, HTTP, loggly)


为了在发生障碍时阻止其他API影响并防止波及。

使用断路器
检测服务的使用情况,并停止访问之后的API
对于Ruby来说,有circuit_breaker和Expeditor库可用


综述:
– 引入微服务可以带来灵活性。
– 需要考虑由分离带来的问题。
– 由于微服务也有设计模式,因此应加以利用。


可以在中国参考一下。

微服务架构/奥莱利

广告
将在 10 秒后关闭
bannerAds