“计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决。”
实现功能性需求是当前的明确地,非功能性需求是应对未来未知需求
架构是系统非功能性需求的解决办法的集合
架构设计的目的基础是满足功能需求,主要是满足一下特性:高性能、可用性、可靠性、可扩展性、稳定性、安全性、易用性、可维护性、灵活性
实现架构非功能特性的一般方法
拆分与可控性
可控性,庞大且错综复杂关系带来的是不可控,进行拆分隔离一方面降低问题复杂度,另一方面相互隔离避免交叉影响牵一发动全身。思维是否跟金融监管提出的沙盒监管类似。
抽象与复用性
抽象,本质是挖掘共性总结经验,以便下次相同情形下再使用(复用经验)。软件设计的抽象同样也是为了复用,复用的前提是需要功能高度统一,即高内聚
高性能
高性能,逻辑优化,空间换时间,异步并行等方式,尽可能引入异步化与并行化,提高服务的响应能力,高并发,手段主要是异步(线程池、消息队列)、并行(串行改并行),缓存(本地缓存、分布式缓存),拆分热点以分散瓶颈
可靠性
可靠性,数据与状态一致、数据与数据一致,手段一般有对账、重试、补偿,