“计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决。”

实现功能性需求是当前的明确地,非功能性需求是应对未来未知需求

 架构是系统非功能性需求的解决办法的集合

架构设计的目的基础是满足功能需求,主要是满足一下特性:高性能、可用性、可靠性、可扩展性、稳定性、安全性、易用性、可维护性、灵活性

架构设计原则

 

实现架构非功能特性的一般方法

 

拆分与可控性

可控性,庞大且错综复杂关系带来的是不可控,进行拆分隔离一方面降低问题复杂度,另一方面相互隔离避免交叉影响牵一发动全身。思维是否跟金融监管提出的沙盒监管类似。

抽象与复用性

抽象,本质是挖掘共性总结经验,以便下次相同情形下再使用(复用经验)。软件设计的抽象同样也是为了复用,复用的前提是需要功能高度统一,即高内聚

 

高性能

高性能,逻辑优化,空间换时间,异步并行等方式,尽可能引入异步化与并行化,提高服务的响应能力,高并发,手段主要是异步(线程池、消息队列)、并行(串行改并行),缓存(本地缓存、分布式缓存),拆分热点以分散瓶颈

 

可靠性 

可靠性,数据与状态一致、数据与数据一致,手段一般有对账、重试、补偿,分布式事务也依赖通过重试机制。

 

 高可用

高可用,一般是冗余备份,方式一般是集群避免单点,幂等,分布式情况下服务异常再所难免,幂等保证了流程可以重试,高可用,一方面通过限流、熔断降级防止突发大流量造成血崩,另一方面通过异常重试、补偿对偶发异常情况进行容错,达到提高系统整体可用性。防血崩,通过隔离、限流、降级、熔断、快速失败等防止压力穿透

高可用的官方定义是:描述一个系统经过专门的设计,从而减少停工时间,保持其服务的高度可用性。

 

幂等性

幂等机制的核心作用是保证资源唯一性,例如重复提交或服务端的多次重试只会产生一份结果。保证幂等性方法,相同入参保证相同出参,即处理过程无状态化。避免并发影响的手段:唯一索性,加锁先查后写,状态机流程化,本质上都是对资源锁定然后串行

 

安全性

安全性,一个系统应该可以支持数据流进入和出去时有拦截器做处理

 

易用性

易用性,简单易用符合天性

 

可扩展性

可扩展,对修改封闭,对扩展开放,通过抽象变化达到效果

可维护性

可维护性,单一职责,可扩展,逻辑简单化,避免暗坑

 

 分布式服务框架选型

一类偏重服务治理,一类偏重跨语言支撑

 

要实现高并发,一般有两个思路:异步和缓存,从缩短耗时的角度增加同时处理的事件。

空间换时间

 就需要使用缓存将常用的数据尽量前置,同样可以保护后端的系统。

 

最终一致性解决方案

保持最终一致性手段,定时定次数的重试、对账修复、最大努力的尝试消息触达,如果超过系统自我修复的重试上限则通过告警进行人工处理。某些保留有中间状态数据的场景可以通过更新时修正的方式修复数据

 

 

   如果文章对你有帮助,更多文章欢迎关注微信公众号:Program进阶架构设计原则

 

相关文章: