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.切分