任务分解(微服务)mysql
简单的系统更容易高性能、更容易拓展nginx
本质是经过冗余实现高可用(多台、多机房、多通道), 可是冗余带来了更大的复杂性. 好比任务分配器(例nginx)链接检测、管理、维护、中断处理.sql
常见冗余形式 1主3备、4主0备、3主1备等数据库
思考: zookeeper属于1主多备, 而memcache集群属于全主0备, 根据具体业务场景进行选型.安全
分布式环境: 某个时间点, 数据确定不一致.markdown
常见公式: 数据+逻辑=业务网络
存储高可用的难点不在于如何备份数据, 而在于如何减小或规避数据不一致对业务形成的影响.架构
不可能同时知足 一致性、可用性和分区容错性. 最多同时知足两个.分布式
引入状态决策: 断定当前是否异常, 进行纠正.微服务
可是又引来更复杂问题: 状态决策的高可用也是没法知足的.
常见状态决策: 独裁式(单点)、协商式(主备) 和 民主式(选举)
每一个单体做出决策, 按多数取胜, 引入新问题(脑裂).
如何解决脑裂问题: 投票节点数必须超过总节点数的一半.
但又引入新问题: 若是超过一半节点故障, 而不是脑裂, 则致使选举直接失败, 系统宕机.
预测变化
应对变化(变化层防腐, 稳定层) 系统拆分变化层、稳定层
观察问题理解问题角度不一样 提炼抽象层、实现层, 举例: 规则引擎
低成本 低成本与高可用存在本质上的冲突. 引入新技术, 新思路节省资源.
安全 功能安全: XSS、CSRF、Sql注入 架构安全: DDOS(难以实现), 依靠运营商强大带宽、流量清洗
主从 -> 从提供读服务
主备 -> 备不提供服务
行式数据库和列式数据库对比:
mysql : 行式数据库, 查库已行为维度
hbase : 列式数据库
业务读取更近的多个列, 行式数据库占优. 若是只是统计某个字段, 不必取行后再找列, 而只须要查询一列就能够了. IO将大大减小. 别且列的存储类似度高, 压缩比 比行式更有优点.
上面咱们提到了CAP理论, 这里咱们详细说一下
分布式系统上理论是没有 CA 的, 缘由很简单, 当咱们牺牲P时, 一致性就没法保证, 若是保证一致性, 就须要禁止写入, 就没法保证可用, 因此当分区故障时, 一致性和可用性是没法同时保证的.
CP: 当优先保证一致性时, 牺牲可用性.
AP: 当优先保证可用性时, 各自维护数据返回, 无一致性.
CAP关注的是数据而不是系统
CAP 是理论忽略网络延迟的, 不然任务分区都不能保证一致性, 但并不意味着没法使用分布式, 分具体业务场景, 有些很是重要的信息没法忽略, 能够互相主备, 全部操做都发生在主数据库上
BASE是Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)三个短语的缩写。BASE理论是对CAP中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的总结, 是基于CAP定理逐步演化而来的。BASE理论的核心思想是:即便没法作到强一致性,但每一个应用均可以根据自身业务特色,采用适当的方式来使系统达到最终一致性。
基本可用, 软状态, 最终一致性.