第82篇
极客时间《从0开始学架构》课程笔记。
微服务与 SOA 的关系
微服务与SOA1、有点类似,但本质上是不同的架构设计理念
2、相似点在于两者都关注“服务”,都是通过服务的拆分来解决可扩展性问题
3、每个系统对外提供的接口协议都是一样的就是服务拆分,每个系统的接口协议不同,需要中间件来转换,那就是ESB
4、SOA更多的是考虑兼容已有系统,而微服务是开发,测试,运维都全面改变,要求“快速交付”,要求采取自动化测试、持续集成、自动化部署
微服务定义
- 一组小型服务组成的单个应用系统
- 每个小型服务都是自给自足的,通过轻量级机制进行通信,通常是 HTTP RESTful
- 这些服务围绕业务能力构建,并且可通过全自动部署机制独立部署
- 微服务的核心关键词:small 小型服务、lightweight 轻量级通信、automated全自动部署
微服务的陷阱
1、服务划分过细,服务间关系复杂
服务划分过细,单个服务的复杂度下降的同时,整个系统的复杂度会上升,因为微服务将系统内的复杂度转移为系统间的复杂度了
复杂度
2、服务数量太多,团队效率极具下降
微服务中的『微』,不是将服务拆到越细越好,而是需要与团队规模相适应。如果拆分太细,一个简单的需求开发就需要涉及多个微服务,光是微服务之间的接口就有 6 ~ 7 个,无论是设计、开发、测试、部署,都需要工程师不停地在不同的服务间切换。
3、调用链太长,性能下降
微服务之间一般都是通过 HTTP 或者 RPC 调用的,每次调用必须经过网络。一般线上的业务接口之间的调用,平均响应时间大约为 50 毫秒,如果一起请求需要通过6次微服务调用,则性能消耗为300毫秒。
4、调用链太长,问题定位困难
系统拆分为微服务后,一次用户请求需要多个微服务协同处理,任意微服务的故障都将导致整个业务失败。然而由于微服务数量较多,且故障存在扩散现象,快速定位到底是哪个微服务故障是一件复杂的事情。如果多个微服务同时发生不同类型的故障,则定位故障将更为复杂。
微服务故障
5、没有自动化支撑,无法快速交付
如果没有自动化系统进行支撑,全靠人工操作,微服务无法做到快速交付,可能还不如一个大而全的系统效率高。如自动化测试、自动化部署、自动化监控。
6、没有服务治理,微服务数量多了后管理混乱
当微服务的节点数量越来越多时,自动化的服务管理系统必不可少。因为它能提供服务路由、服务故障隔离、服务注册、服务发现等功能。
总结
- 微服务与SOA除了『服务』的概念相同,其他都不同
- 微服务的核心关键词:small 、lightweight 、automated
- 微服务陷阱1:微服务拆分过细,过分强调“small”
- 微服务陷阱2:微服务基础设施不健全,忽略了“automated”
- 微服务陷阱3:微服务并不轻量级,规模大了后,“lightweight”不再适应
网友评论