深圳網(wǎng)站建設(shè):分享完整的HTTP接口請(qǐng)求過(guò)程及優(yōu)化

客戶端發(fā)起http請(qǐng)求,基本的經(jīng)歷過(guò)程如下:
域名解析 -> TCP三次握手 -> 建立TCP連接后發(fā)起HTTP請(qǐng)求 -> Nginx反向代理 -> 應(yīng)用層 -> 服務(wù)層 -> 緩存/數(shù)據(jù)庫(kù)
一、域名解析
首先Chrome瀏覽器會(huì)解析 www.linux178.com 這個(gè)域名(準(zhǔn)確的叫法應(yīng)該是主機(jī)名)對(duì)應(yīng)的IP地址。怎么解析到對(duì)應(yīng)的IP地址?
① Chrome瀏覽器 會(huì)首先搜索瀏覽器自身的DNS緩存(緩存時(shí)間比較短,大概只有1分鐘,且只能容納1000條緩存),看自身的緩存中是否有www.linux178.com 對(duì)應(yīng)的條目,而且沒(méi)有過(guò)期,如果有且沒(méi)有過(guò)期則解析到此結(jié)束。
注:我們?cè)趺床榭碈hrome自身的緩存?可以使用 chrome://net-internals/#dns 來(lái)進(jìn)行查看
② 如果瀏覽器自身的緩存里面沒(méi)有找到對(duì)應(yīng)的條目,那么Chrome會(huì)搜索操作系統(tǒng)自身的DNS緩存,如果找到且沒(méi)有過(guò)期則停止搜索解析到此結(jié)束.
注:怎么查看操作系統(tǒng)自身的DNS緩存,以Windows系統(tǒng)為例,可以在命令行下使用 ipconfig /displaydns 來(lái)進(jìn)行查看
③ 如果在Windows系統(tǒng)的DNS緩存也沒(méi)有找到,那么嘗試讀取hosts文件(位于C:\Windows\System32\drivers\etc),看看這里面有沒(méi)有該域名對(duì)應(yīng)的IP地址,如果有則解析成功。
④ 如果在hosts文件中也沒(méi)有找到對(duì)應(yīng)的條目,瀏覽器就會(huì)發(fā)起一個(gè)DNS的系統(tǒng)調(diào)用,就會(huì)向本地配置的首選DNS服務(wù)器(一般是電信運(yùn)營(yíng)商提供的,也可以使用像Google提供的DNS服務(wù)器)發(fā)起域名解析請(qǐng)求(通過(guò)的是UDP協(xié)議向DNS的53端口發(fā)起請(qǐng)求,這個(gè)請(qǐng)求是遞歸的請(qǐng)求,也就是運(yùn)營(yíng)商的DNS服務(wù)器必須得提供給我們?cè)撚蛎腎P地址),運(yùn)營(yíng)商的DNS服務(wù)器首先查找自身的緩存,找到對(duì)應(yīng)的條目,且沒(méi)有過(guò)期,則解析成功。如果沒(méi)有找到對(duì)應(yīng)的條目,則有運(yùn)營(yíng)商的DNS代我們的瀏覽器發(fā)起迭代DNS解析請(qǐng)求,它首先是會(huì)找根域的DNS的IP地址(這個(gè)DNS服務(wù)器都內(nèi)置13臺(tái)根域的DNS的IP地址),找打根域的DNS地址,就會(huì)向其發(fā)起請(qǐng)求(請(qǐng)問(wèn)www.linux178.com這個(gè)域名的IP地址是多少???),根域發(fā)現(xiàn)這是一個(gè)頂級(jí)域com域的一個(gè)域名,于是就告訴運(yùn)營(yíng)商的DNS我不知道這個(gè)域名的IP地址,但是我知道com域的IP地址,你去找它去,于是運(yùn)營(yíng)商的DNS就得到了com域的IP地址,又向com域的IP地址發(fā)起了請(qǐng)求(請(qǐng)問(wèn)www.linux178.com這個(gè)域名的IP地址是多少?),com域這臺(tái)服務(wù)器告訴運(yùn)營(yíng)商的DNS我不知道www.linux178.com這個(gè)域名的IP地址,但是我知道linux178.com這個(gè)域的DNS地址,你去找它去,于是運(yùn)營(yíng)商的DNS又向linux178.com這個(gè)域名的DNS地址(這個(gè)一般就是由域名注冊(cè)商提供的,像萬(wàn)網(wǎng),新網(wǎng)等)發(fā)起請(qǐng)求(請(qǐng)問(wèn)www.linux178.com這個(gè)域名的IP地址是多少?),這個(gè)時(shí)候linux178.com域的DNS服務(wù)器一查,誒,果真在我這里,于是就把找到的結(jié)果發(fā)送給運(yùn)營(yíng)商的DNS服務(wù)器,這個(gè)時(shí)候運(yùn)營(yíng)商的DNS服務(wù)器就拿到了www.linux178.com這個(gè)域名對(duì)應(yīng)的IP地址,并返回給Windows系統(tǒng)內(nèi)核,內(nèi)核又把結(jié)果返回給瀏覽器,終于瀏覽器拿到了www.linux178.com 對(duì)應(yīng)的IP地址,該進(jìn)行一步的動(dòng)作了。
注:一般情況下是不會(huì)進(jìn)行以下步驟的
如果經(jīng)過(guò)以上的4個(gè)步驟,還沒(méi)有解析成功,那么會(huì)進(jìn)行如下步驟(以下是針對(duì)Windows操作系統(tǒng)):
⑤ 操作系統(tǒng)就會(huì)查找NetBIOS name Cache(NetBIOS名稱緩存,就存在客戶端電腦中的),那這個(gè)緩存有什么東西呢?凡是最近一段時(shí)間內(nèi)和我成功通訊的計(jì)算機(jī)的計(jì)算機(jī)名和Ip地址,就都會(huì)存在這個(gè)緩存里面。什么情況下該步能解析成功呢?就是該名稱正好是幾分鐘前和我成功通信過(guò),那么這一步就可以成功解析。
⑥ 如果第⑤步也沒(méi)有成功,那會(huì)查詢WINS 服務(wù)器(是NETBIOS名稱和IP地址對(duì)應(yīng)的服務(wù)器)
⑦ 如果第⑥步也沒(méi)有查詢成功,那么客戶端就要進(jìn)行廣播查找
⑧ 如果第⑦步也沒(méi)有成功,那么客戶端就讀取LMHOSTS文件(和HOSTS文件同一個(gè)目錄下,寫(xiě)法也一樣)
如果第八步還沒(méi)有解析成功,那么就宣告這次解析失敗,那就無(wú)法跟目標(biāo)計(jì)算機(jī)進(jìn)行通信。只要這八步中有一步可以解析成功,那就可以成功和目標(biāo)計(jì)算機(jī)進(jìn)行通信。
建議:
(1)使用HTTPDNS之類的技術(shù)方案解決:HTTPDNS說(shuō)白了就是用HTTP協(xié)議進(jìn)行域名解析,替代現(xiàn)有的基于UDP的DNS協(xié)議,避免域名解析失敗,域名劫持等問(wèn)題
(2)客戶端和服務(wù)器之間保持長(zhǎng)連接,使用socket通信
(3)本地維護(hù)一個(gè)ip列表,直接使用ip進(jìn)行請(qǐng)求,而非用域名,并定期去更新這個(gè)列表
二、TCP三次握手
建議:無(wú)
三、發(fā)起HTTP請(qǐng)求
建議:
(1)并行連接:通過(guò)多條TCP連接發(fā)起并發(fā)的HTTP請(qǐng)求
(2)持久連接:keep-alive,長(zhǎng)連接,重用TCP連接,以消除連接和關(guān)閉的時(shí)延,以事務(wù)個(gè)數(shù)和時(shí)間來(lái)決定是否關(guān)閉連接
(3)管道化連接:通過(guò)共享TCP連接發(fā)起并發(fā)的HTTP請(qǐng)求
(4)使用Restful風(fēng)格的API
(5)縮短參數(shù)長(zhǎng)度、數(shù)量
(6)壓縮報(bào)文頭或請(qǐng)求內(nèi)容的相關(guān)信息
(7)合并多個(gè)HTTP請(qǐng)求,避免不必要的浪費(fèi)
四、Nginx反向代理
Nginx可以做反向代理服務(wù)器,在真正的服務(wù)層前面設(shè)置網(wǎng)關(guān),用來(lái)接收接口請(qǐng)求,然后根據(jù)策略分發(fā)給后面的web服務(wù)器。這一層做好冗余:有兩臺(tái)nginx,一臺(tái)對(duì)線上提供服務(wù),另一臺(tái)冗余以保證高可用,常見(jiàn)的實(shí)踐是keepalived存活探測(cè),相同virtual IP提供服務(wù)。
負(fù)載均衡調(diào)度策略:
輪詢(RR):按一次循環(huán)的方式將請(qǐng)求調(diào)度到不同的服務(wù)器上。輪詢算法假設(shè)所有的服務(wù)器處理請(qǐng)求的能力都一樣,調(diào)度器會(huì)將所有的請(qǐng)求平均分配給每個(gè)真實(shí)服務(wù)器
加權(quán)輪詢(WRR):LVS會(huì)考慮每臺(tái)服務(wù)器的性能,并給每臺(tái)服務(wù)器添加一個(gè)權(quán)值,如果服務(wù)器A的權(quán)值為1,服務(wù)器B的權(quán)值為2,則調(diào)度器調(diào)度到服務(wù)器B的請(qǐng)求會(huì)是A的兩倍
最小連接(LC):把請(qǐng)求調(diào)度到連接數(shù)量最小的服務(wù)器上
加權(quán)最小連接(WLC):給每個(gè)服務(wù)器一個(gè)權(quán)值,調(diào)度器會(huì)盡可能保持服務(wù)器連接數(shù)量與權(quán)值之間的平衡
基于局部性最少的連接(lblc):根據(jù)請(qǐng)求的目標(biāo)IP尋找最近該目標(biāo)IP地址所使用的服務(wù)器,如果這臺(tái)服務(wù)器依然可用,并且有能力處理該請(qǐng)求,調(diào)度器會(huì)盡量選擇相同的服務(wù)器,否則會(huì)繼續(xù)選擇其他可行的服務(wù)器
帶復(fù)制的基于局部性最少連接(lblcr):記錄的不是一個(gè)目標(biāo)IP與一臺(tái)服務(wù)器之間的連接記錄,它會(huì)維護(hù)一個(gè)目標(biāo)IP到一組服務(wù)器之間的映射關(guān)系,防止單點(diǎn)服務(wù)器負(fù)載過(guò)高
目標(biāo)地址散列調(diào)度(DH):通過(guò)散列函數(shù)將目標(biāo)IP與服務(wù)器建立映射關(guān)系,出現(xiàn)服務(wù)器不可用或負(fù)載過(guò)高的情況下,發(fā)往該目標(biāo)IP的請(qǐng)求會(huì)固定發(fā)給該服務(wù)器
源地址散列調(diào)度(SH):根據(jù)源地址散列算法進(jìn)行靜態(tài)分配給固定的服務(wù)器資源
五、應(yīng)用層
這一層涉及到路由協(xié)議,即請(qǐng)求的URL對(duì)應(yīng)到哪個(gè)controller的代碼去進(jìn)行處理,通常有框架會(huì)去做路由協(xié)議處理,這時(shí)就會(huì)涉及到參數(shù)過(guò)濾、添加header或body、格式化返回結(jié)果等。
這一層的高可用通過(guò)集群實(shí)現(xiàn),假設(shè)反向代理層是nginx,nginx.conf里能夠配置多個(gè)web后端,并且nginx能夠探測(cè)到多個(gè)后端的存活性。
自動(dòng)故障轉(zhuǎn)移:當(dāng)web-server掛了的時(shí)候,nginx能夠探測(cè)到,會(huì)自動(dòng)的進(jìn)行故障轉(zhuǎn)移,將流量自動(dòng)遷移到其他的web-server,整個(gè)過(guò)程由nginx自動(dòng)完成,對(duì)調(diào)用方是透明的。
應(yīng)用邏輯處理:
讀:先讀緩存,緩存要有一定時(shí)間,盡量使緩存保持高命中率;緩存沒(méi)有則讀數(shù)據(jù)庫(kù),讀完根據(jù)實(shí)際需要去保存到緩存中;緩存可以壓縮保存,減少空間
寫(xiě):能用異步代替同步的,使用異步(從業(yè)務(wù)角度來(lái)看);能用同步的,盡量不用異步(從技術(shù)角度來(lái)看)。
假如處理邏輯復(fù)雜,而且時(shí)間長(zhǎng),再不影響業(yè)務(wù)感知的情況下用異步代替同步,將數(shù)據(jù)寫(xiě)入消息隊(duì)列,再由腳本去讀取執(zhí)行,這樣在高并發(fā)情況下提高速度,減少崩潰。后期數(shù)據(jù)不一致可進(jìn)行腳本或人工修補(bǔ)。
假如處理短小,而且涉及事務(wù)操作,那可以使用同步,減少不一致等錯(cuò)誤。
六、服務(wù)層
這一層通常是微服務(wù)使用到,相關(guān)的讀寫(xiě)處理邏輯如上。同時(shí)為上一層提供連接池,減少資源、時(shí)間開(kāi)銷。
七、緩存、數(shù)據(jù)庫(kù)
這里也提供連接池。
緩存層、數(shù)據(jù)庫(kù)層的話需要主從同步,然后雙主同步,一臺(tái)對(duì)線上提供服務(wù),另一臺(tái)冗余以保證高可用。
mysql并發(fā)數(shù) < redis并發(fā)數(shù) < 消息隊(duì)列并發(fā)數(shù) < 服務(wù)器的TCP連接數(shù)
TCP連接數(shù):理論無(wú)上限:2的32次方(ip數(shù))×2的16次方(port數(shù)),但是在unix/linux下限制連接數(shù)的主要因素是內(nèi)存和允許的文件描述符個(gè)數(shù)(每個(gè)tcp連接都要占用一定內(nèi)存,每個(gè)socket就是一個(gè)文件描述符),另外1024以下的端口通常為保留端口。
對(duì)server端,通過(guò)增加內(nèi)存、修改最大文件描述符個(gè)數(shù)等參數(shù),單機(jī)最大并發(fā)TCP連接數(shù)超過(guò)10萬(wàn)是沒(méi)問(wèn)題的。

