1架构设计复杂度模型:
【业务复杂度】:业务过的复杂度,主要体现在难以理解、难以扩展,例如业务数量多(微信)、业务流程长(支付)、业务之间关系复杂。
【质量复杂度】:高可用、高性能、成本、安全等质量属性的要求。
【业务复杂度和质量复杂度是正交的】
2.可扩展的定义:
3.可扩展的复杂度模型:
可扩展可以拆分为可扩展和可伸缩,其中的可扩展表示系统的适应能力,包含可理解和可复用两部分;可伸缩表示可以通过增加资源来提升系统性能。
可扩展可以分为:架构可扩展、应用可扩展、代码可扩展三个维度。
架构可扩展,表示为可理解,然后通过拆分形态和拆分力度,将整个系统进行分层和微服务拆分。
应用可扩展和代码可扩展,可以分为可理解和可复用,可理解也是使用拆分形态和拆分力度进行拆分;可复用则使用分装,预测变化和封装变化。
4.拆分复杂度模型:
对于拆分来说,主要有拆分形态和拆分力度,拆分形态可以自顶向下进行拆分,首先拆分服务,然后拆分模块,再拆分插件和包;但是不能拆的太粗也不能拆的太细,那么拆分粒度就是用来衡量和约束拆分形态的,主要分为内部复杂度和外部复杂度。
4.拆分粒度:两个复杂度:
5.拆分的粒度:平衡的艺术
6.封装的复杂度模型:
7.预测的艺术:
3次原则的含义是,当某段代码出现多次类似的问题时,说明这段代码可能存在问题,可能不符合良好的编程实践或设计原则。如果同一段代码在不同的地方出现了三次类似的问题,那么就应该考虑对这段代码进行重构,以消除重复、提高代码质量和可维护性。
8.封装的技巧:封装是封装变化,在封装时要设计封装模型,例如使用规则引擎、微内核、抽象层、设计模式等
规则引擎开源的有:美团MazeGO规则引擎,配置中心用于提供规则配置视图,规则管理模块用于获取规则和解析规则,运行时模块用于发布和调度任务执行,平台嵌入层负责实际执行规则逻辑。
OSGI微内核:OSGI 框架从概念上可以分为三层:模块层、生命周期层、服务层;模块层主要涉及包及共享代码,控制单元为Bundle;生命周期层主要涉及Bundle的运行时生命周期管理;服务层主要设计模块之间的交互和通信。
Linux VFS抽象层:Linux VFS 对应用层提供一个标准的文件操作接口,对文件系统也提供一个标准的接口,以便于其他操作系统的文件系统可以很好的移植到Linux上
设计模式:
上图所示:装饰者模式是一种设计模式,它允许动态地为对象添加新的行为,同时又不改变其接口或实现。这种模式通过将对象包装在一系列装饰者对象中,形成一个对象链,从而可以在运行时动态地添加、删除或修改对象的行为,从而扩展其功能。