架构实战营模块二学习总结
系统复杂度的分类
质量复杂度:高性能、高可用、可扩展
业务复杂度:业务流程本身的复杂度
二者正交
DDD 不能减低质量复杂度
鸡蛋篮子理论
可扩展:拆分 法则
高性能:叠加
高可用:
1.可扩展
可扩展:系统适应变化的能力,可理解(知道改哪里)、可复用(尽量减少修改)
可伸缩:系统通过添加更多资源来提升性能的能力
可扩展分层:
架构可扩展(可理解)拆分形态、拆分粒度
应用可扩展(可理解)拆分形态、拆分粒度
代码可扩展(可复用)预测变化(规则引擎、微内核)、封装变化(OOAD,设计模式)
拆分复杂度模型:
拆分粒度(内部复杂度、外部复杂度)->拆分形态(服务、模块、插件、package)
内部复杂度:通过系统开发团队的人数来衡量(3 个人较为合理,20 人则太多)
外部复杂度:拆分后多个对象之间的关系复杂度,业务流程涉及的对象数量来衡量
(一个用户请求用 5 个子系统参与比较合理,20 个子系统参与,则外部复杂度过高)
拆分得过细,带来的外部复杂度要比内部复杂度更多
拆分粒度原则:
内外平衡、先粗后细
拆分粒度选择:见微服务
封装复杂度模型:
预测变化(时间跨度、变化方式)->封装变化(封装模型)
预测变化原则:
2 年原则、3 次法则(1 写 2 抄 3 封装)
封装技巧:
规则引擎、微内核、抽象层、设计模式
评论