【架构师训练营 1 期】第十周学习总结

用户头像
诺乐
关注
发布于: 2020 年 11 月 29 日

(课程笔记及总结)



一、单体应用(对比微服务):

编译、部署困难,导致工作效率极低;

代码分支管理困难;

数据库创建的连接太多(甚至耗尽);

新增业务困难、维护难度巨大。

 

二、解决单体应用的问题:

拆分,将模块独立部署,降低系统耦合性。

纵向拆分:将一个大应用拆分成多个小应用,每个小应用独立部署。

横向拆分:将复用的业务拆分出来独立部署为微服务。

 

三、WebService的缺点:

臃肿的注册与发现机制;

低效的XML序列化手段;

开销相对较高的HTTP远程通信;

复杂的部署与维护手段;

所以难以满足大型网站对系统高性能、高可用、易部署、易维护的要求。

 

四、微服务框架的需求:

1、(对于服务提供者)负载均衡。

2、失效转移,以实现高可用。

3、高效的远程通信。

4、对应用最少侵入,支持渐进式演化和反复(服务模块需支持可集中式部署,也可分布式部署)。

5、版本管理,当服务升级时对应用的接口兼容性更好(多版本同时运行)。

 

五、学习微服务框架(Dubbo)架构(调用时序图见第十周作业)





六、Service Mesh服务网格

用于处理服务间的通信,通常表现为一组轻量级网络代理,他们与应用程序部署在一起,而对应用程序透明。

 

七、Service Mesh的Sidecar模式







八、微服务架构落地

1、业务先行,先理顺业务边界和依赖,技术是手段而不是目的。

2、先有独立的模块,后有分布式的服务。

3、业务耦合严重,逻辑复杂多变的系统进行微服务重构要谨慎。

4、要搞清楚实施微服务的目的时什么,业务复用?开发边界清晰?分布式集群提升性能?

 

九、命令与查询职责隔离(CQRS)

把查询读服务和命令写服务设计成两个不同的服务,分别部署。实现服务层地读写分离。

其优势:

1、更清晰的领域模型。

2、针对读写分别优化,实现更好的性能。

3、查询服务不会修改数据,更好地保护数据。





十、事件溯源

将用户请求处理过程种地每次状态变化都记录到事件日志中,并按时间序列进行持久化存储。

好处:

1、利用事件溯源,可以精确复现任何用户状态,进行复核审计。

2、利用事件溯源,可以有效监控用户状态变化,并在此基础上实现分布式事务。

 

十一、断路器

当某个服务出现故障(响应延迟或失败率增加),继续调用则会导致调用者请求阻塞,资源消耗增加,进而出现服务级联失效。这种情况下使用断路器阻断对故障服务的调用。





十二、服务重试及调用超时





十三、最重要的是需求

应该从上到下思考问题,去选择技术方案。先知道想要什么,以业务为重心





十四、以网关做为唯一入口(基于网关的架构)





 十五、网关的作用







十六、网关管道技术

网关本身不涉及业务,主要职责是做各种校验与拦截,这些职责可以通过管道技术连接起来。





 十七、实现管道技术的责任链设计模式





了解Flower异步网关



十八、开放平台网关





十九、授权码授权

OAuth2.0共有四种授权方式:授权码、隐式授权、资源所有者密码凭据和客户端凭据。

(目前互联网上使用最多也最安全的方式是授权码方式)





二十、领域:

一个组织所做的事情以及其包含的一切,通俗的说,就是组织的业务范围和做事方式(也是软件开放的目标范围)

 

二十一、领域驱动设计:从领域出发,分析领域内模型及其关系,进而设计软件系统的方法。

需要对领域进一步分解,对领域分析的第一步就是子域拆分,业务就清晰了。

限界上下文:在一个子域种,会创建一个概念上的领域边界,在此边界中,任何领域对象都只表示特定于该边界内部的确切含义。限界上下文和子域具有一对一的关系,用来控制子域的边界,保证子域内的概念统一性(通常限界上下文对应一个组件或一个模块,或一个微服务,或一个子系统)。

上下文映射图:设计不同子系统或模块之间的关联和交互。

 

二十二、DDD六边形架构

领域模型通过应用程序封装成一个相对比较独立的模块,而不同的外部系统则通过不同的适配器和领域模型交互,比如可以通过HTTP接口访问领域模型,也可以通过WebService或消息队列访问领域模型,只需要为这些不同的访问接口提供不同的适配器就可以了。





二十三、DDD战略设计与战术设计

DDD战略设计:领域、子域、界限上下文、上下文映射图

DDD战术设计:实体、值对象、聚合、CQRS、时间溯源

通过战略设计,划分模块和服务边界及依赖关系,对微服务架构的设计至关重要。

 

二十四、组件内聚原则

组件内聚原则主要讨论哪些类应该聚合在同一个组件中,以便组件既能提供相对完整的功能,又不至于太过庞大。

1、复用发布等同原则。

2、共同封闭原则。

3、共同复用原则。

 

二十五、组件耦合原则

组件内聚原则讨论的是组件应该包含哪些功能和类,而组件耦合原则讨论组件之间的耦合关系应该如何设计。

1、无循环依赖原则。

2、稳定依赖原则。

3、稳定抽象原则。

用户头像

诺乐

关注

还未添加个人签名 2018.12.01 加入

还未添加个人简介

评论

发布
暂无评论
【架构师训练营 1 期】第十周学习总结