分布式系统

1、基础概念javascript

分布式处理则是将不一样地点的,或具备不一样功能的,或拥有不一样数据的多台计算机经过通讯网络链接起来,
在控制系统的统一管理控制下,协调地完成大规模信息处理任务的计算机系统。html

适用场景
1)性能瓶颈
首先须要明确的是,只有当单个节点的处理能力没法知足日益增加的计算、存储任务的时候,且硬件的提高(加内存、加磁盘、使用更好的CPU)高昂到得不偿失的时候,应用程序也不能进一步优化的时候,咱们才须要考虑分布式系统。由于,分布式系统要解决的问题自己就是和单机系统同样的,而因为分布式系统多节点、经过网络通讯的拓扑结构,会引入不少单机系统没有的问题,为了解决这些问题又会引入更多的机制、协议,带来更多的问题。java

2)业务耦合
多个业务相关性很小,若把业务都写在一个机器上,那么业务之间彼此耦合依赖,会大大下降系统的可用性。而将相互独立的业务拆分出来,经过网路来保持联系就能够大大下降业务之间的耦合。web

CAP理论数据库

CAP理论是说对于分布式数据存储,最多只能同时知足一致性(C,Consistency)、可用性(A, Availability)、分区容忍性(P,Partition Tolerance)中的二者。
  一致性:是指对于每一次读操做,都可以读到最新写入的数据,即每一个服务器所读的数据都是一致的
  可用性:是指对于每一次请求,都可以获得一个及时的、非错的响应。即即便有一个服务器挂了,其余被集群的服务器也可以及时响应客户的请求。
  分区容忍性:在多个服务节点下,若是发生了计划以外的网络链接等问题,对于这种状况,有一套容错性设计来保证。即项目中任意节点信息
的丢失或失败不会影响整个系统的继续运做。编程

一致性级别json

一、强一致性跨域

这种一致性级别是最符合用户直觉的,它要求系统写入什么,读出来的也会是什么,用户体验好,但实现起来每每对系统的性能影响大浏览器

二、弱一致性缓存

这种一致性级别约束了系统在写入成功后,不承诺当即能够读到写入的值,也不久承诺多久以后数据可以达到一致,但会尽量地保证到某个时间级别(好比秒级别)后,数据可以达到一致状态

三、最终一致性

最终一致性是弱一致性的一个特例,系统会保证在必定时间内,可以达到一个数据一致的状态。这里之因此将最终一致性单独提出来,是由于它是弱一致性中很是推崇的一种一致性模型,也是业界在大型分布式系统的数据一致性上比较推崇的模型

A和P:

A(可用性)简单地说就是系统的=》稳定性+抗容灾能力,假设一个节点挂,另外一份节点要顶上~
P(分区容忍性) :不是分区容错性,容错由A的问题,偏重的是网路中不一样业务的节点。在实际应用中指的是集群架构和数据支持动态横向扩展。所谓动态,就是不停机~~。横向扩展指的是当一套系统性能达到瓶颈时,运维人员能够利用增长服务器数量,来提供系统性能。而不是购买更贵的高性能服务器。P(分区容忍性) 单台服务器,或多台服务器出问题(主要是网络问题)后,正常服务的服务器依然能正常提供服务,而且知足设计好的一致性和可用性 P(分区容忍性重点在于部分服务器因网络问题,业务依然可以继续运行,而且支持高扩展

C A 知足的状况下,P不能知足的缘由:
数据同步©须要时间,也要正常的时间内响应(A),那么机器数量就要少,因此P就不知足。若p不能知足,就已经趋向于单机了。

CP 知足的状况下,A不能知足的缘由:
数据同步©须要时间, 机器数量也多§,可是同步数据须要时间,因此不能再正常时间内响应,因此A就不知足

AP 知足的状况下,C不能知足的缘由:
机器数量也多§,正常的时间内响应(A),那么数据就不能及时同步到其余节点,因此C不知足

使用总结:

分区容忍性(P,Partition Tolerance)通常不会舍弃,而一致性(C,Consistency)能够适当牺牲强一致性而保障最终一致性。

BASE理论

BASE是Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)三个短语的缩写。BASE理论是对CAP中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的总结, 是基于CAP定理逐步演化而来的。BASE理论的核心思想是:即便没法作到强一致性,但每一个应用均可以根据自身业务特色,采用适当的方式来使系统达到最终一致性。接下来看一下BASE中的三要素:

一、基本可用

基本可用是指分布式系统在出现不可预知故障的时候,容许损失部分可用性----注意,这毫不等价于系统不可用。好比:

