SlideShare ist ein Scribd-Unternehmen logo
1 von 169
Downloaden Sie, um offline zu lesen
Wanna Go
So You
Fast?
Strange Loop 2017 @tyler_treat
@tyler_treat@tyler_treat
@tyler_treat
this one weird trick
Make your code faster with
@tyler_treat
this one weird trick
Make your code faster with
@tyler_treat
So You Wanna
Subvert Go?
@tyler_treat
Spoiler Alert:‹
Go is not a‹
systems language

@tyler_treat
but that doesn’t mean you
can’t build internet-scale
systems with it.
@tyler_treat
@tyler_treat
This is a talk about how to
write terrible Go code.
@tyler_treat@tyler_treat
@tyler_treat
Because this is a talk
about trade-oïŹ€s.
@tyler_treat
- Messaging Nerd @ Apcera

- Working on nats.io 

- Distributed systems

- bravenewgeek.com
Tyler Treat
@tyler_treat@tyler_treat
@tyler_treat
matter?
Why does this talk
@tyler_treat
The
compiler
isn’t magic.
@tyler_treat
The
compiler
isn’t magic.
@tyler_treat
You have to be‹
mindful of performance‹
when it matters.
@tyler_treat@tyler_treat
Where bad things hide
@tyler_treat@tyler_treat
Where bad things hideWhere we’re usually looking
@tyler_treat
Tire ïŹres

at scale
@tyler_treat
@tyler_treat@tyler_treat@tyler_treat
@tyler_treat@tyler_treat@tyler_treat
@tyler_treat@tyler_treat@tyler_treat
@tyler_treat
Overview
- Measuring performance

- Language features

- Memory management

- Concurrency and multi-core
@tyler_treat
Overview
- Measuring performance

- Language features

- Memory management

- Concurrency and multi-core
@tyler_treat
Disclaimer:‹
Don’t blindly apply
optimizations presented.
@tyler_treat
tl;dr of this talk is‹
“IT DEPENDS!”
@tyler_treat
Measure
Optimize
@tyler_treat
Measurement Techniques
- pprof‹
- memory‹
- cpu‹
- blocking

- GODEBUG‹
- gctrace‹
- schedtrace‹
- allocfreetrace

