1、分布式技术概念mysql
1.负载均衡:nginx
Nginx:高性能、高并发的web服务器;功能包括负载均衡、反向代理、静态内容缓存、访问控制;工做在应用层
LVS: Linux virtual server,基于集群技术和Linux操做系统实现一个高性能、高可用的服务器;工做在网络层web
2.webserver:redis
Java:Tomcat,Apache,Jboss
Python:gunicorn、uwsgi、twisted、webpy、tornadospring
3.service:
SOA、微服务、spring boot,djangosql
4.容器:docker
docker,kubernetes数据库
5.cache:django
memcache、redis等缓存
6.协调中心:
zookeeper、etcd等
zookeeper使用了Paxos协议Paxos是强一致性,高可用的去中心化分布式。zookeeper的使用场景很是普遍,以后细讲。
7.rpc框架:
grpc、dubbo、brpc
dubbo是阿里开源的Java语言开发的高性能RPC框架,在阿里系的诸多架构中,都使用了dubbo + spring boot
8.消息队列:
kafka、rabbitMQ、rocketMQ、QSP
消息队列的应用场景:异步处理、应用解耦、流量削锋和消息通信
9.实时数据平台:
storm、akka
10.离线数据平台:
hadoop、spark
PS: apark、akka、kafka都是scala语言写的,看到这个语言仍是很牛逼的
11.dbproxy:
cobar也是阿里开源的,在阿里系中使用也很是普遍,是关系型数据库的sharding + replica 代理
12.db:
mysql、oracle、MongoDB、HBase
13.搜索:
elasticsearch、solr
14.日志:
rsyslog、elk、flume
2、分布式常见问题
1.分布式事务
1.1 分布式事务基础
事务的 特性:ACID:原子性、一致性、隔离性、持久性。
1)CAP定理
C:一致性
A:可用性
P:分区容错性,容忍网络中断。
2)BASE理论 解决了CAP中没有网络延迟,用软状态和最终一致性,保证了延迟后的一致性。
BA:基本可用
S:软状态
E:最终一致性
1.2 分布式事务解决方案
DTP事务模型
DTP角色:
AP:节点
RM:资源管理器。数据库
TM:事务管理器
1. 2PC方案:基于XA协议的两阶段提交方案
1)提交请求阶段
2)提交执行阶段
存在问题:
2. 3PC:经过超时机制解决阻塞的问题。
1)询问阶段
2)准备阶段
3)提交阶段
存在问题:3PC的出现就是经过增长复杂度(性能也所以下降)来解决或优化2PC中的一部分问题。
3. TCC方案 Try:尝试执行业务,Confirm:确认执行业务,Cancel:取消执行业务。事务补偿。
第一阶段:主业务服务分别调用全部从业务服务的 try 操做,并在活动管理器中记录全部从业务服务。当全部从业务服务 try 成功或者某个从业务服务 try 失败时,进入第二阶段。
第二阶段:活动管理器根据第一阶段从业务服务的 try 结果来执行 confirm 或 cancel 操做。若是第一阶段全部从业务服务都 try 成功,则协做者调用全部从业务服务的 confirm 操 做,不然,调用全部从业务服务的 cancel 操做。
在第二阶段中,confirm 和 cancel 一样存在失败状况,因此须要对这两种状况作 异常处理 以保证数据一致性。
Confirm 失败:则回滚全部 confirm 操做并执行 cancel 操做。
Cancel 失败:从业务服务须要提供自动 cancel 机制,以保证 cancel 成功。
优势:TCC是对二阶段的一个改进,try阶段经过预留资源的方式避免了同步阻塞资源的状况。
缺点: 缺点仍是比较明显的,业务侵入性太强,须要大量开发工做进行业务改造,给业务升级、运维都带来困难;在一些场景中,一些业务流程可能用TCC不太好定义及处理。
4. 基于消息的最终一致性方案
2.接口幂等性
1)对于每一个请求必须有一个惟一的标识。
2)每次处理完请求以后,必须有一个记录标识这个请求处理过了。
3)每次接收请求须要进行判断以前是否处理过的逻辑处理。
例:用redis用orderId做为惟一键。
3.分布式锁
1)数据库:实现排他锁
2)redis分布式锁,redisson
3)zk分布式锁,curator
性能:redis > zk > 数据库
可靠性: zk > redis > 数据库。
4.分布式session
4.1
1)tomcat + redis
2)spring session + redis
4.2解决session一致性方案
1)session粘滞:配置简单,单点故障问题。
基于nginx的ip_hash策略来作负载均衡。原理:根据ip作hash计算,同一个ip的请求始终会定位到同一台tomcat。
2)session复制:不会丢失session,内存消耗大。
服务器session复制。原理:tomcat服务器建立session后,会经过组播方式把session发送到组播地址中的其余服务器上。
3)session共享(redis):不会丢失session,适合大集群,系列化和反系列化消耗CPU性能。
5.分布式雪崩
1)熔断
2)隔离
3)限流