文章目錄
- 1. 外部建立連接程序
- 2. 企業內部資料互動

1. 外部建立連接程序
外網客戶端訪問 http://www.baidu.com/ -> 地址決議
DNS 決議順序:本地記憶體快取 -> /etc/hosts -> /etc/resolv.conf -> 網卡檔案 -> DNS 服務器(迭代,遞回兩種方式獲取 IP 和域名,DNS 協議既有 TCP 又有 UDP,53 埠),
客戶端和服務端建立連接
HTTP1.1 建立長連接(請求頭、請求行、請求體,方式 GET、POST)
TCP 三次握手程序:
客戶端發送連接請求,SYN 標識為1,序列號為 x(TCP規定 SYN=1 時不能攜帶資料,x 為隨機產生的一個值),然后進入 SYN_SEND 狀態,
服務器收到 SYN 報文進行確認,將 SYN 標識為 1,ACK 置為 1,序列號置為 y,Acknowledgment Number 置為 x+1,然后進入 SYN_RECV 狀態,這個狀態被稱為半連接狀態,
客戶端再進行一次確認,將 ACK 置為 1(此時不用 SYN),序列號置為 x+1,Acknowledgment Number 置為 y+1 發向服務器,最后客戶端與服務器都進入 ESTABLISHED 狀態,
2. 企業內部資料互動
防護墻(軟硬體)
通過流量過濾、ACL 訪問控制、黑白名單、安全組、規則過濾、SNAT、DNAT 等方式控制連接請求并交給負載均衡器,
負載均衡器
LVS+Keepalived、Haproxy、SLB、硬體負載均衡器 …
負載均衡器將流量分發給對應的業務模塊( NG+Keepalived 或 apache+Keepalived )
harpoxy 的服務端中會有 socket 連接,haproxy 的行程監聽、接收然后遍歷組態檔,找到轉發的配置(nginx/apache 的 keepalived VIP 地址),然后對資料報文進行封裝和轉發,最終轉發到 NG/apache 的 VIP,
流量分發
流量發送到 NG/apache 的 80 埠,會被監聽 80 埠的后臺行程捕捉到 -> 接待請求然后遍歷對應的組態檔,( socket 連接被 NG/apache 對應的后臺行程捕捉到然后交給服務程式處理)
① 第一條路徑
nginx+keepalived 中的 nginx.conf 匹配 location(location 最少有三種,location /,location /static,location (.+) .jsp$),匹配到之后 location /處理靜態請求,直接獲取靜態檔案資源所在的目錄中的檔案,然后回傳官網,如果要加載一些靜態請求 location /static/ (png|jepg|...),反向代理 location (.+) .jsp$ () 匹配到 proxy_pass http://tomcat_server -> upstream tomcat_server 地址池后( server tomcat1_ip:port weight 2 | server tomcat2_ip:port weight 1 )-> 跳轉 -> 默認會重新封裝資料包 -> 將源 IP 封裝為本地 IP(Nginx IP),目標 IP 封裝為 tomcat_ip 執行轉發(根據服務本身的路由表條目)-> tomcat
② 第二條路徑
apache 通過加載 PHP 模塊進行互動,對接 PHP(共享記憶體)
tomcat/php 收到請求
tomcat 接收到來自 nginx_vip:80 埠的請求,會有監聽在 8080 的 connector 連接器(java)捕捉到 java 行程 -> engine引擎 -> 對應的容器處理(web、jsp、serverlet)-> 遍歷 web.xml、server.xml、serverlet.xml,在 serverlet.xml 主組態檔中遍歷到 <Host(專案)> 專案相關的配置 -> 例如支付寶專案的位置(API),支付寶的代碼會需要使用后端存盤一些用戶資料(新的需求)-> 通過執行緒池的方式 -> 獲取資料,資料的來源分兩種
(1) 需要通過 redis,需要發送到 redis 的 6379 埠,redis 中主要通過 記憶體/快取 的方式存盤一些高熱資料,通過快取命中的方式讀取高熱資料,如果命中了可以直接回傳,不會經過 mysql,( redis 通過監聽 6379 埠獲取請求)
(2) 不需要經過 redis 發送給 mysql 的 3306 埠 -> 行程接待 -> 執行緒處理(sock 通訊檔案)-> 進入到資料內部 -> 執行 SQL 陳述句,
資料庫 select 查詢時的順序:先查詢索引目錄 -> 有的話直接定位具體的 庫.表,獲取資料,沒有的話遍歷 庫.表 中的資料,獲取后回傳,
php 接收請求,遍歷組態檔,加載對應的專案,然后也需要獲取后端存盤的資料庫 sock 通訊檔案,
共享存盤 NFS 可以通過提供網路存盤的方式分別為導診平臺業務和門戶網站的業務提供共享存盤,(可以先使用磁盤掛載 /test1 /test2 兩個目錄,然后通過 NFS exporter 組態檔,提供共享存盤)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/356086.html
標籤:其他
上一篇:計網第四章作業題答案詳解
下一篇:地址決議協議ARP
