中型公司網絡架構拓撲與詳解


綜合架構圖:

 

 

 

綜合架構詳解:

詳細總結:

公司第一大環境(生產環境):

1.整個web的訪問過程其實就是數據流怎么處理的。

2.訪問請求分為:動態 靜態請求

3.代理:分為 反向代理(reporxy) 和 集群代理 一般公司將反向代理服務器放到最外邊。

4.消息列隊:同步處理改為異步處理

5.CDN服務器: 阿里雲或者cdn處理靜態數據流。一般使用cdn便宜(智能dns) CDN公司:藍汛,七牛 按照G流量計算費用, 存放緩存數據,cdn上邊有機房,放存儲數據。靜態數據靠外放置。 靜態數據不能進到企業內部,因為訪問的流量太多,所以都交給CDN,或者放到阿里雲。

6.緩存數據: 將訪問請求緩存到緩存層的時候可以用網卡捆綁bond(如以太網通道) 10000Gx4

7.LVS 四層代理,放到最外邊,沒有任何流量產生,但並發可以達到十幾萬。數據量上G nginx和LVS一起用

8.web服務器: apache/nginx/tengine tengine開發nginx的,淘寶在用。配置與nginx通用。兼容nginx源代碼。

9.web頁面存儲服務器: NFS只會用來存放web的index的頁面,做web頁面的數據同步,不會用作存儲服務器。 FastDFS 處理靜態數據,圖片等。一端要連接數據庫,並且將處理后的圖片數據吐到緩存層上。

10.消息列隊: (1)消息列對用在哪 消息列隊放在readis和集群之間的。 消息列隊服務器最少三台,把同步數據變為異步數據,減少對后端服務器的壓力。異步解耦。 docker半解耦狀態,KVM解耦狀態。

***** new=syn ESTABLISHED 同協議之間的,沒有消息列隊的時候。 RELATED 由上一個關聯包回復的隨機包。

(2)為什么消息列隊和web服務器不用tcp協議? 因為直接使用tcp連接式不可以的,端口不夠用 隨機端口號大於1024,小於65535 小於1024,大於32768 消息列隊和web服務器建立tcp,

(3)消息列隊算法: rabbitMQ/zeroMQ/kafka

(4)什么是消息列隊: 消息列隊可以提高訪問量, 首先訪問進來的時候,先進會話層,建立會話,

(5)中間件層 中間件層是用來判斷集群干嘛的一個層,是手機端還是頁面端

 

11.數據庫集群: (1)主數據架構 雙主數據庫,也叫互為主從數據庫,兩個數據庫寫數據,一個數據庫最大連接是10000,小公司用的多,數據庫都是異步復制數據.

(2)面試問題: 主從數據庫不同步怎么辦? 一個主庫可以復制8個從庫,看帶寬,

(3) 數據庫復制的分類 異步復制 半同步復制 同步復制,強制一致性復制,NDB數據庫,在內存里。

(4)數據庫的寫入之前的動作 lnnoDB引擎——事務 在數據庫寫入之前先有事務,在內存里完成,雙方先建立事務,然后確定后,才往數據庫寫。保證數據庫的完整性。

(5)雙主復制存在的問題: 主鍵沖突,自增長(auto-increment),解決主鍵沖突問題,還可以判斷數據是那個服務器寫進來的。

(6)單循環數據庫 注意:最多3台, 3台服務器互為主服務器,單循環出現問題就只剩一個完成數據庫,主庫不可以單獨運行。

(7)數據庫訪問量大的時候的解決方法 數據訪問量大的時候,要切表切庫,就是將訪問量的大的庫單獨遷移出去,降低其他數據庫的訪問壓力。 切表,就是在表里的數據最多的時候,可以將表里的數據分開存放在不同的數據庫里。分開訪問量。

(8)MHA主從切換:解決主數據庫出現故障問題 (9)galera強一致性,解決異步復制的問題,異步復制不適合數據庫

注意:寫入的量小於讀取的量,主從數據庫的比例1:8,一主拖8從。

12.oneproxy:  主數據庫的代理層使用,支付寶用的,可以切表切庫,庫表數據隨便遷移,支付寶開源出來的,平民軟件。

13.主從數據庫集群的調度方法: 主庫用RR調度, 使用oneproxy 從庫用LC調度。 使用haproxy:

14.mysql數據庫的分支: mysql最新版5.7 (1)源作者寫的:marriDB,與MySQL幾乎一樣,更新速度快。

(2)優化版的mysql(percona數據庫 ) 是源數據的15倍左右,和源數據(mysql)庫版本一樣,晚一周發布,優化的和MySQL數據庫,是mysql的商業軟件。www.percona.com xtrabackup(熱備數據庫) 如果面試問到數據的優化,就可以說我們用的是percona,自動優化,是普通數據庫的17倍。

