(数据 + 逻辑 = 业务)
架构中的银弹
软件开发最本质的挑战有两个:复杂和变更,而软件的价值是保证业务的响应力,
而与之相对的是开发资源的有限,而各种的软件开发方法论,也都是在研究有限的资源下,如何对应这两个挑战,寻找平衡点,实现业务目标。
架构的目的
架构设计的主要目的是为了解决软件系统复杂度带来的问题。
架构分析
性能,可扩展性,高可用,安全性,成本。
高性能:
单台计算机内部为了高性能带来的复杂度;
另一方面是多台计算机集群为了高性能带来的复杂度
任务分配
任务分解
高可用:
系统无中断地执行其功能的能力,代表系统的可用性程度,是进行系统设计时的准则之一。
计算高可用
存储高可用
存储高可用的难点不在于如何备份数据,而在于如何减少或者规避数据不一致对业务造成的影响。
分布式领域里面有一个著名的 CAP 定理,从理论上论证了存储高可用的复杂度。也就是说,存储高可用不可能同时满足“一致性、可用性、分区容错性”,最多满足其中两个,这就要求我们在做架构设计时结合业务进行取舍。
高可用状态决策
独裁式
2. 协商式
3. 民主式
可扩展性:唯一不变的是变化
预测变化的复杂性在于:
不能每个设计点都考虑可扩展性。
不能完全不考虑可扩展性。
所有的预测都存在出错的可能性。
应对变化
第一种应对变化的常见方案是将“变化”封装在一个“变化层”,将不变的部分封装在一个独立的“稳定层”。
第二种常见的应对变化的方案是提炼出一个“抽象层”和一个“实现层”。
低成本
安全
规模
架构设计三原则
合适原则
合适原则宣言:“合适优于业界领先”。
简单原则
简单原则宣言:“简单优于复杂”。
演化原则
演化原则宣言:“演化优于一步到位”。
合适原则第一考虑,优先满足业务需求;
简单原则第二考虑,挑选简单方案快速落地验证;
演进原则第三考虑,适当预测业务发展,感觉预测不准就不预测,等真的出现问题的时候演进即可