-
1 # 此生唯一
-
2 # 會點程式碼的大叔
大型網站遇到的挑戰,主要是大量的使用者,高併發的訪問,就算一個簡單的增刪查改的功能,如果面對的是百萬、千萬甚至億級的使用者,都是一件難度很大的事情。
資料從資料庫到瀏覽器的過程:資料庫->應用資料集->記憶體物件->動態頁面->HTTP伺服器->使用者瀏覽器。那麼我們可以把高併發的設計分成幾個層次:
前端前端是指,使用者的請求還沒有到服務前的環節。
瀏覽器快取
動靜分離:靜態內容部署在單獨的伺服器上;
圖片伺服器分離:圖片儲存在單獨的圖片伺服器上;
CDN:更智慧的映象+快取+流量導流。
應用層/服務層負載均衡:後臺應用部署多套,前面掛負載均衡,客戶端都直接訪問負載均衡,由它把訪問分攤到實際應用伺服器上;
Session管理:需要有專門的機制去管理Session,使叢集內甚至跨叢集的應用伺服器可以共享;
HTML靜態化:把連線後臺資料庫查詢資料的工作提前做好,生成靜態化的頁面,那麼訪問的效率一定會提高很多;
業務拆分:把一個打的業務系統,拆成多個小的業務系統;
虛擬化:將一臺物理機虛擬化成多臺虛擬機器,這樣可以更高的支撐叢集部署。
訊息中介軟體:使用訊息中介軟體,比如各種MQ,業務系統之間使用非同步訊息傳送以達到解耦的效果。
各種快取:一些語言框架本身就帶快取機制,也可以使用Memcached或Redis。
儲存層資料庫讀寫分離
分庫分表:一臺資料庫很難滿足業務上的壓力,那麼資料庫可以做分庫分表。
分散式檔案系統
非關係型資料庫
其他必備的日誌採集系統
服務介面監控系統
使用者行為採集系統
伺服器效能監控系統
系統架構大了,部署的伺服器多了,很多事情不可能透過人工完成了,比如一個介面呼叫發生了錯誤,不可能人工登入到伺服器上去查日誌吧,所以這些東西也是必不可少的。
都是說個大概,後面有機會的話,會把每一項都展開詳細說明。
-
3 # 人人都是架構師
我們在做大型網站基礎架構的時候一般來說軟體架構需要關注效能、可用性、伸縮性、擴充套件性和安全性這5個架構要素。
我們透過這些架構要素來衡量我們整體系統架構設計的優劣,來判斷是否達到了我們的要求。
高效能效能是大型網站架構設計的一個重要方面,任何軟體架構設計方案都必須考慮可能帶來的效能問題,也正因為效能問題幾乎無處不在,在請求鏈路的任何一個環節,都是我們去做極致效能最佳化方案中的切入點。
可用性衡量一個系統架構設計是否滿足高可用的目標,就是假設系統中任何一臺或者多臺伺服器宕機時,以及出現各種不可預期的問題時,系統整體是否依然可用。
伸縮性網站的伸縮性是指不需要改變伺服器的硬體設計,僅僅靠改變應用伺服器的部署數量,就可以擴大或縮小伺服器的處理能力。
擴充套件性不同於其他架構要素主要關注非功能性需求,網站的擴充套件性架構直接關注網站的功能需求。
網站快速發展,功能不斷擴充套件,如何設計網站的架構使其能夠快速響應需求變化,是網站可擴充套件架構的主要目標。
安全性網際網路跟傳統軟體不同,它是開放的,任何人在任何地方都可以訪問網站。網站的安全架構就是保護網站不受惡意訪問和攻擊,保護網站的重要資料不被竊取。
安全性架構,具體來說說就是保證資料的保密性、完整性、真實性、佔有性。
這期專欄是筆者總結了當下這些網際網路行業中相對成熟且經過大型網站檢驗的技術和方案,內容涵蓋構建大型網際網路系統服務所需的關鍵技術。
回覆列表
技術這玩意兒,你不深入使用它,你就不知道它有多牛,更不知道會有多難!
併發:指定時間段內的請求數!
高併發:指定時間段內的超多請求數!
比如tomcat,單機最大支援併發數為8000左右,redis理論值可達到幾萬!
那麼怎麼設計一套可支援高併發的系統呢?使用技術如下:
1,分散式系統,微服務:使用springcloud家族包括eureka,zuul,feign,hysrix等或者dubbo搭建一套微服務框架!
2,前後端分離:使用node.js搭建前端服務系統!
3,靜態化處理:將頁面,後臺列舉,資料庫定義表等使用靜態處理方式做處理!
4,檔案伺服器剝離:採用單獨的檔案伺服器,防止頁面載入的阻塞!
5,快取:使用redis,memcache等將執行時資料快取,代替頻繁的操作資料庫!
6,資料庫:讀寫分離或者分庫分表,採用druid等有效能監控系統的資料庫連線框架!
7,訊息中介軟體:使用xxxmq,kafka等訊息中介軟體,解耦服務,而且非同步處理效率更高!
8,反向代理:使用nginx等負載均衡服務!
9,程式碼層:避免大量建立物件,避免阻塞IO,避免多層for迴圈,避免執行緒死鎖,避免大量同步!
10,各種最佳化:包括jvm最佳化,表結構最佳化,sql最佳化,關鍵欄位加索引(注意避免索引失效),連線池最佳化等等!
11,搜尋引擎:sql有大量的like語句,有必要切換成solr等搜尋引擎!
12,cdn:使用CDN技術將請求分發到最合適的主機上,避免網路傳輸的延遲!
13,使用batch:增刪改能一次做的別分為兩次,但要注意batch合理設計,防止資料丟失!
14,限流,削峰!
更多解決方案和每個方案細節實施涉及到的具體問題,以後會逐一分享!敬請關注!