最初的架構,應用程式、資料庫、檔案都部署在一台伺服器上,如圖:
隨著業務的擴充套件,一台伺服器已經不能滿足效能需求,故將應用程式、資料庫、檔案各自部署在獨立的伺服器上,並且根據伺服器的用途配置不同的硬體,達到最佳的效能效果。
在硬體優化效能的同時,同時也通過軟體進行效能優化,在大部分的**系統中,都會利用快取技術改善系統的效能,使用快取主要源於熱點資料的存在,大部分**訪問都遵循28原則(即80%的訪問請求,最終落在20%的資料上),所以我們可以對熱點資料進行快取,減少這些資料的訪問路徑,提高使用者體驗。
快取實現常見的方式是本地快取、分布式快取。當然還有cdn、反向**等,這個後面再講。本地快取,顧名思義是將資料快取在應用伺服器本地,可以存在記憶體中,也可以存在檔案,oscache就是常用的本地快取元件。本地快取的特點是速度快,但因為本地空間有限所以快取資料量也有限。分布式快取的特點是,可以快取海量的資料,並且擴充套件非常容易,在門戶類**中常常被使用,速度按理沒有本地快取快,常用的分布式快取是memcached、redis。
應用伺服器作為**的入口,會承擔大量的請求,我們往往通過應用伺服器集群來分擔請求數。應用伺服器前面部署負載均衡伺服器排程使用者請求,根據分發策略將請求分發到多個應用伺服器節點。
常用的負載均衡技術硬體的有f5,**比較貴,軟體的有lvs、nginx、haproxy。lvs是四層負載均衡,根據目標位址和埠選擇內部伺服器,nginx和haproxy是七層負載均衡,可以根據報文內容選擇內部伺服器,因此lvs分發路徑優於nginx和haproxy,效能要高些,而nginx和haproxy則更具配置性,如可以用來做動靜分離(根據請求報文特徵,選擇靜態資源伺服器還是應用伺服器)。
隨著使用者量的增加,資料庫成為最大的瓶頸,改善資料庫效能常用的手段是進行讀寫分離以及分庫分表,讀寫分離顧名思義就是將資料庫分為讀庫和寫庫,通過主備功能實現資料同步。分庫分表則分為水平切分和垂直切分,水平切分則是對乙個資料庫特大的表進行拆分,例如使用者表。垂直切分則是根據業務的不同來切分,如使用者業務、商品業務相關的表放在不同的資料庫中。
假如我們的伺服器都部署在成都的機房,對於四川的使用者來說訪問是較快的,而對於北京的使用者訪問是較慢的,這是由於四川和北京分別屬於電信和聯通的不同發達地區,北京使用者訪問需要通過互聯路由器經過較長的路徑才能訪問到成都的伺服器,返回路徑也一樣,所以資料傳輸時間比較長。對於這種情況,常常使用cdn解決,cdn將資料內容快取到運營商的機房,使用者訪問時先從最近的運營商獲取資料,這樣大大減少了網路訪問的路徑。比較專業的cdn運營商有藍汛、網宿。
而反向**,則是部署在**的機房,當使用者請求達到時首先訪問反向**伺服器,反向**伺服器將快取的資料返回給使用者,如果沒有快取資料才會繼續訪問應用伺服器獲取,這樣做減少了獲取資料的成本。反向**有squid,nginx。
使用者一天天增加,業務量越來越大,產生的檔案越來越多,單台的檔案伺服器已經不能滿足需求,這時就需要分布式檔案系統的支撐。常用的分布式檔案系統有gfs、hdfs、tfs。
對於海量資料的查詢和分析,我們使用nosql資料庫加上搜尋引擎可以達到更好的效能。並不是所有的資料都要放在關係型資料中。常用的nosql有mongodb、hbase、redis,搜尋引擎有lucene、solr、elasticsearch。
這時我們發現各個業務應用都會使用到一些基本的業務服務,例如使用者服務、訂單服務、支付服務、安全服務,這些服務是支撐各業務應用的基本要素。我們將這些服務抽取出來利用分部式服務框架搭建分布式服務。阿里的dubbo是乙個不錯的選擇。
系統的架構風格與藝術 探求系統的演化
首先 系統設計的整個流程。系統產生的原動力應該是需求,無論是來自於客戶還是創新。伴隨著討論和思考,需求將會變得逐漸清晰,最終會產生通過用例表述的清晰的應用場景。那麼下一步將需要思考如何將需求落實到系統,在系統中體現需求。這篇文章主要的著力點在於討論架構模式以及架構模式在現實系統中的運用。無論對於網際...
MIPS架構的傳奇演化
mips是高效率 低功耗cpu設計原則中的閃耀明星,已經在移動和嵌入式工業領域銷售了近三十年。本文將快速瀏覽mips架構的演化過程,描述它如何從史丹福大學計算科學實驗室的最早版本演變為當前的架構。一切源於二十世紀八十年代,當時包括john l.hennessy 在內的史丹福大學研究團隊決定建立cpu...
架構 設計 演化
設計是軟體之源,架構是軟體之本,本主題主要介紹如何進行現代複雜系統的架構設計和優化。軟體架構是用來描述軟體系統框架的語義,它包含了軟體系統主要的決策資訊,包括軟體元素的如何組織,如何實現預期的功能 效能 可靠性和質量等,還包括技術選型,整合性,擴充套件性,一致性等內容。隨著技術的發展,架構的含義變得...