大型站點高併發架構技術

来源:https://www.cnblogs.com/myphper/archive/2018/02/28/8482947.html
-Advertisement-
Play Games

大型站點高併發架構技術 高併發: 高併發主要是由於網站PV訪問量大,單台伺服器涌承載大量訪問所帶來的壓力,所以會採用多台伺服器進行分流,採用伺服器集群技術,對於每個訪問會被髮送到哪台伺服器,我們採取負載均衡策略,常見的技術有LVS,由於網站中有大量的靜態頁面,所以採用緩存伺服器和反向代理技術,包括H ...


大型站點高併發架構技術

高併發:

高併發主要是由於網站PV訪問量大,單台伺服器涌承載大量訪問所帶來的壓力,所以會採用多台伺服器進行分流,採用伺服器集群技術,對於每個訪問會被髮送到哪台伺服器,我們採取負載均衡策略,常見的技術有LVS,由於網站中有大量的靜態頁面,所以採用緩存伺服器和反向代理技術,包括HAPROXY,REDIS,資料庫可以採用資料庫集群,進行讀寫分離,緩解資料庫壓力。

大型站點高併發架構就是利用負載均衡技術、反向代理技術、資料庫集群、web伺服器集群、Nosql技術等,以實現單台數據器不能達到的併發量,換句話說就是用一群屌絲代替一個高富帥。

1.大型站點高併發架構是為瞭解決百萬千萬級PV帶來的性能瓶頸。
2.出現高併發架構的原因是大型網站發現在巨量pv下買更多更好的伺服器已經無法簡單的解決問題,只能從架構  上想辦法來,充分發揮設備的效能。
3. 高可用解決方案(corosync,pacemaker,KeepAlived)負載均衡(LVS)緩存服務(Varnish)反向代理(haproxy)web伺服器(Apache,Nginx,Tomcat)站點架構(Lamp,Lnmp)

什麼是大型站點

大型站點高併發架構。首先,什麼是大型站點,大型站點至少有兩個特點(1)訪問量大,淘寶的每日PV有幾十億(2)後臺伺服器多,淘寶後臺伺服器據說有十多萬台。然後,大型網站的高併發架構,我的理解就是為了支持這麼大的併發訪問量,讓眾多的伺服器硬體、操作系統、應用軟體協同工作的技術架構。
高併發架構出現的主要原因,是網站併發訪問量,遠遠超過了單台PC伺服器、單台小型機的處理能力。為了讓多個同時到達的用戶請求都能得到快速響應,同時降低成本,目前是用多台相對廉價的伺服器組成大規模集群,這就需要高併發架構來支持。
高併發架構主要用到負載均衡、反向代理、分散式緩存等技術,有大量的開源產品可供使用。包括LVS、varnish、haproxy等。

大型站點高併發架構就是利用負載均衡技術、反向代理技術、資料庫集群、web伺服器集群、Nosql技術等

高併發架構通過使用負載均衡,緩存之類的技術,實現active-active, 或者active-standby的架構。

實現大型web站點高併發: web層可以使用LVS實現負載均衡;資料庫層可以使用mysql讀寫分離,redis;另外可以使用CDN網站加速

 

技術可以通過負載均衡技術LVS,haproxy,web集群技術如nginx 反向代理tomcat集群或者apache集群,緩存技術如Varnish,memache,redis,mongodb,資料庫集群如mysql的AB複製,通過開源的mysql中間件如Atlas,cobar,TDDL實現資料庫的讀寫分離等等。

 

1:從用戶瀏覽器端可能就已經使用了瀏覽器的緩存功能,設置了cache-expired的時間,讓重覆訪問的內容儘快的被訪問到。
2,在用戶發起請求後,經過DNS的分發的時候,可能使用了DNS的負載均衡或者DNS的策略分發。
3,請求經過分發後,首先會達到CDN。
4,CDN如果有就返回給用戶,如果沒有,則請求源站點。
5,源站點可能用到的技術有LVS, HAPROX,NGINX,VARNISH,TOMCAT等,緩存層可能會用到memcached,redis,mongodb,資料庫層面可能會用到主從 ,主主,MHA等,或者讀寫分離等。

 

另外,我想請問老師,如果老闆問你,我想抗住併發100W用戶的訪問。需要多少硬體資源。
評估的來源是不是:
首先得測試下:單台伺服器可以抗住多少應用。然後單台的TPS*N=100W
那用什麼工具來測試呢?loadrun還是Jmeter.測試伺服器本身也達不到100W的TCP連接數吧。

 