- Benchmarking‹
- Code-level: testing.B‹
- System-level: HdrHistogram (https://github.com/codahale/hdrhistogram)‹
bench (https://github.com/tylertreat/bench)
@tyler_treat@tyler_treat
@tyler_treat
The only way to get good at something
is to be really fucking bad at it‹
for a long time.
@tyler_treat
Benchmarking

a great way to rattle the‹
Hacker News fart chamber.
@tyler_treat
Overview
- Measuring performance

- Language features

- Memory management

- Concurrency and multi-core
@tyler_treat
channels
@tyler_treat
“Instead of explicitly using locks to mediate access
to shared data, Go encourages the use of channels
to pass references to data between goroutines.”

https://blog.golang.org/share-memory-by-communicating
@tyler_treat@tyler_treat
@tyler_treat@tyler_treat
USE CHANNELS TO COORDINATE,
NOT SYNCHRONIZE.
@tyler_treat@tyler_treat
@tyler_treat@tyler_treat
@tyler_treat
defer
@tyler_treat@tyler_treat
@tyler_treat
Is defer still slow?
@tyler_treat@tyler_treat
@tyler_treat
The Secret Life

of interface{}
@tyler_treat
type Stringer interface {‹
String() string‹
}
https://research.swtch.com/interfaces
@tyler_treat
type Stringer interface {‹
String() string‹
}‹
type Binary uint64
https://research.swtch.com/interfaces
@tyler_treat
type Stringer interface {‹
String() string‹
}‹
type Binary uint64
200
b := Binary(200)
https://research.swtch.com/interfaces
@tyler_treat
type Stringer interface {‹
String() string‹
}‹
type Binary uint64‹
func (i Binary) String() string {
return strconv.FormatUint(uint64(i), 2)
}
200
b := Binary(200)
https://research.swtch.com/interfaces
@tyler_treat
type Stringer interface {‹
String() string‹
}
https://research.swtch.com/interfaces
s := Stringer(b)
Stringer
tab
data
@tyler_treat
s := Stringer(b)
Stringer
tab
data
.‹
.‹
.
itable(Stringer, Binary)
type
fun[0]
type(Binary)
(*Binary).String
type Stringer interface {‹
String() string‹
}
https://research.swtch.com/interfaces
@tyler_treat
tab
data
200
Binary
s := Stringer(b)
Stringer
.‹
.‹
.
itable(Stringer, Binary)
type
fun[0]
type(Binary)
(*Binary).String
type Stringer interface {‹
String() string‹
}
https://research.swtch.com/interfaces
@tyler_treat
@tyler_treat
So what?
@tyler_treat@tyler_treat
@tyler_treat@tyler_treat
@tyler_treat@tyler_treat
Sorting 100M Interfaces
@tyler_treat@tyler_treat
Sorting 100M Interfaces
@tyler_treat@tyler_treat
Sorting 100M Structs
@tyler_treat@tyler_treat
Sorting 100M Structs
@tyler_treat
$ go test -bench=. -gcflags="-m"
@tyler_treat
$ go test -bench=. -gcflags="-m"
@tyler_treat@tyler_treat
@tyler_treat
$ go test -bench=. -gcflags="-l"
@tyler_treat@tyler_treat
Struct‹
No Inlining
Interface‹
No Inlining
@tyler_treat@tyler_treat
Struct‹
No Inlining
Interface‹
No Inlining
@tyler_treat@tyler_treat
Struct‹
No Inlining
Interface‹
No Inlining
@tyler_treat@tyler_treat
@tyler_treat@tyler_treat
x.(*T) inlined
@tyler_treat@tyler_treat
SSA backend &‹
remaining type‹
conversions inlined
x.(*T) inlined
@tyler_treat@tyler_treat
@tyler_treat
@tyler_treat@tyler_treat
Struct Interface
@tyler_treat@tyler_treat
Struct Interface
@tyler_treat@tyler_treat
@tyler_treat
$ go test -bench=. -gcflags="-S"
@tyler_treat
$ go test -bench=. -gcflags="-S"
@tyler_treat
$ go test -bench=. -gcflags="-S"
@tyler_treat
Key Insight:
If performance matters,‹
write type-speciïŹc code.
@tyler_treat
Overview
- Measuring performance

- Language features

- Memory management

- Concurrency and multi-core
@tyler_treat
[]byte to string‹
conversions
@tyler_treat
@tyler_treat@tyler_treat
@tyler_treat@tyler_treat
@tyler_treat
What’s going on here?
@tyler_treat@tyler_treat
@tyler_treat
memory allocation
@tyler_treat@tyler_treat
@tyler_treat
How is sync.Pool so fast?
@tyler_treat
Per-CPU storage!
@tyler_treat@tyler_treat
https://golang.org/src/sync/pool.go
@tyler_treat@tyler_treat
https://golang.org/src/sync/pool.go
@tyler_treat@tyler_treat
@tyler_treat
Overview
- Measuring performance

- Language features

- Memory management

- Concurrency and multi-core
@tyler_treat
“We generally don’t want sync/atomic to be used
at all
Experience has shown us again and again
that very very few people are capable of writing
correct code that uses atomic operations
”

—Ian Lance Taylor
@tyler_treat
@tyler_treat@tyler_treat
Subscribers Messages
Fast Topic Matching
http://bravenewgeek.com/fast-topic-matching/
@tyler_treat@tyler_treat
Subscribers Messages
Fast Topic Matching
http://bravenewgeek.com/fast-topic-matching/
@tyler_treat@tyler_treat
Fast Topic Matching
@tyler_treat@tyler_treat
Fast Topic Matching
@tyler_treat@tyler_treat
@tyler_treat@tyler_treat
Fast Topic Matching
@tyler_treat@tyler_treat
Concurrent‹
80,000 inserts‹
80,000 lookups‹
@tyler_treat@tyler_treat
Ctrie
@tyler_treat@tyler_treat
G1
G1
1. Assign a generation, G1, to each‹
I-node (empty struct).
Ctrie
@tyler_treat
1. Assign a generation, G1, to each‹
I-node (empty struct).

2. Add new node by copying I-node with
updated branch and generation then
GCAS, i.e. atomically:‹
- compare I-nodes to detect tree‹
mutations.‹
- compare root generations to detect‹
snapshots.
@tyler_treat
G2
G1
Ctrie
@tyler_treat@tyler_treat
@tyler_treat@tyler_treat
@tyler_treat
The Go race detector‹
doesn’t protect you from‹
doing dumb stuïŹ€.
@tyler_treat@tyler_treat
@tyler_treat@tyler_treat
@tyler_treat@tyler_treat
@tyler_treat
Side note:‹
unsafe is, in fact, unsafe.
@tyler_treat
“Packages that import unsafe may depend on internal
properties of the Go implementation. We reserve the
right to make changes to the implementation that may
break such programs.”

https://golang.org/doc/go1compat
@tyler_treat
@tyler_treat
Key Insight:
Struct layout can make‹
a big diïŹ€erence.
@tyler_treat@tyler_treat
Mechanical

Sympathy
@tyler_treat
https://github.com/Workiva/go-datastructures/blob/master/queue/ring.go
@tyler_treat
@tyler_treat@tyler_treat
@tyler_treat@tyler_treat
@tyler_treat@tyler_treat
@tyler_treat@tyler_treat
https://golang.org/src/sync/rwmutex.go
@tyler_treat@tyler_treat
https://golang.org/src/sync/rwmutex.go
@tyler_treat
CPU
reader
reader
reader
RWMutex
@tyler_treat
CPU
reader
reader
CPU
readerreader
reader
RWMutex
@tyler_treat
CPU
reader
reader
CPU
reader
readerreader
reader
CPU
readerreader
reader
RWMutex
@tyler_treat
CPU
reader
reader
CPU
reader
readerreader
reader
CPU
readerreader
CPU
reader
reader
reader
RWMutex
@tyler_treat
RWMutex
CPU
reader
reader
CPU
reader
readerreader
readerreader
writer
CPU
reader
readerreader
reader
CPU
reader
writerreader
reader
@tyler_treat
RWMutex
CPU
reader
reader
CPU
reader
readerreader
readerreader
writer
CPU
reader
readerreader
reader
CPU
reader
writerreader
reader
@tyler_treat
RWMutex
CPU
reader
reader
CPU
reader
readerreader
readerreader
writer
CPU
reader
readerreader
reader
CPU
reader
writerreader
reader
@tyler_treat
RWMutex
CPU
reader
reader
CPU
reader
readerreader
readerreader
writer
CPU
reader
readerreader
reader
CPU
reader
writerreader
reader
@tyler_treat
RWMutex
CPU
reader
reader
CPU
reader
readerreader
readerreader
writer
CPU
reader
readerreader
reader
CPU
reader
writerreader
reader
@tyler_treat
RWMutex
CPU
reader
reader
CPU
reader
readerreader
readerreader
writer
CPU
reader
readerreader
reader
CPU
reader
writerreader
reader
@tyler_treat
RWMutex
CPU
reader
reader
CPU
reader
readerreader
readerreader
writer
CPU
reader
readerreader
reader
CPU
reader
writerreader
reader
RWMutex RWMutex RWMutex
@tyler_treat
RWMutex
CPU
reader
reader
CPU
reader
readerreader
readerreader
writer
CPU
reader
readerreader
reader
CPU
reader
writerreader
reader
RWMutex RWMutex RWMutex
@tyler_treat
RWMutex
CPU
reader
reader
CPU
reader
readerreader
readerreader
writer
CPU
reader
readerreader
reader
CPU
reader
writerreader
reader
RWMutex RWMutex RWMutex
@tyler_treat
RWMutex
CPU
reader
reader
CPU
reader
readerreader
readerreader
writer
CPU
reader
readerreader
reader
CPU
reader
writerreader
reader
RWMutex RWMutex RWMutex
@tyler_treat
RWMutex
CPU
reader
reader
CPU
reader
readerreader
readerreader
writer
CPU
reader
readerreader
reader
CPU
reader
writerreader
reader
RWMutex RWMutex RWMutex
@tyler_treat
RWMutex
CPU
reader
reader
CPU
reader
readerreader
readerreader
writer
CPU
reader
readerreader
reader
CPU
reader
writerreader
reader
RWMutex RWMutex RWMutex
@tyler_treat
RWMutex
CPU
reader
reader
CPU
reader
readerreader
readerreader
writer
CPU
reader
readerreader
reader
CPU
reader
writerreader
reader
RWMutex RWMutex RWMutex
CPU
reader
CPU
readerreaderreader
CPU
readerreader
CPU
readerreader
U
writer
CPU
reader
reader
CPU
reader
readerreader
readerreader
writer
CPU
reader
readerreader
reader
CPU
reader
writerreader
reader
CPU
reader
reader
CPU
reader
readerreader
writerreader
reader
CPU
reader
readerreader
reader
CPU
reader
readerreader
reader
reader readerreaderreader readerreaderreaderreader
U
reader
reader
ader
ader
U
reader
reader
ader
ader
ader
readerader
CPU
read
readreader
reader
CPU
read
readreader
reader
CPU
readreader
readreader
@tyler_treat
@tyler_treat@tyler_treat
@tyler_treat
How to create‹
CPU->RWMutex‹
mapping?
@tyler_treat@tyler_treat
https://github.com/jonhoo/drwmutex/blob/master/cpu_amd64.s
@tyler_treat
/proc/cpuinfo
@tyler_treat@tyler_treat
@tyler_treat
memory RWMutex1
24 bytes
@tyler_treat
RWMutex1 RWMutex2memory
24 bytes
@tyler_treat
RWMutex1 RWMutex2 RWMutex3memory
24 bytes
@tyler_treat
RWMutex1 RWMutex2 RWMutex3 RWMutexN
memory
24 bytes
@tyler_treat
RWMutex1 RWMutex2 RWMutex3 RWMutexN
memory
24 bytes
64 bytes
(cache line size)
@tyler_treat
RWMutex1 RWMutex2 RWMutex3 RWMutexN
memory
24 bytes
64 bytes
(cache line size)
Cache rules everything around me
@tyler_treat
https://github.com/jonhoo/drwmutex/blob/master/drwmutex.go
@tyler_treat
@tyler_treat
https://github.com/jonhoo/drwmutex/blob/master/drwmutex.go
@tyler_treat
@tyler_treat
padding 

64 bytes
(cache line size)
memory
24 bytes
RWMutex1
Cache rules everything around me
@tyler_treat@tyler_treat
@tyler_treat@tyler_treat
@tyler_treat@tyler_treat
@tyler_treat
Go makes concurrency‹
easy enough to be
dangerous.
@tyler_treat
Conclusions
@tyler_treat
The standard library provides‹
general solutions (and they’re‹
generally what you should use).
1
@tyler_treat
Seemingly small, idiomatic‹
decisions can have profound‹
performance implications.
2
@tyler_treat
The Go toolchain has lots‹
of tools for analyzing your‹
code—learn them.
3
@tyler_treat
Go’s compiler and runtime‹
continue to improve.
4
@tyler_treat
Performance proïŹle can‹
change dramatically‹
between releases.
5
@tyler_treat
Relying on assumptions‹
can be fatal.
6
@tyler_treat
Code is marginal,‹
architecture is material.
7
@tyler_treat
Peeking behind the curtains‹
can pay dividends.
8
@tyler_treat
Above all, optimize for the‹
right trade-oïŹ€.
9
@tyler_treat
Thanks!

Weitere Àhnliche Inhalte

Andere mochten auch

Operations: Production Readiness Review – How to stop bad things from Happening
Operations: Production Readiness Review – How to stop bad things from HappeningOperations: Production Readiness Review – How to stop bad things from Happening
Operations: Production Readiness Review – How to stop bad things from HappeningAmazon Web Services
 
Streaming Data Analytics with Amazon Redshift and Kinesis Firehose
Streaming Data Analytics with Amazon Redshift and Kinesis FirehoseStreaming Data Analytics with Amazon Redshift and Kinesis Firehose
Streaming Data Analytics with Amazon Redshift and Kinesis FirehoseAmazon Web Services
 
golang.tokyo #6 (in Japanese)
golang.tokyo #6 (in Japanese)golang.tokyo #6 (in Japanese)
golang.tokyo #6 (in Japanese)Yuichi Murata
 
What’s New in Amazon Aurora
What’s New in Amazon AuroraWhat’s New in Amazon Aurora
What’s New in Amazon AuroraAmazon Web Services
 
Apache Spark Streaming + Kafka 0.10 with Joan Viladrosariera
Apache Spark Streaming + Kafka 0.10 with Joan ViladrosarieraApache Spark Streaming + Kafka 0.10 with Joan Viladrosariera
Apache Spark Streaming + Kafka 0.10 with Joan ViladrosarieraSpark Summit
 
AWS X-Rayă«ă‚ˆă‚‹ă‚ąăƒ—ăƒȘă‚±ăƒŒă‚·ăƒ§ăƒłăźćˆ†æžăšăƒ‡ăƒăƒƒă‚°
AWS X-Rayă«ă‚ˆă‚‹ă‚ąăƒ—ăƒȘă‚±ăƒŒă‚·ăƒ§ăƒłăźćˆ†æžăšăƒ‡ăƒăƒƒă‚°AWS X-Rayă«ă‚ˆă‚‹ă‚ąăƒ—ăƒȘă‚±ăƒŒă‚·ăƒ§ăƒłăźćˆ†æžăšăƒ‡ăƒăƒƒă‚°
AWS X-Rayă«ă‚ˆă‚‹ă‚ąăƒ—ăƒȘă‚±ăƒŒă‚·ăƒ§ăƒłăźćˆ†æžăšăƒ‡ăƒăƒƒă‚°Amazon Web Services Japan
 
ScalaからGoま
ScalaからGoまScalaからGoま
ScalaからGoまJames Neve
 
An introduction and future of Ruby coverage library
An introduction and future of Ruby coverage libraryAn introduction and future of Ruby coverage library
An introduction and future of Ruby coverage librarymametter
 
ç„žă«èż‘ă„ăx/net/context (Finding God with x/net/context)
ç„žă«èż‘ă„ăx/net/context (Finding God with x/net/context)ç„žă«èż‘ă„ăx/net/context (Finding God with x/net/context)
ç„žă«èż‘ă„ăx/net/context (Finding God with x/net/context)guregu
 
AndApp開ç™șにおける慚お #denatechcon
AndApp開ç™șにおける慚お #denatechconAndApp開ç™șにおける慚お #denatechcon
AndApp開ç™șにおける慚お #denatechconDeNA
 
SLOぼすすめ
SLOぼすすめSLOぼすすめ
SLOぼすすめTakeo Sawada
 
Swaggerど゙ぼapi開ç™șă‚ˆă‚‚ă‚„ăŸè©±
Swaggerど゙ぼapi開ç™șă‚ˆă‚‚ă‚„ăŸè©±Swaggerど゙ぼapi開ç™șă‚ˆă‚‚ă‚„ăŸè©±
Swaggerど゙ぼapi開ç™șă‚ˆă‚‚ă‚„ăŸè©±KEISUKE KONISHI
 
Fast and Reliable Swift APIs with gRPC
Fast and Reliable Swift APIs with gRPCFast and Reliable Swift APIs with gRPC
Fast and Reliable Swift APIs with gRPCTim Burks
 
ăƒĄăƒ«ă‚«ăƒȘă‚ąăƒƒăƒ†ăźćźŸć‹™ăŠă‚™äœżăˆăŸă€GAE/Goぼ開ç™șをćŠč率的にするæ–čæł•
ăƒĄăƒ«ă‚«ăƒȘă‚ąăƒƒăƒ†ăźćźŸć‹™ăŠă‚™äœżăˆăŸă€GAE/Goぼ開ç™șをćŠč率的にするæ–čæł•ăƒĄăƒ«ă‚«ăƒȘă‚ąăƒƒăƒ†ăźćźŸć‹™ăŠă‚™äœżăˆăŸă€GAE/Goぼ開ç™șをćŠč率的にするæ–čæł•
ăƒĄăƒ«ă‚«ăƒȘă‚ąăƒƒăƒ†ăźćźŸć‹™ăŠă‚™äœżăˆăŸă€GAE/Goぼ開ç™șをćŠč率的にするæ–čæł•Takuya Ueda
 
Solving anything in VCL
Solving anything in VCLSolving anything in VCL
Solving anything in VCLFastly
 
Google Home and Google Assistant Workshop: Build your own serverless Action o...
Google Home and Google Assistant Workshop: Build your own serverless Action o...Google Home and Google Assistant Workshop: Build your own serverless Action o...
Google Home and Google Assistant Workshop: Build your own serverless Action o...Bret McGowen - NYC Google Developer Advocate
 
Spark Streaming Programming Techniques You Should Know with Gerard Maas
Spark Streaming Programming Techniques You Should Know with Gerard MaasSpark Streaming Programming Techniques You Should Know with Gerard Maas
Spark Streaming Programming Techniques You Should Know with Gerard MaasSpark Summit
 
ăƒȘă‚Żăƒ«ăƒŒăƒˆă‚’æ”Żăˆă‚‹æšȘæ–­ăƒ†ă‚™ăƒŒă‚żćŸșç›€ăšæ©Ÿæą°ć­Šçż’ăźé©ç”šäș‹äŸ‹
ăƒȘă‚Żăƒ«ăƒŒăƒˆă‚’æ”Żăˆă‚‹æšȘæ–­ăƒ†ă‚™ăƒŒă‚żćŸșç›€ăšæ©Ÿæą°ć­Šçż’ăźé©ç”šäș‹äŸ‹ăƒȘă‚Żăƒ«ăƒŒăƒˆă‚’æ”Żăˆă‚‹æšȘæ–­ăƒ†ă‚™ăƒŒă‚żćŸșç›€ăšæ©Ÿæą°ć­Šçż’ăźé©ç”šäș‹äŸ‹
ăƒȘă‚Żăƒ«ăƒŒăƒˆă‚’æ”Żăˆă‚‹æšȘæ–­ăƒ†ă‚™ăƒŒă‚żćŸșç›€ăšæ©Ÿæą°ć­Šçż’ăźé©ç”šäș‹äŸ‹Tetsutaro Watanabe
 

Andere mochten auch (20)

Operations: Production Readiness Review – How to stop bad things from Happening
Operations: Production Readiness Review – How to stop bad things from HappeningOperations: Production Readiness Review – How to stop bad things from Happening
Operations: Production Readiness Review – How to stop bad things from Happening
 
Streaming Data Analytics with Amazon Redshift and Kinesis Firehose
Streaming Data Analytics with Amazon Redshift and Kinesis FirehoseStreaming Data Analytics with Amazon Redshift and Kinesis Firehose
Streaming Data Analytics with Amazon Redshift and Kinesis Firehose
 
golang.tokyo #6 (in Japanese)
golang.tokyo #6 (in Japanese)golang.tokyo #6 (in Japanese)
golang.tokyo #6 (in Japanese)
 
What’s New in Amazon Aurora
What’s New in Amazon AuroraWhat’s New in Amazon Aurora
What’s New in Amazon Aurora
 
Apache Spark Streaming + Kafka 0.10 with Joan Viladrosariera
Apache Spark Streaming + Kafka 0.10 with Joan ViladrosarieraApache Spark Streaming + Kafka 0.10 with Joan Viladrosariera
Apache Spark Streaming + Kafka 0.10 with Joan Viladrosariera
 
AWS X-Rayă«ă‚ˆă‚‹ă‚ąăƒ—ăƒȘă‚±ăƒŒă‚·ăƒ§ăƒłăźćˆ†æžăšăƒ‡ăƒăƒƒă‚°
AWS X-Rayă«ă‚ˆă‚‹ă‚ąăƒ—ăƒȘă‚±ăƒŒă‚·ăƒ§ăƒłăźćˆ†æžăšăƒ‡ăƒăƒƒă‚°AWS X-Rayă«ă‚ˆă‚‹ă‚ąăƒ—ăƒȘă‚±ăƒŒă‚·ăƒ§ăƒłăźćˆ†æžăšăƒ‡ăƒăƒƒă‚°
AWS X-Rayă«ă‚ˆă‚‹ă‚ąăƒ—ăƒȘă‚±ăƒŒă‚·ăƒ§ăƒłăźćˆ†æžăšăƒ‡ăƒăƒƒă‚°
 
ScalaからGoま
ScalaからGoまScalaからGoま
ScalaからGoま
 
Blockchain on Go
Blockchain on GoBlockchain on Go
Blockchain on Go
 
An introduction and future of Ruby coverage library
An introduction and future of Ruby coverage libraryAn introduction and future of Ruby coverage library
An introduction and future of Ruby coverage library
 
ç„žă«èż‘ă„ăx/net/context (Finding God with x/net/context)
ç„žă«èż‘ă„ăx/net/context (Finding God with x/net/context)ç„žă«èż‘ă„ăx/net/context (Finding God with x/net/context)
ç„žă«èż‘ă„ăx/net/context (Finding God with x/net/context)
 
AndApp開ç™șにおける慚お #denatechcon
AndApp開ç™șにおける慚お #denatechconAndApp開ç™șにおける慚お #denatechcon
AndApp開ç™șにおける慚お #denatechcon
 
SLOぼすすめ
SLOぼすすめSLOぼすすめ
SLOぼすすめ
 
Microservices at Mercari
Microservices at MercariMicroservices at Mercari
Microservices at Mercari
 
Swaggerど゙ぼapi開ç™șă‚ˆă‚‚ă‚„ăŸè©±
Swaggerど゙ぼapi開ç™șă‚ˆă‚‚ă‚„ăŸè©±Swaggerど゙ぼapi開ç™șă‚ˆă‚‚ă‚„ăŸè©±
Swaggerど゙ぼapi開ç™șă‚ˆă‚‚ă‚„ăŸè©±
 
Fast and Reliable Swift APIs with gRPC
Fast and Reliable Swift APIs with gRPCFast and Reliable Swift APIs with gRPC
Fast and Reliable Swift APIs with gRPC
 
ăƒĄăƒ«ă‚«ăƒȘă‚ąăƒƒăƒ†ăźćźŸć‹™ăŠă‚™äœżăˆăŸă€GAE/Goぼ開ç™șをćŠč率的にするæ–čæł•
ăƒĄăƒ«ă‚«ăƒȘă‚ąăƒƒăƒ†ăźćźŸć‹™ăŠă‚™äœżăˆăŸă€GAE/Goぼ開ç™șをćŠč率的にするæ–čæł•ăƒĄăƒ«ă‚«ăƒȘă‚ąăƒƒăƒ†ăźćźŸć‹™ăŠă‚™äœżăˆăŸă€GAE/Goぼ開ç™șをćŠč率的にするæ–čæł•
ăƒĄăƒ«ă‚«ăƒȘă‚ąăƒƒăƒ†ăźćźŸć‹™ăŠă‚™äœżăˆăŸă€GAE/Goぼ開ç™șをćŠč率的にするæ–čæł•
 
Solving anything in VCL
Solving anything in VCLSolving anything in VCL
Solving anything in VCL
 
Google Home and Google Assistant Workshop: Build your own serverless Action o...
Google Home and Google Assistant Workshop: Build your own serverless Action o...Google Home and Google Assistant Workshop: Build your own serverless Action o...
Google Home and Google Assistant Workshop: Build your own serverless Action o...
 
Spark Streaming Programming Techniques You Should Know with Gerard Maas
Spark Streaming Programming Techniques You Should Know with Gerard MaasSpark Streaming Programming Techniques You Should Know with Gerard Maas
Spark Streaming Programming Techniques You Should Know with Gerard Maas
 
ăƒȘă‚Żăƒ«ăƒŒăƒˆă‚’æ”Żăˆă‚‹æšȘæ–­ăƒ†ă‚™ăƒŒă‚żćŸșç›€ăšæ©Ÿæą°ć­Šçż’ăźé©ç”šäș‹äŸ‹
ăƒȘă‚Żăƒ«ăƒŒăƒˆă‚’æ”Żăˆă‚‹æšȘæ–­ăƒ†ă‚™ăƒŒă‚żćŸșç›€ăšæ©Ÿæą°ć­Šçż’ăźé©ç”šäș‹äŸ‹ăƒȘă‚Żăƒ«ăƒŒăƒˆă‚’æ”Żăˆă‚‹æšȘæ–­ăƒ†ă‚™ăƒŒă‚żćŸșç›€ăšæ©Ÿæą°ć­Šçż’ăźé©ç”šäș‹äŸ‹
ăƒȘă‚Żăƒ«ăƒŒăƒˆă‚’æ”Żăˆă‚‹æšȘæ–­ăƒ†ă‚™ăƒŒă‚żćŸșç›€ăšæ©Ÿæą°ć­Šçż’ăźé©ç”šäș‹äŸ‹
 

Ähnlich wie So You Wanna Go Fast?

Distributed Systems Are a UX Problem
Distributed Systems Are a UX ProblemDistributed Systems Are a UX Problem
Distributed Systems Are a UX ProblemTyler Treat
 
Python basics
Python basicsPython basics
Python basicsJyoti shukla
 
The Observability Pipeline
The Observability PipelineThe Observability Pipeline
The Observability PipelineTyler Treat
 
From 0 to Ember
From 0 to EmberFrom 0 to Ember
From 0 to EmberTracy Lee
 
Future of Ruby on the Web
Future of Ruby on the WebFuture of Ruby on the Web
Future of Ruby on the WebFuture Insights
 
"MySQL Boosting - DB Best Practices & Optimization" by José Luis Martínez - C...
"MySQL Boosting - DB Best Practices & Optimization" by José Luis Martínez - C..."MySQL Boosting - DB Best Practices & Optimization" by José Luis Martínez - C...
"MySQL Boosting - DB Best Practices & Optimization" by José Luis Martínez - C...CAPSiDE
 
Trafaret: monads and python
Trafaret: monads and pythonTrafaret: monads and python
Trafaret: monads and pythonMikhail Krivushin
 

Ähnlich wie So You Wanna Go Fast? (8)

Distributed Systems Are a UX Problem
Distributed Systems Are a UX ProblemDistributed Systems Are a UX Problem
Distributed Systems Are a UX Problem
 
Python basics
Python basicsPython basics
Python basics
 
The Observability Pipeline
The Observability PipelineThe Observability Pipeline
The Observability Pipeline
 
From 0 to Ember
From 0 to EmberFrom 0 to Ember
From 0 to Ember
 
Future of Ruby on the Web
Future of Ruby on the WebFuture of Ruby on the Web
Future of Ruby on the Web
 
"MySQL Boosting - DB Best Practices & Optimization" by José Luis Martínez - C...
"MySQL Boosting - DB Best Practices & Optimization" by José Luis Martínez - C..."MySQL Boosting - DB Best Practices & Optimization" by José Luis Martínez - C...
"MySQL Boosting - DB Best Practices & Optimization" by José Luis Martínez - C...
 
Boosting MySQL (for starters)
Boosting MySQL (for starters)Boosting MySQL (for starters)
Boosting MySQL (for starters)
 
Trafaret: monads and python
Trafaret: monads and pythonTrafaret: monads and python
Trafaret: monads and python
 

Mehr von Tyler Treat

Cloud-Native Observability
Cloud-Native ObservabilityCloud-Native Observability
Cloud-Native ObservabilityTyler Treat
 
The Future of Ops
The Future of OpsThe Future of Ops
The Future of OpsTyler Treat
 
Building a Distributed Message Log from Scratch - SCaLE 16x
Building a Distributed Message Log from Scratch - SCaLE 16xBuilding a Distributed Message Log from Scratch - SCaLE 16x
Building a Distributed Message Log from Scratch - SCaLE 16xTyler Treat
 
Building a Distributed Message Log from Scratch
Building a Distributed Message Log from ScratchBuilding a Distributed Message Log from Scratch
Building a Distributed Message Log from ScratchTyler Treat
 
Simple Solutions for Complex Problems
Simple Solutions for Complex ProblemsSimple Solutions for Complex Problems
Simple Solutions for Complex ProblemsTyler Treat
 
Probabilistic algorithms for fun and pseudorandom profit
Probabilistic algorithms for fun and pseudorandom profitProbabilistic algorithms for fun and pseudorandom profit
Probabilistic algorithms for fun and pseudorandom profitTyler Treat
 
The Economics of Scale: Promises and Perils of Going Distributed
The Economics of Scale: Promises and Perils of Going DistributedThe Economics of Scale: Promises and Perils of Going Distributed
The Economics of Scale: Promises and Perils of Going DistributedTyler Treat
 
From Mainframe to Microservice: An Introduction to Distributed Systems
From Mainframe to Microservice: An Introduction to Distributed SystemsFrom Mainframe to Microservice: An Introduction to Distributed Systems
From Mainframe to Microservice: An Introduction to Distributed SystemsTyler Treat
 

Mehr von Tyler Treat (8)

Cloud-Native Observability
Cloud-Native ObservabilityCloud-Native Observability
Cloud-Native Observability
 
The Future of Ops
The Future of OpsThe Future of Ops
The Future of Ops
 
Building a Distributed Message Log from Scratch - SCaLE 16x
Building a Distributed Message Log from Scratch - SCaLE 16xBuilding a Distributed Message Log from Scratch - SCaLE 16x
Building a Distributed Message Log from Scratch - SCaLE 16x
 
Building a Distributed Message Log from Scratch
Building a Distributed Message Log from ScratchBuilding a Distributed Message Log from Scratch
Building a Distributed Message Log from Scratch
 
Simple Solutions for Complex Problems
Simple Solutions for Complex ProblemsSimple Solutions for Complex Problems
Simple Solutions for Complex Problems
 
Probabilistic algorithms for fun and pseudorandom profit
Probabilistic algorithms for fun and pseudorandom profitProbabilistic algorithms for fun and pseudorandom profit
Probabilistic algorithms for fun and pseudorandom profit
 
The Economics of Scale: Promises and Perils of Going Distributed
The Economics of Scale: Promises and Perils of Going DistributedThe Economics of Scale: Promises and Perils of Going Distributed
The Economics of Scale: Promises and Perils of Going Distributed
 
From Mainframe to Microservice: An Introduction to Distributed Systems
From Mainframe to Microservice: An Introduction to Distributed SystemsFrom Mainframe to Microservice: An Introduction to Distributed Systems
From Mainframe to Microservice: An Introduction to Distributed Systems
 

KĂŒrzlich hochgeladen

The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataBradBedford3
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Modelsaagamshah0812
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationkaushalgiri8080
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto GonzĂĄlez Trastoy
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfkalichargn70th171
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AIABDERRAOUF MEHENNI
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, Inc.
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxComplianceQuest1
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfjoe51371421
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideChristina Lin
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number SystemsJheuzeDellosa
 
Test Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and BackendTest Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and BackendArshad QA
 
(Genuine) Escort Service Lucknow | Starting â‚č,5K To @25k with A/C đŸ§‘đŸœâ€â€ïžâ€đŸ§‘đŸ» 89...
(Genuine) Escort Service Lucknow | Starting â‚č,5K To @25k with A/C đŸ§‘đŸœâ€â€ïžâ€đŸ§‘đŸ» 89...(Genuine) Escort Service Lucknow | Starting â‚č,5K To @25k with A/C đŸ§‘đŸœâ€â€ïžâ€đŸ§‘đŸ» 89...
(Genuine) Escort Service Lucknow | Starting â‚č,5K To @25k with A/C đŸ§‘đŸœâ€â€ïžâ€đŸ§‘đŸ» 89...gurkirankumar98700
 

KĂŒrzlich hochgeladen (20)

The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
Exploring iOS App Development: Simplifying the Process
Exploring iOS App Development: Simplifying the ProcessExploring iOS App Development: Simplifying the Process
Exploring iOS App Development: Simplifying the Process
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanation
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
 
why an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdfwhy an Opensea Clone Script might be your perfect match.pdf
why an Opensea Clone Script might be your perfect match.pdf
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number Systems
 
Test Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and BackendTest Automation Strategy for Frontend and Backend
Test Automation Strategy for Frontend and Backend
 
(Genuine) Escort Service Lucknow | Starting â‚č,5K To @25k with A/C đŸ§‘đŸœâ€â€ïžâ€đŸ§‘đŸ» 89...
(Genuine) Escort Service Lucknow | Starting â‚č,5K To @25k with A/C đŸ§‘đŸœâ€â€ïžâ€đŸ§‘đŸ» 89...(Genuine) Escort Service Lucknow | Starting â‚č,5K To @25k with A/C đŸ§‘đŸœâ€â€ïžâ€đŸ§‘đŸ» 89...
(Genuine) Escort Service Lucknow | Starting â‚č,5K To @25k with A/C đŸ§‘đŸœâ€â€ïžâ€đŸ§‘đŸ» 89...
 

So You Wanna Go Fast?