15.數據庫的消息列表: 事務要有緩存,就是消息列隊,可以保障數據的進出順序,

 

16.緩存數據庫: redis/或者memcache/持久化數據 數據庫的緩存層,需要把一部分數據放在緩存層,加快讀寫的速度。 也叫動態數據緩存層。 查詢方法叫遍歷,從第一條一直讀到最后一條。

思路:訪問請求到了中間件層的時候,用來判斷下面的集群干嘛的,如果讀數據庫的時候,則先讀緩存層,如果沒有的話,在進消息列隊,然后寫入或者讀取數據,對redis的讀寫是由中間件來完成的。

17.注意:熱備和冷備都在從數據庫上做。

注意:同步是從庫集群的某一台從庫做備份

注意:消息列對,緩存層不能宕機

18.存儲服務器: 從從庫里將數據往外存, 物理層:raid10 iscsi進行掛載,將原來所有庫數據掛載出來,保證存儲,將數據放到Hbase或者Spark里

19.證書服務器: 運行應用層的時候,要使用https,使用CA服務器。

注意:數據是走緩存路線出去的。

20.自動化三大服務: 系統自動化 PXE/kickstart 程序自動化 ansible(100台)/saltstack(部署大量的) puppet(不用) 代碼自動化

以上是生產環境: ——————————————————————

公司的第二大環境:(開發測試環境): 代碼倉庫,開發人員存放代碼的地方。maven將上傳的代碼打包,然后將代碼傳通過jenkins-webhook部署到k8s上,然后通過k8s對docker—swarm進行部署,根據需求開多少台docker,這叫可持續化集成

公司第三大環境(輔助類): (1)監控服務器: web相關服務器的監控,

zabbix:主要監控服務器的吞吐量,

ngios:可以監控系統的運行,網絡流量,可以監控windows,linux等。

cacti:snmp網絡設備的硬件,服務器的硬件。

數據庫相關的監控, lepus(天兔)

 

(2)日志服務器: 單個文件最大不超過4G,所有將大文件的日志做數據切割,然后通過 ELK日志分析工具,進行分析。

(3)認證服務器: LDAP服務器統一管理用戶。 系統用戶,監控用戶,公司的通過VPN撥號的用戶,所以要進行認證。

 

總結: 一共三部分訪問入口: 外部訪問。代理服務器,防火牆只開放80端口,DNS只解析反向代理服務器 運維訪問,在ssh+隨機碼可以進入,通過vpn服務器,用戶認證,可以到zabbix和lepus查看,可以通過飛信微信報警。 開發訪問,可以通過測試環境的防火牆進入測試環境,進行測試操作,然后完成測試的架構進行上架,docker不可以直接放數據庫,所以目前只用在測試環境。

 

 

******************************* ******************************* 自己總結:

 

一.生產環境

1.客戶端服務器: 2.防火牆:華為,思科 3.反向代理服務器: nginx動靜分離,將靜態的數據請求給CDN或者阿里雲,動態的留下里給公司內部 4.客戶端通過DNS服務器解析后對web服務進行訪問,然后到了反向代理,反向代理將靜態數據交給CDN,CDN服務器通過對IP地址的判斷,然后告知里客戶端最近的CDN緩存服務器,然后由緩存服務器去回復客戶端,如果緩存沒有數據,則北京的CDN后端的真實服務器就會將數據緩存到CDN緩存服務器,然后告知客戶端。

添加:【 百度,全squid服務架構。

一台varnish可以抗住1G的dds攻擊

智能DNS溯源:整個CDN的流向過程,判斷原來IP地址離我更近的過程。

公司網站優化的辦法: 將靜態數據給CDN或者阿里雲

 

如果是小公司,公司最外表放一台反向代理服務器就可以了 】

5.LVS和nginx區別: LVS四層代理 放在最外邊,因為他們中間不會產生任何流量,使用的arp轉向(4種arp),改變了arp的解析方向,將ip地址解析到了后邊的七層代理的集群上,LVS單並發達到十幾萬, nginx七層代理

6.會話池服務器(redis/memcache) redis——非關系型數據庫 mysql——關系型數據庫 登陸以后,首先會連接會話池,用來驗證登陸用戶密碼的。

7.消息列隊,用在數據庫集群代理層中間,有時候也用在web集群中間,放到緩存集群和web之間最少3台構成,目的是把同步流量變為異步流量,還可以直接讓消息列隊和web服務器建立tcp連接,這樣就不會出現由於大量的訪問進來,沒有消息列隊,tcp的端口不夠,或者服務器壓力太大的故障。 會話池和消息列隊給訪問建立消息通道,提高訪問量和在不同頁面的重復輸入賬戶的情況。 * 一台nginx最多可以代理10台服務器。

