運(yùn)維高手三:nginx負(fù)載均衡常見架構(gòu)及問題解析

Nginx 作為負(fù)載均衡是基于代理模式的基礎(chǔ)之上,所以在看本篇文章時(shí)犬性,你需要對 Nginx 的代理瞻离、負(fù)載均衡的基本原理及 Nginx 負(fù)載均衡配置有基礎(chǔ)的了解。

nginx架構(gòu)圖

首先講一講 Nginx 作為負(fù)載均衡在整體服務(wù)架構(gòu)和網(wǎng)站服務(wù)架構(gòu)里所扮演的角色乒裆,其次重點(diǎn)介紹 Nginx 作為負(fù)載均衡時(shí)遇到的一些常見問題套利,比如客戶端 IP 地址獲取問題、域名攜帶問題 等等鹤耍。

Nginx 負(fù)載均衡應(yīng)用架構(gòu)

關(guān)于 Nginx 負(fù)載均衡應(yīng)用架構(gòu)在企業(yè)應(yīng)用中主要有兩種類型肉迫。

  • 分層入口代理架構(gòu)
nginx分層代理

第一類是分層入口代理架構(gòu)(屬于相對傳統(tǒng)架構(gòu)),我們可以對整個(gè)后臺網(wǎng)站服務(wù)系統(tǒng)架構(gòu)做一個(gè)分層稿黄。大體可以分為用戶請求入口層喊衫,以及為用戶請求提供邏輯處理的服務(wù)層和為用戶提供真正相關(guān)數(shù)據(jù)的數(shù)據(jù)層。

如圖所示杆怕,我們可以發(fā)現(xiàn)入口層是最接近用戶請求的族购,所以在這一層中,Nginx 扮演著重要的角色——入口網(wǎng)關(guān)陵珍,并承擔(dān) 7 層負(fù)載均衡(LB)的功能联四。如圖所示入口層的 Nginx 之前還有一套 LB,LB層的主要功能是為了保證 Nginx 本身的高可用撑教、或承擔(dān) TCP/IP 負(fù)載均衡功能,所以這里整個(gè)入口層的負(fù)載均衡模式是一個(gè) 4層LB+7層LB(Nginx)醉拓,這套架構(gòu)中把與業(yè)務(wù)服務(wù)的相關(guān)功能則由 Nginx來處理伟姐。

哪一些業(yè)務(wù)服務(wù)相關(guān)功能交給 Nginx 作合適呢?比如在入口層我們會放一些和用戶相關(guān)的信息亿卤,也比如動靜分離(及實(shí)現(xiàn)分離網(wǎng)站頁面的靜態(tài)元素和動態(tài)元素)愤兵,我們知道靜態(tài)元素沒有必要下沉到數(shù)據(jù)層獲取,可以直接通過 Nginx 實(shí)現(xiàn)動態(tài)和靜態(tài)的分流并由 Nginx 直接處理排吴。另外秆乳,用戶的訪問控制、反爬蟲等規(guī)則也是在入口層的 Nginx 實(shí)現(xiàn)的。

服務(wù)層同樣也需要 Nginx 屹堰, 來負(fù)載均衡實(shí)現(xiàn)上層請求應(yīng)答上的高可用肛冶。

分層架構(gòu)的最后一層是數(shù)據(jù)層,數(shù)據(jù)層中 Nginx 同樣可以實(shí)現(xiàn)負(fù)載均衡扯键,但數(shù)據(jù)層中通常使用的Nginx 較少見睦袖,為什么呢?因?yàn)檫@一層更追求數(shù)據(jù)調(diào)用的效率荣刑,比如 Memcache蛤铜、MySQL 等數(shù)據(jù)庫調(diào)用更多是基于底層的協(xié)議請求午绳,而非更上層的 HTTP 請求。

但如果如果追求 HTTP 的可靠性、和應(yīng)用性榜轿,是可以借助 Nginx 的負(fù)載均衡實(shí)現(xiàn)的,如:可Redis 使用 Nginx 做反向代理浪规,通過 Nginx 把前端發(fā)送的 HTTP 請求轉(zhuǎn)換成 Redis 協(xié)議的請求方式去請求Redis凰兑,這樣就完成了 Redis 的反向代理。這種方式虱颗,企業(yè)可以很好控制Redis的監(jiān)控沥匈、數(shù)據(jù)的一致性保障、及基于 Hash 算法穩(wěn)定性保障忘渔。

