設(shè)計(jì)需要考慮的因素:
Availability: 平均無(wú)故障時(shí)間
Performance:響應(yīng)時(shí)間
Reliability: 數(shù)據(jù)可靠
Scalability:可擴(kuò)展
Manageability:可維護(hù)
Cost:盡量降低費(fèi)用
如何設(shè)計(jì)
Services
將不同功能解耦到不同的service中。

Redundancy
同一服務(wù)要有多個(gè)實(shí)例,一來(lái)可以解決單點(diǎn)失敗問(wèn)題,二是可以平衡負(fù)載。
數(shù)據(jù)存儲(chǔ)也要有Copy來(lái)防止數(shù)據(jù)丟失。

Partitions
數(shù)據(jù)量太多,則需要進(jìn)行分片,或者分擔(dān)負(fù)載。

訪問(wèn)數(shù)據(jù)如何Scale

隨著訪問(wèn)量增大,app server要盡量使用shared-nothing architecture來(lái)進(jìn)行minimized,訪問(wèn)壓力都會(huì)落到database server。
如何保證database server的scalability和快速訪問(wèn)呢
Caches

Cache有兩種方式:
- Global Cache:
Cache是獨(dú)立的一個(gè)服務(wù)器

- Distributed Cache:
每一個(gè)Request Node有自己的Cache,同一請(qǐng)求通過(guò)hash分配到不同Request Node上

Proxies:
在Database server前架設(shè)一個(gè)代理
通過(guò)代理可以將同一內(nèi)容的請(qǐng)求包裝到對(duì)database的一次請(qǐng)求里

也可以將數(shù)據(jù)相近的請(qǐng)求包裝到同一請(qǐng)求里(局部性原理)。

Indexes
Index 可以加速數(shù)據(jù)查詢,可以采取多級(jí)Index,可以減少index占用的空間

Load Balancers
Queues
使用Queue可以解決client寫(xiě)數(shù)據(jù)等待時(shí)間過(guò)長(zhǎng)的問(wèn)題
