架构师训练营第 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的实现

随着系统的不断发展,如果没有对微服务进行设计,很有可能会出现循环依赖,为满足组件耦合原则,需要对代码进行重构












 
    
评论