總結(jié)一下高帖,Nginx在分層架構(gòu)里扮演了一個(gè)7層應(yīng)用層負(fù)載均衡角色。隨著軟件架構(gòu)和系統(tǒng)架構(gòu)是不斷演進(jìn)變化畦粮,我們發(fā)現(xiàn)企業(yè)開始采用K8s散址、Docker這種輕量化、虛擬化部署宣赔;還有很多企業(yè)更加傾向于微服務(wù)架構(gòu)预麸,支持set化等。在這樣的架構(gòu)下儒将,傳統(tǒng)的分層負(fù)載均衡模式吏祸,促使改進(jìn)去支持服務(wù)注冊和發(fā)現(xiàn)。這個(gè)就是介紹的第二種Nginx負(fù)載均衡模式钩蚊。

  • 服務(wù)注冊發(fā)現(xiàn)代理架構(gòu)
服務(wù)發(fā)現(xiàn)

如圖所示贡翘,圖中重點(diǎn)列出了 Nginx 在注冊發(fā)現(xiàn)場景中扮演的角色。同樣砰逻,我們可以看到整個(gè)流量還是通過 Nginx 來做入口網(wǎng)關(guān)的鸣驱,但是重要的一點(diǎn)是 Nginx 需要支持動態(tài)的發(fā)現(xiàn)和注冊后端服務(wù)。

注冊是指后端的應(yīng)用程序(如圖中的 App1~App4)需要去往前端的中心存儲節(jié)點(diǎn)里面注冊它的應(yīng)用服務(wù)蝠咆,當(dāng)注冊上報(bào)后踊东,Nginx 動態(tài)發(fā)現(xiàn)并動態(tài)生成發(fā)現(xiàn)的配置北滥,然后對入口網(wǎng)關(guān)代理負(fù)載均衡進(jìn)行分流調(diào)整,我們可以發(fā)現(xiàn)在基于 K8s 和 Docker 這種部署模式業(yè)務(wù)入口網(wǎng)關(guān)就應(yīng)用了這種架構(gòu)闸翅。

兩種負(fù)載均衡應(yīng)用架構(gòu)說完了再芋,我們會發(fā)現(xiàn)兩種架構(gòu)最大的區(qū)別是后面一種支持后端服務(wù)的注冊與發(fā)現(xiàn)。

nginx負(fù)載均衡常見問題

  • 客戶端IP地址獲取問題

第一個(gè)問題是客戶端 IP 地址獲取問題缎脾,為什么會存在客戶端 IP 地址獲取問題呢祝闻?

nginx獲取ip

我們來看這樣一張模擬圖,圖中請求從用戶到 Nginx遗菠,再到后端服務(wù)联喘。我們可以看到用戶的 IP 地址是100.100.100.100,Nginx 的地址是 192.168.0.1辙纬,通過 Nginx 負(fù)載均衡到三臺后端服務(wù)豁遭,它們的 IP分別是 192.168.1.1、192.168.1.2贺拣、192.168.1.3蓖谢。

那么客戶端的 IP 地址為什么會無法被后端服務(wù)獲取呢?原因是我們獲取方式在Nginx的加入負(fù)載均衡后出現(xiàn)了差異譬涡,具體如下:

我們了解后端服務(wù)獲取IP的方式闪幽,第一種方式是由后端服務(wù)通過 4 層 TCP 協(xié)議獲取源 IP 地址,你會發(fā)現(xiàn)涡匀,通過這種方式盯腌,后端服務(wù)只能獲取 Nginx 的 IP 地址,而無法獲取到 100.100.100.100 這個(gè)IP地址陨瘩,原因在于 Nginx 做了一層反向代理腕够,而反向代理修改了客戶的源地址和源端口的包頭,所以在后端服務(wù)舌劳,通過這種方式只能獲取到 Nginx 的 IP帚湘,而無法獲取到用戶的 IP。

另外一種方式是后端服務(wù)通過 HTTP 標(biāo)準(zhǔn)請求頭信息 X-forwarded-for 獲取用戶IP信息甚淡,但是通過代理這一層時(shí)大诸,有可能把 X-forwarded-for 改寫或丟失用戶的請求地址,這樣就有可能導(dǎo)致 Xforwarded-for 在后端無法獲取用戶信息贯卦。