大型站點高併發網站架構的模型和OSI七層模型是一樣的,都是分層的架構。
而這種高併發的站點架構都是隨著公司的業務規模不斷增長,對我們的技術人員提出了更為高標準的要求;在某個程度上來說。可以說是公司業務規模的發展早就了這種大型站點的架構。比如淘寶,騰訊等等。
        現在來說淘寶的單天的日誌數據量已經達到TB級別,甚至是更多了;更不要說是獨立的ip,pv以及DB數據量了哦。
        網站架構也由最初的LAMP。也就是nginx作為流量的入口,交給後面的php和MySQL交互處理網站事務;後來隨著業務的增長,首先是從前端的流量入口開始拆分,可能是使用了lvs做四層的流量轉發,到後端的web入口,此時web前端還有可能增加了類似varnish之類的web緩存,然後到資料庫的緩存等等;甚至是TFS這種分散式的文件系統等等。可以說是在每個可以拆分的點上面又按照業務甚至頁面進行了獨立的拆分。
        這就是典型的大型網站架構的水平拆分,由單台---多台----單一的文件系統和資料庫,一步一步演變為每個業務都是有上千台的獨立伺服器做支撐。
        
        上面說到負載均衡器作為整個流量的入口,那麼,如果此時的負載均衡器壞掉了怎麼辦呢?這時,高可用的概念就出來了。高可用一般是master|slave的架構,作為流量的入口對他們進行檢測,以lvs或者nginx為例,這些都是可以作為負載均衡或者反向代理的軟體,那麼如果其中一臺掛了怎麼辦呢?此時整個用戶的訪問就會中斷了,也就是拒絕服務了;那麼此時如果有類似keepalived之類的高可用軟體就可以很好的解決整個問題。當keepavived檢測到對方的keepalived掛了之後,就直接接管了,從而不間斷對用戶的服務。
         所謂的大型架構無非就是:負載均衡+高可用+緩存(DB 緩存以及WEB緩存),當然了還有隊列,以及NoSQL ,分散式文件系統等等都會有所涉及。

 

能夠承受大併發用戶訪問的架構;隨著用戶數的增多,對原先的LAMP架構逐步調整,比如將apache換成能夠承受更高併發的nginx;並且增加一層webcache,比如squid等;於此同時,增加資料庫的cache,如memcache,redis等;並且對資料庫進行優化,對資料庫進行水平分割或者換成nosql的資料庫來提高併發性能.

技術包括負載均衡、緩存、鏡像、圖片伺服器分離、資料庫集群和庫表散列等。

負載均衡LVS、緩存服務Varnish、反向代理HAproxy等技術來分流,保證網站的正常運行,以實現大型網站的高併發架構。此外,還會通過Corosync+Pacemaker、Keepalived等高可用技術來保證大型網站的運行。

對於負載均衡,有硬體的負載均衡和軟體的負載均衡。
硬體負載均衡效率高,但是價格貴,比如F5等。
軟體負載均衡系統價格較低或者免費,效率較硬體負載均衡系統低,不過對於流量一般或稍大些網站來講也足夠使用,比如lvs。

 

高併發架構包括幾個層次:
1.可以高可用的負載均衡器(可用lvs),
2.緩存伺服器(varnish),
3.反向代理伺服器(haproxy)
4.可能會需要各種不同的web伺服器(apache, tomcat, ....)

 

高併發架構需要有以下的功能:

1) 可以承載高併發的伺服器軟體,包括Apache,nginx,Tomcat。以及用來動態請求的應用伺服器,例如PHP伺服器,JavaEE伺服器。
2) 要有負載均衡的功能。我個人目前所維護的系統使用硬體來做負載均衡,軟體方面的話可以用LVS實現。
3) 要有處理高併發請求的能力。使用緩存服務varnish,和haproxy技術。
4) 要有HA功能,保證集群中的任何一臺或幾台伺服器出問題不至於影響到整個系統的運作。會使用到如下的技術:
corosync+pacemaker, KeepAlived

 

集群加上其它技術,就出現了高併發架構,現在的技術各種各樣,可謂八仙過海,各顯神通,有mysql+heartbeat+DRBD+LVS,nginx+php+mysql+memcache+mongodb,Node.js越來越熱,hadoop及其子項目雖然成熟,但spark,storm越來越流利

 

高併發的架構用到的知識點包括:負責均衡策略,CDN策略,反向代理技術,LVS,緩存伺服器,資料庫的讀寫分離技術,分散式資料庫技術等等技術

負載均衡系統、反向代理系統、Web伺服器系統、分散式存儲系統、底層服務系統、資料庫系統

 

