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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
SmartHR Engineering Team Deck
smarthr
1
2.8k
私がブラウザを自作したくなった理由
supurazako
1
270
Kiro Crew入門 - 常駐エージェントの仕組みと使いどころ / Intro to Kiro Crew
k_adachi_01
1
500
Adding Right-to-Left support to your web application with CSS logical properties — Lessons from Redmine
vividtone
0
130
MulticaとPi Coding Agentで、小規模OSSを30本同時運用した流れ
eiei114
0
130
Eight Engineering Unit 紹介資料
sansan33
PRO
3
8.2k
ブラウザ研修 2026
recruitengineers
PRO
7
1.2k
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
5k
会社紹介資料 / Sansan Company Profile
sansan33
PRO
24
430k
Bits AI を制するものは Datadog を制す / The player that controls Bits AI, controls Datadog
kaminashi
0
130
なぜ Temporal の大小比較には compare しかないのか / Why Does Temporal Only Have compare() for Comparisons
kazukihayase
1
160
FORENSIA: ローカルLLMフォレンジックハーネス
sumeshi
2
420
Featured
See All Featured
From π to Pie charts
rasagy
0
300
So, you think you're a good person
axbom
PRO
2
2.1k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
Done Done
chrislema
186
16k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
220
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
470
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
Embracing the Ebb and Flow
colly
88
5.1k
A Modern Web Designer's Workflow
chriscoyier
698
190k
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?