本篇文章是個經驗談,作者想要聊聊是如何將一個 4vCPU 的VM給調整到可以達到每秒處理 1.2M(120萬)個 JSON Reuqest,本篇文章非常的長,所以會分多天來介紹。
整篇文章探討的是各種 turning 的步驟,來聊聊如何從最初每秒 224k(22萬四千) 給調整到每秒 1.2M 的處理能力。
整個過程分成九大步驟,後面同時標示每個過程後的每秒請求能力
1. Application Optimizations (347k)
2. Speculative Execution Migtigations (446k)
3. Syscall Auditing/Blocking (495k)
4. Disabling iptables/netfilter (603k)
5. Perfect Locality (834k)
6. Interrypt Optimizations (1.06M)
7. The Case of the Nosy Neighbor (1.12M)
8. The Battle Against the Spin Lock (1.15M)
9. This Gost to Twelv (1.20M)
作者強調,上述的過程不一定適合你的應用程式,但是透過這些步驟能夠讓你更佳瞭解應用程式的運作行為,同時也有機會發現一些潛在的瓶頸問題。
環境介紹
1. 團隊使用 Techempower 來進行 JSON Serialization 的測試
2. 使用 libreactor(event-driven框架) 來搭建一個簡單的 API Server
3. HTTP 的解析使用 picohttpparser,同時使用 libclo 來處理 JSON 的編碼
4. 硬體環境
- Server: 4 vCPU, c5n.xlarge AWS VM
- Client: 16 vCPU, c5n.4xlarge AWS VM (clinet太弱會變成瓶頸)
- Network: Server/Client 屬於同一個可用區域(AZ)
5. 軟體環境
- 作業系統: Amazon Linux2 (Kernel 4.14)
- Server: 使用 libreactor (使用不同版本,分別是 Round18 以及 Round20)
- Client: 修改 wrk 這個知名的工具並重新命名為 twrk,詳細差異自己看文章內部,主要都跟顯示有關
6. 實驗方式
- 每個測試跑三次,取中間值
- 256 連線,16 threads,同時每個 thread 都會 pin 到一個固定的 CPU
- 每個實驗都有兩秒的暖機時間來建立連線
Ground Zero
第一個要探討的就是什麼最佳化都還沒有使用前,到底當前應用程式可能的瓶頸在哪裏
首先團隊將該應用程式與其他常見的應用程式或是開發框架比較,譬如 Netty, Nginx, Actix, aspcore 等, libreactor 的效能不錯,有中上水準。
接者作者使用火焰圖(Flame Graphs)來 Profile 該伺服器,作者很好心地將文章中所有的火焰圖都調整了一下,讓所有的 user-space 相關的 function call 都轉成藍色,而剩下跟 kernel 相關都維持紅色。
1. 大部分的時間都在 Kernel 處理
2. 主要是花費在收封包與送封包
3. 應用程式本身主要是分兩大部分,解析 HTTP 的封包以及處理請求與回應。
從上述兩點來看,作者認為目前的應用程式寫得算不錯,因為瓶頸很明顯是卡在 Kernel 端
接下來就正式進入到各種 Turning 的章節探討
Application Optimizations
長話短說:
- 作者基於 libreactor Round18 的框架進行修改,並且所有的修改都已經被合併到 Round20 的版本中,而這些修改主要是實作方面的強化以及整個框架的最佳化。
1. 作者首先透過 htop 觀察運行過程,發現 Server 只有使用 2vCPU 而已(系統有 4vCPU),因此這是作者進行的第一個修改,讓 Server 使用了 4vCPU,這個簡單調整就讓效能提升 25%
註: 作者特別強調,不要覺得從 2vCPU 變成 4vCPU 效能就可以變成兩倍,主要是1) 沒有使用的 vCPU 還有很多其他的工作要處理,因此不是完全都送給你應用程式處理。2)基於 hypter-thread vCPU 的架構,環境只有兩個真正的 CPU 而是透過邏輯的方式產生四個抽象的 CPU,所以全用一定會變快,但是基於很多資源還是要競爭與共用,數字不是單純翻倍
2. 作者自己的應用程式本身使用 gcc 建置時有使用 "-o3" 的方式來最佳化處理,然而框架本身卻沒有使用 "-o3" 的方式來弄,因此作者也針對這個部分來處理,讓建制框架時能夠使用 -o3
3. 從實作方面來看,作者觀察到 libreactor 1.0 版本使用的是 read/write 這兩個常見的方式來處理封包的送收,作者將其修改成 recv/send 整個效能就提升了將近 10%。
註: write(針對 FD,更全面廣泛的用法) 與 send(針對 Socket,更針對的用法) 使用上差異不大,但是 write 於底層 Kernel 最終還是會呼叫到 send 來處理,所以基本上可以理解就是在沒有特別參數需求時,可以直接跳過幾個 kernel function 來達到加速的效果。
write kernel 內的走向: sys_write -> vfs_write -> __vfs_write -> sock_write_iter -> sock_sendmsg
send kernel 內的走向: sendto -> sock_sendmsg
4. 作者觀察到火焰圖中有一些 pthread 相關的資料,進而發現 libreactor 會創造一個 thread pool 來處理非同步的 DNS 名稱解析問題。對於一個 HTTP Client 來說,如果今天要發送請求到多個不同的 domain,而每個 domain 都會需要進行一個 blocking 的解析過程,透過這種方式可以減少 DNS 解析造成的 blocking 問題。然而對於 HTTP Server 來說,這個使用情境帶來的效益似乎就稍微低了些,畢竟 Server 只有 Bind Socket 之前可能會需要去解析一次 DNS 而已。
大部分的情境下, thread pool 都是應用程式初期會去創造而接者就不太會管她,但是對於錙銖必較的效能除錯人來說,任何能夠調整的部分都可能是個值得探討的地方。
作者透過修改 Server 端(準確來說是 libreactor 框架內的程式碼)關於 Thread Pool 的一些用法,成長的讓整個效能提升了 2~3%
結論來說,透過上述四個概念來提升的程式碼效能。
1. vCPU 盡量使用: 25%-27%
2. 使用 gcc -O3 來建置框架的程式碼: 5%-10%
3. 使用 march=native 等參數來建置最後的 server 應用程式: 5%-10%
4. 使用 send/recv 而非 write/read: 5%-10%
5. 修改 pthread 的用法: 2%-3%
註: 作者強調每個最佳化的結果並非是單純累積的概念,反而還會有互補的效果。
可能前述的操作實際上也會讓後續的操作達到更好的效果,
譬如如果先跑 vCPU 的調整,效能大概提升 25%,但是如果先執行別的最佳化過程,最後再來調整 vCPU,就可以達到 40% 的效果,主要是 CPU 可以共有效率的去執行程式。
最後,這個部分讓整個處理封包能力從 224k 提升了 55% 到 347k (req/s)。
從火焰圖來看,整個 user-space 的範圍縮小許多,同時 send/recv 的處理也有使得整體的高度下降一點點(大概四格..)
為了避免文章過長,本篇文章就探討第一個最佳化的過程,剩下的就敬請期待後續!
https://talawah.io/blog/extreme-http-performance-tuning-one-point-two-million/
同時也有1部Youtube影片,追蹤數超過72萬的網紅Warner Music Malaysia,也在其Youtube影片中提到,Kayda - AUTOPILOT feat. Ish [Official Music Video] #Kayda #Ish #AUTOPILOT Download RBT Now! Maxis Caller Ringtones: Dial *131*672986# and press CAL...
「one call api」的推薦目錄:
- 關於one call api 在 矽谷牛的耕田筆記 Facebook 的最讚貼文
- 關於one call api 在 經濟部中小企業處 Facebook 的最讚貼文
- 關於one call api 在 ลงทุนแมน Facebook 的精選貼文
- 關於one call api 在 Warner Music Malaysia Youtube 的最讚貼文
- 關於one call api 在 OpenWeatherMap API Tutorial 2021 - YouTube 的評價
- 關於one call api 在 worldturtlemedia/openweathermap-onecall - GitHub 的評價
- 關於one call api 在 OpenWeather Onecall API - Stack Overflow 的評價
- 關於one call api 在 Rate Limits - Graph API - Facebook for Developers 的評價
- 關於one call api 在 Composite API request calling after insert twice for same root 的評價
- 關於one call api 在 Debugging best practices for REST API consumers 的評價
one call api 在 經濟部中小企業處 Facebook 的最讚貼文
【創業大冒險】政府出題新創解題開跑囉!
⏰即日起到6/2(三)止廣徵各路新創來解題!✏️✏️✏️
👉110年優選政府機關6個題目:
💧臺灣自來水公司新山給水廠-AI原水生物檢測計畫
🚃行政院農業委員會林務局阿里山林業鐵路及文化資產管理處─阿里山林業鐵路全線車輛定位改善
🚥行政院農業委員會林務局阿里山林業鐵路及文化資產管理處─林業鐵路路線上視線不佳路段落石監測與警示號誌系統
🏃♂基隆市政府─救災用遙控無人機影像結合人體骨架辨識系統人命搜救運作
💊苗栗縣政府毒品防制及心理衛生中心─AI智慧心理健康檢測管理系統
🗂高雄市政府資訊中心─使用區塊鏈保存戶政API存取紀錄
參與實證期間,除可獲得出題機關的行政協助
亦可獲得最高100萬的補助經費
想知道詳細的申請細節嗎?請follow以下網址唷
📞諮詢專線02-6600-2570
▶出題說明 https://www.spp.org.tw/spp/question/467
▶申請文件 https://www.spp.org.tw/spp/solution/468
【StartupAdventure】Begins! Proposals by Government-Solutions by Startups.
Call for Solutions by various Startups,from now till 6/2(Wed)!
Six proposals by government agencies are selected in 2021.️️
In addition to the available administrative assistance from the proposal agencies ,participants can also be rewarded with a subsidy of up to one million New Taiwan Dollars during the demonstration period.
Interested in participating?Please follow the URL below for application details!
📞Inquiry Hotline 02-6600-2570
▶Proposal Instructions
https://www.spp.org.tw/spp/question/467
▶Application Documents
https://www.spp.org.tw/spp/solution/468
one call api 在 ลงทุนแมน Facebook 的精選貼文
ทางออกของโลกธุรกิจ เมื่อต้องเจอความท้าทายในยุคดิจิทัล
จำได้ไหมว่า สมัยก่อนเราต่างรู้สึกดี เมื่อได้หยิบจับเงินในกระเป๋าสตางค์
ต่างไปจากตอนนี้… หากมีโอกาส เราก็มักจะเลือกใช้บริการชำระเงินออนไลน์
เพื่อที่จะได้ไม่ต้องหยิบจับเงินออกจากกระเป๋าสตางค์อย่างเคย
พฤติกรรมผู้บริโภคที่หันมาให้ความสำคัญ “ตัวเงิน” ผ่าน “โลกออนไลน์” เหล่านี้
กำลังจะเปลี่ยนโลกการเงินครั้งใหญ่
แล้ว “เทคโนโลยีดิจิทัล” เข้ามามีบทบาทเปลี่ยนแปลง “วงการธนาคารสำหรับโลกธุรกิจ” อย่างไร?
ลงทุนแมนจะเล่าให้ฟัง
ไม่กี่ปีมานี้ ธนาคารพาณิชย์ต่างพากัน Disrupt ตัวเองเพื่อความอยู่รอดทางธุรกิจ
การเข้ามาของเทคโนโลยีดิจิทัล ทำให้เกิดรูปแบบบริการทางการเงินบนโลกออนไลน์ใหม่ ๆ
เริ่มต้นด้วย Internet Banking เสมือนเป็นธนาคารที่เปิดบริการตลอด 24 ชม.
ให้เราสามารถทำธุรกรรมการเงินได้ตลอดเวลาบนโลกออนไลน์
จากนั้นเริ่มมีการพัฒนาแอปพลิเคชันที่เรียกว่า Mobile Banking
ที่เปลี่ยนวิถีชีวิตคนเราในการทำธุรกรรมการเงินได้ด้วยสมาร์ตโฟนเพียงเครื่องเดียว
และในตอนนี้… โลกการเงินกำลังจะเปลี่ยนไปอีกครั้ง
ด้วยรูปแบบบริการทางการเงินออนไลน์ที่เรียกว่า Business ONE ธนาคารดิจิทัลเพื่อโลกธุรกิจที่ TMB ออกแบบและพัฒนาเพื่อลูกค้าธุรกิจไม่ว่าขนาดใหญ่หรือเอสเอ็มอีให้เป็นมากกว่า Internet Banking แบบเดิม ๆ
แล้ว Business ONE ช่วยเหลือโลกธุรกิจได้อย่างไร?
สังเกตไหมว่า.. ในแต่ละวัน โลกธุรกิจมีธุรกรรมการเงินเกิดขึ้นมากมาย
จนบางครั้งผู้ประกอบการก็ไม่แน่ใจว่า เงินก้อนนี้รับมาจากลูกค้ารายใด
และกว่าจะได้คำตอบนั้น ก็ต้องมาไล่ดู Statement เสียเอง ทำให้เสียเวลา
และไม่สามารถเห็นข้อมูลได้แบบเรียลไทม์
Business ONE จึงมีฟังก์ชัน Financial Dashboard
ที่จะแสดงข้อมูลสำคัญทั้งหมดของธุรกิจไว้ในหน้าเดียว
รวมถึงการเพิ่มลดผู้ใช้งานระบบได้เอง ไม่ต้องเสียเวลาไปธนาคาร
ทำให้รองรับ “การทำธุรกรรมการเงิน” ครบจบได้ในแพลตฟอร์มเดียว
แต่ภายใต้ความสะดวกของโลกเทคโนโลยี..
ก็ยังมีเรื่องชวนปวดหัวสำหรับผู้ประกอบการที่ไม่คุ้นชิน
เช่น การทำธุรกรรมออนไลน์ของโลกธุรกิจ จำเป็นต้องเข้าเมนูหลายขั้นตอน
ทำให้ผู้ประกอบการที่ไม่คุ้นชิน ต่างมองว่าเป็นเรื่องยุ่งยากในการทำธุรกรรมการเงิน
Business ONE จึงออกแบบฟังก์ชันเด่นอีกหลายตัว
ที่จะช่วยให้ผู้ประกอบการสามารถ “ควบคุมการเงินธุรกิจ” บนโลกออนไลน์ได้ง่ายขึ้น เช่น
-ฟังก์ชัน Payment Assistant ระบบแนะนำการโอนหรือการจ่ายเงิน และหาข้อมูลทางบัญชีที่รวดเร็ว
-ฟังก์ชัน Personalization เลือกออกแบบหน้าจอการใช้งานได้แบบเฉพาะตัวตามกลุ่มผู้ใช้งาน
-ฟังก์ชัน Live Search ก็เหมือนมี Google Search Engine ที่ให้เราค้นหาข้อมูลได้อย่างรวดเร็วและถูกต้อง search ปุ๊บเจอปั๊บ ไม่ต้องเสียเวลานั่งหาทีละรายการอีกต่อไป
อย่างไรก็ตาม โลกการเงินของธุรกิจ คงไม่ได้มีแต่เรื่องของการทำธุรกรรมการเงินออนไลน์
แล้ว “เทคโนโลยีดิจิทัล” จะช่วยเหลือผู้ประกอบการได้อย่างไรอีกบ้าง?
ต้องยอมรับว่า... หนึ่งจุดเด่นของเทคโนโลยีดิจิทัล
คือการเชื่อมต่อข้อมูลเพื่อสร้างขบวนการทำงานที่จะก่อให้เกิดประโยชน์สูงสุด
ซึ่งหากโลกการเงินธุรกิจสามารถเชื่อมต่อเข้ากับฐานข้อมูลภายในองค์กรได้หรือเชื่อมโยงไปยังระบบอื่น ๆ ที่จำเป็นได้ ย่อมช่วยให้การบริหารธุรกิจนั้น มีประสิทธิภาพมากยิ่งขึ้น
ยกตัวอย่างง่าย ๆ เช่น
หาก “โลกการเงินธุรกิจ” เชื่อมต่อเข้ากับ “ระบบ HR Management” ได้ มันจะว้าวแค่ไหน ผู้ประกอบการก็จะสามารถ “บริหารพนักงาน” และ “บริหารระบบจ่ายเงินเดือน” ได้อย่างมีประสิทธิภาพกว่าทุกวันนี้มาก
ซึ่งการเชื่อมต่อที่ว่านี้ เป็นเพียงส่วนหนึ่งของบริการ Business ONE
ที่จะเชื่อมต่อ Financial และ Non-Financial ได้ด้วยระบบ API Technology
มาถึงตรงนี้ จะเห็นได้ว่า การเปลี่ยนแปลงของธนาคารดิจิทัลเพื่อโลกธุรกิจ Business ONE กำลังเข้ามาทำหน้าที่เป็น “ผู้ช่วยทางการเงิน” และ “ผู้ช่วยบริหารธุรกิจ” ได้อย่างที่ไม่เคยเกิดขึ้นมาก่อน ด้วย 3 คอนเซ็ปสำคัญ นั่นก็คือ
-ONE Platform ที่สามารถทำธุรกรรมการเงิน ครบจบได้ ในแพลตฟอร์มเดียว
-ONE to Control ที่จะช่วยให้การควบคุมการเงินธุรกิจบนโลกออนไลน์ ง่ายขึ้นได้
-ONE to Command ตอบโจทย์การเชื่อมต่อ Financial และ Non-Financial เข้าด้วยกัน
ซึ่งนอกจาก Business ONE ธนาคารดิจิทัลเพื่อโลกธุรกิจ จะช่วยให้ผู้ประกอบการสามารถบริหารธุรกิจได้อย่างเต็มประสิทธิภาพแล้ว ยังถือเป็น ตัวอย่างแพลตฟอร์ม ที่มีเทคโนโลยีดิจิทัลเต็มรูปแบบของวงการธนาคารพาณิชย์ อีกด้วย
ก็น่าคิดนะว่า.. ในขณะที่หลายคนกังวลว่าเทคโนโลยีจะเข้ามาแทนที่มนุษย์
แต่ความจริงแล้ว เทคโนโลยีเหล่านั้น มนุษย์เป็นผู้คิดค้นและควบคุมให้มีประสิทธิภาพได้ ถ้าเรารู้จักใช้เครื่องมือนั้น เหมือนอย่าง Business ONE ธนาคารดิจิทัลเพื่อโลกธุรกิจ ที่จะเข้ามาช่วยเหลือผู้ประกอบการบริหารธุรกิจได้อย่างมีประสิทธิภาพ ในครั้งนี้… เพราะสุดท้ายแล้วผู้ที่จะตัดสินใจควมคุมธุรกิจให้ไปทางไหนก็คือคนหรือเจ้าของธุรกิจนั่นเอง
ถ้าไม่อยากพลาดโอกาสในการสัมผัสประสบการณ์ใหม่ ๆ ที่จะทำให้การบริหารธุรกิจของคุณเปลี่ยนไปได้ดียิ่งขึ้น เข้าไปอ่านรายละเอียดเพิ่มเติมได้ที่ tmbbank.com/lungtunman/fb หรือสอบถามเพิ่มเติมได้ที่ Corporate Call Center โทร. 02-643-7000
#BusinessONE #ธนาคารดิจิทัลเพื่อโลกธุรกิจ
#เปลี่ยนเพื่อให้ชีวิตคุณดีขึ้น
#TMB #MakeREALChange
#ลงทุนแมน
one call api 在 Warner Music Malaysia Youtube 的最讚貼文
Kayda - AUTOPILOT feat. Ish [Official Music Video]
#Kayda #Ish #AUTOPILOT
Download RBT Now!
Maxis Caller Ringtones: Dial *131*672986# and press CALL/SEND
Celcom Call Me Tones: Dial *323*740559# and press CALL/SEND
DiGi Caller Tunes: Dial *233*1819834# and press CALL/SEND
Composer: The Cxdy
Lyrics: Kayda, Ish
Music Producer: The Cxdy, Kayda
Follow Kayda on Instagram: https://www.instagram.com/sizez3ro/
Follow Ish on Instagram: https://www.instagram.com/ish.officialpage/
Lyrics:
(Chorus)
No sleep I’m always high on life let it flow smoof smoof like Yamazaki (autopilot)
Yamaha those keys Yuh yuh I Never run out of melodies (ya ya)
wanna stay fresh like sashimi, make you wanna say oishii
mm mm (filet)
tho I ain’t been to Japan, but I’m down if u wanna come with me (perfect)
Down if you wanna come with me 4x
(verse - Kayda)
Masa kecik selalu tengok mtv kata bila dah besar nak jadi Britney (baby one more time)
Am I able to control my destiny or is the writing’s on the wall? That’s my favourtie CD (survivin’)
At 15 I snuck outta my crib, selalu perform dekat hip hop partays (yea)
dulu letak lagu dalam myspace, sekarang dalam spotify pun cuba nasib (kak long)
I had to cut that controlling boyfriend (omagad), gotta stay focus shutter snappin’ hit the flash,
I realized I deserve a better man (no shit) but right now b**** I don’t give a damn
I learned a lot from all my mistakes say im runnin outta time but it’s never too late (late)
kalau tak suka boleh balik, tak kisah kau pikir aku pelik (tak kisah)
(Chorus)
No sleep I’m always high on life let it flow smoof smoof like Yamazaki (autopilot)
Now Yamaha those keys Yuh yuh I Never run out of melodies (omagad)
wanna stay fresh like sashimi, Japanese drip oishii (filet)
mm mm
tho I ain’t been to Harajuku, but I’m down if u wanna come with me
Down if you wanna come with me 4x
Rap (ish):
Aku rap ninja semasa, datang tepat pada masa, kamu semua buang masa, aku memang – api buat semua basah, aku sedia with my bars, selalu tepat pada masa, fresher than samosa
I did what I did I told her yeah so
Lotta fake s*** actin like I ain’t know
Demons in my head and I got head from every angle
Young God walking on water and Gucci sandals
Fendi on my T my friends see the F as financial
Bebas dengan semua minah-minah aku mau nothing final
Same people lookin up to me were just my idols
My Xfactor be the invoices in my I phone
And that be way before 16 baris
Peluang dia luar can’t be stuck on Autopilot
Peluang di luar, peluang ada saja
Peluang di luar, peluang ada saja ay
(Chorus)
No sleep I’m always high on life let it flow smoof smoof like Yamazaki (autopilot)
Now Yamaha those keys Yuh yuh I Never run out of melodies (omagad)
wanna stay fresh like sashimi, make you wanna say oishii (filet)
mm mm
tho I ain’t been to Japan, but I’m down if u wanna come with me
Down if you wanna come with me 4x
one call api 在 worldturtlemedia/openweathermap-onecall - GitHub 的推薦與評價
A Nodejs and Browser client for the new OpenWeatherMap "One Call" API, written in TypeScript. ... An API wrapper for OWM One Call API, usable in node and the ... ... <看更多>
one call api 在 OpenWeather Onecall API - Stack Overflow 的推薦與評價
... <看更多>
相關內容
-
2 個答案
-
reactjs - How can i use city name instead of lat and log in ...
-
How to find 7 days weather forecast in openweather API?
-
OpenWeather One Call API coord not loading - Stack Overflow
-
OneCall API call is throwing an error when calling API for UV ...
-
stackoverflow.com 的其他相關資訊
-
reactjs - How can i use city name instead of lat and log in ...
-
How to find 7 days weather forecast in openweather API?
-
OpenWeather One Call API coord not loading - Stack Overflow
-
OneCall API call is throwing an error when calling API for UV ...
-
stackoverflow.com 的其他相關資訊
one call api 在 OpenWeatherMap API Tutorial 2021 - YouTube 的推薦與評價
This video explains how you can use the OpenWeatherMap API and ... weather data on your webpages for any location using the One Call API. ... <看更多>