8.緩存層(cache) 靜態數據緩存層 squid(存在硬盤里,速度很慢) varnish(內存里)* 緩存數據從web集群上來。 如果客戶的訪問請求在緩存層有,則不會往下走了,直接回復給客戶端。 反之,繼續往下走

9.web服務層,(apache/nginx/tengine)

10.web層上的存儲服務器 NFS服務器,用來存放靜態頁面的index文件,做web頁面的數據同步,不可用於存儲服務器。 FastDFS,處理靜態數據,圖片等處理,讓所有數據都注冊到數據庫里,所以另外一端連接到數據庫,然后將處理好的數據吐到緩存層,提供高速的訪問,靜態數據就處理完成了。

11.CA服務器 運行應用層,做web頁面的時候,要做https,要進行認證,可用可不用,也可以在每台web服務器上添加。

12.數據庫的消息列隊集群 數據的連接需要事務,事務要有緩存,就是消息列隊,可以保障數據的進出順序,

 

13.oneproxy 使用rr(輪詢)調度 主數據庫的代理層使用,支付寶用的,只要使用oneproxy,可以切表切庫,庫表數據隨便遷移,支付寶開源出來的,平民軟件。

14.Haproxy 從庫集群的代理,使用LC調度(最小連接數)

 

15.數據庫端: 主數據***** (1)雙主數據庫: 數據庫所有數據都是異步處理, 寫入數據庫前需要有事務,事務保證數據的完整性,數據庫先在內存里完成的,然后在往硬盤上寫。 雙主數據庫問題: 主鍵沖突,通過auto-increment自增長來解決。 (2)單循環數據庫 三個主數據庫互為主,不允許超過三個。 單循環數據庫問題:主從切換問題,當主數據庫壞掉的話,使用MHA可以即使把從數據庫切換過來,進行使用。

從數據庫***** 從庫使用的是LC,最小連接數

16.數據庫的緩存層(redis) 關系型數據庫的上邊要套一層非關系型數據庫作為緩存,也就是redis或者是memcache,目的是將一部分數據緩存到數據庫的緩存層,數據是緩存在內存里,可以加快讀取數據的速度,關系型數據庫慢,非關系型數據庫快,硬盤慢,內存快。

讀寫redis,是由中間件完成的,因為中間件來判斷集群是干啥的,所以當數據來的時候首先去趙redis,如果命中,則回復給客戶端,如果為命中則繼續往下走,找到數據庫的消息列隊,去訪問數據庫,然后數據庫將數據緩存給redis,然后在回復給客戶端。

17.存儲服務器, 物理安全:raid10 iscsi掛載數據庫上,將原來所有庫數據掛載出來,保證存儲,將數據放到Hbase或者Spark里

18.彈性web consul+nginx consul網絡服務發現協議 用來放置會話層和緩存層出現問題,根據流量的大小,來承接nginx的流量

注意:數據是走緩存一步一步出去的,並不是怎么進來怎么出去的。

19.自動化服務器 系統自動化PXE/kickstart 程序自動化ansible(100台)/saltstack(部署大量)/puppet/(麻煩,不建議用) 代碼自動化(用代碼部署,關機部署然后開機)

**************************************************************** 二.測試環境:

1.開發人員將代碼傳到代碼庫, svn服務器,控制代碼的版本的,開發人員存代碼的地方,誰是最后一個完成的,服務器會有一個判定。 maven是將上傳的代碼打包 2.觸法jenkins,部署代碼自動化的,

3.然后將代碼部署到K8S或者swarm上,K8S用來部署docker環境的 整個叫可持續化集成。

三.輔助類 1.web相關的服務器 監控:zabbix監控web頁面和吞吐量, 2.數據庫的監控 lepus(天兔)阿里的數據空監控 3.其他監控 ngios和cacti ngios可以監控windows cacti使用snmp,可以監控網絡設備的硬件

4.日志切割: 單個文件不能超過4G ,所以在使用數據的時候要進行切割,然后在拿出來通過日志分心工具進行分析。

5.認證服務器 LDAP服務器,統一管理用戶賬戶,和windows的域控一樣。

6.不同的訪問 客戶: 正面只開80端口,客戶端的DNS只能解析到反向代理。

運維: 通過隨機碼,撥入VPN,然后進入web的監控,和數據庫的監控,然后查看日志。

開發: 可以通過HA-proxy可以進行測試環境。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM