架构师训练营第 1 期 - 第 10 周课后练习
根据微服务框架 Dubbo 的架构图,画出 Dubbo 进行一次微服务调用的时序图。
于微服务架构(中台架构、领域驱动设计、组件设计原则),你有什么样的思考和认识?
答:
时序图如下
1. dubbo服务端在容器启动的时候把服务提供者程序的信息包括接口名、请求参数、返回值类型、服务名称、IP、端口等注册到服务注册中心
2. 服务注册中心确认注册成功
3. 请求开始
4. 消费者应用程序调用服务接口的方法,实际上访问的访问代理
5. 访问代理调用dubbo框架访问远程服务
6. dubbo客户端访问注册中心获取服务提供者列表
7. 注册中心返回服务提供者列表
8. dubbo客户端根据负载均衡算法轮询或者随机等策略选择一个服务提供者
9. dubbo客户端通过远程调用模块发送请求给dubbo服务端
10. dubbo服务端调用服务提供者的程序,传入参数,执行方法
11. 获取返回结果
12. dubbo客户端获取dubbo服务端的远程调用结果
13. dubbo客户端返回结果给访问代理
14. 访问代理返回结果给消费者程序
15. 请求结束
在微服务实践中,谈几点认识:
微服务版本管理
有服务A调用服务B的接口1
随着业务的发展,接口1无法满足业务需求,需要升级接口,现在有升级后的接口1.1,但是有些老的业务还是需要调用接口1,所以服务B会同时提供接口1和接口1.1,并行一段时间
等到老业务下线以后,再升级服务A,只调用升级后的接口1.1,老的接口1可以下线了
服务A作为服务请求者,服务B作为服务提供者,为保持业务顺畅,需要服务提供者升级完接口之后,还能同时提供历史版本的服务接口,等到服务请求者升级之后再关闭历史版本的服务接口。
微服务依赖
有微服务C、微服务D、微服务E,服务C的接口C2调用服务D的接口D2,服务D的接口D2调用服务E的接口E2
这个时候,服务E需要开发一个新的接口E3,其中有部分业务逻辑可以复用D2的实现,通过调用D2的接口,完成了E3的实现
但是这样的话,E依赖D,D依赖E,微服务之间就形成了循环依赖,为遵循组件无循环依赖原则,重构D2和E2的代码,把D2中的业务逻辑处理迁移到E2中,这样E3可以直接本地调用E2的实现
随着系统的不断发展,如果没有对微服务进行设计,很有可能会出现循环依赖,为满足组件耦合原则,需要对代码进行重构
评论