《从0开始学架构》读书笔记

高性能

任务分解(微服务)mysql

简单的系统更容易高性能、更容易拓展nginx

高可用

本质是经过冗余实现高可用(多台、多机房、多通道), 可是冗余带来了更大的复杂性. 好比任务分配器(例nginx)链接检测、管理、维护、中断处理.sql

常见冗余形式 1主3备、4主0备、3主1备等数据库

思考: zookeeper属于1主多备, 而memcache集群属于全主0备, 根据具体业务场景进行选型.安全

最大难点: 存储高可用(有状态)

分布式环境: 某个时间点, 数据确定不一致.markdown

常见公式: 数据+逻辑=业务网络

存储高可用的难点不在于如何备份数据, 而在于如何减小或规避数据不一致对业务形成的影响.架构

引伸 CAP 定理

不可能同时知足 一致性、可用性和分区容错性. 最多同时知足两个.分布式

引入状态决策: 断定当前是否异常, 进行纠正.微服务

可是又引来更复杂问题: 状态决策的高可用也是没法知足的.

常见状态决策: 独裁式(单点)、协商式(主备) 和 民主式(选举)

民主选举

每一个单体做出决策, 按多数取胜, 引入新问题(脑裂).

如何解决脑裂问题: 投票节点数必须超过总节点数的一半.

但又引入新问题: 若是超过一半节点故障, 而不是脑裂, 则致使选举直接失败, 系统宕机.

可拓展性

  1. 预测变化

  2. 应对变化(变化层防腐, 稳定层) 系统拆分变化层、稳定层

  3. 观察问题理解问题角度不一样 提炼抽象层、实现层, 举例: 规则引擎

  4. 低成本 低成本与高可用存在本质上的冲突. 引入新技术, 新思路节省资源.

  5. 安全 功能安全: XSS、CSRF、Sql注入 架构安全: DDOS(难以实现), 依靠运营商强大带宽、流量清洗

存储高性能

主从 -> 从提供读服务

主备 -> 备不提供服务

行式数据库和列式数据库对比:

  • mysql : 行式数据库, 查库已行为维度

  • hbase : 列式数据库

业务读取更近的多个列, 行式数据库占优. 若是只是统计某个字段, 不必取行后再找列, 而只须要查询一列就能够了. IO将大大减小. 别且列的存储类似度高, 压缩比 比行式更有优点.

关于CAP理论

上面咱们提到了CAP理论, 这里咱们详细说一下

分布式系统上理论是没有 CA 的, 缘由很简单, 当咱们牺牲P时, 一致性就没法保证, 若是保证一致性, 就须要禁止写入, 就没法保证可用, 因此当分区故障时, 一致性和可用性是没法同时保证的.

CP: 当优先保证一致性时, 牺牲可用性.

AP: 当优先保证可用性时, 各自维护数据返回, 无一致性.

CAP细节:

  • CAP关注的是数据而不是系统

  • CAP 是理论忽略网络延迟的, 不然任务分区都不能保证一致性, 但并不意味着没法使用分布式, 分具体业务场景, 有些很是重要的信息没法忽略, 能够互相主备, 全部操做都发生在主数据库上

BASE

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

基本可用, 软状态, 最终一致性.

相关文章
相关标签/搜索