大型分布式系统架构

本文主要是从软件的质量属性的角度,来分析大型分布式系统通常采用的架构方法。

1. 性能 (Performance)

性能是指系统的响应能力,性能测试经常要使用基准测试(Benchmark Test).

提高性能的办法:

异步化 - 使用消息系统 和 batch处理

缓存 - 有多重缓存策略,本地缓存,分布式缓存同步,缓存服务器。

系统分割(水平和垂直分割)- 

数据库读写分离 - 


性能测试的办法:基准测试


2. 可靠性(Reliability)

是软件系统在应用或系统错误面前,在意外或错误使用的情况下维持软件系统的功能特性的基本能力。

可靠性度量:

可靠性度量标准通常用于计算单个解决方案组件的故障概率。用于定义组件或系统可靠性的一个度量标准是平均故障间隔时间 (MTBF)。MTBF 是平均间隔时间,通常以千小时或万小时(有时称为“开机时间”或 POH)进行表示,即经过此间隔时间后组件出现故障并需要修复。MTBF 使用以下公式进行计算:

MTBF = (total elapsed time - sum of downtime)/number of failures


3. 可用性(Availability)
是系统能够正常运行的时间比例。
可用性=系统运行时间/(系统运行时间+系统停机时间)
Percentage of availability = (total elapsed time - sum of downtime)/total elapsed time
可用性通常以“九”进行度量。例如,可用性级别为“三个九”的解决方案能够在 99.9% 的时间内支持其预期功能,相当于在 24x7x365(每天 24 小时/每周七天/一年 365 天)的基础上,每年 8.76 小时的年停机时间.
或者用公式可用度 = MTTF / MTBF
MTBF (Mean Time Between Failure) = MTTF (Mean Time To Failure) + MTTR ( Mean Time To Repaire)
平均失效间隔时间 = 平均失效等待时间 + 平均失效修复时间。

提高可用性的设计技术:
可以能过分布式并行系统来提高系统的准确率,并行系统的好处当一个节点出现问题,另一个节点任然可以工作

4. 安全性(Security)
是指系统在向合法用户提供服务的同时能够阻止非授权用户使用的企图或拒绝服务的能力


8.互操作性(Inter-operation) 
作为系统组成部分的软件不是独立存在的。经常与其他系统或自身环境相互作用。为了支持互操作性,软件体系结构必须为外部可视的功能特性和数据结构提供精心设计的软件入口。

9.可伸缩性(Scalability)
这个书上没有提,但是在实际大型分布式系统架构中很重要,攸关生死,没有可伸缩性,Taobao就没办法支撑双11,而这里的可伸缩性主要是指水平扩展的能力(scale out),就是随着业务的增长,系统能够提供平滑水平扩展以支撑业务的发展。

提高可伸缩性的办法: 
应用服务器集群 - 通过对集群加减机器来调整对服务的支持能力,涉及的技术有ESB,无状态Session管理,分布式缓存等...
业务垂直分割 - 对相关业务进行切分,例如将listing, selling, checkout 分拆成独立的系统
分表分库 -  系统的瓶颈往往出现在数据库端,因为应用服务器可以集群,通常会采用分表分库的方法来水平扩展数据库,选取合适的数据路由算法,因为分割后,不同的数据要知道去哪个表哪个库能找到,常用的数据路由算法有Mod 和 lookup

更多可以参见eBay的scalability 最佳实践: http://www.infoq.com/cn/articles/ebay-scalability-best-practices

10. 可监控性 (Monitorability )
这个是我自己想出来的,因为监控真的也是太重要了。没有监控的系统,就像是一辆没有仪表盘的汽车,你不知道车速,不知道油量,也不知道车况,车子也许也还能跑,但会跑的很不安心。这就是老大们总喜欢让下面的人开发各种各样的dashboard,这样有什么问题就一目了然了,而下面的人,如果你足够聪明的话,在没有人要求的情况下,就能发现那些值得监控的点,并做成dashboard,这样老大们会对你刮目相看的。

关于具体的监控和日志,请参看我另一篇博文: http://blog.csdn.net/significantfrank/article/details/25772801

猜你喜欢

转载自blog.csdn.net/significantfrank/article/details/26053379