SlideShare a Scribd company logo
1 of 57
Download to read offline
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
smf
the fastest RPC fmwrk. in the west
Principal Engineer, Platform Engineering - Akamai Technologies
Alexander Gallego
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
Alexander Gallego
2
Principal Engineer @ Akamai - Platform Group
Ex CTO / founder of Concord.io - A distributed
stream processor written in C++ atop Apache
Mesos (Now part of Akamai)
First employee, engineer for Yieldmo.com (ad-tech)
startup in NYC
maintainer of smf: github.com/senior7515/smf
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
background
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
Can we do transactional streaming?
▪ At Concord.io, I worked on a streaming platform
o Can we do transactional writes (3x replication - even if in memory)
• Can we do it with low latency and high throughput?
– double digit ms *tail* latency at 1024 batches?
▪ Fastest open source queue did 150ms p90 and 2secs p9999
o Unpredictable JVM spikes -
• Spark once stalled for 4 seconds reading from Kafka - couldn’t replicate.
o Concord was in C++ - we wanted predictability
4
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
Can we do better?
5
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
How about this! - per node overhead
6
7us p90 latency
26us p100
latency
8us p99 latency
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
How about this! - per node overhead
7
Read Socket RPC Parsing
Method
Execution
Flush Socket
60 byte payload + 20 bytes of TCP - with full type serialization!
p90 = 7 microseconds, p99 = 8 microseconds, p100 = 26 microseconds
p99=8us
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
smf
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
smf RPC
▪ Built for microsecond tail latencies
▪ Atop seastar::future<>s
▪ IDL Compiler/CodeGen - using Google Flatbuffers’ IDL
▪ Multi-language compatibility
▪ Small - 16 byte overhead (with rich types, headers, compression,etc)
… it’s like gRPC / Thrift / Cap n’ Proto - for microsecond latencies.
9
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
IDL
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
smf
11
namespace smf_gen.demo;
table Request {
name: string;
}
table Response {
name: string;
}
rpc_service SmfStorage {
Get(Request):Response;
}
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
smf
12
namespace smf_gen.demo;
table Request {
name: string;
}
table Response {
name: string;
}
rpc_service SmfStorage {
Get(Request):Response;
}
input
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
smf
13
namespace smf_gen.demo;
table Request {
name: string;
}
table Response {
name: string;
}
rpc_service SmfStorage {
Get(Request):Response;
}
output
input
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
smf
14
namespace smf_gen.demo;
table Request {
name: string;
}
table Response {
name: string;
}
rpc_service SmfStorage {
Get(Request):Response;
}
Service Definition
output
input
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
smf
15
namespace smf_gen.demo;
table Request {
name: string;
}
table Response {
name: string;
}
rpc_service SmfStorage {
Get(Request):Response;
}
smf_gen --filename demo_service.fbs
Service Definition
output
input
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
Demo
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
smf::rpc_client
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
smf
18
smf::rpc_typed_envelope<Request> req;
req.data->name = "Hello, smf-world!";
auto client = SmfStorageClient::make_shared("127.0.0.1",2121);
client->Get(req.serialize_data()).then([ ](auto reply) {
std::cout << reply->name() << std::endl;
});
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
smf
19
smf::rpc_typed_envelope<Request> req;
req.data->name = "Hello, smf-world!";
auto client = SmfStorageClient::make_shared("127.0.0.1",2121);
client->Get(req.serialize_data()).then([ ](auto reply) {
std::cout << reply->name() << std::endl;
});
data to send
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
smf
20
smf::rpc_typed_envelope<Request> req;
req.data->name = "Hello, smf-world!";
auto client = SmfStorageClient::make_shared("127.0.0.1",2121);
client->Get(req.serialize_data()).then([ ](auto reply) {
std::cout << reply->name() << std::endl;
});
data to send
actual socket
seastar::shared_ptr<T>
non-thread safe
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
smf
21
smf::rpc_typed_envelope<Request> req;
req.data->name = "Hello, smf-world!";
auto client = SmfStorageClient::make_shared("127.0.0.1",2121);
client->Get(req.serialize_data()).then([ ](auto reply) {
std::cout << reply->name() << std::endl;
});
data to send
actual socket
seastar::shared_ptr<T>
non-thread safe
Method to call
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
smf::rpc_server
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
smf
23
class storage_service : public SmfStorage {
virtual seastar::future<rpc_typed_envelope<Response>>
Get(rpc_recv_typed_context<Request> rec) final {
rpc_typed_envelope<Response> data;
data.data->name = "Hello, cruel world!";
data.envelope.set_status(200);
return make_ready_future<decltype(data)>(std::move(data));
}
};
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
smf
24
class storage_service : public SmfStorage {
virtual seastar::future<rpc_typed_envelope<Response>>
Get(rpc_recv_typed_context<Request> rec) final {
rpc_typed_envelope<Response> data;
data.data->name = "Hello, cruel world!";
data.envelope.set_status(200);
return make_ready_future<decltype(data)>(std::move(data));
}
};
code-gen’ed service
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
smf
25
class storage_service : public SmfStorage {
virtual seastar::future<rpc_typed_envelope<Response>>
Get(rpc_recv_typed_context<Request> rec) final {
rpc_typed_envelope<Response> data;
data.data->name = "Hello, cruel world!";
data.envelope.set_status(200);
return make_ready_future<decltype(data)>(std::move(data));
}
};
code-gen’ed service
Method
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
smf
26
class storage_service : public SmfStorage {
virtual seastar::future<rpc_typed_envelope<Response>>
Get(rpc_recv_typed_context<Request> rec) final {
rpc_typed_envelope<Response> data;
data.data->name = "Hello, cruel world!";
data.envelope.set_status(200);
return make_ready_future<decltype(data)>(std::move(data));
}
};
code-gen’ed service
Method
return data
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
smf::rpc_filter
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
smf
28
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
smf
29
template <typename T>
struct rpc_filter {
seastar::future<T> operator()(T t);
};
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
smf
30
struct zstd_compression_filter : rpc_filter<rpc_envelope> {
explicit zstd_compression_filter(uint32_t min_size)
: min_compression_size(min_size) {}
seastar::future<rpc_envelope> operator()(rpc_envelope &&e);
const uint32_t min_compression_size;
};
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
smf
31
// add it to your clients
client->outgoing_filters().push_back(
smf::zstd_compression_filter(1000));
// add it to your servers
using zstd_t = smf::zstd_compression_filter;
return rpc.invoke_on_all(
&smf::rpc_server::register_outgoming_filter<zstd_t>,1000);
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
smf
32
static thread_local auto incoming_stage =
seastar::make_execution_stage("smf::incoming",
&rpc_client::apply_incoming_filters);
static thread_local auto outgoing_stage =
seastar::make_execution_stage("smf::outgoing",
&rpc_client::apply_outgoing_filters);
SEDA-pipelined
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
request anatomy
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
smf request anatomy
34
/// total = 128bits == 16bytes
MANUALLY_ALIGNED_STRUCT(4) header FLATBUFFERS_FINAL_CLASS {
int8_t compression_;
int8_t bitflags_;
uint16_t session_;
uint32_t size_;
uint32_t checksum_;
uint32_t meta_;
};
STRUCT_END(header, 16);
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
smf request anatomy
35
/// total = 128bits == 16bytes
MANUALLY_ALIGNED_STRUCT(4) header FLATBUFFERS_FINAL_CLASS {
int8_t compression_;
int8_t bitflags_;
uint16_t session_;
uint32_t size_;
uint32_t checksum_;
uint32_t meta_;
};
STRUCT_END(header, 16);
- Turn off padding by compiler.
- Enforce layout.
- Store everything in little endian
- X-lang, X-platform compat
- noop on most platforms
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
smf request anatomy
36
/// total = 128bits == 16bytes
MANUALLY_ALIGNED_STRUCT(4) header FLATBUFFERS_FINAL_CLASS {
int8_t compression_;
int8_t bitflags_;
uint16_t session_;
uint32_t size_;
uint32_t checksum_;
uint32_t meta_;
};
STRUCT_END(header, 16);
zstd, lz4
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
smf request anatomy
37
/// total = 128bits == 16bytes
MANUALLY_ALIGNED_STRUCT(4) header FLATBUFFERS_FINAL_CLASS {
int8_t compression_;
int8_t bitflags_;
uint16_t session_;
uint32_t size_;
uint32_t checksum_;
uint32_t meta_;
};
STRUCT_END(header, 16);
zstd, lz4
headers?
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
smf request anatomy
38
/// total = 128bits == 16bytes
MANUALLY_ALIGNED_STRUCT(4) header FLATBUFFERS_FINAL_CLASS {
int8_t compression_;
int8_t bitflags_;
uint16_t session_;
uint32_t size_;
uint32_t checksum_;
uint32_t meta_;
};
STRUCT_END(header, 16);
zstd, lz4
headers?
max # of concurrent requests per client
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
smf request anatomy
39
/// total = 128bits == 16bytes
MANUALLY_ALIGNED_STRUCT(4) header FLATBUFFERS_FINAL_CLASS {
int8_t compression_;
int8_t bitflags_;
uint16_t session_;
uint32_t size_;
uint32_t checksum_;
uint32_t meta_;
};
STRUCT_END(header, 16);
zstd, lz4
headers?
max # of concurrent requests per client
xxhash32 - very fast! 5.4GB/s
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
smf request anatomy
40
/// total = 128bits == 16bytes
MANUALLY_ALIGNED_STRUCT(4) header FLATBUFFERS_FINAL_CLASS {
int8_t compression_;
int8_t bitflags_;
uint16_t session_;
uint32_t size_;
uint32_t checksum_;
uint32_t meta_;
};
STRUCT_END(header, 16);
zstd, lz4
headers?
max # of concurrent requests per client
xxhash32 - very fast! 5.4GB/s
request_id or status (response) code
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
smf Code Gen’d XOR id
41
auto fqn = fully_qualified_name;
service_id = hash( fqn(service_name) )
method_id = hash( ∀ fqn(x) input_args_types,
∀ fqn(x) output_args_types,
fqn(method_name),
separator = “:”)
rpc_dispatch_id = service_id ^ method_id;
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
smf Code Gen’d XOR id
42
/// RequestID: 212494116 ^ 1719559449
/// ServiceID: 212494116
/// MethodID: 1719559449
future<smf::rpc_recv_typed_context<Response>>
Get(smf::rpc_envelope e) {
e.set_request_id(212494116, 1719559449);
return send<smf_gen::demo::Response>(std::move(e));
}
Method ID
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
smf Code Gen’d XOR id
43
handles.emplace_back(
"Get", 1719559449,
[this](smf::rpc_recv_context c) {
using req_t = smf::rpc_recv_typed_context<Request>;
auto session_id = c.session();
return Get(req_t(std::move(c))).then(
[session_id](auto typed_env){
typed_env....mutate_session(session_id);
return make_ready_future<rpc_envelope>(
typed_env.serialize_data());
});
Method ID
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
smf Code Gen’d XOR id
44
struct rpc_service {
virtual const char *service_name() const = 0;
virtual uint32_t service_id() const = 0;
virtual std::vector<rpc_service_method_handle> methods() = 0;
virtual ~rpc_service() {}
};
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
telemetry
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
smf built in telemetry
46
High Dynamic Range Histogram (HDR) … Expensive 185 KB
::hdr_init(1, // 1 microsec - minimum value
INT64_C(3600000000), // 1 hour in microsecs - max value
3, // Number of significant figures
&hist); // Pointer to initialize
// clients
client = ClientService::make_shared(std::move(opts));
client->enable_histogram_metrics();
// servers enabled by default
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
smf built in telemetry (prometheus)
47
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
performance?
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
smf DPDK client - DPDK server*
49
7us p90 latency
26us p100
latency
8us p99 latency
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
smf end-to-end latency (DPDK)
50
p100=500us
p90=51us
p99=56us
2 Threads. Includes connection open
time - cold cache
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
smf end-to-end latency (DPDK)
51
Same graph, minus the **first** request of each of
the 2 threads
p100=151us
p50=51us p99=56us
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
smf future work
52
● Currently could only do 1.5MM qps on the server setup
○ size = 60 byte payload + 20 TCP frame bytes
○ Hit TCP.hh bug in seastar with httpd/seawreck and my own impl
■ `(_snd.window > 0) || ((_snd.window == 0) && (len == 1))'
failed.
■ Could be my lab setup
■ Because of this - couldn't fill the wire fast enough
● Add JVM, Python, Go, codegen
● Improve Docs: https://senior7515.github.io/smf/
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
THANK YOU
gallego.alexx@gmail.com | alexgallego.org
@emaxerrno
Please stay in touch
Any questions? https://senior7515.github.io/smf/
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
extra
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
smf Write Ahead Log (latency)
55
percentile Apache Kafka smf WAL speedup
p50 878ms 21ms 41X
p95 1340ms 36ms 37x
p99 1814ms 49ms 37x
p999 1896ms 54ms 35x
p100 1930ms 54ms 35x
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company
56
PRESENTATION TITLE ON ONE LINE
AND ON TWO LINES
First and last name
Position, company

More Related Content

What's hot

Scylla Summit 2017: Scylla on Samsung NVMe Z-SSDs
Scylla Summit 2017: Scylla on Samsung NVMe Z-SSDsScylla Summit 2017: Scylla on Samsung NVMe Z-SSDs
Scylla Summit 2017: Scylla on Samsung NVMe Z-SSDsScyllaDB
 
Scylla Summit 2017: Migrating to Scylla From Cassandra and Others With No Dow...
Scylla Summit 2017: Migrating to Scylla From Cassandra and Others With No Dow...Scylla Summit 2017: Migrating to Scylla From Cassandra and Others With No Dow...
Scylla Summit 2017: Migrating to Scylla From Cassandra and Others With No Dow...ScyllaDB
 
Scylla Summit 2017: How to Use Gocql to Execute Queries and What the Driver D...
Scylla Summit 2017: How to Use Gocql to Execute Queries and What the Driver D...Scylla Summit 2017: How to Use Gocql to Execute Queries and What the Driver D...
Scylla Summit 2017: How to Use Gocql to Execute Queries and What the Driver D...ScyllaDB
 
Scylla Summit 2017: A Deep Dive on Heat Weighted Load Balancing
Scylla Summit 2017: A Deep Dive on Heat Weighted Load BalancingScylla Summit 2017: A Deep Dive on Heat Weighted Load Balancing
Scylla Summit 2017: A Deep Dive on Heat Weighted Load BalancingScyllaDB
 
Scylla Summit 2017: Snapfish's Journey Towards Scylla
Scylla Summit 2017: Snapfish's Journey Towards ScyllaScylla Summit 2017: Snapfish's Journey Towards Scylla
Scylla Summit 2017: Snapfish's Journey Towards ScyllaScyllaDB
 
Scylla Summit 2017: Running a Soft Real-time Service at One Million QPS
Scylla Summit 2017: Running a Soft Real-time Service at One Million QPSScylla Summit 2017: Running a Soft Real-time Service at One Million QPS
Scylla Summit 2017: Running a Soft Real-time Service at One Million QPSScyllaDB
 
Scylla Summit 2017: Keynote, Looking back, looking ahead
Scylla Summit 2017: Keynote, Looking back, looking aheadScylla Summit 2017: Keynote, Looking back, looking ahead
Scylla Summit 2017: Keynote, Looking back, looking aheadScyllaDB
 
Scylla Summit 2017 Keynote: NextGen NoSQL with CEO Dor Laor
Scylla Summit 2017 Keynote: NextGen NoSQL with CEO Dor LaorScylla Summit 2017 Keynote: NextGen NoSQL with CEO Dor Laor
Scylla Summit 2017 Keynote: NextGen NoSQL with CEO Dor LaorScyllaDB
 
Scylla Summit 2017: Scylla's Open Source Monitoring Solution
Scylla Summit 2017: Scylla's Open Source Monitoring SolutionScylla Summit 2017: Scylla's Open Source Monitoring Solution
Scylla Summit 2017: Scylla's Open Source Monitoring SolutionScyllaDB
 
Scylla Summit 2017: Distributed Materialized Views
Scylla Summit 2017: Distributed Materialized ViewsScylla Summit 2017: Distributed Materialized Views
Scylla Summit 2017: Distributed Materialized ViewsScyllaDB
 
Scylla Summit 2017: How to Ruin Your Workload's Performance by Choosing the W...
Scylla Summit 2017: How to Ruin Your Workload's Performance by Choosing the W...Scylla Summit 2017: How to Ruin Your Workload's Performance by Choosing the W...
Scylla Summit 2017: How to Ruin Your Workload's Performance by Choosing the W...ScyllaDB
 
Scylla Summit 2017: How to Optimize and Reduce Inter-DC Network Traffic and S...
Scylla Summit 2017: How to Optimize and Reduce Inter-DC Network Traffic and S...Scylla Summit 2017: How to Optimize and Reduce Inter-DC Network Traffic and S...
Scylla Summit 2017: How to Optimize and Reduce Inter-DC Network Traffic and S...ScyllaDB
 
Scylla Summit 2017: Scylla on Kubernetes
Scylla Summit 2017: Scylla on KubernetesScylla Summit 2017: Scylla on Kubernetes
Scylla Summit 2017: Scylla on KubernetesScyllaDB
 
If You Care About Performance, Use User Defined Types
If You Care About Performance, Use User Defined TypesIf You Care About Performance, Use User Defined Types
If You Care About Performance, Use User Defined TypesScyllaDB
 
Scylla Summit 2017: Performance Evaluation of Scylla as a Database Backend fo...
Scylla Summit 2017: Performance Evaluation of Scylla as a Database Backend fo...Scylla Summit 2017: Performance Evaluation of Scylla as a Database Backend fo...
Scylla Summit 2017: Performance Evaluation of Scylla as a Database Backend fo...ScyllaDB
 
Scylla Summit 2017: A Toolbox for Understanding Scylla in the Field
Scylla Summit 2017: A Toolbox for Understanding Scylla in the FieldScylla Summit 2017: A Toolbox for Understanding Scylla in the Field
Scylla Summit 2017: A Toolbox for Understanding Scylla in the FieldScyllaDB
 
Scylla Summit 2017: Saving Thousands by Running Scylla on EC2 Spot Instances
Scylla Summit 2017: Saving Thousands by Running Scylla on EC2 Spot InstancesScylla Summit 2017: Saving Thousands by Running Scylla on EC2 Spot Instances
Scylla Summit 2017: Saving Thousands by Running Scylla on EC2 Spot InstancesScyllaDB
 
Scylla Summit 2017: Repair, Backup, Restore: Last Thing Before You Go to Prod...
Scylla Summit 2017: Repair, Backup, Restore: Last Thing Before You Go to Prod...Scylla Summit 2017: Repair, Backup, Restore: Last Thing Before You Go to Prod...
Scylla Summit 2017: Repair, Backup, Restore: Last Thing Before You Go to Prod...ScyllaDB
 
Scylla Summit 2017: Welcome and Keynote - Nextgen NoSQL
Scylla Summit 2017: Welcome and Keynote - Nextgen NoSQLScylla Summit 2017: Welcome and Keynote - Nextgen NoSQL
Scylla Summit 2017: Welcome and Keynote - Nextgen NoSQLScyllaDB
 
Scylla Summit 2017 Keynote: NextGen NoSQL with Chairman Benny Schnaider
Scylla Summit 2017 Keynote: NextGen NoSQL with Chairman Benny SchnaiderScylla Summit 2017 Keynote: NextGen NoSQL with Chairman Benny Schnaider
Scylla Summit 2017 Keynote: NextGen NoSQL with Chairman Benny SchnaiderScyllaDB
 

What's hot (20)

Scylla Summit 2017: Scylla on Samsung NVMe Z-SSDs
Scylla Summit 2017: Scylla on Samsung NVMe Z-SSDsScylla Summit 2017: Scylla on Samsung NVMe Z-SSDs
Scylla Summit 2017: Scylla on Samsung NVMe Z-SSDs
 
Scylla Summit 2017: Migrating to Scylla From Cassandra and Others With No Dow...
Scylla Summit 2017: Migrating to Scylla From Cassandra and Others With No Dow...Scylla Summit 2017: Migrating to Scylla From Cassandra and Others With No Dow...
Scylla Summit 2017: Migrating to Scylla From Cassandra and Others With No Dow...
 
Scylla Summit 2017: How to Use Gocql to Execute Queries and What the Driver D...
Scylla Summit 2017: How to Use Gocql to Execute Queries and What the Driver D...Scylla Summit 2017: How to Use Gocql to Execute Queries and What the Driver D...
Scylla Summit 2017: How to Use Gocql to Execute Queries and What the Driver D...
 
Scylla Summit 2017: A Deep Dive on Heat Weighted Load Balancing
Scylla Summit 2017: A Deep Dive on Heat Weighted Load BalancingScylla Summit 2017: A Deep Dive on Heat Weighted Load Balancing
Scylla Summit 2017: A Deep Dive on Heat Weighted Load Balancing
 
Scylla Summit 2017: Snapfish's Journey Towards Scylla
Scylla Summit 2017: Snapfish's Journey Towards ScyllaScylla Summit 2017: Snapfish's Journey Towards Scylla
Scylla Summit 2017: Snapfish's Journey Towards Scylla
 
Scylla Summit 2017: Running a Soft Real-time Service at One Million QPS
Scylla Summit 2017: Running a Soft Real-time Service at One Million QPSScylla Summit 2017: Running a Soft Real-time Service at One Million QPS
Scylla Summit 2017: Running a Soft Real-time Service at One Million QPS
 
Scylla Summit 2017: Keynote, Looking back, looking ahead
Scylla Summit 2017: Keynote, Looking back, looking aheadScylla Summit 2017: Keynote, Looking back, looking ahead
Scylla Summit 2017: Keynote, Looking back, looking ahead
 
Scylla Summit 2017 Keynote: NextGen NoSQL with CEO Dor Laor
Scylla Summit 2017 Keynote: NextGen NoSQL with CEO Dor LaorScylla Summit 2017 Keynote: NextGen NoSQL with CEO Dor Laor
Scylla Summit 2017 Keynote: NextGen NoSQL with CEO Dor Laor
 
Scylla Summit 2017: Scylla's Open Source Monitoring Solution
Scylla Summit 2017: Scylla's Open Source Monitoring SolutionScylla Summit 2017: Scylla's Open Source Monitoring Solution
Scylla Summit 2017: Scylla's Open Source Monitoring Solution
 
Scylla Summit 2017: Distributed Materialized Views
Scylla Summit 2017: Distributed Materialized ViewsScylla Summit 2017: Distributed Materialized Views
Scylla Summit 2017: Distributed Materialized Views
 
Scylla Summit 2017: How to Ruin Your Workload's Performance by Choosing the W...
Scylla Summit 2017: How to Ruin Your Workload's Performance by Choosing the W...Scylla Summit 2017: How to Ruin Your Workload's Performance by Choosing the W...
Scylla Summit 2017: How to Ruin Your Workload's Performance by Choosing the W...
 
Scylla Summit 2017: How to Optimize and Reduce Inter-DC Network Traffic and S...
Scylla Summit 2017: How to Optimize and Reduce Inter-DC Network Traffic and S...Scylla Summit 2017: How to Optimize and Reduce Inter-DC Network Traffic and S...
Scylla Summit 2017: How to Optimize and Reduce Inter-DC Network Traffic and S...
 
Scylla Summit 2017: Scylla on Kubernetes
Scylla Summit 2017: Scylla on KubernetesScylla Summit 2017: Scylla on Kubernetes
Scylla Summit 2017: Scylla on Kubernetes
 
If You Care About Performance, Use User Defined Types
If You Care About Performance, Use User Defined TypesIf You Care About Performance, Use User Defined Types
If You Care About Performance, Use User Defined Types
 
Scylla Summit 2017: Performance Evaluation of Scylla as a Database Backend fo...
Scylla Summit 2017: Performance Evaluation of Scylla as a Database Backend fo...Scylla Summit 2017: Performance Evaluation of Scylla as a Database Backend fo...
Scylla Summit 2017: Performance Evaluation of Scylla as a Database Backend fo...
 
Scylla Summit 2017: A Toolbox for Understanding Scylla in the Field
Scylla Summit 2017: A Toolbox for Understanding Scylla in the FieldScylla Summit 2017: A Toolbox for Understanding Scylla in the Field
Scylla Summit 2017: A Toolbox for Understanding Scylla in the Field
 
Scylla Summit 2017: Saving Thousands by Running Scylla on EC2 Spot Instances
Scylla Summit 2017: Saving Thousands by Running Scylla on EC2 Spot InstancesScylla Summit 2017: Saving Thousands by Running Scylla on EC2 Spot Instances
Scylla Summit 2017: Saving Thousands by Running Scylla on EC2 Spot Instances
 
Scylla Summit 2017: Repair, Backup, Restore: Last Thing Before You Go to Prod...
Scylla Summit 2017: Repair, Backup, Restore: Last Thing Before You Go to Prod...Scylla Summit 2017: Repair, Backup, Restore: Last Thing Before You Go to Prod...
Scylla Summit 2017: Repair, Backup, Restore: Last Thing Before You Go to Prod...
 
Scylla Summit 2017: Welcome and Keynote - Nextgen NoSQL
Scylla Summit 2017: Welcome and Keynote - Nextgen NoSQLScylla Summit 2017: Welcome and Keynote - Nextgen NoSQL
Scylla Summit 2017: Welcome and Keynote - Nextgen NoSQL
 
Scylla Summit 2017 Keynote: NextGen NoSQL with Chairman Benny Schnaider
Scylla Summit 2017 Keynote: NextGen NoSQL with Chairman Benny SchnaiderScylla Summit 2017 Keynote: NextGen NoSQL with Chairman Benny Schnaider
Scylla Summit 2017 Keynote: NextGen NoSQL with Chairman Benny Schnaider
 

Similar to Scylla Summit 2017: SMF: The Fastest RPC in the West

Distributed Computing Patterns in R
Distributed Computing Patterns in RDistributed Computing Patterns in R
Distributed Computing Patterns in Rarmstrtw
 
Scylla Summit 2017: Streaming ETL in Kafka for Everyone with KSQL
Scylla Summit 2017: Streaming ETL in Kafka for Everyone with KSQLScylla Summit 2017: Streaming ETL in Kafka for Everyone with KSQL
Scylla Summit 2017: Streaming ETL in Kafka for Everyone with KSQLScyllaDB
 
A walk-through of the design and architecture of RabbitMQ - Ayanda Dube
A walk-through of the design and architecture of RabbitMQ - Ayanda DubeA walk-through of the design and architecture of RabbitMQ - Ayanda Dube
A walk-through of the design and architecture of RabbitMQ - Ayanda DubeRabbitMQ Summit
 
PHP applications/environments monitoring: APM & Pinba
PHP applications/environments monitoring: APM & PinbaPHP applications/environments monitoring: APM & Pinba
PHP applications/environments monitoring: APM & PinbaPatrick Allaert
 
Debugging Ruby Systems
Debugging Ruby SystemsDebugging Ruby Systems
Debugging Ruby SystemsEngine Yard
 
Getting Started with Raspberry Pi - DCC 2013.1
Getting Started with Raspberry Pi - DCC 2013.1Getting Started with Raspberry Pi - DCC 2013.1
Getting Started with Raspberry Pi - DCC 2013.1Tom Paulus
 
Introduction to tcpdump
Introduction to tcpdumpIntroduction to tcpdump
Introduction to tcpdumpLev Walkin
 
DASP Top10 for OWASP Thailand Chapter by s111s
DASP Top10 for OWASP Thailand Chapter by s111s DASP Top10 for OWASP Thailand Chapter by s111s
DASP Top10 for OWASP Thailand Chapter by s111s s111s object
 
FOSDEM 2017 - RTC Services With Lua and Kamailio
FOSDEM 2017 - RTC Services With Lua and KamailioFOSDEM 2017 - RTC Services With Lua and Kamailio
FOSDEM 2017 - RTC Services With Lua and KamailioDaniel-Constantin Mierla
 
ABAP Programming Overview
ABAP Programming OverviewABAP Programming Overview
ABAP Programming Overviewsapdocs. info
 
Chapter 1abapprogrammingoverview-091205081953-phpapp01
Chapter 1abapprogrammingoverview-091205081953-phpapp01Chapter 1abapprogrammingoverview-091205081953-phpapp01
Chapter 1abapprogrammingoverview-091205081953-phpapp01tabish
 
chapter-1abapprogrammingoverview-091205081953-phpapp01
chapter-1abapprogrammingoverview-091205081953-phpapp01chapter-1abapprogrammingoverview-091205081953-phpapp01
chapter-1abapprogrammingoverview-091205081953-phpapp01tabish
 
Chapter 1 Abap Programming Overview
Chapter 1 Abap Programming OverviewChapter 1 Abap Programming Overview
Chapter 1 Abap Programming OverviewAshish Kumar
 
Abapprogrammingoverview 090715081305-phpapp02
Abapprogrammingoverview 090715081305-phpapp02Abapprogrammingoverview 090715081305-phpapp02
Abapprogrammingoverview 090715081305-phpapp02tabish
 
Abapprogrammingoverview 090715081305-phpapp02
Abapprogrammingoverview 090715081305-phpapp02Abapprogrammingoverview 090715081305-phpapp02
Abapprogrammingoverview 090715081305-phpapp02wingsrai
 
A Deep Dive into Query Execution Engine of Spark SQL
A Deep Dive into Query Execution Engine of Spark SQLA Deep Dive into Query Execution Engine of Spark SQL
A Deep Dive into Query Execution Engine of Spark SQLDatabricks
 
07-MIPS-Functions.pptx COMPUTER ORGANIZATION AND ASSEMBLY LANGUAGE
07-MIPS-Functions.pptx COMPUTER ORGANIZATION AND ASSEMBLY LANGUAGE07-MIPS-Functions.pptx COMPUTER ORGANIZATION AND ASSEMBLY LANGUAGE
07-MIPS-Functions.pptx COMPUTER ORGANIZATION AND ASSEMBLY LANGUAGEMuhammadUmarAwanCSIT
 

Similar to Scylla Summit 2017: SMF: The Fastest RPC in the West (20)

Distributed Computing Patterns in R
Distributed Computing Patterns in RDistributed Computing Patterns in R
Distributed Computing Patterns in R
 
Scylla Summit 2017: Streaming ETL in Kafka for Everyone with KSQL
Scylla Summit 2017: Streaming ETL in Kafka for Everyone with KSQLScylla Summit 2017: Streaming ETL in Kafka for Everyone with KSQL
Scylla Summit 2017: Streaming ETL in Kafka for Everyone with KSQL
 
A walk-through of the design and architecture of RabbitMQ - Ayanda Dube
A walk-through of the design and architecture of RabbitMQ - Ayanda DubeA walk-through of the design and architecture of RabbitMQ - Ayanda Dube
A walk-through of the design and architecture of RabbitMQ - Ayanda Dube
 
PHP applications/environments monitoring: APM & Pinba
PHP applications/environments monitoring: APM & PinbaPHP applications/environments monitoring: APM & Pinba
PHP applications/environments monitoring: APM & Pinba
 
Debugging Ruby Systems
Debugging Ruby SystemsDebugging Ruby Systems
Debugging Ruby Systems
 
Getting Started with Raspberry Pi - DCC 2013.1
Getting Started with Raspberry Pi - DCC 2013.1Getting Started with Raspberry Pi - DCC 2013.1
Getting Started with Raspberry Pi - DCC 2013.1
 
Introduction to tcpdump
Introduction to tcpdumpIntroduction to tcpdump
Introduction to tcpdump
 
DASP Top10 for OWASP Thailand Chapter by s111s
DASP Top10 for OWASP Thailand Chapter by s111s DASP Top10 for OWASP Thailand Chapter by s111s
DASP Top10 for OWASP Thailand Chapter by s111s
 
Osol Pgsql
Osol PgsqlOsol Pgsql
Osol Pgsql
 
FOSDEM 2017 - RTC Services With Lua and Kamailio
FOSDEM 2017 - RTC Services With Lua and KamailioFOSDEM 2017 - RTC Services With Lua and Kamailio
FOSDEM 2017 - RTC Services With Lua and Kamailio
 
ABAP Programming Overview
ABAP Programming OverviewABAP Programming Overview
ABAP Programming Overview
 
Chapter 1abapprogrammingoverview-091205081953-phpapp01
Chapter 1abapprogrammingoverview-091205081953-phpapp01Chapter 1abapprogrammingoverview-091205081953-phpapp01
Chapter 1abapprogrammingoverview-091205081953-phpapp01
 
chapter-1abapprogrammingoverview-091205081953-phpapp01
chapter-1abapprogrammingoverview-091205081953-phpapp01chapter-1abapprogrammingoverview-091205081953-phpapp01
chapter-1abapprogrammingoverview-091205081953-phpapp01
 
Chapter 1 Abap Programming Overview
Chapter 1 Abap Programming OverviewChapter 1 Abap Programming Overview
Chapter 1 Abap Programming Overview
 
Abapprogrammingoverview 090715081305-phpapp02
Abapprogrammingoverview 090715081305-phpapp02Abapprogrammingoverview 090715081305-phpapp02
Abapprogrammingoverview 090715081305-phpapp02
 
Abapprogrammingoverview 090715081305-phpapp02
Abapprogrammingoverview 090715081305-phpapp02Abapprogrammingoverview 090715081305-phpapp02
Abapprogrammingoverview 090715081305-phpapp02
 
A Deep Dive into Query Execution Engine of Spark SQL
A Deep Dive into Query Execution Engine of Spark SQLA Deep Dive into Query Execution Engine of Spark SQL
A Deep Dive into Query Execution Engine of Spark SQL
 
Pycon - Python for ethical hackers
Pycon - Python for ethical hackers Pycon - Python for ethical hackers
Pycon - Python for ethical hackers
 
07-MIPS-Functions.pptx COMPUTER ORGANIZATION AND ASSEMBLY LANGUAGE
07-MIPS-Functions.pptx COMPUTER ORGANIZATION AND ASSEMBLY LANGUAGE07-MIPS-Functions.pptx COMPUTER ORGANIZATION AND ASSEMBLY LANGUAGE
07-MIPS-Functions.pptx COMPUTER ORGANIZATION AND ASSEMBLY LANGUAGE
 
N flavors of streaming
N flavors of streamingN flavors of streaming
N flavors of streaming
 

More from ScyllaDB

What Developers Need to Unlearn for High Performance NoSQL
What Developers Need to Unlearn for High Performance NoSQLWhat Developers Need to Unlearn for High Performance NoSQL
What Developers Need to Unlearn for High Performance NoSQLScyllaDB
 
Low Latency at Extreme Scale: Proven Practices & Pitfalls
Low Latency at Extreme Scale: Proven Practices & PitfallsLow Latency at Extreme Scale: Proven Practices & Pitfalls
Low Latency at Extreme Scale: Proven Practices & PitfallsScyllaDB
 
Dissecting Real-World Database Performance Dilemmas
Dissecting Real-World Database Performance DilemmasDissecting Real-World Database Performance Dilemmas
Dissecting Real-World Database Performance DilemmasScyllaDB
 
Beyond Linear Scaling: A New Path for Performance with ScyllaDB
Beyond Linear Scaling: A New Path for Performance with ScyllaDBBeyond Linear Scaling: A New Path for Performance with ScyllaDB
Beyond Linear Scaling: A New Path for Performance with ScyllaDBScyllaDB
 
Dissecting Real-World Database Performance Dilemmas
Dissecting Real-World Database Performance DilemmasDissecting Real-World Database Performance Dilemmas
Dissecting Real-World Database Performance DilemmasScyllaDB
 
Database Performance at Scale Masterclass: Workload Characteristics by Felipe...
Database Performance at Scale Masterclass: Workload Characteristics by Felipe...Database Performance at Scale Masterclass: Workload Characteristics by Felipe...
Database Performance at Scale Masterclass: Workload Characteristics by Felipe...ScyllaDB
 
Database Performance at Scale Masterclass: Database Internals by Pavel Emelya...
Database Performance at Scale Masterclass: Database Internals by Pavel Emelya...Database Performance at Scale Masterclass: Database Internals by Pavel Emelya...
Database Performance at Scale Masterclass: Database Internals by Pavel Emelya...ScyllaDB
 
Database Performance at Scale Masterclass: Driver Strategies by Piotr Sarna
Database Performance at Scale Masterclass: Driver Strategies by Piotr SarnaDatabase Performance at Scale Masterclass: Driver Strategies by Piotr Sarna
Database Performance at Scale Masterclass: Driver Strategies by Piotr SarnaScyllaDB
 
Replacing Your Cache with ScyllaDB
Replacing Your Cache with ScyllaDBReplacing Your Cache with ScyllaDB
Replacing Your Cache with ScyllaDBScyllaDB
 
Powering Real-Time Apps with ScyllaDB_ Low Latency & Linear Scalability
Powering Real-Time Apps with ScyllaDB_ Low Latency & Linear ScalabilityPowering Real-Time Apps with ScyllaDB_ Low Latency & Linear Scalability
Powering Real-Time Apps with ScyllaDB_ Low Latency & Linear ScalabilityScyllaDB
 
7 Reasons Not to Put an External Cache in Front of Your Database.pptx
7 Reasons Not to Put an External Cache in Front of Your Database.pptx7 Reasons Not to Put an External Cache in Front of Your Database.pptx
7 Reasons Not to Put an External Cache in Front of Your Database.pptxScyllaDB
 
Getting the most out of ScyllaDB
Getting the most out of ScyllaDBGetting the most out of ScyllaDB
Getting the most out of ScyllaDBScyllaDB
 
NoSQL Database Migration Masterclass - Session 2: The Anatomy of a Migration
NoSQL Database Migration Masterclass - Session 2: The Anatomy of a MigrationNoSQL Database Migration Masterclass - Session 2: The Anatomy of a Migration
NoSQL Database Migration Masterclass - Session 2: The Anatomy of a MigrationScyllaDB
 
NoSQL Database Migration Masterclass - Session 3: Migration Logistics
NoSQL Database Migration Masterclass - Session 3: Migration LogisticsNoSQL Database Migration Masterclass - Session 3: Migration Logistics
NoSQL Database Migration Masterclass - Session 3: Migration LogisticsScyllaDB
 
NoSQL Data Migration Masterclass - Session 1 Migration Strategies and Challenges
NoSQL Data Migration Masterclass - Session 1 Migration Strategies and ChallengesNoSQL Data Migration Masterclass - Session 1 Migration Strategies and Challenges
NoSQL Data Migration Masterclass - Session 1 Migration Strategies and ChallengesScyllaDB
 
ScyllaDB Virtual Workshop
ScyllaDB Virtual WorkshopScyllaDB Virtual Workshop
ScyllaDB Virtual WorkshopScyllaDB
 
DBaaS in the Real World: Risks, Rewards & Tradeoffs
DBaaS in the Real World: Risks, Rewards & TradeoffsDBaaS in the Real World: Risks, Rewards & Tradeoffs
DBaaS in the Real World: Risks, Rewards & TradeoffsScyllaDB
 
Build Low-Latency Applications in Rust on ScyllaDB
Build Low-Latency Applications in Rust on ScyllaDBBuild Low-Latency Applications in Rust on ScyllaDB
Build Low-Latency Applications in Rust on ScyllaDBScyllaDB
 
NoSQL Data Modeling 101
NoSQL Data Modeling 101NoSQL Data Modeling 101
NoSQL Data Modeling 101ScyllaDB
 
Top NoSQL Data Modeling Mistakes
Top NoSQL Data Modeling MistakesTop NoSQL Data Modeling Mistakes
Top NoSQL Data Modeling MistakesScyllaDB
 

More from ScyllaDB (20)

What Developers Need to Unlearn for High Performance NoSQL
What Developers Need to Unlearn for High Performance NoSQLWhat Developers Need to Unlearn for High Performance NoSQL
What Developers Need to Unlearn for High Performance NoSQL
 
Low Latency at Extreme Scale: Proven Practices & Pitfalls
Low Latency at Extreme Scale: Proven Practices & PitfallsLow Latency at Extreme Scale: Proven Practices & Pitfalls
Low Latency at Extreme Scale: Proven Practices & Pitfalls
 
Dissecting Real-World Database Performance Dilemmas
Dissecting Real-World Database Performance DilemmasDissecting Real-World Database Performance Dilemmas
Dissecting Real-World Database Performance Dilemmas
 
Beyond Linear Scaling: A New Path for Performance with ScyllaDB
Beyond Linear Scaling: A New Path for Performance with ScyllaDBBeyond Linear Scaling: A New Path for Performance with ScyllaDB
Beyond Linear Scaling: A New Path for Performance with ScyllaDB
 
Dissecting Real-World Database Performance Dilemmas
Dissecting Real-World Database Performance DilemmasDissecting Real-World Database Performance Dilemmas
Dissecting Real-World Database Performance Dilemmas
 
Database Performance at Scale Masterclass: Workload Characteristics by Felipe...
Database Performance at Scale Masterclass: Workload Characteristics by Felipe...Database Performance at Scale Masterclass: Workload Characteristics by Felipe...
Database Performance at Scale Masterclass: Workload Characteristics by Felipe...
 
Database Performance at Scale Masterclass: Database Internals by Pavel Emelya...
Database Performance at Scale Masterclass: Database Internals by Pavel Emelya...Database Performance at Scale Masterclass: Database Internals by Pavel Emelya...
Database Performance at Scale Masterclass: Database Internals by Pavel Emelya...
 
Database Performance at Scale Masterclass: Driver Strategies by Piotr Sarna
Database Performance at Scale Masterclass: Driver Strategies by Piotr SarnaDatabase Performance at Scale Masterclass: Driver Strategies by Piotr Sarna
Database Performance at Scale Masterclass: Driver Strategies by Piotr Sarna
 
Replacing Your Cache with ScyllaDB
Replacing Your Cache with ScyllaDBReplacing Your Cache with ScyllaDB
Replacing Your Cache with ScyllaDB
 
Powering Real-Time Apps with ScyllaDB_ Low Latency & Linear Scalability
Powering Real-Time Apps with ScyllaDB_ Low Latency & Linear ScalabilityPowering Real-Time Apps with ScyllaDB_ Low Latency & Linear Scalability
Powering Real-Time Apps with ScyllaDB_ Low Latency & Linear Scalability
 
7 Reasons Not to Put an External Cache in Front of Your Database.pptx
7 Reasons Not to Put an External Cache in Front of Your Database.pptx7 Reasons Not to Put an External Cache in Front of Your Database.pptx
7 Reasons Not to Put an External Cache in Front of Your Database.pptx
 
Getting the most out of ScyllaDB
Getting the most out of ScyllaDBGetting the most out of ScyllaDB
Getting the most out of ScyllaDB
 
NoSQL Database Migration Masterclass - Session 2: The Anatomy of a Migration
NoSQL Database Migration Masterclass - Session 2: The Anatomy of a MigrationNoSQL Database Migration Masterclass - Session 2: The Anatomy of a Migration
NoSQL Database Migration Masterclass - Session 2: The Anatomy of a Migration
 
NoSQL Database Migration Masterclass - Session 3: Migration Logistics
NoSQL Database Migration Masterclass - Session 3: Migration LogisticsNoSQL Database Migration Masterclass - Session 3: Migration Logistics
NoSQL Database Migration Masterclass - Session 3: Migration Logistics
 
NoSQL Data Migration Masterclass - Session 1 Migration Strategies and Challenges
NoSQL Data Migration Masterclass - Session 1 Migration Strategies and ChallengesNoSQL Data Migration Masterclass - Session 1 Migration Strategies and Challenges
NoSQL Data Migration Masterclass - Session 1 Migration Strategies and Challenges
 
ScyllaDB Virtual Workshop
ScyllaDB Virtual WorkshopScyllaDB Virtual Workshop
ScyllaDB Virtual Workshop
 
DBaaS in the Real World: Risks, Rewards & Tradeoffs
DBaaS in the Real World: Risks, Rewards & TradeoffsDBaaS in the Real World: Risks, Rewards & Tradeoffs
DBaaS in the Real World: Risks, Rewards & Tradeoffs
 
Build Low-Latency Applications in Rust on ScyllaDB
Build Low-Latency Applications in Rust on ScyllaDBBuild Low-Latency Applications in Rust on ScyllaDB
Build Low-Latency Applications in Rust on ScyllaDB
 
NoSQL Data Modeling 101
NoSQL Data Modeling 101NoSQL Data Modeling 101
NoSQL Data Modeling 101
 
Top NoSQL Data Modeling Mistakes
Top NoSQL Data Modeling MistakesTop NoSQL Data Modeling Mistakes
Top NoSQL Data Modeling Mistakes
 

Recently uploaded

Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...Jeffrey Haguewood
 
Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024TopCSSGallery
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkPixlogix Infotech
 
A Glance At The Java Performance Toolbox
A Glance At The Java Performance ToolboxA Glance At The Java Performance Toolbox
A Glance At The Java Performance ToolboxAna-Maria Mihalceanu
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch TuesdayIvanti
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality AssuranceInflectra
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Farhan Tariq
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Nikki Chapple
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfpanagenda
 
Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#Karmanjay Verma
 
Landscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdfLandscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdfAarwolf Industries LLC
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesBernd Ruecker
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observabilityitnewsafrica
 
Infrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsInfrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsYoss Cohen
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationKnoldus Inc.
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS:  6 Ways to Automate Your Data IntegrationBridging Between CAD & GIS:  6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integrationmarketing932765
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterMydbops
 

Recently uploaded (20)

Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
 
Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App Framework
 
A Glance At The Java Performance Toolbox
A Glance At The Java Performance ToolboxA Glance At The Java Performance Toolbox
A Glance At The Java Performance Toolbox
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch Tuesday
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
 
Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#
 
Landscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdfLandscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdf
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architectures
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
 
Infrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsInfrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platforms
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog Presentation
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS:  6 Ways to Automate Your Data IntegrationBridging Between CAD & GIS:  6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL Router
 

Scylla Summit 2017: SMF: The Fastest RPC in the West

  • 1. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company smf the fastest RPC fmwrk. in the west Principal Engineer, Platform Engineering - Akamai Technologies Alexander Gallego
  • 2. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company Alexander Gallego 2 Principal Engineer @ Akamai - Platform Group Ex CTO / founder of Concord.io - A distributed stream processor written in C++ atop Apache Mesos (Now part of Akamai) First employee, engineer for Yieldmo.com (ad-tech) startup in NYC maintainer of smf: github.com/senior7515/smf
  • 3. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company background
  • 4. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company Can we do transactional streaming? ▪ At Concord.io, I worked on a streaming platform o Can we do transactional writes (3x replication - even if in memory) • Can we do it with low latency and high throughput? – double digit ms *tail* latency at 1024 batches? ▪ Fastest open source queue did 150ms p90 and 2secs p9999 o Unpredictable JVM spikes - • Spark once stalled for 4 seconds reading from Kafka - couldn’t replicate. o Concord was in C++ - we wanted predictability 4
  • 5. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company Can we do better? 5
  • 6. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company How about this! - per node overhead 6 7us p90 latency 26us p100 latency 8us p99 latency
  • 7. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company How about this! - per node overhead 7 Read Socket RPC Parsing Method Execution Flush Socket 60 byte payload + 20 bytes of TCP - with full type serialization! p90 = 7 microseconds, p99 = 8 microseconds, p100 = 26 microseconds p99=8us
  • 8. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company smf
  • 9. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company smf RPC ▪ Built for microsecond tail latencies ▪ Atop seastar::future<>s ▪ IDL Compiler/CodeGen - using Google Flatbuffers’ IDL ▪ Multi-language compatibility ▪ Small - 16 byte overhead (with rich types, headers, compression,etc) … it’s like gRPC / Thrift / Cap n’ Proto - for microsecond latencies. 9
  • 10. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company IDL
  • 11. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company smf 11 namespace smf_gen.demo; table Request { name: string; } table Response { name: string; } rpc_service SmfStorage { Get(Request):Response; }
  • 12. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company smf 12 namespace smf_gen.demo; table Request { name: string; } table Response { name: string; } rpc_service SmfStorage { Get(Request):Response; } input
  • 13. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company smf 13 namespace smf_gen.demo; table Request { name: string; } table Response { name: string; } rpc_service SmfStorage { Get(Request):Response; } output input
  • 14. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company smf 14 namespace smf_gen.demo; table Request { name: string; } table Response { name: string; } rpc_service SmfStorage { Get(Request):Response; } Service Definition output input
  • 15. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company smf 15 namespace smf_gen.demo; table Request { name: string; } table Response { name: string; } rpc_service SmfStorage { Get(Request):Response; } smf_gen --filename demo_service.fbs Service Definition output input
  • 16. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company Demo
  • 17. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company smf::rpc_client
  • 18. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company smf 18 smf::rpc_typed_envelope<Request> req; req.data->name = "Hello, smf-world!"; auto client = SmfStorageClient::make_shared("127.0.0.1",2121); client->Get(req.serialize_data()).then([ ](auto reply) { std::cout << reply->name() << std::endl; });
  • 19. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company smf 19 smf::rpc_typed_envelope<Request> req; req.data->name = "Hello, smf-world!"; auto client = SmfStorageClient::make_shared("127.0.0.1",2121); client->Get(req.serialize_data()).then([ ](auto reply) { std::cout << reply->name() << std::endl; }); data to send
  • 20. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company smf 20 smf::rpc_typed_envelope<Request> req; req.data->name = "Hello, smf-world!"; auto client = SmfStorageClient::make_shared("127.0.0.1",2121); client->Get(req.serialize_data()).then([ ](auto reply) { std::cout << reply->name() << std::endl; }); data to send actual socket seastar::shared_ptr<T> non-thread safe
  • 21. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company smf 21 smf::rpc_typed_envelope<Request> req; req.data->name = "Hello, smf-world!"; auto client = SmfStorageClient::make_shared("127.0.0.1",2121); client->Get(req.serialize_data()).then([ ](auto reply) { std::cout << reply->name() << std::endl; }); data to send actual socket seastar::shared_ptr<T> non-thread safe Method to call
  • 22. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company smf::rpc_server
  • 23. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company smf 23 class storage_service : public SmfStorage { virtual seastar::future<rpc_typed_envelope<Response>> Get(rpc_recv_typed_context<Request> rec) final { rpc_typed_envelope<Response> data; data.data->name = "Hello, cruel world!"; data.envelope.set_status(200); return make_ready_future<decltype(data)>(std::move(data)); } };
  • 24. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company smf 24 class storage_service : public SmfStorage { virtual seastar::future<rpc_typed_envelope<Response>> Get(rpc_recv_typed_context<Request> rec) final { rpc_typed_envelope<Response> data; data.data->name = "Hello, cruel world!"; data.envelope.set_status(200); return make_ready_future<decltype(data)>(std::move(data)); } }; code-gen’ed service
  • 25. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company smf 25 class storage_service : public SmfStorage { virtual seastar::future<rpc_typed_envelope<Response>> Get(rpc_recv_typed_context<Request> rec) final { rpc_typed_envelope<Response> data; data.data->name = "Hello, cruel world!"; data.envelope.set_status(200); return make_ready_future<decltype(data)>(std::move(data)); } }; code-gen’ed service Method
  • 26. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company smf 26 class storage_service : public SmfStorage { virtual seastar::future<rpc_typed_envelope<Response>> Get(rpc_recv_typed_context<Request> rec) final { rpc_typed_envelope<Response> data; data.data->name = "Hello, cruel world!"; data.envelope.set_status(200); return make_ready_future<decltype(data)>(std::move(data)); } }; code-gen’ed service Method return data
  • 27. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company smf::rpc_filter
  • 28. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company smf 28
  • 29. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company smf 29 template <typename T> struct rpc_filter { seastar::future<T> operator()(T t); };
  • 30. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company smf 30 struct zstd_compression_filter : rpc_filter<rpc_envelope> { explicit zstd_compression_filter(uint32_t min_size) : min_compression_size(min_size) {} seastar::future<rpc_envelope> operator()(rpc_envelope &&e); const uint32_t min_compression_size; };
  • 31. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company smf 31 // add it to your clients client->outgoing_filters().push_back( smf::zstd_compression_filter(1000)); // add it to your servers using zstd_t = smf::zstd_compression_filter; return rpc.invoke_on_all( &smf::rpc_server::register_outgoming_filter<zstd_t>,1000);
  • 32. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company smf 32 static thread_local auto incoming_stage = seastar::make_execution_stage("smf::incoming", &rpc_client::apply_incoming_filters); static thread_local auto outgoing_stage = seastar::make_execution_stage("smf::outgoing", &rpc_client::apply_outgoing_filters); SEDA-pipelined
  • 33. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company request anatomy
  • 34. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company smf request anatomy 34 /// total = 128bits == 16bytes MANUALLY_ALIGNED_STRUCT(4) header FLATBUFFERS_FINAL_CLASS { int8_t compression_; int8_t bitflags_; uint16_t session_; uint32_t size_; uint32_t checksum_; uint32_t meta_; }; STRUCT_END(header, 16);
  • 35. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company smf request anatomy 35 /// total = 128bits == 16bytes MANUALLY_ALIGNED_STRUCT(4) header FLATBUFFERS_FINAL_CLASS { int8_t compression_; int8_t bitflags_; uint16_t session_; uint32_t size_; uint32_t checksum_; uint32_t meta_; }; STRUCT_END(header, 16); - Turn off padding by compiler. - Enforce layout. - Store everything in little endian - X-lang, X-platform compat - noop on most platforms
  • 36. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company smf request anatomy 36 /// total = 128bits == 16bytes MANUALLY_ALIGNED_STRUCT(4) header FLATBUFFERS_FINAL_CLASS { int8_t compression_; int8_t bitflags_; uint16_t session_; uint32_t size_; uint32_t checksum_; uint32_t meta_; }; STRUCT_END(header, 16); zstd, lz4
  • 37. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company smf request anatomy 37 /// total = 128bits == 16bytes MANUALLY_ALIGNED_STRUCT(4) header FLATBUFFERS_FINAL_CLASS { int8_t compression_; int8_t bitflags_; uint16_t session_; uint32_t size_; uint32_t checksum_; uint32_t meta_; }; STRUCT_END(header, 16); zstd, lz4 headers?
  • 38. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company smf request anatomy 38 /// total = 128bits == 16bytes MANUALLY_ALIGNED_STRUCT(4) header FLATBUFFERS_FINAL_CLASS { int8_t compression_; int8_t bitflags_; uint16_t session_; uint32_t size_; uint32_t checksum_; uint32_t meta_; }; STRUCT_END(header, 16); zstd, lz4 headers? max # of concurrent requests per client
  • 39. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company smf request anatomy 39 /// total = 128bits == 16bytes MANUALLY_ALIGNED_STRUCT(4) header FLATBUFFERS_FINAL_CLASS { int8_t compression_; int8_t bitflags_; uint16_t session_; uint32_t size_; uint32_t checksum_; uint32_t meta_; }; STRUCT_END(header, 16); zstd, lz4 headers? max # of concurrent requests per client xxhash32 - very fast! 5.4GB/s
  • 40. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company smf request anatomy 40 /// total = 128bits == 16bytes MANUALLY_ALIGNED_STRUCT(4) header FLATBUFFERS_FINAL_CLASS { int8_t compression_; int8_t bitflags_; uint16_t session_; uint32_t size_; uint32_t checksum_; uint32_t meta_; }; STRUCT_END(header, 16); zstd, lz4 headers? max # of concurrent requests per client xxhash32 - very fast! 5.4GB/s request_id or status (response) code
  • 41. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company smf Code Gen’d XOR id 41 auto fqn = fully_qualified_name; service_id = hash( fqn(service_name) ) method_id = hash( ∀ fqn(x) input_args_types, ∀ fqn(x) output_args_types, fqn(method_name), separator = “:”) rpc_dispatch_id = service_id ^ method_id;
  • 42. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company smf Code Gen’d XOR id 42 /// RequestID: 212494116 ^ 1719559449 /// ServiceID: 212494116 /// MethodID: 1719559449 future<smf::rpc_recv_typed_context<Response>> Get(smf::rpc_envelope e) { e.set_request_id(212494116, 1719559449); return send<smf_gen::demo::Response>(std::move(e)); } Method ID
  • 43. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company smf Code Gen’d XOR id 43 handles.emplace_back( "Get", 1719559449, [this](smf::rpc_recv_context c) { using req_t = smf::rpc_recv_typed_context<Request>; auto session_id = c.session(); return Get(req_t(std::move(c))).then( [session_id](auto typed_env){ typed_env....mutate_session(session_id); return make_ready_future<rpc_envelope>( typed_env.serialize_data()); }); Method ID
  • 44. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company smf Code Gen’d XOR id 44 struct rpc_service { virtual const char *service_name() const = 0; virtual uint32_t service_id() const = 0; virtual std::vector<rpc_service_method_handle> methods() = 0; virtual ~rpc_service() {} };
  • 45. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company telemetry
  • 46. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company smf built in telemetry 46 High Dynamic Range Histogram (HDR) … Expensive 185 KB ::hdr_init(1, // 1 microsec - minimum value INT64_C(3600000000), // 1 hour in microsecs - max value 3, // Number of significant figures &hist); // Pointer to initialize // clients client = ClientService::make_shared(std::move(opts)); client->enable_histogram_metrics(); // servers enabled by default
  • 47. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company smf built in telemetry (prometheus) 47
  • 48. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company performance?
  • 49. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company smf DPDK client - DPDK server* 49 7us p90 latency 26us p100 latency 8us p99 latency
  • 50. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company smf end-to-end latency (DPDK) 50 p100=500us p90=51us p99=56us 2 Threads. Includes connection open time - cold cache
  • 51. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company smf end-to-end latency (DPDK) 51 Same graph, minus the **first** request of each of the 2 threads p100=151us p50=51us p99=56us
  • 52. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company smf future work 52 ● Currently could only do 1.5MM qps on the server setup ○ size = 60 byte payload + 20 TCP frame bytes ○ Hit TCP.hh bug in seastar with httpd/seawreck and my own impl ■ `(_snd.window > 0) || ((_snd.window == 0) && (len == 1))' failed. ■ Could be my lab setup ■ Because of this - couldn't fill the wire fast enough ● Add JVM, Python, Go, codegen ● Improve Docs: https://senior7515.github.io/smf/
  • 53. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company THANK YOU gallego.alexx@gmail.com | alexgallego.org @emaxerrno Please stay in touch Any questions? https://senior7515.github.io/smf/
  • 54. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company extra
  • 55. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company smf Write Ahead Log (latency) 55 percentile Apache Kafka smf WAL speedup p50 878ms 21ms 41X p95 1340ms 36ms 37x p99 1814ms 49ms 37x p999 1896ms 54ms 35x p100 1930ms 54ms 35x
  • 56. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company 56
  • 57. PRESENTATION TITLE ON ONE LINE AND ON TWO LINES First and last name Position, company