微服务 | 青训营笔记

96 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第4篇笔记

微服务是一个开发应用的形式,我理解微服务,通俗来说就是可将大型应用分解成多个独立的组件,其中每个组件都有各自的责任领域。 在处理一个用户请求时,基于微服务的应用可能会调用许多内部微服务来共同生成其响应。

历史

  • 单体架构:性能最高,冗余最小,但是debug困难,模块相互影响,分工复杂,开发流程复杂。

  • 垂直应用架构:按照业务线垂直划分

    优势:业务独立开发;烈士:每个业务还是单体,有很多重复性工作。

  • 分布式架构:抽取出与业务无关的公共模块(服务层)

  • SOA架构:面向服务(服务注册与发现)

    重构困难,太复杂了。

  • 微服务架构:

    彻底的服务化。

    优势:开发效率很高,各个业务之间独立,自下而上,故障隔离。

    劣势:治理、运维难度,观测挑战,安全性。

服务注册与发现

新增一个统一的服务注册中心,用于存储服务名到服务实例的映射。

服务下线:先在服务中心,删除准备下线服务中心的ip,等没有流量了再开始下线实例。

上线:启动服务实例,健康检查,服务注册。

服务部署

  • 蓝绿部署:两倍资源切换。

  • 灰度发布(先在部分实例上发布,若没有问题,才逐步放开)。

重试

  • 本地异常没必要重试,远程调用异常有必要重试(特别是在网络调用中)。

  • 重试的难点:幂等性,重试风暴(防止链路重试、重试倍数限制),超时设置。

RPC

  • RPC的论文

    不同机器(同一机器)的进程间通信

image.png

  • RPC过程

    生成代码 -> 编解码 -> 通信协议 -> 网络传输

RPC的优缺点

RPC有利于单一职责,有利于分工协作和运维开发。

可拓展性强,资源使用率更优秀。

故障隔离性强。

RPC的问题,包括:服务器宕机,对方如何处理;如何保证消息的可达性。