软件架构
架构设计的主要目的是为了解决软件系统复杂度带来的问题
“这么多需求,从哪里开始下手进行架构设计呢?”
——通过熟悉和理解需求,识别系统复杂性所在的地方,然后针对这些复杂点进行架构设计。
“架构设计要考虑高性能、高可用、高扩展……这么多高 XX,全部设计完成估计要 1 个月,但老大只给了 1 周时间”
——架构设计并不是要面面俱到,不需要每个架构都具备高性能、高可用、高扩展等特点,而是要识别出复杂点然后有针对性地解决问题。
“业界 A 公司的架构是 X,B 公司的方案是 Y,两个差别比较大,该参考哪一个呢?”
——理解每个架构方案背后所需要解决的复杂点,然后才能对比自己的业务复杂点,参考复杂点相似的方案。
高性能
- 负载均衡(横向, LB本身引入潜在问题), 微服务(纵向, 访问链路变复杂)
高可用(冗余实现)
- 主备结构, 一致性保证
- 节点状态协商策略: 选举协议, 多数取胜 -> 存在分区不一致性(脑裂) -> 多数取胜, 且投票人数过半 -> 可用性受损
可拓展性
设计模式的核心就是,封装变化,隔离可变性
低成本
- 优先级低于上3, 与上3(冗余)矛盾
- 一般只有创新才能解决(发明中间件和组织结构)