分布式数据库是现代分布式系统的一个重要组件。传统集中式数据库中,数据库实例可能有多个,但是数据库(文件)只有一份。进行的查询都是在一个数据库中进行,进行的事务都是在一个实例下完成。
分布式数据库的一个特性就是实例是多个,同时数据库也是多个,分布在不同的物理服务器上。由于对象和实例的分布特性,所以查询一个数据,访问的实例和数据库可能是多个,进行dml操作的事务也随着上升为分布式事务。
分布式数据的设计要遵循CAP定理,即:一个分布式系统不可能同时满足 一致性 、可用性 、分区容忍性这三个基本需求,最多只能同时满足其中的两项,分区容错性 是不能放弃的,因此架构师通常是在可用性和一致性之间权衡。
分片过程是将全局数据进行逻辑划分和实际物理分配过程。全局数据由分片成各个片段数据,各个片段分配到不同的场地(服务器)上。
分片原则
1、完备性:所有全局数据都要映射到某个片段上。
2、可重构性:所有片段必须可以重新构成全局数据。
3、不相交性:划分的个片段所包含的数据无交集。
分片方式
水平分片:是对于单表数据进行拆分.拆分标准也不再基于业务逻辑,而是将字段根据某种规则将数据分散到不同的表或库中.每个分片只存储一部分数据.常见的是根据主键分片.如:奇数放0库,偶数放1库.
垂直分片:将数据按照业务进行拆分的方式,又称为纵向拆分,核心是专库专用.即多表进行归类存储.将原来在同一个库中的不同表,按照业务的不同存储在不同库中,来减少单库的访问压力.
混合分片:既有水平分片,又有垂直分片
导出水平分片:分片属性不是该关系表中的属性
全局数据库----->片段数据库-------->物理数据库
常见的数据库组件有,Amazon RDS和Amazon Aurora,Azure SQL数据库,Clustrix数据库,Google Cloud Spanner,cobar,mycat等
分布式消息中间件组件
消息中间件
利用高效可靠的消息传递机制进行平台无关的数据交流;
并基于数据通信来进行分布式系统的集成;
通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信;
消息中间件的应用场景
跨系统数据传递,高并发流量削峰,数据异步处理……等待
常用的消息中间件
ActiveMQ,RabbitMQ,Kafka,RocketMQ
本质
一种具备接受请求、保存数据、发送数据等功能的网络应用。和一般网络应用程序的区别是它主要负责数据的接受和传递,所以性能一般都高于普通程序
5大核心组成
协议
持久化机制
消息分发机制
高可用设计
高可靠设计
协议是计算机之间通信时共同遵从的一组约定,都遵守相同的约定,计算机之间才能相互交流。是对数据格式和计算机之间交换数据时必须遵守的规则的正式描述。
常见协议
HTTP协议3要素
语法:http规定了请求报文和响应报文的具体格式。
语义:客户端主动发起的操作称为请求。
时序:一个请求对应一个响应。
消息中间件常用的协议:OpenWire、AMQp、MQTT、Kafka、OpenMessage
持久化
简单来说就是将数据存入磁盘,而不是存在内存中随服务器重启而消失,使数据能够永久保存叫做持久化
消息分发
高可用
高可用性是指产品在规定的条件和规定的时刻或实际区间内处于可执行规定功能状态的能力。
当业务量大时,一台消息中间件服务器可能无法满足需求,所以需要消息中间件能够集群部署,来达到高可用的目的。
高可靠
高可靠性是指系统可用无故障的持续运行。比如一个系统从来不崩溃、报错、或者崩溃、报错的几率较低,那就是高可靠。
在搞并发业务场景下,如果不能保证系统的高可靠,那造成的损失将会非常严重。
保证消息中间件的高可靠性,可用从以下几个方面考虑
消息传输可靠: 通过协议来保证系统间数据解析的正确性。
消息存储可靠: 通过持久化来保证消息的存储可靠性。
设计和实现一个消息中间件,协议、持久化、消息分发、高可用、高可靠 这个5个核心点必须要实现
分布式存储模块
分布式存储往往采用分布式的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息。它不但提高了系统的可靠性、可用性和存取效率,还易于扩展,将通用硬件引入的不稳定因素降到最低。
高性能
一个具有高性能的分布式存户通常能够高效地管理读缓存和写缓存,并且支持自动的分级存储。分布式存储通过将热点区域内数据映射到高速存储中,来提高系统响应速度;一旦这些区域不再是热点,那么存储系统会将它们移出高速存储。而写缓存技术则可使配合高速存储来明显改变整体存储的性能,按照一定的策略,先将数据写入高速存储,再在适当的时间进行同步落盘。
支持分级存储
由于通过网络进行松耦合链接,分布式存储允许高速存储和低速存储分开部署,或者任意比例混布。在不可预测的业务环境或者敏捷应用情况下,分层存储的优势可以发挥到最佳。解决了目前缓存分层存储最大的问题是当性能池读不命中后,从冷池提取数据的粒度太大,导致延迟高,从而给造成整体的性能的抖动的问题。
多副本的一致性
与传统的存储架构使用RAID模式来保证数据的可靠性不同,分布式存储采用了多副本备份机制。在存储数据之前,分布式存储对数据进行了分片,分片后的数据按照一定的规则保存在集群节点上。为了保证多个数据副本之间的一致性,分布式存储通常采用的是一个副本写入,多个副本读取的强一致性技术,使用镜像、条带、分布式校验等方式满足租户对于可靠性不同的需求。在读取数据失败的时候,系统可以通过从其他副本读取数据,重新写入该副本进行恢复,从而保证副本的总数固定;当数据长时间处于不一致状态时,系统会自动数据重建恢复,同时租户可设定数据恢复的带宽规则,最小化对业务的影响。
容灾与备份
在分布式存储的容灾中,一个重要的手段就是多时间点快照技术,使得用户生产系统能够实现一定时间间隔下的各版本数据的保存。特别值得一提的是,多时间点快照技术支持同时提取多个时间点样本同时恢复,这对于很多逻辑错误的灾难定位十分有用,如果用户有多台服务器或虚拟机可以用作系统恢复,通过比照和分析,可以快速找到哪个时间点才是需要回复的时间点,降低了故障定位的难度,缩短了定位时间。这个功能还非常有利于进行故障重现,从而进行分析和研究,避免灾难在未来再次发生。多副本技术,数据条带化放置,多时间点快照和周期增量复制等技术为分布式存储的高可靠性提供了保障。
弹性扩展
得益于合理的分布式架构,分布式存储可预估并且弹性扩展计算、存储容量和性能。分布式存储的水平扩展有以下几个特性:
- 节点扩展后,旧数据会自动迁移到新节点,实现负载均衡,避免单点过热的情况出现;
- 水平扩展只需要将新节点和原有集群连接到同一网络,整个过程不会对业务造成影响;
- 当节点被添加到集群,集群系统的整体容量和性能也随之线性扩展,此后新节点的资源就会被管理平台接管,被用于分配或者回收。
存储系统标准化
随着分布式存储的发展,存储行业的标准化进程也不断推进,分布式存储优先采用行业标准接口(SMI-S或OpenStack Cinder)进行存储接入。在平台层面,通过将异构存储资源进行抽象化,将传统的存储设备级的操作封装成面向存储资源的操作,从而简化异构存储基础架构的操作,以实现存储资源的集中管理,并能够自动执行创建、变更、回收等整个存储生命周期流程。基于异构存储整合的功能,用户可以实现跨不同品牌、介质地实现容灾,如用中低端阵列为高端阵列容灾,用不同磁盘阵列为闪存阵列容灾等等,从侧面降低了存储采购和管理成本。
负载均衡模块
负载均衡,是一种技术解决方案。用来在多个资源(一般是服务器)中分配负载,达到最优化资源使用,避免过载。
资源,相当于每个服务实例的执行操作单元,负载均衡就是将大量的数据处理操作分摊到多个操作单元进行执行,用来解决互联网分布式系统的大流量、高并发和高可用的问题。
特性:一致性,可用性,分区容错性
衡量系统是否满足高可用,就是当一台或者多台服务器宕机的时候,系统整体和服务依然正常可用
负载均衡是分布式系统架构设计中必须考虑的因素之一。一般通过负载均衡,冗余同一个服务实例的方式,解决分布式系统的大流量、高并发和高可用的问题。负载均衡核心关键:在于是否分配均匀。
负载均衡是一个系统或软件的整体。对内看来,层层上下游调用。只要存在调用,就需要考虑负载均衡这个因素。所以负载均衡是分布式系统架构设计中必须考虑的因素之一
客户端层 -> 反向代理层 的负载均衡。通过 DNS 轮询
反向代理层 -> Web 层 的负载均衡。通过 Nginx 的负载均衡模块
Web 层 -> 业务服务层 的负载均衡。通过服务治理框架的负载均衡模块
业务服务层 -> 数据存储层 的负载均衡。通过数据的水平分布,数据均匀了,请求也会均匀。
数据冗余与安全审计模块
冗余设计:就是多设计重复相同的东西。
数据表冗余设计在大型系统中是必须的。
随着系统数据量越来越大,实时查询的要求越来越高。
通过我最近对整个系统运行的跟踪,我发现对于数据量特别大的系统,必须多做冗余式设计,
对报表模块 多做数据缓存,来应对数据查询
为了避免数据之间的关联查询导致性能的下降,提升程序效率。
为了达到检索速度快,需要在关联非常复杂的表中多加冗余字段来提高系统的查询速度。
所以采用冗余可以避免join连接 ,冗余也可以避免多次查询,减少检索次数,提升效率。
数据去重技术是专用的数据压缩技术,用于消除重复数据的副本。在存储去重过程中,一个唯一的数据块或数据段将分配一个标识并存储,这个标识会加入一个标识列表。当去重过程继续时,一个标识已存在于标识列表中的新数据块将被认为是冗余的块。该数据块将被一个指向已存储数据块指针的引用替代。通过这种方式,任何给定的数据块只有一个实例存在。去重技术能够显著地减少存储空间,对大数据存储系统具有非常重要的作用。特征提取技术,在多媒体搜索和DNS分析中起着重要的作用。这些数据对象通常具有高维特征矢量。数据变形技术则通常用于处理分布式数据源产生的异构数据。
安全审计模块
传统的商业与管理审计,与计算机安全审计的过程是完全相同的,但它们各自关注的问题有很大不同。计算机安全审计是通过一定的策略,利用记录和分析历史操作事件发现系统漏洞并改进系统的性能和安全。计算机安全审计需要达到的目的包括:对潜在的攻击者起到震慑和警告的作用;对于已经发生的系统破坏行为提供有效的追究责任的证据;为系统管理员提供有价值的系统使用日志,帮助系统管理员及时发现系统入侵行为或潜在的系统漏洞。
内网安全管理,安全审计是对计算机终端及其应用进行量化检查与评估的技术和过程。内网审计是通过对计算机终端中相关信息的收集、分析和报告,来判定现有终端安全控制的有效性,检查计算机终端的误用、滥用和泄密行为,验证当前安全策略的合规性,获取犯罪和违规的证据。
安全审计涉及四个基本要素:目标、漏洞、措施和检查。
目标是企业的安全控制要求;漏洞是指系统的薄弱环节;措施是为实现目标所制定的技术、配置方法及各种规章制度;检查是将各种措施与安全标准进行一致性比较,确定各项措施是否存在、是否得到执行、对漏洞的防范是否有效,评价企业安全措施的可依赖程度。
管理部门相继出台了各层面的管理要求,就是对安全审计提出的目标。如分级保护要求、等级保护要求、以及将出台的国内《企业内部控制基本规范》等;同时,跨国、合资企业在符合我国安全要求的同时,也受到本国安全标准的管理。
这些法规和要求成为审计系统的检查基线,使审计成为必要和可能。根据这些目标要求,企业要进行风险评估,找出漏洞所在,并针对这些风险和漏洞,采取必要的措施,如部署内网安全管理系统,对计算机端口、外部设备、网络接入、移动存储介质进行控制和管理,监控电子文件的操作等,收集使用日志,记录操作内容和操作行为,作为今后等级评估、保密检查和合规性检查的重要依据。
例如根据等级保护、分级保护要求,对这些日志数据进行统计分析,产生分级保护分析结果,形成用户操作场景,找出用户违规行为,通过合规性分析,加强企业在分级保护方面的管理力度,追究泄密责任。
“内网安全管理系统”是内网审计系统的基础。内网审计是在内网安全管理系统日志功能基础上的,对日志数据进行分析、报告与判断(与目标的符合度)的过程。
安全审计和访问控制互为补充。安全审计对用户使用何种信息资源、使用时间,以及如何使用(执行何种操作)进行记录并检查。审计和监控的联合,能够再现原有的使用场景、发现操作时的问题,对于追查责任和恢复数据非常必要。
审计和审计跟踪
审计跟踪,是按事件发生的时间顺序,记录每个事件的环境及活动,使之能够提供事件从始至终的整个变化轨迹,进一步提高了审计效果。审计跟踪记录的活动包括系统活动和用户活动,系统活动包括操作系统和应用程序进程的活动;用户活动包括用户在操作系统中和应用程序中的活动。
审计跟踪通过书面(或其它具有法律效力的)方式,提供责任人的活动证据,使之之具备记录系统活动、并跟踪到对这些活动应负责任的人员的能力。
通过借助适当的工具和规程,审计跟踪可以发现违反安全策略的活动、影响运行效率的问题以及程序中的错误。审计跟踪不但有助于帮助系统管理员确保系统及其资源免遭非法授权用户的侵害,同时还能提供对数据恢复的帮助。
审计跟踪是高级的审计,它依赖于审计系统完整、连续的活动记录能力,和系统对复杂记录的深度挖掘和智能分析能力。