Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
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
なぜ東京にいる私が、新潟の技術コミュニティを運営するのか by 八雲慎之助
yakumo
0
220
Oracle Database Security 詳細解説
oracle4engineer
PRO
1
250
re:Invent2026 事前勉強会 歴史と愉しみ方10分LT編
toshi_atsumi
0
120
デザインレビューは自動化できるのか?─ Flutter × Figma で UI 品質保証を考える
techiro
2
790
Copilot Coworkで「みのるん式」やってみた
minorun365
PRO
2
1.5k
E2Eってつらくないですか?E2Eの管理コストを下げる手段とその実践
akaboshinit
6
3k
Jev の中身は50行で再現できる。でも本物との差はどこにあるのか
hisuzuya
0
300
企画からFlutter実装まで、1つの機能を一貫して開発したプロセスと成果物
khiroyuki1003
1
150
IBC 2026 動画技術関連レポート / IBC 2026 Report
cyberagentdevelopers
PRO
2
180
バックオフィスに染み出すTypeScript ── clasp で安全に仕組みを作る
nealle
1
180
re:Invent の去年のスケジュールを公開します!
miu_crescent
PRO
0
280
Lint の層を組み直した話
bengo4com
3
310
Featured
See All Featured
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
1
3.7k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
320
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
1
300
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
280
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
WENDY [Excerpt]
tessaabrams
14
40k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
450
The Cost Of JavaScript in 2023
addyosmani
56
10k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
350
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?