X-forwarded-for 頭的格式底挫,它會一層一層往后添加信息,比如第一層是客戶端的 IP 地址脸侥,然后是通過代理后的代理層IP,代理層后一層一層的追加信息盈厘。X-forwarded-for需要通過 Nginx 配置添加睁枕,從而使得標(biāo)準(zhǔn)協(xié)議將以X-forwarded-for 頭為載體,把用戶的 IP 地址和代理層 IP 地址添加到這個(gè)載
體中,這樣后端才能通過X-forwarded-for 獲取到詳細(xì)的 IP 地址信息外遇。

解決辦法

知道了問題發(fā)生的原因注簿,我們?nèi)绾蝸斫鉀Q呢?
第一種方式的解決辦法是在 Nginx 負(fù)載均衡的基礎(chǔ)上添加了一個(gè)轉(zhuǎn)發(fā)到后端的標(biāo)準(zhǔn) head 信息跳仿,把用戶的 IP 信息通過 X-Forwarded-For 方式傳遞過去诡渴。

第二種方式是就是添加一個(gè) X-Real 的自定義頭,自定義頭我們可以隨意的命名菲语,一般情況下命名為X-Real_IP妄辩,把用戶的真實(shí)四層 IP地址賦值給它,如何做到呢山上?

remote_addr 是一個(gè) Nginx 的內(nèi)置變量眼耀,它獲取到的是 Nginx 層前端的用戶 IP 地址,這個(gè)地址是一個(gè) 4 層的 IP 地址佩憾,我們來上圖哮伟,Nginx 的 IP 地址是 192.168.0.1,它的 remote_addr 是什么呢妄帘?它就是用戶的 100.100.100.100 這個(gè)地址楞黄,也就是直接將 TCP/IP 協(xié)議的用戶 IP 地址(源地址)以 remote_addr 變量的方式賦值給 X-Real_IP 的自定義變量,后端直接通過X-Real 獲取 X-Real IP信息抡驼,便可獲取到用戶地址鬼廓。

更深一層的分析,這兩種解決方式雖然解決地址獲取的問題婶恼,但各有優(yōu)劣桑阶,X-Forwarded-For 是通過Nginx 中的 $proxy_add_x_forwarded_for 內(nèi)置變量獲取的頭信息,通過 X-Forwarded-For傳遞到后端勾邦。在 Nginx 通過 proxy_add_x_forwarded_for 內(nèi)置變量獲取的 X-Forwarded-For 信息本身可能不準(zhǔn)確 因?yàn)榍岸擞脩艨梢宰鞔鄹?HTTP 的請求頭 所以如果被一些惡意用戶篡改了請求的 XForwarded 信息就會導(dǎo)致信息影響獲取真實(shí)的用戶 IP 地址信息蚣录。

第二種方式相對于第一種方式而言更加準(zhǔn)確,因?yàn)?remote_addr 是直接獲取第一層代理的用戶 IP 地址眷篇,如果直接把這個(gè)地址傳遞給 X-Real萎河,這樣就會更加準(zhǔn)確。但是它有什么劣勢呢蕉饼?如果是多級代理的話虐杯,用戶如果不是直接請求到最終的代理層,而是在中間通過了 n 層帶來轉(zhuǎn)發(fā)過來的話昧港,此時(shí)remote_addr 可能獲取的不是用戶的信息擎椰,而是 Nginx 最近一層代理過來的 IP 地址,此時(shí)同樣沒有獲取到真實(shí)的用戶 IP 地址信息创肥。

可以看到达舒,這兩種方式各有優(yōu)劣值朋,通常你也可以把這兩種配置都加進(jìn)去,然后交給后端綜合分析巩搏,這就是對于客戶端 IP 地址攜帶通常的配置方式昨登。

  • 如何解決域名攜帶

第二個(gè)問題,也就是 Nginx 作為負(fù)載均衡是如何把請求域名信息攜帶到后端的贯底?這樣的問題是什么樣的場景呢丰辣?首先我們來看一張示意圖。

圖片

