分布式系统
一、基础概念
分布式处理则是将不同地点的,或具有不同功能的,或拥有不同数据的多台计算机通过通信网络连接起来,
在控制系统的统一管理控制下,协调地完成大规模信息处理任务的计算机系统。
适用场景
1)性能瓶颈
首先需要明确的是,只有当单个节点的处理能力无法满足日益增长的计算、存储任务的时候,且硬件的提升(加内存、加磁盘、使用更好的CPU)高昂到得不偿失的时候,应用程序也不能进一步优化的时候,我们才需要考虑分布式系统。因为,分布式系统要解决的问题本身就是和单机系统一样的,而由于分布式系统多节点、通过网络通信的拓扑结构,会引入很多单机系统没有的问题,为了解决这些问题又会引入更多的机制、协议,带来更多的问题。
2)业务耦合
多个业务相关性很小,若把业务都写在一个机器上,那么业务之间彼此耦合依赖,会大大降低系统的可用性。而将相互独立的业务拆分出来,通过网路来保持联系就可以大大降低业务之间的耦合。
CAP理论
CAP理论是说对于分布式数据存储,最多只能同时满足一致性(C,Consistency)、可用性(A, Availability)、分区容忍性(P,Partition Tolerance)中的两者。
一致性:是指对于每一次读操作,都能够读到最新写入的数据,即每个服务器所读的数据都是一致的
可用性:是指对于每一次请求,都能够得到一个及时的、非错的响应。即即使有一个服务器挂了,其他被集群的服务器也能够及时响应客户的请求。
分区容忍性:在多个服务节点下,如果发生了计划之外的网络连接等问题,对于这种情况,有一套容错性设计来保证。即项目中任意节点信息
的丢失或失败不会影响整个系统的继续运作。
一致性级别
1、强一致性
这种一致性级别是最符合用户直觉的,它要求系统写入什么,读出来的也会是什么,用户体验好,但实现起来往往对系统的性能影响大
2、弱一致性
这种一致性级别约束了系统在写入成功后,不承诺立即可以读到写入的值,也不久承诺多久之后数据能够达到一致,但会尽可能地保证到某个时间级别(比如秒级别)后,数据能够达到一致状态
3、最终一致性
最终一致性是弱一致性的一个特例,系统会保证在一定时间内,能够达到一个数据一致的状态。这里之所以将最终一致性单独提出来,是因为它是弱一致性中非常推崇的一种一致性模型,也是业界在大型分布式系统的数据一致性上比较推崇的模型
A和P:
A(可用性)简单地说就是系统的=》稳定性+抗容灾能力,假设一个节点挂,另一份节点要顶上~
P(分区容忍性) :不是分区容错性,容错由A的问题,偏重的是网路中不同业务的节点。在实际应用中指的是集群架构和数据支持动态横向扩展。所谓动态,就是不停机~~。横向扩展指的是当一套系统性能达到瓶颈时,运维人员可以利用增加服务器数量,来提供系统性能。而不是购买更贵的高性能服务器。P(分区容忍性) 单台服务器,或多台服务器出问题(主要是网络问题)后,正常服务的服务器依然能正常提供服务,并且满足设计好的一致性和可用性 P(分区容忍性重点在于部分服务器因网络问题,业务依然能够继续运行,并且支持高扩展
使用总结:
分区容忍性(P,Partition Tolerance)一般不会舍弃,而一致性(C,Consistency)可以适当牺牲强一致性而保障最终一致性。
BASE理论
BASE是Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)三个短语的缩写。BASE理论是对CAP中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的总结, 是基于CAP定理逐步演化而来的。BASE理论的核心思想是:即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性。接下来看一下BASE中的三要素:
1、基本可用
基本可用是指分布式系统在出现不可预知故障的时候,允许损失部分可用性----注意,这绝不等价于系统不可用。比如:
(1)响应时间上的损失。正常情况下,一个在线搜索引擎需要在0.5秒之内返回给用户相应的查询结果,但由于出现故障,查询结果的响应时间增加了1~2秒
(2)系统功能上的损失:正常情况下,在一个电子商务网站上进行购物的时候,消费者几乎能够顺利完成每一笔订单,但是在一些节日大促购物高峰的时候,由于消费者的购物行为激增,为了保护购物系统的稳定性,部分消费者可能会被引导到一个降级页面
2、软状态
软状态指允许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统的整体可用性,即允许系统在不同节点的数据副本之间进行数据同步的过程存在延时
3、最终一致性
最终一致性强调的是所有的数据副本,在经过一段时间的同步之后,最终都能够达到一个一致的状态。因此,最终一致性的本质是需要系统保证最终数据能够达到一致,而不需要实时保证系统数据的强一致性。
总的来说,BASE理论面向的是大型高可用可扩展的分布式系统,和传统的事物ACID特性是相反的,它完全不同于ACID的强一致性模型,而是通过牺牲强一致性来获得可用性,并允许数据在一段时间内是不一致的,但最终达到一致状态。但同时,在实际的分布式场景中,不同业务单元和组件对数据一致性的要求是不同的,因此在具体的分布式系统架构设计过程中,ACID特性和BASE理论往往又会结合在一起。
SOA(Service Oriented Ambiguity)面向服务架构
SOA:它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。我的理解就是在如单体架构中MVC的Service层。只是将各个服务器看成一个整体充当Service层即对外提供服务。
如:
数据总线:
就在指注册中心:如zookeeper。
Soap (Simple Object Access Protocol)简单对象访问协议
SOAP是一个用于分布式环境的、轻量级的、基于XML进行信息交换的通信协议.
对于Soap的理解:
第一步理解:SOAP=HTTP+XML
第二步理解:SOAP把XML的使用代码化为请求和响应参数编码模式,并用HTTP作传输。
SOAP是把成熟的基于HTTP的WEB技术与XML的灵活性和可扩展性组合在了一起。
第三步理解:具体地讲,一个SOAP实现可以简单地看作遵循SOAP编码规则的HTTP请求和响应。
注意:SOAP 是一个协议,与编程语言无关。实际上,许多语言已经开始支持 SOAP,如:Java,C,C++以及JavaScript。
Soap和soa:
soa是分布式系统的一种编程思想,而soap是分布式系统下的一种通信协议
分布式服务调用之间的几种方式
1.RESTful
REST可以看着是http协议的一种直接应用,默认基于json作为传输格式,使用简单,学习成本低效率高,但是安全性较低.
RESTful是一种架构的规范与约束原则,符合这种规范的架构就是RESTful架构。
RESTful大部分协议都是基于HTTP协议的。
@see RESTful 架构详解 https://www.runoob.com/w3cnote/restful-architecture.html
2、webservice
基于xml为格式的传输协议。在安全方面是通过使用XML-Security和XML-Signature两个规范组成了WS-Security来实现安全控制的。
3.RPC(远程调用框架)
是一种允许分布式应用程序调用网络上不同计算机的可用服务的机制。通常和分布式框架结合使用如dubbo,通常包含了负载均衡,集群容错等高可用,高性能特点但学习和维护难度大。
分布式系统优点
1.高可用:
2.降低耦合
3.容错性
分布式系统缺点
1.数据一致性问题
2.服务器通信问题
rpc:
mq:
分布式难点
1.数据一致性
分布式缓存
1.注意事项:
分布式下,如果想将对象进行共享,一致性有如下要求:序列化方式要保持一致,序列化id保持一致,实体名称保持一致(包括包名也要一致)。对于消费者和提供者可以多加一些属性也可以少一些属性,只是能不能匹配上的问题,但不建议缓存对象进行通信,因为一旦提供者改变了实体字段等,消费者也要保持一致才能匹配上值。
参考资料:
1.什么是分布式系统,如何学习分布式系统:https://www.cnblogs.com/xybaby/p/7787034.html
2.深入浅出SOA https://www.cnblogs.com/renzhitian/p/6853289.html
3.初步理解一下:SOA, SOAP, Web Service, WSDL等https://www.cnblogs.com/yuxiang204/archive/2012/10/16/2726006.html
4.如何正确理解CAP理论?https://www.jdon.com/bigdata/how-to-understand-cap.html
5.从分布式一致性谈到CAP理论、BASE理论https://www.cnblogs.com/szlbm/p/5588543.html