(1)响应时间上的损失。正常状况下,一个在线搜索引擎须要在0.5秒以内返回给用户相应的查询结果,但因为出现故障,查询结果的响应时间增长了1~2秒

(2)系统功能上的损失:正常状况下,在一个电子商务网站上进行购物的时候,消费者几乎可以顺利完成每一笔订单,可是在一些节日大促购物高峰的时候,因为消费者的购物行为激增,为了保护购物系统的稳定性,部分消费者可能会被引导到一个降级页面

二、软状态

软状态指容许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统的总体可用性,且容许系统在不一样节点的数据副本之间进行数据同步的过程存在延时,即此时可能存在不一样节点的数据暂时不一致状况。

三、最终一致性

最终一致性强调的是全部的数据副本,在通过一段时间的同步以后,最终都可以达到一个一致的状态。所以,最终一致性的本质是须要系统保证最终数据可以达到一致,而不须要实时保证系统数据的强一致性。

总的来讲,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

二、webservice

基于xml为格式的传输协议。在安全方面是经过使用XML-Security和XML-Signature两个规范组成了WS-Security来实现安全控制的。

3.RPC(远程调用框架)

是一种容许分布式应用程序调用网络上不一样计算机的可用服务的机制。一般和分布式框架结合使用如dubbo,一般包含了负载均衡,集群容错等高可用,高性能特色但学习和维护难度大。

分布式系统优势

1.高可用:

2.下降耦合

3.容错性

分布式系统缺点

1.数据一致性问题

2.服务器通讯问题(网路问题)
rpc:

mq:

3.可能涉及到分布式锁,分布式事务等业务场景

分布式难点
1.数据一致性

分布式缓存

1.注意事项:
分布式下,若是想将对象进行共享,一致性有以下要求:序列化方式要保持一致,序列化id保持一致,实体名称保持一致(包括包名也要一致)。对于消费者和提供者能够多加一些属性也能够少一些属性,只是能不能匹配上的问题,但不建议缓存对象进行通讯,由于一旦提供者改变了实体字段等,消费者也要保持一致才能匹配上值。

跨域

什么是跨域

浏览器对于javascript的同源策略的限制,例如a.cn下面的js不能调用b.cn中的js,对象或数据(由于a.cn和b.cn是不一样域),因此跨域就出现了.

上面提到的,同域的概念又是什么呢??? 简单的解释就是相同域名,端口相同,协议相同。

如何跨域

1.jsonp跨域

凡是拥有scr这个属性的标签均可以跨域例如

jsonp:

jsonp 全称是JSON with Padding,是为了解决跨域请求资源而产生的解决方案,是一种依靠开发人员创造出的一种非官方跨域数据交互协议。

思考

如何设计一个良好的API

本身总结:

1.入参使用对象的形式接受参数,这样往里面加参数时,不会影响其余接口。对参数做校验,对应批量接口,要限制个数。

2.返回参数也使用对象形式,不是使用map,便于冗余数据

3.对应没法共用的接口,注释须要标明调用业务方,底层的能尽可能共用,上层能够渐渐分化。

4.返回状态码约定

5.身份认证避免非法链接

如何设计一个良好的消费API的消费端

本身总结:

1.异常捕获,并打印关键日志。不能由于调用异常,而中断整个服务

2.网路超时

3.条件容许加入熔断机制

搜索引擎Elasticsearch

Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个创建在全文搜索引擎 Apache Lucene™ 基础上的搜索引擎.固然 Elasticsearch 并不只仅是 Lucene 那么简单,它不只包括了全文搜索功能,还能够进行如下工做:

分布式实时文件存储,并将每个字段都编入索引,使其能够被搜索。
实时分析的分布式搜索引擎。
能够扩展到上百台服务器,处理PB级别的结构化或非结构化数据。

Elasticsearch与关系数据库结构对应

关系数据库 ⇒ 数据库 ⇒ 表 ⇒ 行 ⇒ 列(Columns)

Elasticsearch ⇒ 索引(Index) ⇒ 类型(type) ⇒ 文档(Docments) ⇒ 字段(Fields)

倒排索引

是根据文章内容中的关键字创建索引。而值对应于文档

Elasticsearch 也是 Master-slave 架构,也实现了数据的分片和备份。

Elasticsearch 一个典型应用就是 ELK 日志分析系统。

@see 终于有人把Elasticsearch原理讲透了!http://developer.51cto.com/art/201904/594615.htm

参考资料

1.什么是分布式系统,如何学习分布式系统:http://www.javashuo.com/article/p-rkctdabm-by.html

2.深刻浅出SOA http://www.javashuo.com/article/p-acmynuog-db.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