分散(布)式系統_Distributed System_概觀

 
摘自:Designing Data-Intensive Application(設計數據密集型應用)


大部分當代系統都是屬於資料密集型(data-intensive)的
而非計算密集型(compute-intensive)

因此CPU較少遇到這類應用瓶頸
反而更大問題在於資料量龐大,資料複雜性以及資料的變更與成長速度。



以上述這個圖片來講
一般一個客戶的請求過來可能一個api request

他會存取呼叫到我們應用程式的code
一般的我們都會有一個In-memory cache(內存中的緩存)然後
我可能會先從緩存里面去讀資料
如果緩存里沒有,就緩存miss的話,我們再從這個主要的database中去拿資料。


主要的database這裡
經常也會有這種Change data capture (CDC)(異動資料擷取)的一些機制(可能有些工具或不同的程式實作)換言之,假如DB發生了改變的話有可能有別的應用程序會監聽到這個改動監聽到這個改動了
以後同時有可能會對緩存進行寫入操作。

往往很多時候我們需要處理一些複雜的檢索(查詢)功能,是會用另外一種DB實現,也就是全文索引(Full-text index)的這類型DB。所以對於這種查詢的我們一般會另外放在這種全文搜索的資料庫當中。

另外一種我們經常用到的工具就是這個消息隊列(Message-Queue)
消息隊列也是在現代的人應用程序中也是非常常見的一些異步的任務我們都會放到消息隊列裡面去,然後有另外的應用程序或許從消息隊列消息然後進行下一步的處理。


如果是單機系統的那個年代或者這類小型架構可能很多問題是比較簡單的 
但是在分散式系統中增加了很多的覆雜度
需要考慮數據怎麽去複製分區、事務怎麽在分散式系統當中處理等等。







留言

這個網誌中的熱門文章

何謂淨重(Net Weight)、皮重(Tare Weight)與毛重(Gross Weight)

Architecture(架構) 和 Framework(框架) 有何不同?_軟體設計前的事前規劃的藍圖概念

經得起原始碼資安弱點掃描的程式設計習慣培養(五)_Missing HSTS Header