第十周课程总结
一、微服务
1、背景
巨无霸单体应用系统面临的问题
1)、编译、部署困难
2)、代码分支管理困难
3)、数据库连接耗尽
4)、新增业务困难
2、解决方案:拆分,将模块独立部署,降低系统耦合性
纵向拆分:将大应用拆分为多个小应用
横向拆分:将复杂的业务拆分出来,独立部署为微服务
二、微服务框架
微服务框架需求:
失效转移:服务集群部署,微服务框架需要支付服务提供者的失效转移机制,以实现服务高可用
负载均衡:对于集群部署的服务提供者,服务请求者可以使用加权轮询等手段访问,使服务提供者集群实现负载均衡
高效的远程通信:核心服务调用次数会达到数以亿计,如果没有高效的远程通信手段,服务调用可能会成为整个系统性能的瓶颈;
对应用侵入性低:
版本管理:服务版本升级
4、微服务框架(Dubbo)架构
5、Service Mesh服务网格
一个基础实施层,用于处理服务间的通信,通常表现为一组轻量级网络代理,他们与应用程序部署在一起,而对应用程序透明
Service Mesh的Sidecar模式
7、微服务架构落地
1)业务先行,先理顺业务边界和依赖,技术是手段而不是目的
2)先有独立的模块,后有分布式的服务
3)业务耦合严重,逻辑复杂多变的系统进行微服务重构要谨慎
4)要搞清楚实施微服务的目的是什么,业务复用?开发边界清晰?分布式集群提升性能?
8、命令与查询职责隔离(CQRS)
在服务接口层面讲查询(读操作)与命令(写操作)隔离,实现服务层的读写分离
更清晰的领域模式
针对读写分别优化,实现更好的性能
查询服务不会修改数据,更好地保护数据
9、事件溯源
将用户请求处理过程中的每次状态变化都记录到事件日志中,并按事件序列进行持久化存储
利用事件溯源,可以精确浮现任何用户状态,进行复核审计
利用事件溯源,可以有效监控用户状态变化,并在此基础上实现分布式事务
10、断路器
当某个服务出现故障,相应延迟或者失败率增加,继续调用这个额服务会导致调用者请求阻塞,资源消耗增加,进而出现服务级联失败,这种情况下使用断路器阻断对故障服务的调用
断路器的三种状态:
关闭
打开
半开
11、服务的重试以及调用超时
12、最重要的是需求
三、RPC协议实现原理
远程过程调用(RPC)
通讯协议
常见的私有协议模式
Dubbo通讯协议
dubbo利用requestId避免队头堵塞
requestId:请求ID,该字段主要用于异步请求时,保留请求存根使用,便于响应回来时触发回调,另外,在日志打印与问题调试时,也需要改字段
SOFA-RPC通信协议(Bolt协议)
评论