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