用戶的 IP 同樣是 100.100.100.100禽捆,Nginx 對外 IP 地址是 200.200.200.200笙什,Nginx 本身內(nèi)部的地址是 192.168.0.1,同樣分發(fā)給三個(gè)后端服務(wù)睦擂。當(dāng)用戶請求某一 Nginx 入口域名時(shí)得湘,會攜帶一個(gè)頭信息,叫作 Host 頭信息顿仇。如果通過域名方式淘正,當(dāng)用戶請求的是 http://www.baidu.com,它的 Host頭就是 www.baidu.com臼闻,以這樣的方式請求到代理層時(shí)鸿吆,由于 Nginx 沒有將頭信息攜帶到后端,而是把配置的頭信息置為空述呐,這樣就導(dǎo)致后端服務(wù)想要獲取不到用戶請求的 Host 信息惩淳,導(dǎo)致服務(wù)不可用。這時(shí)需要 Nginx 將用戶攜帶的 Host 頭信息真實(shí)的傳遞給后端乓搬。

第二種情況是假設(shè)用戶請求用的 IP 地址方式(非域名)思犁,此時(shí)會發(fā)現(xiàn),用戶請求的 IP 地址的 Host頭信息本身就是空的进肯,所以如果后端需要用到 Host 頭信息激蹲,這就需要在 Nginx 中把 Host 頭改寫為一個(gè)要求的頭信息,我們來看下這個(gè)場景配置:

http {
        …
        upstream app_servers {
                 server ip1:port1;
                 server ip2:port2;
                 server ip3:port3;
        }
        server {
         …
              location / {
                      proxy_set_header Host $host ;
                      proxy set_header Host www.vipumi.com; 
                      proxy_pass http://app_servers; 
              }
        ….
        }
}

我們通過 proxy_set_header 配置方式加入 Host 頭部字段江掩,如果用戶的請求攜帶了域名学辱,就把這個(gè)域名的 head 頭以標(biāo)準(zhǔn)的 HTTP 方式將頭信息傳遞到后端,然后讓后端獲取 Host 頭信息环形,這樣訪問就不會受影響策泣。

然后,如果用戶沒有攜帶頭信息抬吟,而后端又要求指定域名萨咕,那么我們就可以在 proxy_set_header下,將 Host 頭信息指定成一個(gè)固定的域名火本,保證滿足后臺對 Host 頭信息的要求危队,這樣就可以解決域名攜帶問題蓄喇。

  • 負(fù)載均衡導(dǎo)致session丟失問題
nginxsession丟失

另外一個(gè)是 session 丟失問題,我們知道交掏,session 是用戶的一個(gè)會話信息,服務(wù)端和用戶端通信需要一個(gè)訪問認(rèn)證刃鳄,以及對鑒權(quán)處理的時(shí)候盅弛,給客戶端分配一串 session 信息,這個(gè) session 信息會在客戶端以 cookie 的方式承載到服務(wù)端中進(jìn)行校驗(yàn)叔锐。如果加入 Nginx 負(fù)載均衡挪鹏,會默認(rèn)開啟一個(gè)輪詢策略。假如這樣的一種場景愉烙,用戶請求到 Nginx讨盒,第一次請求會分發(fā)給 App server 1,第二次請求分發(fā)給 App server 2步责,但用戶的 session 保留在 App1 上返顺,此時(shí)這條請求再去請求 App2 的話,由于App2 上沒有 session 信息蔓肯,就導(dǎo)致會話丟失遂鹊,用戶需要重新登錄。我們看到 Nginx 作為負(fù)載均衡 + Java 后臺應(yīng)用中遇見的一種問題蔗包,我們該怎樣解決呢秉扑?

  1. Session 保持

第一種方式是做 Session 保持,就是把負(fù)載均衡策略基于原有輪詢數(shù)的基礎(chǔ)上调限,改用 ip_hash舟陆、URL_hash 來解決。ip_hash 就是基于用戶 IP 來做 hash耻矮,一個(gè)用戶的請求統(tǒng)一分發(fā)到一臺機(jī)器上秦躯。URL_hash 用于用戶請求固定頁面時(shí),將用戶請求固定到具體 后端 上淘钟,就保證了 Session 不會被丟失宦赠。

  1. Session復(fù)制

第二種方式是 Session 復(fù)制。所謂 Session 復(fù)制是在后臺應(yīng)用的基礎(chǔ)上米母,讓 Session 之間可以以傳播的方式進(jìn)行復(fù)制勾扭。也就是 App1 上如果有一個(gè)Session,那么它可以復(fù)制給 App2铁瞒、App3妙色,無論怎樣輪詢,三個(gè) App 上都會有同樣的Session 信息慧耍,不至于因?yàn)檩喸儗?dǎo)致丟失會話失效身辨。

  1. Session 共享

