分布式系列一: 概述
分布式系统的特点
- 高并发,大流量(qps,tps)
- 海量数据
什么是分布式
分布式系统是由很多计算机组成, 他们之间的通信通过网络连接完成, 对外表现为一个整体.
分布式技术上需要解决两个问题, 一个是业务拆解, 一个是节点通信.
分布式和集群的关系
分布式是指一个系统由多个业务模块组成,他们分别部署到不同服务器;
集群是指一个业务部署到多个服务器;
分布式发展历史
-
1964年IBM发布大型机之后, 引领系统向集中式方向发展;
-
PC机发展起来后, 它的性能和计算能力得到迅猛发展, 同时集中式发展出现瓶颈; 标志性的事件是淘宝的去IOE运动
IOE 是指IBM服务器, Oracle数据库集群, EMC存储
lamp: linux+apache+mysql+php
- 单服务器: 应用+DB
- 应用和DB分离
- 应用集群, DB (问题? session, 集群请求转发, 集群方案:f5硬件, lvs软件)
会话方案: 1.session sticky; 2. session replication; 3. 集中式session; 4. cookie
- DB集群, 读写分离 (问题? 同步,数据库路由(mycat))
- 搜索引擎 (问题? 实时或定时同步)
- Nosql缓存
- DB的水平/垂直拆分
- 业务服务拆分
- 各业务做集群
分布式系统的监控
调用跟踪和调用链, 服务器状态监控
zipkin, zabbix等
分布式环境特点
- 分布式部署,包括机房硬件也包括软件
- 并发性, 多个节点访问同一资源
- 无序性, 网络通信导致的信息传输顺序不一致
分布式环境导致的问题
- 网络通信问题(各种原因导致的网络连接失败)
- 三态问题 (成功,失败,超时)
- 脑裂, 网络分区问题: 网络问题导致集群会分为若干独立的集群
- 分布式事务
中心化和去中心化
- 冷备和热备 master选举, zookeeper/etcd
CAP/BASE
CAP
仅仅适用于原子读写的非数据库场景, 不适用数据库.
- C 一致性, 集群中所有节点的数据保持一致
- A 可用性, 每个请求都能接收到一个响应, 无论成功或失败
- P 分区容错, 脑裂, 分布式场景必然存在此问题
因为P在分布式下必然存在, 所以C和A不能同时存在, 只能满足CP/AP其中之一.
BASE
基于CAP理论, 主要解决分布式环境下数据库存在的问题. 虽然XA事务可以保证分布式下数据库的ACID特性, 但会损失性能. 基于此eBay提出了BASE(Basically Available, Soft-state,Eventually consistent)理论, BASE理论放宽了事务ACID要求.
BA: 数据库分片存储, 其中一片被破坏, 不影响其他片数据的使用,实际上是实现了部分可用性
S: C/S模式的系统中, Server端是否有状态决定了系统是否具备良好的水平扩展,负载均衡,故障恢复等特性.
Server端承诺会维护Client端状态数据, 这个状态仅仅维持一小段时间,过后Server端就丢弃这个状态,恢复正常.
E: 数据最终一致性