新一代银行IT架构笔记(分布式架构理论及典型实践)
参考马智涛等所著《新一代银行IT架构》
什么是分布式计算架构
由多个部署在不同计算机上的模块构成,模块间通过网络进行基于消息的通信与协同。模块间互相交互以便完成一项共同的任务。
CAP理论
1)一致性:每个请求获得的都是最新写入的数据;
2)可用性:每个请求都能获得一个响应,虽然不保证一定是最新的数据;
3)分区容忍性:系统在网络故障导致的分区状态下依然保持运行;
分部式系统普遍存在网络分区,即分区容忍性不可舍弃,一般在一致性或可用性方面做出平衡,CP或AP;
--为啥一致性和可用性是一对矛盾的东西呢?因为要实现一致性,在本质上都是进行副本之间的同步,而这个是需要花时间的,如果要保证强一致性,那么在同步的这一段时间中,是不可用的;
--一个分布式系统里面,节点组成的网络本来应该是连通的。然而可能因为一些故障,使得有些节点之间不连通了,整个网络就分成了几块区域。数据就散布在了这些不连通的区域中。这就叫分区。
当你一个数据项只在一个节点中保存,那么分区出现后,和这个节点不连通的部分就访问不到这个数据了。这时分区就是无法容忍的。
提高分区容忍性的办法就是一个数据项复制到多个节点上,那么出现分区之后,这一数据项就可能分布到各个区里。容忍性就提高了。
然而,要把数据复制到多个节点,就会带来一致性的问题,就是多个节点上面的数据可能是不一致的。要保证一致,每次写操作就都要等待全部节点写成功,而这等待又会带来可用性的问题。
总的来说就是,数据存在的节点越多,分区容忍性越高,但要复制更新的数据就越多,一致性就越难保证。为了保证一致性,更新所有节点数据所需要的时间就越长,可用性就会降低。
分区容忍性意味着,开发一个应对策略,当分区时,丢弃一致性或可用性。
那么什么导致了分区?有两个。第一个很显然,网络故障,例如交换机坏了,可以导致网络分区。第二个没那么明显,但是符合Gilbert和Lynch对分区的定义,机器故障,无论是软件的,还是硬件的。例如在异步网络中,消息处理没有在指定时间完成,不可能区分是机器故障还是消息丢失了。这样,一台故障机器自个和其余机器发生了分区。相关错误发生在一组机器,这组机器就和其它机器发生了分区。不能收到消息和网络没有投递消息是等价的。当足够多的机器故障时,保持可用性和一致性(中的一个)是不可能,不是因为写到了不同的分区,而是机器数量达不到的规定的数目(quorum机制), 可能导致最近的写没法读出来。
(备注:这就是为啥分区容忍是必选的,因为无论如何,它都要发生,无法控制)
自己的理解:针对分布式数据库而言,如果一个节点的硬件损坏了,这台发生损坏的机器和其他机器产生了分区,大部分分布式数据库会把这个节点剔除出去,保障一致性,牺牲了可用性。
MySQL的MHA:主备切换:保障P,切换过程不可用(牺牲了A),数据保障一致性(保障了C)
分布式数据库
1)不同角色对关系型数据库的需求
角色 需求 架构师 1.数据库能够持久存储数据;
2.数据库能够满足事务的ACID特性
3.安全合规产品经理 1.数据库能够确保不丢用户数据;
2.数据库要有好的用户体验,提高响应时间;
3.数据库能够保障高并发用户的请求;数据库管理员 1.有工具,容易运维;
2.使用不复杂;
3.稳定性和性能
2)数据库的选型
首先,选择商业数据库还是开源数据库;
其次:开源数据库选择依据:流行度和稳健性
3)分布式数据库的核心技术
(1)数据高可靠性:传统商用数据库依赖高端存储技术来实现数据的高可靠性;分布式数据库主要基于数据冗余,要兼顾考虑同步和数据一致性;
数据库同步和一致性主要依靠数据库的日志机制,而不是存储层的数据块同步技术;
(2)高可用性:分布式技术基于故障探测及故障转移来保障可用性,尽可能的减少故障探测时间及故障转移时间;
(3)高性能的事务处理能力:sql层或存储层引擎调优
4)分布式数据库的运维管理
(1)数据库管理:自动部署/版本升级/监控告警;
(2)备份和回档:回档时通过备份和日志来进行数据回溯;
(3)弹性扩展:读扩展,计算存储分别扩展;
(4)线上调优:
(5)安全审计;
--访问安全审计:越权操作记录
--sql安全审计:sql注入,低效sql,宽松条件sql语句
(6)成本控制;
--硬件成本:x86机器
--软件成本:采用开源数据库,无软件采购成本
--维护成本:主流开源数据库,维护难度及人才招聘成本大大降低
4. 分布式缓存
1)分布式缓存是一种基于内存/高性能SSD介质的数据存储服务,是分布式系统中的一个重要组件,主要解决高并发/大数据场景下,热点数据访问的性能问题,提供高性能的数据快速访问能力,减轻关系型数据库的压力。
2)分布式缓存的核心技术:分片技术/主从架构/分层架构;
3)成熟而完备的分布式缓存系统包括:可视化运维系统/自动扩缩容/自动重建备机/自动故障后搬迁/自动数据均衡/数据冷备份/跨机房容灾/异地容灾 4)主要场景:页面缓存/应用对象缓存/状态缓存/NoSQL存储;
4. 分布式存储
1)定义:分布式存储系统是指通过分布式技术,将网络中的不同节点上的存储设备通过分布式应用软件集合起来协同工作,共同对外提供数据存储和业务访问功能;
2)最大特点:数据分散存储在分布式存储系统的各个独立节点上,供用户透明的存取;
3)特性:可扩展性/高性能/高可靠/高可用/低成本
4)技术难点:数据分布/一致性/容错/负载均衡(添加节点)
分布式存储技术主要分为分布式块存储/分布式文件系统/分布式对象存储
1)分布式块存储
(1)定义:通过聚合集群内本地服务器的磁盘容量和性能以创建虚拟存储池,通过软件对虚拟存储池进行管理,并向计算节点提供块设备访问接口的分布式系统。
(2)特点:具有很强的横向扩张的扩展性,上千个节点;
(3)组成:元数据管理/存储服务器/客服端模块
(4)场景:服务器虚拟化/数据库/开发测试/虚拟桌面
(5)主要产品:Scale IO,VSAN,Fusionstorage,Ceph
2)分布式文件系统
(1)定义:指运行在多台计算机上,相互之间通过某种方式实现通信,从而将集群内所有存储空间资源整合,虚拟化并对外提供文件访问服务的文件系统。
(2)比较:分布式块存储提供块设备接口,分布式文件系统提供文件系统接口;分布式文件系统除了解决文件数据的存储与管理外,还要维护文件系统对应的全局命名空间;
3)分布式对象存储
(1)定义:提供键值对方式的RESTful数据读写接口,并且以网络服务的形式提供数据的访问。
(2)特性:扁平化的存储方式,超大规模的数据管理能力;对象存储接口访问是应用级接口,而不是系统级接口,所以,传统应用迁移到对象存储时需要重新开发。
4)与传统的集中式存储对比
(1)SAN和NAS在容量上可以支持PB级,但应对EB级别比较困难;
(2)SAN使用SCSI协议做为底层协议,管理的粒度非常小,通常以字节为单位;
(3)SCSI协议没有提供读写锁机制以确保不同应用并发读写时的数据一致性;
(4)NAS使用文件协议访问数据,文件超过亿级别时,文件系统复杂的锁机制及频繁的元数据访问将极大降低系统的整体系统。
(5)传统的RAID技术也限制了SAN和NAS的容量扩展,即使容量上去了,性能也会成为一个瓶颈。
(6)分布式存储因为数据在网络上多次传递,时延较高,对时延敏感的应用还是需要使用集中式存储。
(7)集中式存储技术成熟,接口做了充分优化,功能特性上支持非常完备。
(8) 分布式存储非常好的弥补了集中式存储在扩展性方面的不足。
5. 分布式消息总线
1)消息总线的定义:消息总线以消息中间件为底层数据的通信基础,并在这一基础上增加服务目录/鉴权管理/流量控制/故障隔离/安全审计等功能,解决不同机器进程间的通信问题。
2)分布式消息总线的核心特性:高可靠性/高可用/高弹性/易用性
3)场景:异步解耦/错峰流控/一次发送,消息多场景复用;
5. 分布式负载均衡网关
1)负载均衡的分类:
(1)从软硬件来划分,硬件负载均衡/软件负载均衡
(2)从实现协议角度来划分:链路负载/IP负载均衡/http负载均衡/DNS负载均衡
2)主要功能:
流量转发:根据请求的特征字段将请求转发给指定集群;
协议转换/SSL卸载:将HTTPS转换成HTTP1.1
安全防范攻击:分析请求特征,实现一些常见的安全功能,比如黑名单/访问频率限制/WAF等