写点什么

架构师训练营第 1 期 - 第 10 周课后练习

用户头像
Anyou Liu
关注
发布于: 2020 年 11 月 28 日
  1. 根据微服务框架 Dubbo 的架构图,画出 Dubbo 进行一次微服务调用的时序图。

  2. 于微服务架构(中台架构、领域驱动设计、组件设计原则),你有什么样的思考和认识?

答:

  1. 时序图如下

  • 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. 请求结束



  1. 在微服务实践中,谈几点认识:

  • 微服务版本管理

有服务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的实现

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

用户头像

Anyou Liu

关注

还未添加个人签名 2019.05.24 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第 1 期 - 第 10 周课后练习