《分布式系统设计模式.pdf》由会员分享,可在线阅读,更多相关《分布式系统设计模式.pdf(37页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、分布式系统设计模式汪源内容介绍目标-介绍一些分布式系统设计思路或经验,非严格意义的设计模式-不求全面,但求最实用提纲-可伸缩设计模式-高可靠可用设计模式-低成本设计模式可伸缩设计模式伸缩模式(1)scale-upscale-downscale-inscale-out垂直伸缩水平伸缩读写分离writereadwriteread复制伸缩模式(2)垂直伸缩-易于实现-传统观念:不好(规格有限,淘汰损失)-基于IaaS云计算:不错丰富的硬件规格(1-64ECU/64x,1-64GMEM/64x,5G-1T存储/200 x)资源共享无浪费优先进行垂直伸缩,简化系统实现与实施水平伸缩-伸缩性最佳-难以实现
2、与运维读写分离-实现难度中等-只适合读多写少的应用交叉扩容050.00100.00150.00200.00节点规格节点数量系统容量优势:只需要进行1分为N的水平扩容水平分区哈希分区-推荐:易于规划,易于实现,均衡性一般很好-避免过于trivial的哈希函数(如取模),以免引起分布不均衡教训:DDB(按时间戳分配全局ID导致分布不均衡)范围分区-一般不推荐:难以规划,均衡性容易出问题-时间分区比较常用组合分区自定义分区-例:DDB通过用户自定义.jar包计算纪录的分区号一致性哈希朴素哈希分区123456新增节点3分区策略: HASH%N缺陷:节点数变化导致数据完全重分布一致性哈希分区节点1(04
3、9)节点2(5099)节点1(049)节点3(7599)节点2(5074)050050优点:节点数变化只导致少量数据重分布缺点:只分流一个节点的负载,容易不均衡虚拟节点一致性哈希节点1(024,2549)节点2(5074,7599)050一个物理节点负责多个虚拟节点,增加节点时从来自于多个物理节点的虚拟节点都分流一部分负载2575节点1(024,2533)节点2(6774,7599)05025756734节点3(3449,5066)固定分区路由表-事先规划固定数量足够多的分区(相当于虚拟节点),之后只调整分区到物理节点的映射关系(即只会迁移整个分区而不分裂分区)-简洁实用-分区数量规划原则 1
4、0 x 最大物理节点数因子数多(60, 3600)60 = 60 * 1 = 30 * 2 = 20 * 3 = 15 * 4 = 12 * 5 = 10 * 6 = 6 * 10 = 5 * 12 = 4 * 15网易DDB数据迁移(1)DDB数据迁移算法历程-第一代:通过分布式事务进行细粒度迁移,迁移中的分区要合并源和目的结果性能极差,大量死锁,完全不可用-第二代:禁止待迁移分区的访问性能不错,但影响可用性-第三代:基于MySQL复制实现一分为二扩容在线迁移,不影响可用性,性能不错,但伸缩模式受限-第四代:基于MySQL交叉复制实现多对多伸缩在线,性能不错,伸缩模式灵活,但操作复杂数据迁移
5、(2)基于复制的高性能在线数据迁移-分区数据隔离(推荐)在目的节点建立待迁移分区数据的复制,等待复制同步后,修改路由信息-分区数据融合在目的节点建立源节点的复制, 等待复制同步后,修改路由信息,而后清理不需要的分区数据路由表版本号-同步修改缓存于所有客户端的路由表困难怎么办?为路由表设置递增的版本号,迁移时增加源节点的路由表版本号客户端请求源节点,发现路由表版本不匹配,同步路由表后正确路由至目的节点无迁移扩容PB级以上存储需要采用无迁移扩容元数据库-对象级元数据记录存储位置,元数据与数据分离。数据扩容无需迁移,元数据扩容仍需迁移但数据量小-案例:网易NOS,元数据使用网易DDB,数据使用网易S
6、DFS-凡是没有元数据的海量存储都是耍流氓分区预留-案例:网易DFS/SDFS文件访问键由系统分配而不是应用程序指定,因此访问键中可以包含分区号事先规划好65536个分区,但不立即启用增加一个物理节点时,启用一批分区分配给该物理节点系统生成文件的访问键时,使用新分配的分区号-适用范围访问键由系统分配且可包含分区号负载在初始分配完成后基本不变高可靠可用设计模式可靠/可用性数据软件/OS故障:10%硬盘故障:8%(参考Google报告)内存/网卡等故障:1%交换机故障:1%可靠性计算:复本多复本系统综合可靠性(近似):P = prtr-1/dr-1-p:单个设备的故障率-d:故障率周期-t:故障恢
7、复时间-r:复本数增加复本数对提高可靠性最有效复本数一定时关键在于加快恢复速度可靠性计算:组合组合系统的综合可靠性:P=1-(1-p)nnp(np1)-p:单个设备的故障率-n:组合包含的设备数,即组合规模扩大组合规模伤害系统可靠性,故障率随组合规模线性增长-不建议做很多块磁盘组合的RAID 0或RAID 1+0可靠性三原则增加副本加快恢复避免组合复本分布与规模效应dddd1d2d3d4d100一对一复制磁盘容量: 900GB恢复带宽: 20MB/s恢复时间: 45000s可靠性: 99.999%一对多复制磁盘容量: 900GB恢复带宽: 2000MB/s恢复时间: 450s可靠性: 99.9
8、9999%分布式一对多复制以进行并行快速恢复是提高数据可靠性的良策;在一定规模范围内(如N基本规则可保证最终一致,无法保证强一致-无法区分更新成功还是失败强一致规则-前一个更新成功后才可以执行后一个更新(不易实现)-一直读取到版本号最高复本的W个复本,若最终少于W个则判定更新失败评价-至少需要3复本,读效率低v2 v2 v2 v1 v1v1 v1 v2 v1 v1热备故障处理-SLAVE故障,中断复制,暂时退化为单复本,而后重建SLAVESLAVE复活,从断点继续复制-MASTER故障,暂时退化为单复本,提升SLAVE为新MASTER,而后重建新SLAVEMASTER复活,成为新的SLAVE评
9、价-牺牲暂时的可靠性,换取写效率与可用性-SLAVE不可承担一致性读客户MASTERSLAVE1、写请求3、写请求5、ACK2、加锁,写,不提交6、提交7、ACK4、写并提交单主与租约(1)故障检测不可能性-无法判断服务故障还是检测者与服务器之间网络故障案例:网络故障导致双主-初始状态,所有客户端连接到MASTER-MASTER与控制中心间网络故障,控制中心认为MASTER已故障(其实还活着),启用新MASTER-部分客户端仍连接到MASTER,部分连接到MASTER客户1客户2MASTERMASTER控制中心单主与租约(2)机制-服务节点持续向控制中心申请短时间租约(Lease,一般10s)
10、-控制中心在已派发的租约过期之前,不启用新服务节点-服务节点租约过期时若还无法从控制中心申请到新租约,自己中断客户连接(自杀)评价-易于实现-依赖于高可用控制中心服务(通常用ZooKeeper)可用性受一定影响,但由于大面积网络故障罕见,可用性一般能满足需求低成本模式常见问题怎么降低存储成本? 应该用什么存储介质?要不要加缓存?缓存要多大?性能不足时,加内存还是磁盘?IOPS/GB准则最优单一存储介质只取决于-应用IOPS/GB特征-各类介质的每GB成本-各类介质能提供的IOPS/GB性能使用某存储介质时的每GB成本-若应用IOPS/GB介质IOPS/GB= (应用IOPS/GB / 介质IO
11、PS/GB) * 介质每GB成本介质$/GB介质IOPS/GB适用应用IOPS/GBSATASASSSD内存0.10.0500.30.60.330.30.8251.5100.8251001510000100多级存储与缓存(1)案例1: 设存储分10%热数据(IOPS/GB = 0.5)和90%冷数据(IOPS/GB=0.06),综合IOPS/GB=0.104-使用单一存储SATA:每GB成本=0.104/0.05*0.1=0.208-使用二级存储,热数据用SAS,冷数据用SATA:每GB成本=0.1*(0.5/0.33)*0.6+0.9*(0.06/0.05)*0.1=0.199-使用SATA
12、存储,但用SSD缓存热数据:每GB成本=0.1*(0.5/0.3)*0.6+1*(0.9*0.06)/0.05)*0.1=0.199案例2:设存储分10%热数据(IOPS/GB = 0.5)和90%冷数据(IOPS/GB=0.03),综合IOPS/GB=0.077-使用单一存储SATA:每GB成本=0.077/0.05*0.1=0.154-使用二级存储,热数据用SAS,冷数据用SATA:每GB成本=0.1*(0.5/0.33)*0.6+0.9*0.1=0.181-使用SATA存储,但用SSD缓存热数据:每GB成本=0.1*(0.5/0.33)*0.6+1*0.1=0.191多级存储与缓存(2)
13、采用多级存储或热点数据缓存是否一定能降低系统成本?-缓存过剩(或热点数据存储容量过大)时反而增加系统成本(案例2)-缓存严重不足时,虽然能降低系统成本,但达不到最理想的效益缓存容量经验法则(近似)-冷数据访问IOPS/GB介质IOPS/GB:缓存不足-冷数据访问IOPS/GB=介质IOPS/GB:缓存合适热点数据较少时,缓存与分级存储成本接近,而缓存更易于实施,工程实现往往实现缓存而非分级存储常见问题解答怎么降低存储成本?-通用方法是选用合适的存储介质,且可区分热点与非热点数据,使用缓存或多级存储 应该用什么存储介质?-统计应用访问IOPS/GB特征,结合各介质没GB成本和IOPS/GB能力计
14、算要不要加缓存?缓存要多大?-比较访问IOPS/GB与冷数据介质IOPS/GB,调整缓存容量使二者接近性能不足时,加内存还是磁盘?-同上经验法则其它成本优化方法压缩-除了zlib,可以尝试lzo、snappy等计算效率更高的压缩算法去重-对象级md5去重:相册/邮箱大附件去重率20-30%-分块去重:最好基于内容(搜索哈希值符合某一特征的内容片段作为边界)而不是固定分块相册实验结果对象级去重与内容分块去重效果差别很小纠删码-n块内容编码为n+k块,只要读取任意n块即可解码-理论上可以用很小的存储代价实现非常高的数据可靠性(如10+2配置,20%开销,可靠性等效于3复本),但恢复时的带宽消耗非常高,分布式环境难实用(希望万兆网络普及)-极度放大随机读写IOPS,从而影响性价比升级硬件-老旧低性能服务器机架托管成本很高-一般推荐4-5年替换升级周期计算计算公式-设:P=初始价格;T=托管价格;Y=折旧年限;g=年性能增长率典型数据-P=1-T=0.1-g=0.6折旧年限TCO进阶阅读分布式基础学习计划网易云课堂http:/