高併發網站之解決策略
系統在正式上線後必將會面對大量使用者訪問,面對各種層級的高併發請求,因此我們會採用高效能的伺服器、高效能的資料庫、高效率的程式語言、高效能的Web容器等。但是這幾個方面,還無法從根本解決大型網站面臨的高負載和高併發問題。因此我們必須對此做出相應的策略和技術解決方案。
1. 負載均衡
負載均衡將是大型網站解決高負荷訪問和大量併發請求採用的終極解決辦法。
(1)單個重負載的運算分擔到多臺節點裝置上做並行處理,每個節點裝置處理結束後,將結果彙總,返回給使用者,系統處理能力得到大幅度提高.
(2)大量的併發訪問或資料流量分擔到多臺節點裝置上分別處理,減少使用者等待響應的時間,這主要針對Web伺服器、FTP伺服器、企業關鍵應用伺服器等網路應用。
2. 資料庫叢集
就是利用至少兩臺或者多臺資料庫伺服器,構成一個虛擬單一資料庫邏輯映像,像單資料庫系統那樣,向客戶端提供透明的資料服務。
3. 庫表雜湊
採用Hash演算法把資料分散到各個分表中, 這樣IO更加均衡。
上面提到的資料庫叢集由於在架構、成本、擴張性方面都會受到所採用DB型別的限制,於是我們需要從應用程式的角度來考慮改善系統架構,庫表雜湊是常用並且最有效的解決方案。我們在應用程式中安裝業務和應用或者功能模組將資料庫進行分離,不同的模組對應不同的資料庫或者表,再按照一定的策略對某個頁面或者功能進行更小的資料庫雜湊,比如使用者表,按照使用者ID進行表雜湊,這樣就能夠低成本的提升系統的效能並且有很好的擴充套件性。sohu的論壇就是採用了這樣的架構,將論壇的使用者、設定、帖子等資訊進行資料庫分離,然後對帖子、使用者按照板塊和ID進行雜湊資料庫和表,最終可以在配置檔案中進行簡單的配置便能讓系統隨時增加一臺低成本的資料庫進來補充系統性能。
4. 圖片伺服器分離
大家知道,對於Web伺服器來說,不管是Apache、IIS還是其他容器,圖片是最消耗資源的,於是我們有必要將圖片與頁面進行分離,這是基本上大型網站都會採用的策略,他們都有獨立的圖片伺服器,甚至很多臺圖片伺服器。這樣的架構可以降低提供頁面訪問請求的伺服器系統壓力,並且可以保證系統不會因為圖片問題而崩潰,在應用伺服器和圖片伺服器上,可以進行不同的配置優化,比如apache在配置ContentType的時候可以儘量少支援,儘可能少的LoadModule,保證更高的系統消耗和執行效率。
5. 映象
映象是大型網站常採用的提高效能和資料安全性的方式,映象的技術可以解決不同網路接入商和地域帶來的使用者訪問速度差異,比如ChinaNet和EduNet之間的差異就促使了很多網站在教育網內搭建映象站點,資料進行定時更新或者實時更新。
自動把整個資料庫或其中的關鍵資料複製到另一個磁碟上,每當主資料庫更新時,DBMS會自動把更新後的資料複製過去,即DBMS自動保證映象資料與主資料的一致性。
出現介質故障時,可由映象磁碟繼續提供資料庫的可用性,同時DBMS自動利用映象磁碟進行資料庫的修復,不需要關閉系統和重灌資料庫副本。
資料庫映象還可以用於併發操作。即當一個使用者對資料庫加排他鎖修改資料時,其他使用者可以讀映象資料庫,而不必等待該使用者釋放鎖。
資料庫映象是通過複製資料實現的,頻繁地複製自然會降低系統執行效率,因此在實際應用中使用者往往只選擇對關鍵資料映象,如對日誌檔案映象,而不是對整個資料庫進行映象。
6. 快取
Apache提供了自己的快取模組,也可以使用外加的Squid模組進行快取,這兩種方式均可以有效的提高Apache的訪問響應能力。在使用web語言開發的時候,各種語言基本都有自己的快取模組和方法。
7. HTML靜態化
靜態化的html頁面效率最高、消耗最小,所以我們可以儘可能使我們的網站上的頁面採用靜態頁面。但是對於大量內容並且頻繁更新的網站,我們無法全部手動去挨個實現,於是出現了我們常見的資訊釋出系統CMS,像我們常訪問的各個門戶站點的新聞頻道,甚至他們的其他頻道,都是通過資訊釋出系統來管理和實現的,資訊釋出系統可以實現最簡單的資訊錄入自動生成靜態頁面,還能具備頻道管理、許可權管理、自動抓取等功能。
除了門戶和資訊釋出型別的網站,對於互動性要求很高的社群型別網站來說,儘可能的靜態化也是提高效能的必要手段,將社群內的帖子、文章進行實時的靜態化,有更新的時候再重新靜態化也是大量使用的策略,像Mop的大雜燴就是使用了這樣的策略,網易社群等也是如此。
同時,html靜態化也是某些快取策略使用的手段,對於系統中頻繁使用資料庫查詢但是內容更新很小的應用,可以考慮使用html靜態化來實現,比如論壇中論壇的公用設定資訊,這些資訊目前的主流論壇都可以進行後臺管理並且儲存再資料庫中,這些資訊其實大量被前臺程式呼叫,但是更新頻率很小,可以考慮將這部分內容進行後臺更新的時候進行靜態化,這樣避免了大量的資料庫訪問請求。
8. CDN加速技術
CDN的全稱是內容分發網路。其是通過在現有的Internet中增加一層新的網路架構,將網站的內容釋出到最接近使用者的網路“邊緣”,使使用者可以就近取得所需的內容,提高使用者訪問網站的響應速度。
CDN網路是在使用者和伺服器之間增加Cache層,主要是通過接管DNS實現,將使用者的請求引導到Cache上獲得源伺服器的資料。快取伺服器從實際IP地址得得到內容以後,一方面在本地進行儲存,以備以後使用,另一方面把獲取的資料返回給客戶端,完成資料服務過程。
本文出自 “java我的最愛” 部落格,請務必保留此出處http://lindianli.blog.51cto.com/7129432/1549044
相關推薦
高併發網站之解決策略
系統在正式上線後必將會面對大量使用者訪問,面對各種層級的高併發請求,因此我們會採用高效能的伺服器、高效能的資料庫、高效率的程式語言、高效能的Web容器等。但是這幾個方面,還無法從根本解決大型網站面臨的高負載和高併發問題。因此我們必須對此做出相應的策略和技術解決方案。 1. 負載均衡
電商專案解決高併發的問題的策略淺談
前言: 本文乃是文章作者在實際電商專案開發參與過程中關於本專案中解決高併發方案的一些思路總結,由於本人水平有限,不足之處,望請留言指正! 在專案中解決高併發並非解決其中的某一個環節或點
高併發分散式事務解決之道-Actor模型(附Akka與Reactor比較)
----- Actor模型 (1) 事務機制來由 為什麼大多數網際網路軟體都是資料喂機器,或函式式即可,比如twitter或facebook,因為他們沒有事務要求,一般涉及到錢等重要交易都需要事務,也可以這麼說,非結構化的資料一般都沒有事務要求,結構化聚合的資料才有事務要求
研究 大流量、高併發網站的驗證碼解決方案
最近不知道怎麼的,總是喜歡研究一些大型站點的一些功能的實現,這兩天看了下幾個大型站的驗證碼的實現,覺得有點意思。 於是在.Net下也實現了一套類似的機制。我們先來看看這幾個站的驗證碼功能的外在表現: 看QQ的,網站上有驗證的地方都可以看的到,我這裡提供個地址:http://pay.qq.com/login.s
聊聊高併發系統之降級特技(轉)
在開發高併發系統時有三把利器用來保護系統:快取、降級和限流。之前已經有一些文章介紹過快取和限流了。本文將詳細聊聊降級。當訪問量劇增、服務出現問題(如響應時間慢或不響應)或非核心服務影響到核心流程的效能時,仍然需要保證服務還是可用的,即使是有損服務。系統可以根據一些關鍵資料進行自動降級,也
聊聊高併發系統之限流特技(二)(轉)
上一篇《聊聊高併發系統限流特技-1》講了限流演算法、應用級限流、分散式限流;本篇將介紹接入層限流實現。 接入層限流 接入層通常指請求流量的入口,該層的主要目的有:負載均衡、非法請求過濾、請求聚合、快取、降級、限流、 A/B 測試、服務質量監控
使用docker搭建高併發網站架構實踐6--Keepalived+Nginx實現熱備份
Keepalived+Nginx實現熱備份 思路說明: 1. 利用linux映象容器,在其中安裝keepalived和nginx, 製作新映象支援熱備份,這樣便於直接使用,但在linux映象中安裝keepalived無法實現虛擬IP,也可能是網絡卡等設定不對。 2. 在linux主機內,
使用docker搭建高併發網站架構實踐0--總述
終於有時間可以分享自己之前的學習成果了,之前有幸參與了web網站的專案部署和搭建,特記錄如下。 整體網站架構如下所示: 一、具體架構如下: 二、搭建步驟
使用docker搭建高併發網站架構實踐1--Docker簡介以及私有倉庫搭建
1.Docker簡介 Docker是一種作業系統容器虛擬化技術,可以理解為在作業系統的級別上虛擬出更多的虛擬主機來打包以及部署應用等。具體Docker的實現與LXC支援有很大關係,主要技術有名稱空間,控制組以及檔案聯合系統等。主要架構如下所示: &n
阿里P9架構師談:高併發網站的監控系統選型、比較、核心監控指標
在高併發分散式環境下,對於訪問量大的業務、介面等,需要及時的監控網站的健康程度,防止網站出現訪問緩慢,甚至在特殊情況出現應用伺服器雪崩等場景,在高併發場景下網站無法正常訪問的情況,這些就會涉及到分散式監控系統,對於核心指標提前監控,防患於未然。 常見的開源監控系統 1.Zabbix Zabbix是一個基
Java高併發程式設計之synchronized關鍵字(二)
上一篇文章講了synchronized的部分關鍵要點,詳見:Java高併發程式設計之synchronized關鍵字(一) 本篇文章接著講synchronized的其他關鍵點。 在使用synchronized關鍵字的時候,不要以字串常量作為鎖定物件。看下面的例子: public class
Java高併發程式設計之synchronized關鍵字(一)
首先看一段簡單的程式碼: public class T001 { private int count = 0; private Object o = new Object(); public void m() { //任何執行緒要執行下面這段程式碼
Java高併發,如何解決,什麼方式解決
對於我們開發的網站,如果網站的訪問量非常大的話,那麼我們就需要考慮相關的併發訪問問題了。而併發問題是絕大部分的程式設計師頭疼的問題,但話又說回來了,既然逃避不掉,那我們就坦然面對吧~今天就讓我們一起來研究一下常見的併發和同步吧。為了更好的理解併發和同步,我們需要先明白兩個重要
高併發指標及其解決辦法
1、什麼是高併發高併發是網際網路分散式系統架構設計中必須考慮的因素之一,就是通過設計保證系統可以並行處理很多請求。 2、高併發衡量指標響應時間:系統對請求做出響應的時間,即一個http請求返回所用的時
java處理高併發問題的解決發案
隨著網際網路業務的不斷豐富,網站相關的技術經過這些年的發展,已經細分到很細的方方面面,尤其對於大型網站來說,所採用的技術更是涉及面非常廣,從硬體到軟體、程式語言、資料庫、WebServer、防火牆等各個領域都有了很高的要求,已經不是原來簡單的html靜態網站所能比
您的快遞(高併發伺服器之poll和epoll)請簽收
前言 之前已經介紹過select函式,請參考這篇部落格:https://www.cnblogs.com/liudw-0215/p/9661583.html,原理都是類似的,有時間先閱讀下那篇部落格,以便於理解這篇部落格。 一、poll函式 1、函式說明 原型:int poll(st
實戰java高併發程式設計之CountDownLatch原始碼分析
首先看第一個! CountDownLatch 使用場景 CountDownLatch類是常見的併發同步控制類,適用於某一執行緒的執行在其他多個執行緒執行完成之後,比如火箭發射前需要各項指標檢查,只有當各項指標檢查完才能發射,再比如解析多個excel文件,只有當
使用docker搭建高併發網站架構實踐5--Docker實現Nginx+tomcat動靜分離
Docker+Nginx+Tomcat實現動靜分離 整體結構示意圖: 如上所示:docker啟動5個容器,dynamic-nginx動態nginx伺服器和static-nginx1, static_nginx2兩個靜態nginx伺服器,tomcat1和tomcat2伺
使用docker搭建高併發網站架構實踐9--Tomcat證書部署及域名繫結
1 獲取證書 如果申請證書時有填寫私鑰密碼,下載可獲得Tomcat資料夾,其中有金鑰庫 www.domain.com.jks; 如果沒有填寫私鑰密碼,不提供Tomcat證書檔案的下載,需要使用者手動轉換格式生成。 可以通過 Nginx 資料夾內證書檔案和私鑰檔案生成jk
高併發程式設計之高併發場景:秒殺(無鎖、排他鎖、樂觀鎖、redis快取的逐步演變)
環境: jdk1.8;spring boot2.0.2;Maven3.3 摘要說明: 在實際開發過程中往往會出現許多高併發場場景,秒殺,強紅包,搶優惠卷等; 其中: 秒殺場景的特點就是單位時間湧入使用者量極大,商品數少,且要保證不可超量銷售; 秒殺產品的本質就是減