常用的Web服務架構
阿新 • • 發佈:2018-12-11
最近在看開濤的<億級流量網站核心技術>,裡面提到了常用的四種網站架構,如下:
一、單DB架構
單DB架構一般就是nginx直接upstream請求到後端Tomcat,擴容時基本是增加新的Tomcat例項,然後通過Nginx負載均衡upstream過去,此時資料庫還不是瓶頸,但是當訪問量達到一定級別後資料庫的壓力就上來了,單個數據庫可能扛不住,可以通過分表分庫或者讀寫分離加快取來解決。二、DB+Cache/資料庫讀寫分離架構
此時通過使用資料庫讀寫分離或者Redis這種快取來支撐更大的訪問量,但是使用快取會存在與資料庫資料不一致的問題,或者Redis不能直接命中資料庫導致資料庫壓力過大,可以考慮使用Redis的主從或者用一致性雜湊演算法做分片的Redis叢集。使用快取這種架構,要求應用對資料一致性的要求不是很高。三、OpenResty+Local Redis+Mysql叢集架構
OpenResty首先通過Lua讀取本機Redis快取,如果命不中,則回源到後端Tomcat叢集,後端Tomcat叢集再讀取Mysql資料庫,Redis都是安裝到和OpenResty同一臺伺服器上,OpenResty直接讀取本機可以減少網路延時。Redis通過主從方式同步資料。四、OpenResty+Redis叢集+Mysql叢集架構
此時架構與之前架構不同的是,此時我們使用一致性雜湊演算法實現Redis叢集,而不是讀取本機Redis,保證其中一臺不可用時,只有很少的資料會丟失,防止擊穿到資料庫。Redis叢集分片可以使用Twemproxy如果Tomcat例項很多的話,就要考慮Redis和Mysql連結數問題,因為大部分Redis/Mysql客戶端都是通過連線池實現,此時連結數會成為瓶頸,一般方法是通過中介軟體來減少連結數。 此時的問題就是Twemproxy例項眾多,應用維護、配置困難,需要在這之上做負債均衡,比如,通過LVS/HaProxy實現VIP(虛擬Ip),可以做到切換對應用透明,故障自動轉移。還可以通過實現內網DNS來做其負載均衡。