【geekband】系统设计第二周

CAP理论Cibsustebct、availability、partition tolerance

一致性:对数据有同样的view
可用性:所有客户端都可以读写
分区可容忍性:在物理网络分区下很好的工作
CAP只能三取二
强一致性:一台机器只能被一台服务器服务,实现的代价也高

数据库系统

早期:ACID propeties
A-aomic原子性 对数据的修改:要么全部执行,要么全部不执行
C-consistent
I-isolated 隔离性 一个任务执行完成之前是不可见的,也就是说对于其他任务,其中间状态是不可见的
D-durable 持久性

ACID VS BASE

basically available, soft state, eventually consistent

数据库拆分

  • horizontal scaling(sharding)
  • functional scaling(scale out)
    单一->master/slave->垂直分区->sharding

stateless

一个系统伸缩性的好坏取决于对状态的管理(的好坏)
session VS Cookie

异步通信

rpc-远程架构框架
就是一个分包和解包的过程
最大化将子系统分割与解耦
好处--提高可用性

有效利用Cache

一致性与复制性:

一致性介绍

强一致性 某一个数据被更新之后,后续的任何操作所达到的结果都应该是更新之后的数据(传统关系型数据库所提供的保障)
弱一致性 与强一致性相对
最终一致性 弱一致性的一种

一致性哈希

分布式哈希table-扩展性和容错性不好
平衡性,单调性 ,分散性,负载

一致性哈希算法:

通过32位环确定节点,变动只会影响局部

虚拟节点:解决数据倾斜问题
计算多个哈希,在多个位置放置虚拟节点,在虚拟节点上设置映射关系

案例:cassandra,
amazon's dynamo
hbase
mongoDB

NoSQL数据库

对数据库进行水平的切分
简单的queriy方式:gets() 和 sets()
通过key/value pairs获取
不支持joins(因为做了水平切分)
十亿以上记录都很高效

thrift--facebook开发,protocol buffers--google开发

scalability原则

1.cashe--遇到性能问题的时候
2.queue
3.异步
4.负载均衡
5.并发
6.replication赋值
7.切分

你可能感兴趣的:(【geekband】系统设计第二周)