SlideShare une entreprise Scribd logo
1  sur  169
Télécharger pour lire hors ligne
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-offs.
@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 fires

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-specific 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 stuff.
@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 difference.
@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 profile 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-off.
9
@tyler_treat
Thanks!

Contenu connexe

En vedette

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
 
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
 
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
 
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
 

En vedette (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
 
リクルートを支える横断データ基盤と機械学習の適用事例
リクルートを支える横断データ基盤と機械学習の適用事例リクルートを支える横断データ基盤と機械学習の適用事例
リクルートを支える横断データ基盤と機械学習の適用事例
 

Similaire à 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
 
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
 

Similaire à 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
 

Plus de 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
 

Plus de 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
 

Dernier

The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Steffen Staab
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
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
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceanilsa9823
 
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
 
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
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
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
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...OnePlan Solutions
 
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
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 
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
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️anilsa9823
 
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.
 

Dernier (20)

The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
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
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
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
 
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
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
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
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
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
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
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
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
 
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...
 

So You Wanna Go Fast?