
1. 外部建立連接程序
①外網客戶端訪問 http://www.baidu.com/ -> 地址決議
DNS 決議順序:本地記憶體快取 -> /etc/hosts -> /etc/resolv.conf -> 網卡檔案 -> DNS 服務器(迭代,遞回兩種方式獲取 IP 和域名,DNS 協議既有 TCP 又有 UDP,53 埠)
②客戶端和服務端建立連接
HTTP1.1建立長連接(請求頭、請求行、請求體,方式(GET、POST)
③TCP三次握手程序
TCP 建立連接的程序稱為三次握手,為了確認雙方收發資料的能力
1.發送方向接收方發送SYN請求
⒉接收方接收到此請求后會主動回復一個ACK,并且同時也發送一個SYN請求
3.發送方接收到接收方發來的SYN請求后,給出一個ACK確認
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 ) , 匹 配 到 之 后 l o c a t i o n / 處 理 靜 態 請 求 , 直 接 獲 取 靜 態 文 件 資 源 所 在 的 目 錄 中 的 文 件 , 然 后 返 回 官 網 , 如 果 要 加 載 一 些 靜 態 請 求 l o c a t i o n / s t a t i c / ( p n g ∣ j e p g ∣ . . . ) , 反 向 代 理 l o c a t i o n ( . + ) . j s p ),匹配到之后 location /處理靜態請求,直接獲取靜態檔案資源所在的目錄中的檔案,然后回傳官網,如果要加載一些靜態請求 location /static/ (png|jepg|...),反向代理 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/356084.html
標籤:其他
上一篇:vue 前端專案部署阿里云服務器
下一篇:計網第四章作業題答案詳解