對於Web伺服器來說,不管是Apache、IIS還是其他容器,圖片是最消耗資源的,於是我們有必要將圖片與頁面進行分離,這是基本上大型網站都會採用的策略,他們都有獨立的圖片伺服器,甚至很多台圖片伺服器。這樣的架構可以降低提供頁面訪問請求的伺服器系統壓力,並且可以保證系統不會因為圖片問題而崩潰
HTML靜態化效率最高、消耗最小的就是純靜態化的html頁面,所以我們儘可能使我們的網站上的頁面採用靜態頁面來實現,這個最簡單的方法其實也是最有效的方法。架構方面的緩存,對Apache比較熟悉的人都能知道Apache提供了自己的mod_proxy緩存模塊,也可以使用外加的Squid進行緩存,這兩種方式均可以有效的提高Apache的訪問響應能力。
負載均衡將是大型網站解決高負荷訪問和大量併發請求採用的終極解決辦法。

大型Web站點高併發架構一般都採用如下的技術: 1、大量使用緩存技術改善站點的性能,提供用戶體驗;對應的技術點有redis、memcached等 2、應用伺服器集群提高網站的高併發處理能力;對應的技術點有apache、nginx、haproxy等 3、資料庫進行讀寫分離;對應的技術點有MySQL讀寫分離/高可用,NOSQL等 4、使用反向代理和CDN加速網站響應;對應的技術點有suqid、CDN等 5、根據業務需要,使用分散式文件系統和分散式資料庫系統;對應的技術點有hadoop等

 

整個系統的架構可以是LVS+VANISH緩存+HAPROXY+Apache/Ngnix。負載均衡還涉及到CDN,DNS等等方面的問題。

 

大型站點高併發架構主要利用了以下一些技術:
資料庫,使用讀寫分離,分庫分表解決大量的讀寫請求。
伺服器,使用負載均衡(4層lvs,7層nginx,apache等做反向代理)保證多台機器能夠提供服務
緩存,使用squild等做反向代理

 

一.大型站點高併發架構:
   1.1 滿足高併發用戶請求&滿足節點負載均衡高可用
   1.2 功能變數名稱智能解析、資源按區域多節點cdn推送
   1.3 後端高併發高可用型資料庫讀寫處理能力
二.為什麼會出現高併發架構
   2.1 滿足高密集、高速的互聯網發展時代,必須出現高併發架構
三.主要運用了哪些技術等對大型web站點高併發架構
   3.1 高可用負載均衡技術&cdn及各種cache網路推送技術
   3.2 提供加速處理能力的中間件
   3.3 讀寫性能交優異的硬體及軟優化調試資源
   3.4 高性能讀寫的nosql處理能力
   3.5 多節點web、DB服務池
   3.6 良好的代碼執行率 & 大型防火牆

 

上次看資料時看到應該從分層的角度去看

前端架構
        瀏覽器優化技術(緩存,壓縮,合併減少請求)
        CDN
        靜態資源獨立部署
        反向代理
        DNS
應用層架構
        併發結構
        負載均衡
        session管理
        動態轉靜態(訪問多,變化少)
        業務拆分
服務層架構
        分散式服務
        分散式消息
        分散式緩存
        分散式配置
存儲層架構
        分散式文件系統
        關係資料庫分庫
        NOSQL
        數據同步
後臺架構
        搜索引擎
        數據倉庫
        推薦系統
數據採集與監控
        瀏覽器數據採集
        伺服器(業務,性能)數據採集
        系統監控
        系統報警
安全架構
        WEB攻擊
        數據保護

高併發架構使用的技術包括:負載均衡(LVS、F5設備、Haproxy、Nginx),高速緩存服務(Varnish)、,反向代理(squid)等技術來實現訪問分流,多設備實現高可用技術(corosync+pacemker,KeepAlived等),資料庫也採用反向代理、Memcache等技術實現快速查詢。

 

1.我們常用的系統架構有三種,第一種是linux+Apache+PHP+MySQL、第二種是Linux+Apache+Java(WebSphere)+Oracle、第三種是Windows Server+IIS+C#/ASP.NET+資料庫

2. 大型網站一般都使用緩存伺服器群,並使用多層緩存。最常用的有Squid、memcahe、e-Accelerator

 

常見的高併發架構技術:
LAMP、LNMP
負載均衡系統 LVS
反向代理系統:Haproxy
緩存伺服器:Varnish
Web伺服器集群:Apache、Nginx、Tomcat

 

高併發架構主要是為瞭解決等待而且出現的,比如在淘寶上如果找一個商品要等上10分鐘,我想就沒有人會在淘寶上買東西了,再比如偉大的12306,是不是讓人抓狂呢?所以高併發架構一定是業務出現瓶頸了,才想辦法解決瓶頸出現的各種方案的彙總。

3.重要的高併發技術
  1.負載均衡技術:為瞭解決伺服器集群的高可用及負載,平均分配資源,以減少服務的延時。常用的硬體解決方案如F5;軟體解決方案如LVS(工作在4層和7層),Haproxy,Nginx(工作在7層)以及zookeeper等。
  2.CDN技術,這是為瞭解決靜態頁面及圖片緩存的,提高訪問效率
  3.緩存技術
  4.資料庫級的高併發技術,如分庫、分表,高可用集群等。

 

