總體架構圖
1 加速網站響應
反向代理(Reverse Proxy)和CDN(Content Delivery Network內容分發網絡),
CDN的基本原理是廣泛採用各種緩存服務器,將這些緩存服務器分佈到用戶訪問相對集中的地區或網絡中,在用戶訪問網站時,利用全局負載技術將用戶的訪問指向距離最近的工作正常的緩存服務器上,由緩存服務器直接響應用戶請求,一般部署在網絡提供商機房中。
反向代理(Reverse Proxy)方式是指以代理服務器來接受internet上的連接請求,然後將請求轉發給內部網絡上的服務器,並將從服務器上得到的結果返回給internet上請求連接的客戶端。
CDN緩存服務器現狀科普 https://blog.csdn.net/charleslei/article/details/50879908
代理服務器科普&Nginx反向代理科普 https://blog.csdn.net/daybreak1209/article/details/51549031
Squid基於Linux開源反向代理器 (官網http://www.squid-cache.org)
Nginx反向代理實例配置 https://blog.csdn.net/jun55xiu/article/details/80570221
Nginx+ lua反向代理動態更新 https://www.cnblogs.com/shihuc/p/8044753.html
Nginx+Lua(OpenResty)高性能Web應用 https://www.jianshu.com/p/36f1955edb8b
2 負載均衡
將用戶請求負載、均衡分發至應用服務器集羣,解決高併發的用戶訪問量。
Nginx負載均衡實例配置: https://blog.csdn.net/jun55xiu/article/details/80570221
LVS[Linux Virtual Server]+Keepalived負載均衡服務器:
https://www.cnblogs.com/liwei0526vip/p/6370103.html
https://www.cnblogs.com/yanxinjiang/p/7905011.html
LVS創始人章文嵩 http://jm.taobao.org/2016/06/02/zhangwensong-and-load-balance/
Keepalived+Nginx+Tomcat雙主模式負載均衡服務器 http://blog.csdn.net/apei830/article/details/78685885
Keepalived+Nginx+Tomcate主備模式負載均衡服務器 http://blog.csdn.net/apei830/article/details/78685855
3 應用服務器集羣
提高網站併發處理能力,解決高併發。
Nginx + Tomcat 集羣配置 見上述章節
Apache2.2 + Tomcat6 集羣配置點擊打開鏈接
Apache2.4.6+Tomcat7集羣配置點擊打開鏈接
應用服務器集羣Session管理方案:
1) session共享: 緩存session,使用redis, memcached
開源項目:tomcat-redis-session-manager
Tomcat8參考配置 點擊打開鏈接
Tomcat7參考配置 點擊打開鏈接
2) Session服務器(集羣)統一管理: session信息存放到session集羣服務器組。當應用系統需要session信息的時候直接到session羣集服務器上讀取。目前大多都是使用Memcache來對Session進行存儲。如圖:
參考配置一 http://chenzhou123520.iteye.com/blog/1650212
參考配置二 http://blog.51cto.com/732233048/1909682
參考配置三 https://yq.aliyun.com/articles/476166?spm=a2c4e.11163080.searchblog.38.54942ec1duzbQ5
memcached-session-manager(MSM)是一個用於解決分佈式tomcat環境下session共享的問題的開源解決方案。它的實現原理爲以tomcat插件的方式部署在服務器,修改了servlet容器代碼中的session相關代碼,使其連接memcached,在memcached中創建和更新session。MSM擁有如下特性:
1) 支持Tomcat6至Tomcat8 2) 支持黏性sticky session、非黏性no-sticky session
3) 無單一故障點 4) 可處理tomcat故障轉移 5) 可處理memcached故障轉移
6) 插件式session序列化 7) 允許異步保存session,以提升響應速度
8) 只有當session有修改時,纔會將session寫回memcached 9) JMX管理&監控
Sticky 模式:tomcat session爲主session, memcached爲備session。Request請求到來時, 從memcached加載備session到tomcat (僅當tomcat jvmroute發生變化時,否則直接取tomcat session);Request請求結束時,將tomcat session更新至memcached,以達到主備同步之目的。
Non-Sticky模式:tomcat session爲中轉session, memcached1爲主session,memcached 2爲備session。Request請求到來時,從memcached2加載備session到tomcat,當容器中還是沒有session 則從memcached1加載主session到tomcat,這種情況是隻有一個memcached節點,或者有memcached1出錯時,Request請求結束時,將tomcat session更新至主memcached1和備memcached2,並且清除tomcat session ,以達到主備同步之目的。
優點:不用考慮session共享問題,可專注於程序開發,不用顯示編寫代碼,只需對服務器進行配置即可。
缺點:如想改變session策略,必須重新部署每個服務器的servlet容器。
4 分佈式緩存
存儲20%數據。網站訪問2/8原則,80%業務集中在20%數據上,減少數據庫訪問壓力,提高網站數據訪問速度。
EhCache 實例:https://blog.csdn.net/jun55xiu/article/details/38492127
Redis集羣&虛擬槽分區https://www.cnblogs.com/hjwublog/p/5681700.html
Redis 哨兵模式 https://blog.csdn.net/a67474506/article/details/50435498
https://blog.csdn.net/shouhuzhezhishen/article/details/69221517
https://blog.csdn.net/pi9nc/article/details/17735653
分佈式緩存的一致性Hash算法:
https://blog.csdn.net/Jerome_s/article/details/52492862
https://blog.csdn.net/cywosp/article/details/23397179
淘寶開源Tair分佈式存儲引擎(源代碼C++,官網沒維護手冊)
部署 https://www.cnblogs.com/lengfo/p/4171655.html
資料 https://wenku.baidu.com/view/57d52927ec3a87c24128c47e.html
JAVA客戶端 https://github.com/alibaba/tair-java-client
5 數據庫集羣
防止數據庫由數據量過大產生過高的負載壓力,主從熱備模式(主數據寫->同步->從數據庫讀取數據)。
Mysql集羣和主從區別 https://blog.csdn.net/wutian713/article/details/50682360
Mysql主從[主]模式 http://www.cnblogs.com/phpstudy2015-6/p/6485819.html#_label7
Mysql數據同步Redis方案中間件canal
http://www.cnblogs.com/duanxz/p/5062833.html
https://github.com/alibaba/canal
https://blog.csdn.net/tb3039450/article/details/53928351
分佈式關係數據庫中間件 Mycat
Mycat資料 點擊打開鏈接 點擊打開鏈接 點擊打開鏈接
點擊打開鏈接 點擊打開鏈接
6 業務拆分
將業務拆分成產品線,按產品線在應用服務器集羣分離、獨立部署。即服務和功能縱向維度分割,如首頁、商鋪、訂單、賣家等分割成不同的應用,應用間可採用消息隊列實現關聯數據的通信。
7 分佈式服務(圖1.10)
在圖1.7基礎上,按業務拆分成產品線(如首頁、商鋪、訂單、賣家),各產品線在各自應用服務器集羣分離、獨立部署,勢必產生大量應用系統(產品線),以及大量與數據庫系統連接數,最終會導致數據庫連接資源不足,拒絕服務。
爲緩解此種情況,在應用系統(產品線)與數據庫系統間加入、部署提供分佈式服務的服務器,提取訪問數據庫或其它的共用業務服務,提高業務連接數據庫和業務的複用性。通過分佈式服務調用共用業務服務完成應用系統(產品線)具體業務操作。如微博的核心服務是微博、關係和用戶,分割成獨立的服務模塊,每個模塊部署在一組獨立的服務器集羣上。
注意:分佈式服務是由系列共用業務服務調用、組合,每個共用業務服務可獨立、集羣式部署,類似於微服務。
微服務框架 Spring Could見http://blog.didispace.com/micro-serivces-arch/
8 異步
異步消息隊列如下特性:1)提高系統可用性。消費者服務器宕機重啓後,可繼續讀取消息隊列內的數據。2)加快網站響應速度。3)消除併發訪問高峯。
如微博中應用場景:用戶發表微博後,系統只會給已被關注的粉絲們實時推送微博消息,其它所有微博用戶(如瀏覽用戶)則會在以後某個時間點逐步推送微博消息。
消息中間件Kafka https://blog.csdn.net/lizhitao/article/details/23743821
http://orchome.com/kafka/index
https://blog.csdn.net/vinfly_li/article/details/79397201
9 冗餘
保證網站7*24小時連續運行,就需要一定程度的服務器冗餘運行、數據冗餘備份。數據庫需要定期備份、存檔保存,實現冷備份外,爲保證線上業務高可用,還需要對數據庫進行主從分離,實時同步實現熱備份。
10自動化
發佈過程自動化、代碼管理自動化、自動化測試、自動化安全檢測、自動化部署、自動化監控(報警)、自動化失效轉移、自動化失效恢復、自動化降級、自動化分配資源。
11安全
網站在安全架構方面積累相應模式:身份驗證-密碼和手機校驗碼、加密、過濾、風險控制、多級安全審覈。
核心要素
性能、可用性、伸縮性、擴展性、安全性
重要文檔
Nginx
章亦春教程:https://openresty.org/download/agentzh-nginx-tutorials-zhcn.html
入門到精通:http://tengine.taobao.org/book/
Tengine
由淘寶網發起的Web服務器項目。它在Nginx的基礎上,針對大訪問量網站的需求,添加了很多高級功能和特性。Tengine的性能和穩定性已經在大型的網站如淘寶網,天貓商城等得到了很好的檢驗。它的最終目標是打造一個高效、穩定、安全、易用的Web平臺。
從2011年12月開始,Tengine成爲一個開源項目,Tengine團隊在積極地開發和維護着它。Tengine團隊的核心成員來自於淘寶、搜狗等互聯網企業。Tengine是社區合作的成果,我們歡迎大家參與其中,貢獻自己的力量。
版 本:http://tengine.taobao.org/
中文文檔:http://tengine.taobao.org/documentation_cn.html
OpenResty
創始人之一章亦春Github地址:https://github.com/agentzh,官網:http://openresty.org/en/
OpenResty® 是一個基於 Nginx 與 Lua 的高性能 Web 平臺,其內部集成了大量精良的 Lua 庫、第三方模塊以及大多數的依賴項。用於方便地搭建能夠處理超高併發、擴展性極高的動態 Web 應用、Web 服務和動態網關。
OpenResty® 通過匯聚各種設計精良的 Nginx 模塊(主要由 OpenResty 團隊自主開發),從而將 Nginx 有效地變成一個強大的通用 Web 應用平臺。這樣,Web 開發人員和系統工程師可以使用 Lua 腳本語言調動 Nginx 支持的各種 C 以及 Lua 模塊,快速構造出足以勝任 10K 乃至 1000K 以上單機併發連接的高性能 Web 應用系統。
OpenResty® 的目標是讓你的Web服務直接跑在 Nginx 服務內部,充分利用 Nginx 的非阻塞 I/O 模型,不僅僅對 HTTP 客戶端請求,甚至於對遠程後端諸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都進行一致的高性能響應。
Perl
《Effective Perl Programming》(由Addison—Wesley出版)、《Learning Perl》、 《ProgrammingPerl》、《Intermediate Perl》以及《Mastering Perl》
————————————————
版權聲明:本文爲CSDN博主「陳鋆」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/jun55xiu/article/details/80830627