架构师训练营第十周总结
本周主要学习了如何进行模块划分的一些概念以及实践。
当一个应用涉及到的内容足够大的时候,进行模块划分是非常有必要的,如果单个应用打包加发布,可能中间会失败以及发布不成功的情况,但是如果拆分为多个服务的时候,可以分别进行发布。多个团队共同开发项目的时候,也可以根据模块进行开发,互不干扰。也有可能引发数据库连接耗尽的情况。当业务冗杂在一起的时候,新增业务的时候也是比较困难的。
这个时候就需要我们对应用进行拆分,如果是业务独立的话,就进行纵向拆分;如果是可以服用的业务的话,就进行横向拆分。
微服务需要支持的一些内容:
失效转移:当一个服务不可用的时候,及时把请求转向另一个相同的服务
负载均衡:集群的部署,可以使用加权轮询等手段实现负载均衡,使访问分散
高效的远程通信:对于大型网站,服务调用基于远程通讯,因此这个可能会成为整个系统系呢能的瓶颈
迁移过程中,需要注意,对应用最少侵入,且升级接口的时候需要进行版本管理。
微服务中可以使用service mesh,把他同应用部署在同一个服务器上,对应用透明,作为一个轻量的代理,流程:1、请求发送给本地的service mesh实例,2、service mesh进行服务发现,3、service mesh将请求转发给目标服务。service mesh使用了side car模式。
微服务架构落地
1、业务先行
2、先独立模块,再进行分布式服务
3、业务耦合严重的重构需谨慎
4、明确微服务的目的
1、业务服用,2、开发边界清晰,3、分布式集群提升性能
1、服务接口上将读操作和写操作分离,实现服务层的读写分离
好处:1、更清晰的领域模型2、针对读写分别优化,实现更好的性能3、查询服务不会修改数据,更好地保护数据
记录用户操作到事件日志可以精确复现任何用户状态,进行复核审计,有效监控用户状态变化,并在此基础上实现分布式事务。
断路器可以阻断对故障服务的调用,断路器有3种状态:关闭,打开,半开。
超时时间设置上,上游调用者超时时间要大于下游调用者超时时间之和。
网关的使用也是微服务中一个重要的组成部分,网关
网关的实现一般是使用责任链模式。
领域模型存在的意义:
1、用户或者产品经理的需求零零散散,不断变更。
2、工程师在各处代码中寻找可以实现这些需求变更的代码,修修补补。
3、软件只有需求分析,并没有真正的设计,系统没有一个统一的领域模型维持其内在的逻辑一
致性。
4、功能特性并不是按照领域模型内在的逻辑设计,而是按照各色人等自己的主观想象设计。
领域模型主要还是要区分好子域,界限上下文。
评论