Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Optimizing Go: From 3k req/s/core to 480k req/s...
Search
Ashish
November 20, 2014
Technology
4.7k
22
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Optimizing Go: From 3k req/s/core to 480k req/s/core
Ashish
November 20, 2014
Other Decks in Technology
See All in Technology
#jawssonic2026 あの時代が悪かった ~動かなかったSageMakerと共に迎えたイベント当日~
ktkn1129
0
130
Backstageでつくるセルフサービスな社内開発基盤
kikunosuke75
1
320
「重なり」は迎える側がつくる ― 人もAIエージェントも歓迎するプロダクトエンジニアリング ―
go0517go
PRO
0
240
KAEN Company Deck
kaen
PRO
0
320
プロダクトエンジニアに必要な「いい感じ」に作る能力 〜たくさん作れる時代に、どこまで作るかの決め方〜
jnishime_dresscode
2
1.4k
Genie Code ワークショップ 応用編 / Genie-Code-Workshop-advanced
databricksjapan
PRO
0
340
V8コントリビュート超入門
riyaamemiya
0
140
When Does a Local Qwen Start to Break
morshoto
0
180
こんなアーキテクチャ図は嫌だ BEYOND THE TIME: 半年後の自分へ贈る15のメッセージ / 15 of Anti-pattern in AWS Architecture Diagrams
naospon
3
240
KPIだけでは評価できないプロダクトが考えるべき Evalsという第二の評価系 / Beyond KPIs: Evals as a Second Evaluation Framework for Products #PdEConf
aki_iinuma
4
3.6k
はじめてのDatabricks:技術者向けワークショップ / beginner-workshop
databricksjapan
PRO
0
160
AIで仕事のやり方を変える
matsu7874
1
680
Featured
See All Featured
The World Runs on Bad Software
bkeepers
PRO
72
12k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
290
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
400
Building Flexible Design Systems
yeseniaperezcruz
330
41k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
320
Why Our Code Smells
bkeepers
PRO
340
58k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
320
エンジニアに許された特別な時間の終わり
watany
108
250k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
240
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
430
Become a Pro
speakerdeck
PRO
31
6.2k
Transcript
Optimization 3k req/s/core to 480k req/s/core
DDoS
Layers
User Agents 537 Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;
FREE; .NET CLR 1.1.4322) 272 Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 4.0) Opera 7.0 [en] 269 Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.0) Opera 7.02 Bork-edition [en] 264 Opera/8.00 (Windows NT 5.1; U; en) 264 Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; KKman2.0) 261 Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0; .NET CLR 1.1.4322) 258 Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727) 255 Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt) 253 Opera/7.60 (Windows NT 5.2; U) [en] (IBM EVV/3.0/EAK01AG9/LE) 251 Opera/7.54 (Windows NT 5.1; U) [pl] 251 Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; WOW64; SV1; .NET CLR 2.0.50727) 251 Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; T312461) 248 Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; Win64; AMD64) 247 Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 4.0) 243 Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)
Referer 172 http://pvppw.ru/ 166 text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,*/*;q=0.5 164 az-us 162 zh, en-us;
q=0.8, en; q=0.6 161 http://zhyk.ru/ 160 en-en,en;q=0.8,en-us;q=0.5,en;q=0.3 157 http://www.niagarastar.ru/ 152 az-ua 150 http://kremlin.ru/ 150 application/xml, image/png, text/html 149 text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 149 http://premier.gov.ru/ 148 text/x-dvi; q=.8; mxb=100000; mxt=5.0, text/x-c 147 text/html, */* 147 en-us,en;q=0.5
Architecture
Architecture
Architecture
Manageable λ • Reduce the set of clients that you
coordinate the state of, say top k
Algorithms • Space Saving algorithm (https://icmi.cs.ucsb.edu/ research/tech_reports/reports/2005-23.pdf) • An implementation
in Go (https://github.com/ cloudflare/golibs)
Perfect!
Benchmark Test • func BenchmarkFoo(b *testing.B) • b.N • http://dave.cheney.net/2013/06/30/how-to-write-
benchmarks-in-go
Slow! (3k req/s/core)
Benchmark CPU Profile • go test -bench=. -cpuprofile=cpu.out
None
Virtual CPU
Real CPU Profile • Copying memory is expensive • Copy
pointers instead
Keeping Elements Sorted • Array worst case: O(n) • Priority
queue: O(log n)
O(n), O(log n)
First Pass Optimization • Reduce the size of memory needed
to be copied • Reduce the number of times copying is needed
75k req/s/core
Wrong Output!
Correctness • Processing rate was approaching workable • But the
rate estimation was grossly inaccurate
The Distribution 0 2.5 5 7.5 10 A F B
O U C D E G H I J K L M N P Q R S T Requests
Lesson • Read the paper properly • Streaming algorithms tend
to output estimates • Know in what scenarios they fail
Naïve Approach • Use a map for counting • There
is no second bullet
Find Top k • Quicksort: O(n log n) • Quickselect:
O(n)
O(n log n), O(n)
Reduce Data Set • Prune the map of ultra low
values • Use sort from standard library
120k req/s/core
Test In Production
More Like
Test In Production • Run in dark mode (no side
effects) • Needs to be faster to keep up with attacks during peak load
Hello perf top
Garbage • String manipulation produces garbage • Cannot use slices
as keys in maps, use arrays
480k req/s/core
None
Takeaway • Start simple • Benchmark • Profile • Verify
correctness • Back-of-the-envelope calculations are helpful
Future Work • This was put into production • Later,
we switched to using lock-free algorithms where possible to reduce the load on CPU
We Are Hiring
–Abraham Lincoln “Join CloudFlare.”
–Me “Special thanks to Albert Strasheim and Stephan Lachowsky.”
The End • Ashish Gandhi • @ashishgandhi_ •
[email protected]
•
Easy questions?