Session 共享是由程序完成的丐谋,我們把 Session 信息不放在本地,通過應(yīng)用程序把 Session 信息放入共享的 K/V 存儲中煌珊,這樣就不會產(chǎn)生 Session 丟失情況了号俐。

我們可以看到,如果 Nginx 解決 Session 丟失問題基于 Session 保持來解決定庵,所以怎樣配置 Nginx呢吏饿?

http {
        …
        upstream app_servers {
                 ip_hash;
                 server ip1:port1;
                 server ip2:port2;
                 server ip3:port3;
        }
        server {
         …
              location / {
                  proxy_pass http://app_servers; 
              }
        ….
        }
}

這個(gè)配置中我們在負(fù)載均衡 Upstream 對應(yīng)的地址池中加入一個(gè) ip_hash 策略猪落,這樣就可以基于 ip_hash 的方式進(jìn)行輪詢了。

http {
        …
        upstream app_servers {
            hash $request_uri;
                 server ip1:port1;
                 server ip2:port2;
                 server ip3:port3;
        }
        server {
         …
              location / {
                  proxy_pass http://app_servers;   
              }
        ….
        }
}

第二種方式基于 URL_hash笨忌,URL_hash 方式就是添加一個(gè)自定義 hash,通過設(shè)置 Nginx 內(nèi)部的請求變量 $request_url 進(jìn)行 hash 運(yùn)算官疲,這樣就可以基于這個(gè)請求的 URL 地址來做 hash 了,也就做到Session 的保持的方案庶艾。

  • 真實(shí)的 Realserver 狀態(tài)檢測
nginx健康檢查

最后一個(gè)常見問題是如何檢測后端的 Realserver 狀態(tài),我們首先需要了解Nginx 默認(rèn)真實(shí)檢測后臺服務(wù)狀態(tài)是怎么實(shí)現(xiàn)的.

生產(chǎn)環(huán)境中 一個(gè) Nginx 作為負(fù)載均衡如果發(fā)現(xiàn)后端某一個(gè)節(jié)點(diǎn)出現(xiàn)問題 那么它會把這個(gè)節(jié)點(diǎn)剔除颖榜,并檢測下一個(gè)節(jié)點(diǎn),那么 Nginx 是如何檢測到節(jié)點(diǎn)有問題呢煤裙?默認(rèn)情況下掩完,Nginx 基于 TCP 端口和連接方式檢測,也就是在服務(wù) ping 不通硼砰,或無法建立 TCP 鏈接且蓬,以及端口服務(wù)完全不可用的狀態(tài)下,才會認(rèn)為這個(gè)服務(wù)不可用题翰。

你可以想一想恶阴,在 Nginx 的這種檢測機(jī)制下通常是有遺漏的,如果響應(yīng)狀態(tài)或返回狀態(tài)有問題豹障,對于Nginx 代理層而言冯事,它并沒有做到一個(gè)有效的容錯(cuò),只是檢測底層 TCP 連接方式血公,是不是也存在一定的局限性.

這個(gè)時(shí)候昵仅,你可能會想是否可以加入一個(gè) proxy_next_upstream 就可以把后端節(jié)點(diǎn)剔除呢?proxy_next_upstream 雖然能夠檢測到服務(wù)端返回到前端的狀態(tài)碼,但是無法做到真正自動摘除故障節(jié)點(diǎn)摔笤。

那么怎么做呢够滑?這里就需要依賴一個(gè)第三方模塊了,這個(gè)第三方模塊就是nginx_upstream_check_module吕世,它是由淘寶技術(shù)團(tuán)隊(duì)開發(fā)并開源的彰触,提供了更加細(xì)致的對后臺服務(wù)真實(shí)狀態(tài)的檢測。你可以把這個(gè)模塊編譯到 Nginx 中命辖,或是使用淘寶的 Tengine渴析,Tengine 也是基于 Nginx 1.6 版本開發(fā)開源的。我們接下來看下具體配置:

check interval=3000 rise=2 fall=5 timeout=1000 type=http;  //定義檢查間隔吮龄、周期、時(shí)
check_keepalive_requests 100;  //一個(gè)連接發(fā)送的請求數(shù)
check_http_send “HEAD / HTTP/1.1\r\nConnection: keep-alive\r\n\r\n”; //定義健康檢查
check_http_expect_alive http_2xx http_3xx;  //判斷后端返回狀態(tài)碼