本文鏈接:http://m.jmtianhui.com/news/details-37-804.html
版權(quán)聲明:
1:本站所有內(nèi)容均由互聯(lián)網(wǎng)收集整理、上傳,并且以計(jì)算機(jī)技術(shù)研究交流為目的,僅供大家參考、學(xué)習(xí),不存在任何商業(yè)目的與商業(yè)用途,如描述有誤或者學(xué)術(shù)不對(duì)之處歡迎及時(shí)提出,不甚感謝。
2、 如涉及版權(quán)問(wèn)題,請(qǐng)聯(lián)系我們4724325@qq.com第一時(shí)間處理;
SaaS 這個(gè)行業(yè)還在不斷地快速增長(zhǎng)。據(jù) Gartner 的一項(xiàng)調(diào)查顯示,預(yù)計(jì) 2022 年 SaaS 的支出將增長(zhǎng) 40%。企業(yè)“每年還要在 SaaS 上面額外支出 200 億美元”。 SaaS 引擎正在加速,以實(shí)現(xiàn)閃電般的快速增長(zhǎng)。
1999年,貝尼奧夫創(chuàng)立了Salesforce,初衷是把它打造成一個(gè)世界級(jí)的SFA互聯(lián)網(wǎng)公司。銷售出身的本尼奧夫是個(gè)營(yíng)銷鬼才,除了免費(fèi)試用和限量贈(zèng)送,早期“NO software”的示威口號(hào)讓Salesforce在4個(gè)月便登上華爾街日?qǐng)?bào)頭條,直到現(xiàn)在,被用來(lái)在客戶間推薦和宣傳的Dreamforce大會(huì),已經(jīng)擁有了上億的觀看量。
關(guān)于搜狐,除了把搜狗賣(mài)給騰訊,外界談?wù)摰某3J钦崎T(mén)人張朝陽(yáng),他的言論,他的物理課。至于公司本身,搜狐近些年似乎總在核心敘事之外。
Meta(原Facebook)在美國(guó)加州灣區(qū)開(kāi)了一家線下店,打出“Meta一站式硬件商店”的名號(hào)。5月9日,它正式開(kāi)業(yè)了。
與其他所有的新變革都會(huì)對(duì)現(xiàn)有游戲規(guī)則造成沖擊一樣,新生的電子發(fā)票系統(tǒng),也在無(wú)形之中松動(dòng)了傳統(tǒng)發(fā)票服務(wù)市場(chǎng)的傳統(tǒng)格局,為行業(yè)帶來(lái)了全新的改變。
局勢(shì)已經(jīng)清晰,誰(shuí)能在新的角斗場(chǎng)里占據(jù)高地,誰(shuí)就能率先跑出新的商業(yè)模型。驅(qū)除霧霾,這是新的良性發(fā)展,也是在新的外部力量干預(yù)下,一個(gè)被迫斷臂成長(zhǎng)的互聯(lián)網(wǎng)云計(jì)算新藍(lán)圖。
2021年,在國(guó)內(nèi)為元宇宙“瘋狂”的時(shí)候,海外市場(chǎng)則在猛烈推進(jìn)Web3.0。該年底,美國(guó)一場(chǎng)國(guó)會(huì)聽(tīng)證會(huì),向這一領(lǐng)域傳達(dá)出前所未有的友好態(tài)度。
前不久,“微信農(nóng)場(chǎng)”登上熱搜第一,網(wǎng)友發(fā)現(xiàn)微信狀態(tài)中竟然偷偷上線了“農(nóng)場(chǎng)功能”,網(wǎng)友們都玩“瘋”了,各種動(dòng)物開(kāi)始占據(jù)了微信狀態(tài).....奶茶也不例外。 微信新功能的火爆,貌似是在給奶茶店“發(fā)紅包”,茶飲店或許能從中獲取新思路?