传统高可用架构缺点
在反向代理集群下,是众多 web服务器构成的高可用集群。
将一个巨型单体应用复制成 N 个单体应用,组成分布式集群。
数据模型变更困难
在同一个 war 包内,数据访问层没有划分领域模型,对于不同的服务模块都是直接访问数据库获取数据。
一个表会被系统中的众多服务引用,导致表结构难以更改。
通过微服务架构,可以将表结构改变的影响范围限制在当前的微服务中,上下游服务只要对接微服务的接口即可。
底层组件变更困难
更改数据库访问规则,更换数据库,增加热点数据缓存读写,分库分表,牵一发而动全身
代码复用带来维护成本
整个应用的代码掺杂在一起,互相引用
路见不平重构一番,终成屎山
当业务需要添加新功能,发现很久之前自己写的一个方法改一下就能用,可隔壁的同事没打招呼也用了这个方法,被你一改,别人的服务搞挂了。。
互联网迭代快,这种事情每天都在上演。
微服务模块由于职责边界足够清晰,规模可控便于快速变更和测试,可以快速测试上线,即使线上问题回滚也只限于微服务范围内,不影响上下游其他应用发布。
微服务优点
- 快速响应变更:单一职责,独立部署
- 独立扩展:边界清晰,不过度受制于技术栈
- 精粒度业务控制:降级熔断,局部限流
- 面向业务/领域模型:不直接依赖数据模型,易于抽象,快速落地新应用
微服务缺点
- 部署结构复杂:模块众多,一堆额外组件
- 依赖平台支撑:依赖微服务组件,增加研发成本,技术要求高
- 分布式问题:保证数据一致性问题,需要异常补偿
- 要求拆分水平:拆分 过细/过粗 都会使复杂度更高
微服务要点
- 服务治理与负载均衡
- 服务治理:服务间调用,集群虚拟机的上下线,集群扩容,探知集群中各个服务节点的状态变化
- 将海量的用户请求,根据服务器的性能、带宽、响应快慢 动态的分配到不同机器上,这就是负载均衡要解决的事情
- 服务容错
- 在高并发场景下,有的服务会承担较大的访问量,可能会导致响应慢或超时。调用方在超时后会经常发起重试,这样会进一步增加下游应用的访问压力,造成恶性循环。
- 微服务通过 降级 与 熔断技术 解决这类问题,称为服务容错。
- 配置管理
- 微服务需要动态配置,不同服务配置不同,服务配置管理专门解决这类问题
- 服务网关
- 网关负责将用户请求转发到不同服务器,微服务的网关需要更加智能,会感知服务上下线的变化
- 调用链路追踪
- 记录事件完整过程,精准甩锅
- 消息驱动
- 消息驱动 加 削峰填谷 巨抗压
- 微服务各个系统间的解耦也可以用消息组件来实现。
- 限流
- 再厉害的系统也有瓶颈,限流是最经济高效,在源头处消减系统压力的手段。
- 微服务节点数量多,单机版限流不能解决问题,需要引入分布式限流