通過這樣的配置咆疗,我們定義了檢測間隔漓帚、周期和超時(shí)時(shí)間;定義了一個(gè)連接發(fā)送的請求數(shù)午磁;然后是定義健康檢查方式尝抖,比如檢查 head 頭的請求信息;最后判斷后端返回狀態(tài)碼迅皇,如果是非 200 或 300 的話昧辽,就認(rèn)為后臺服務(wù)不健康,需要把這個(gè)問題服務(wù)除掉登颓,避免用戶請求到問題節(jié)點(diǎn)搅荞。

未完待續(xù)
此文為系列文章,游戲發(fā)布于公眾號框咙,期待您的關(guān)注!公眾號:運(yùn)維大師兄喇嘱。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末者铜,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子愉粤,更是在濱河造成了極大的恐慌俗壹,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件头滔,死亡現(xiàn)場離奇詭異,居然都是意外死亡兴猩,警方通過查閱死者的電腦和手機(jī)早歇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來晨另,“玉大人借尿,你說我怎么就攤上這事屉来。” “怎么了茂契?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵掉冶,是天一觀的道長脐雪。 經(jīng)常有香客問我,道長召锈,這世上最難降的妖魔是什么获询? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任吉嚣,我火速辦了婚禮尝哆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘琐馆。我一直安慰自己,他們只是感情好瘦麸,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布滋饲。 她就那樣靜靜地躺著,像睡著了一般箍鼓。 火紅的嫁衣襯著肌膚如雪袄秩。 梳的紋絲不亂的頭發(fā)上逢并,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天砍聊,我揣著相機(jī)與錄音玻蝌,去河邊找鬼词疼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛许饿,可吹牛的內(nèi)容都是我干的舵盈。 我是一名探鬼主播,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼瓦糟,長吁一口氣:“原來是場噩夢啊……” “哼菩浙!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起陆淀,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤斋竞,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后浸剩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鳄袍,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拗小,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年哀九,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呼胚。...
    茶點(diǎn)故事閱讀 39,739評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蝇更,死狀恐怖年扩,靈堂內(nèi)的尸體忽然破棺而出访圃,到底是詐尸還是另有隱情,我是刑警寧澤克胳,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布漠另,位于F島的核電站,受9級特大地震影響笆搓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜肤频,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一宵荒、第九天 我趴在偏房一處隱蔽的房頂上張望净嘀。 院中可真熱鬧,春花似錦暑刃、人聲如沸膜眠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽辟躏。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間涯曲,已是汗流浹背幻件。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留篱蝇,地道東北人徽曲。 一個(gè)月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓秃臣,卻偏偏與公主長得像哪工,于是被迫代替她去往敵國和親雁比。 傳聞我的和親對象是個(gè)殘疾皇子撤嫩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評論 2 354

推薦閱讀更多精彩內(nèi)容

  • linux負(fù)載均衡總結(jié)性說明(四層負(fù)載/七層負(fù)載) 一序攘,什么是負(fù)載均衡1)負(fù)載均衡(Load Balance)建立...
    phpdi閱讀 402評論 0 0
  • Nginx負(fù)載均衡 1两踏、負(fù)載均衡的作用 如果你的nginx服務(wù)器給2臺web服務(wù)器做代理,負(fù)載均衡算法采用輪詢梦染,那...
    漫步云端vv閱讀 547評論 0 1
  • ** 內(nèi)容安排: ** 簡介 區(qū)別 Nginx肮疗、LVS及HAProxy負(fù)載均衡軟件的優(yōu)缺點(diǎn) 一、簡介 ** 所謂四...
    薛晨閱讀 67,277評論 12 159
  • 最近我注意到们衙,關(guān)于當(dāng)代網(wǎng)絡(luò)負(fù)載均衡和代理的入門教材非常匱乏碱呼。我心想:為什么會這樣?負(fù)載均衡是構(gòu)建可靠的分布式系統(tǒng)所...
    夜風(fēng)月圓閱讀 942評論 0 2
  • 我想你身邊也有不少自稱女漢子的妹子吧,他們當(dāng)中有些美得讓人妒忌欣鳖、嬌小的讓人心疼茴厉,有的性格大大咧咧让网,行為舉止活像男投...
    Y小姐_閱讀 554評論 2 4