Luciano Mammino (@loige)
2024-03-19
👋 I'm Luciano (🇮🇹🍕🍝🤌)
👨💻 Senior Architect @ fourTheorem
📔 Co-Author of Node.js Design Patterns 👉
Let's connect!
✉️ Reach out to us at hello@fourTheorem.com
😇 We are always looking for talent: fth.link/careers
We can help with:
Cloud Migrations
Training & Cloud enablement
Building high-performance serverless applications
Cutting cloud costs
𝕏 loige
𝕏 loige
A (relatively) new programming language
Most loved... for 7 years in a row!
Low-level, yet general-purpose
Performant & memory-safe
𝕏 loige
A lovely mascot
Strongly typed with a really good type-system
Takes inspiration from Haskell, C++, OCaml, JavaScript, Ruby
Great (built-in) package manager (Cargo)
Good ecosystem of libraries
Pattern matching
No null, Option & Result types
𝕏 loige
use std::env;
fn main() {
let region = env::var("AWS_REGION");
}
Result<String, VarError>
𝕏 loige
😀 Happy path
🥺 Sad path
use std::env;
fn main() {
let region = env::var("AWS_REGION");
match region {
Ok(region) => println!("Selected region: {}", region),
Err(_) => println!("Error: AWS_REGION not set"),
}
}
𝕏 loige
😀 Happy path
🥺 Sad path
use std::env;
fn main() {
let region = env::var("AWS_REGION")
.expect("AWS_REGION environment variable not set");
}
String
𝕏 loige
If you cannot get the value, panic!
use std::env;
fn main() {
let region = env::var("AWS_REGION")
.unwrap_or_else(|_| "eu-west-1".to_string());
}
Rust makes it very hard for you to ignore possible errors or the absence of values.
𝕏 loige
if you cannot get the value, use a default value!
A way of running applications in the cloud
Of course, there are servers... we just don't have to manage them
We pay (only) for what we use
Small units of compute (functions), triggered by events
𝕏 loige
More focus on the business logic (generally)
Increased team agility (mostly)
Automatic scalability (sorta)
Not a universal solution, but it can work well in many situations!
𝕏 loige
Serverless FaaS offering in AWS
Can be triggered by different kinds of events
𝕏 loige
... so again, it's not a silver bullet for all your compute problems! 🔫
𝕏 loige
Cost = Allocated Memory 𝒙 time
𝕏 loige
💰 🏋️♂️ ⏱️
Cost = Allocated Memory 𝒙 time
𝕏 loige
💰 🏋️♂️ ⏱️
You don't explicitly configure it:
CPU scales based on memory
𝕏 loige
You don't explicitly configure it:
CPU scales based on memory
Memory | vCPUs |
---|---|
128 - 3008 MB | 2 |
3009 - 5307 MB | 3 |
5308 - 7076 MB | 4 |
7077 - 8845 MB | 5 |
8846+ MB | 6 |
𝕏 loige
𝕏 loige
𝕏 loige
Runtime
Handler (logic)
𝕏 loige
Runtime
Handler (logic)
Poll for events
𝕏 loige
Runtime
Handler (logic)
Poll for events
event (JSON)
𝕏 loige
Runtime
Handler (logic)
Poll for events
event (JSON)
execute
𝕏 loige
Runtime
Handler (logic)
Poll for events
event (JSON)
execute
response or
error
𝕏 loige
Runtime
Handler (logic)
Poll for events
event (JSON)
execute
response or
error
response (JSON)
or error
𝕏 loige
𝕏 loige
Node.js
Python
Java
.NET
Go
Ruby
Custom
𝕏 loige
Node.js
Python
Java
.NET
Go
Ruby
Custom
RUST?!
𝕏 loige
𝕏 loige
𝕏 loige
𝕏 loige
𝕏 loige
𝕏 loige
𝕏 loige
Thanks to @gbinside, @conzy_m, @eoins, and @micktwomey for kindly reviewing this material!
THANKS!
Grab these slides!
𝕏 loige