分布式系统设计原则

来源:互联网 发布:盲僧李小龙皮肤淘宝 编辑:程序博客网 时间:2024/05/19 21:59
      一、分布式系统基础理论CAP为分布式应用提供了理论基础,C:Consistency(一致性),A:Availability(可用性),P:Partition tolerance(分区容错性),但C代表强一致性,注意:不要将弱一致性,最终一致性放到CAP理论里混为一谈,所以同时满足CAP是不太可能的。现在互联网系统强调系统的可用性,所以一致性退而求其次为最终一致,这也就是BASE理论,BASE:Basically Available(基本可用), Soft State(软状态), Eventual Consistency(最终一致性)。
      二、分布式系统的系统拆分原则:1)按照系统功能拆分,2)读写维度拆分,3)快慢分离,4)AOP维度,5)模块维度,6)按功能模块垂直拆分,7)每个模块可快速水平扩展,8)数据库分库、分表可快速水平扩展
      三、由于分布式系统的拆分是分层的,比如按MVC模式拆分,所以上层对下层应该做保护,保护分数据上的保护(如:做必要的数据验证)和过载保护,如果下层模块撑不住应该快速熔断或降级。下层模块对上层应该持不信任的态度,对上层过来的数据做必要的验证,必要时可以对上层做限流以免造成雪崩。
      四、分布式系统接口设计原则:
            1)防重放,比如结算页需要考虑重复提交,还有如下单扣减库存时需要防止重复扣减库存。解决方案可以考虑防重KEY、防重表,token,或生成签名。而有些场景如重复支付,如有的电商网站同时支持微信支付、京东支付,渠道不一样是无法防止重复支付的,但是系统设计时需要将支付的每笔情况记录下。

            2)幂等性,幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中,在编程中,一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变,所以读操作是天生幂等的,但写操作需要我们加强注意,如:支付系统给用户加、减虚拟货币必须满足幂等原则。那么怎么实现幂等性呢?可以有以下几种做法:1)利用数据库的唯一键索引、2)乐观锁、3)状态机幂等、4)利用redis的setx命令

            3)安全性,如:sql注入、xss注入、csrf、请求劫持、等等

      五、可运维

      六、可监控,监控是容易被忽略的但也是最重要的,有句话叫:“没有监控的系统都是耍流氓”,系统不可能没有BUG,怕的是我们没有发现问题的能力。监控也应该是分层的和系统的分层应该是一个维度,而且必要时要增加客户端的打点监控,从客户端的维度来看系统的可用性。