消息中間件,分散式緩存,分散式資料庫,再加上負載均衡器(包括簡單的HTTP/TCP的,也包括其它的像MyCAT這種資料庫的)。這些都是實現高併發架構的重要組成部分。

高併發有三個瓶頸:

傳輸層,大量用戶發出請求後,會對網路帶寬和web伺服器的I/O造成瓶頸;

計算層,將會造成業務伺服器的瓶頸;

存儲層,會導致資料庫和存儲的瓶頸。

大型併發架構就是利用負載均衡,緩存,分散式集群等技術,把訪問量分散到不同的機器上處理

 

主要運用了哪些技術等對大型web站點高併發架構進行論述:
--web伺服器:apache、nagix、tomcat
--lamp、lnmp
--負載均衡技術:lvs
--緩存伺服器:varnish
--緩存代理:haproxy
--高併發:haproxy
--高可用:corosync+pacemaker 、KeepAlived

 

1、海量用戶訪問,如12306等
2、海量用戶數據存儲,如 google等

涉及到的技術:

負載均衡、持久化存儲(mysql、nosql)消息中間件 CDN 分散式緩存,分散式文件 搜索引擎 離線計算等

 

高可用解決方案(corosync,pacemaker,KeepAlived)負載均衡(LVS)緩存服務(Varnish)反向代理(haproxy)web伺服器(Apache,Nginx,Tomcat)站點架構(Lamp,Lnmp)以及現在所使用的分散式架構和NOSQL的架構整合在一起去滿足所需。

高併發架構主要運用了:擴展技術(垂直擴展和水平擴展)、冗餘、負載均衡、緩存技術、HTML靜態化、圖片伺服器分離、鏡像技術。

 優化大型web站點高併發架構的手段包括負載均衡、緩存、反向代理、CDN加速、讀寫分離、系統解耦、消息非同步、NoSQL資料庫等多方面

 

轉自:http://f.dataguru.cn/thread-513146-1-1.html

 
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 學習階段,還是寫點小東西練練手學的有意思一點,今天用柵格佈局做了一個2048,但是移動動畫和合併特效沒有做,只簡單的實現了一下功能。 記錄一下學習的過程。 1.入口函數,初始化界面,我這裡是直接是一個柵格對應一個數字,做到後面發現先佈局柵格,然後在柵格上面動態生成的做法更好。 2.定義了幾個全局變數 ...
  • 作用域是結構化編程的重點和難點。它決定了變數的作用範圍和生命周期,正確使用作用域可以使代碼清晰,易懂! ...
  • 閱讀目錄: 1. 關於 Redis 的概念 2. 關於 Redis Sentinel 的概念 3. 搭建 Redis Server(master) 4. 搭建 Redis Server(slave) 5. 搭建 Redis Sentinel 6. Redis Sentinel 故障轉移測試 前幾天, ...
  • Docker 是一個容器工具,提供虛擬環境。很多人認為,它改變了我們對軟體的認識。 站在 Docker 的角度,軟體就是容器的組合:業務邏輯容器、資料庫容器、儲存容器、隊列容器......,Docker 使得軟體可以拆分成若幹個標準化容器,然後像搭積木一樣組合起來。 這正是微服務(microserv ...
  • 本文是我原創,首發於美團點評技術團隊博客。原文地址是:https://mp.weixin.qq.com/s/fx6XfBpuzozsJCvllMcCqw。歡迎大家轉載,轉載請註明出處,謝謝~~。 背景 2017年8月25日,我懷著“再也不要在下班時間收到報警”的美好期待,加入美團金融智能支付負責核心 ...
  • 2013年發佈至今, Docker 一直廣受矚目,被認為可能會改變軟體行業。 但是,許多人並不清楚 Docker 到底是什麼,要解決什麼問題,好處又在哪裡?本文就來詳細解釋,幫助大家理解它,還帶有簡單易懂的實例,教你如何將它用於日常開發。 一、環境配置的難題 軟體開發最大的麻煩事之一,就是環境配置。 ...
  • 上篇的內容,我們探討了分散式計算中的 MapReduce與批處理 。所以本篇我們將繼續探索分散式計算優化的相關細節,並且分析MapReduce與批處理的局限性,看看 流式計算 是否能給我們在分散式計算層面提供一個更好的解決方案。 1.MapReduce的局限 MapReduce作業是獨立於其他作業, ...
  • 互聯網分層架構的本質?MVC,MVP,MVVM ? 上圖是一個典型的互聯網分層架構: 客戶端層:典型調用方是browser或者APP 站點應用層:實現核心業務邏輯,從下游獲取數據,對上游返回html或者json 數據-緩存層:加速訪問存儲 數據-資料庫層:固化數據存儲 客戶端層:典型調用方是brow ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...