ref: https://lwn.net/Articles/853637/
如果對 SO_REUSEPORT 這個能夠提供網路服務吞吐量的 socket options 不陌生的話,那這篇文章強烈推薦看看。
本篇文章是從討論開啟 SO_REUSEPORT 這個選項會出現的一些行為以及可能可以怎麼做
最直得看的應該是留言區本身,有很多不同層級的討論,大家最愛講的 Google SRE 人也都出來分享自己的經驗了。
正常情況下,每個 TCP Port 只能被一個 process 給使用來聽取封包,但是對於一些網路重度使用的系統來說,就算讓該 process 將連線給分散到其他的 process 去處理,該 process 依然可能是系統的效能瓶頸。
Linux Kernel 3.9 後引入的 SO_REUSEPORT 參數就是為了解決這個效能問題而來的,這個參數允許多個 Process 同時使用一個 TCP Port,每當底層有一條新的連線請求時, Kernel 會從眾多的候選人之一中挑選一個可用來處理。
這種情況下,網路應用程式就可以專心處理連線工作,然後實務上同時執行多個 Process 即可。底層的 Kernel 會幫忙做連線的負載分配。
當眾多候選 process 其中之一掛掉了(可能是 crash,也有可能是有意的重啟), kernel 會注意到這個候選人要說掰掰,這候選人處理的所有 connection 都會被移除,比較糟糕的是其他待在 Accept-Queue 那些還沒被建立連線的連線請求也會一併被移除。
作者認為 Kernel 應該要有能力可以轉移那些 Accept-queue 中的連線到其他還工作的候選 process 下去處理,這樣使用者/Client 的連線就不會需要處理太多重連的問題。
文章後面都在探討可行的做法以及這個問題可能會導致什麼問題。
留言區滿熱鬧的,譬如說
1. 有人認為 server 重啟的情況實在太少見,有需要為這麽少見的情況導入這麼複雜的修改到 Kernel 中?
a. 有人回答使用 Let's Encrypt 你可能每幾週就要重啟一次。
b. Google SRE 回答其內部因為調整設定的緣由,幾乎無時無刻都需要重啟服務,不過這問題已經從別的層級去處理掉,所以修改 Kernel 對他們的用途不太大。
2. 有人提出 Nginx 本身有 live migration 的功能,可以將 fd 給轉移到其他的 process 去處理。
a. 有人提出這邊談的是 socket/connection 的層級,這些東西都還沒發生到 userspace process 同時也不是 userspace 應用程式可以接觸處理的。
b. 本文探討的是 bind(), accept(), listen() 這類型 function call 之間 kernel 會幫忙做的事情。
有興趣的別忘了閱讀留言區
同時也有1部Youtube影片,追蹤數超過11萬的網紅Bmon's Live,也在其Youtube影片中提到,DS1821+:http://sy.to/j5yhf Discord 伺服器連結:https://discord.gg/S7gURc7P4W 是ㄉ 今天偷偷用NAS架設了一台Minecraft Server(´・ω・`) 有興趣一起玩的可以進Discord和我們交流交流啦!! 得獎名單(請點連結...
「nginx是什麼」的推薦目錄:
- 關於nginx是什麼 在 矽谷牛的耕田筆記 Facebook 的最讚貼文
- 關於nginx是什麼 在 矽谷牛的耕田筆記 Facebook 的最佳解答
- 關於nginx是什麼 在 Kewang 的資訊進化論 Facebook 的最佳貼文
- 關於nginx是什麼 在 Bmon's Live Youtube 的精選貼文
- 關於nginx是什麼 在 常用的Nginx Config 與相關指令教學: 四大步驟入門網站架設 的評價
- 關於nginx是什麼 在 紀老師程式教學網- NginX! 最猛的HTTP 伺服器換人做做看 ... 的評價
- 關於nginx是什麼 在 NGINX 安裝與設定- Web server 反向代理與負載平衡- YouTube 的評價
nginx是什麼 在 矽谷牛的耕田筆記 Facebook 的最佳解答
ref: https://engineering.hellofresh.com/ambassador-the-evolution-of-ingress-gateway-at-hellofresh-3889232cab6f
本篇文章是 HelloFresh 這個美國生鮮食材訂購服務想要分享其團隊中 Ingress gateway 的演化史。該團隊過往使用 VM 作為其底層基礎架構來部署應用程式,後來遷移到
kubernetes 改用容器來部署,然而其內部的其他元件並沒有隨者 kubernetes 轉移而一併更新,譬如文章要探討的 Ingress gateway。
因此文章後將探討原先的 Ingress gateway 架構以及相關問題,最後如何將其與 kubernetes 進行整合來解決前述問題。
再使用 kubernetes 之前,團隊使用兩種不同的方式來處理,分別是內部 API Gateway Janus 以及網頁處理的 Entry (基於 Nginx 的 Reverse-Proxy)
團隊遷移到 kubernetes 之後,這兩個服務都想要透過 kubernetes Nginx Ingress 來處理,不過處理的過程中卻遇到一些問題。
1. 一致性: 每個微服務一開始都透過 Ingress 讓外界存取,然而當團隊開始使用 istio 後有些服務就改使用 Istio Ingress-Gateway 來處理,其他想要使用 TCP 的服務則會改使用 AWS ELB 來處理。
2. 延遲性: 因為 API Gateway 的存取節點都是基於 FQDN 的方式來存取,所以每個封包都要經過更多的節點來到達最終目的,這會增加整個封包傳輸時間。
最大的困惱還是第一個一致性的問題,k8s中有太多的方式讓外界可以存取期服務,每個都有自己獨特的設定,監控以及警示。
為了針對這些問題去解決,團隊內部先期構思一下到底什麼是團隊中理想的 Ingress Gateway
1. Reverse Proxy (HTTP) for websites
2. Mixture of an API Gateway
3. Kubernetes native
4. Advanced routing : (headers, methods, path)-based
5. JWT scope validation
6. Reliability features: Rate-limiting, Retries, Circuit breaking
7. Traffic shadowing
8. Interface for extensions
9. Integration with service mesh
後續文章包含了一些內容,如
1. 作者接者談談為什麼不使用 Service Mesh 所提供的 Ingress gateway
2. 到底要自行開發還是購買解決方案?(最後選擇了 Ambassador Edge Stack)
3. 如何透過 Ambassador Edge Stack 來解決團隊問題
4. 透過 Ambassador Edge Stack 後帶來的好處
有興趣的別忘了參閱全文
nginx是什麼 在 Kewang 的資訊進化論 Facebook 的最佳貼文
昨天在 frontend 社團有 backend 工程師來發問「一個要花費 20 秒的 API,backend 難道不能讓 frontend 等 20 秒再回傳給 frontend 嗎?為什麼有些做法都是先回 201 然後再用 websocket 回傳結果呢?」
當然可以啊,但使用者體驗會很差,這裡把昨天小編的回文拿回來再補充一下。
---
一個 20s 的 request 會遇到幾個問題
1. client 的話的使用者體驗很差,在瀏覽器等了 5s 我就想關網頁了,更何況 20s。
2. 如果使用者在 5s 的時候關網頁,這時候 server 還是會繼續把後面的 15s 處理完。
3. 如果使用者此時又發 request,然後在 7s 的時候又關網頁,這樣子有兩個耗時的工作在後端處理,而且還沒辦法讓前端知道。
4. 使用者都很沒有耐心,如果有 10 個人重複做了 2 3 步,這樣就有 20 個耗時的工作。
5. 如果是 CPU bound task,你的 server 應該會卡死。
6. client 跟 server 各自都有 timeout 的設定,而且 server 前面如果還有擋 nginx 或是其他 cloud provider 的話,光是 timeout 的設定就搞死你了。
---
建議的作法,把真的必要的工作處理完,threshold 最多設 3s,超過的一律丟到 MQ 處理。然後在前端顯示,請他稍後再回來更新網頁,這是最簡單的。每個系統 (OLAP 或 OLTP) 的 threshold 不同,請自行考量。
要不然 polling 也行,每 3 秒拉一次,確認工作是否完成。
最聰明的當然就是透過 push notification 或 websocket 讓 client 得知工作是否已完成。
---
https://hahow.in/cr/kewang-backend
看到這裡,要宣傳小編的後端課程啦!上面回答的這些內容,都會在課程裡面分享喔,還不快去下單!
#backend #frontend #mq
nginx是什麼 在 Bmon's Live Youtube 的精選貼文
DS1821+:http://sy.to/j5yhf
Discord 伺服器連結:https://discord.gg/S7gURc7P4W
是ㄉ 今天偷偷用NAS架設了一台Minecraft Server(´・ω・`)
有興趣一起玩的可以進Discord和我們交流交流啦!!
得獎名單(請點連結進入觀看):https://media.discordapp.net/attachments/679581500475179044/825756924216606751/unknown.png
———抽獎方式———
公主今天特別幫大家和廠商爭取了一台DS120j
他是一台低功耗的1Bay NAS,並且同樣支援影片中所提到的各種各種套件功能,對於有存儲需求的朋友來說,可說是再適合不過了呢。
很謝謝大家願意等我們這麼久(´◓Д◔`)
上次的活動抽獎結果已經在影片中公布囉(ゝ∀・)
▫截止時間:2021/03/27 上午11:00
▫抽獎名單公布:2021/03/28 下午8:00
▫本次活動獎品:Synology DS120j
▫參加方式:
(1)喜歡這部影片
(2)將這部影片發表到你的Discord伺服器或Facebook後設定成公開,並且截圖保存以利後續確認(´◓Д◔`)
(3)在底下留言這部影片中,你最喜歡的NAS特殊玩法或是你自己想到的用法(ゝ∀・),並加上「我要抽DS120j」即可完成抽獎。
▫「B夢實況」 保有變更、修改、解釋活動規則的權利,參加此活動時即視為同意我們變更、修改及解釋活動規則之權利。
———一些酷酷的連結———
▫公主IG:https://www.instagram.com/dorabmontw
▫FB觀眾場社團:https://www.facebook.com/groups/BmonTeamFight
▫FB粉絲團網址:https://www.facebook.com/DorabmonVideo
▫合作信箱:sam3u7858@gmail.com
▫小宗宗的教學:https://www.soujirou.info/blog/39893
▫nginx rtmp server on Github:https://github.com/illuspas/nginx-rtmp-win32
0:00 開頭
1:05 NAS是什麼?
2:20 用NAS架Minecraft Server
4:52 架設虛擬機開Minecraft Server
6:36 其他酷酷的功能
7:17 Steam Server
9:03 Discord機器人
10:42 http-server
11:28 來用NAS來架設一台RTMP直播系統
12:58 總結
13:30 抽獎公布
#Synology #NAS #steamserver #rtmpserver
———Music used———
Jelly Stone
Brain Trust
Electrician - Jeremy Black
Electric Heritage
Ella Vater - The Mini Vandals
nginx是什麼 在 紀老師程式教學網- NginX! 最猛的HTTP 伺服器換人做做看 ... 的推薦與評價
在NETCRAFT 2012年8月WEB Server 調查中,使用Nginx 當服務器或是代理服務器就佔全世界的11.48%。隨著Nginx 在很多大型網站的廣泛使用,其穩定、高效的特性逐漸被越來越多 ... ... <看更多>
nginx是什麼 在 NGINX 安裝與設定- Web server 反向代理與負載平衡- YouTube 的推薦與評價
2020 Getting started with pfsense 2.4 Tutorial: Network Setup, VLANs, Features & Packages · 1 2 什么是 Nginx ?常用的Web服务器有哪些?(第6周). ... <看更多>
nginx是什麼 在 常用的Nginx Config 與相關指令教學: 四大步驟入門網站架設 的推薦與評價
Nginx 常用指令(Linux、Windows). Linux 主機設定由於是一個檔案系統,所以檔案要有系統的被放置. 常用的會有在home 目錄底下的 ... ... <看更多>