@OrRosenblatt
@Yshayy
Dev.IL meetup
Languages don’t matter
anymore!
We all know that story...
Our service is going production...
Adding a new service
As developers, we want to choose
the right tool for the job.
Same capabilities as before...
â—Ź node-authentication-package
â—Ź node-monitoring-package
â—Ź node-logging-package
â—Ź node-storage-package
â—Ź node-configuration-package
â—Ź etc.
â—Ź python-authentication-package
â—Ź python-monitoring-package
â—Ź python-logging-package
â—Ź python-storage-package
â—Ź python-configuration-package
â—Ź etc.
Ain’t nobody got time for that!
Use Case - Workers
Process items from a queue
$$$Cloud
Queue
Process items from a queue
Cloud
Queue
Process items from a queue
Cloud
Queue
Process items from a queue
Cloud
Queue
Let’s zoom in...
Cloud
Queue
Logic
Inside the Worker
Cloud
Queue
Azure
Sdk
Worker
Helper
library
Email
Client
Inside the Worker
Logic
Cloud
Queue
Azure
Sdk
Worker
Helper
library
Email
Client
Worker Helper Library
? ? ?
Configuration ? ? ?
Worker Helper Library
? ?
Configuration Error handling ? ?
Worker Helper Library
?
Configuration Error handling Concurrency ?
Worker Helper Library
Configuration Error handling Concurrency Monitoring
Need to implement in every language!
(Not all languages are born equal…)
Process items from a queue - Two processes
Cloud
Queue
Worker
Helper
Email
Client
Main process and a Sidecar process
Cloud
Queue
Worker
Helper
Email
Client
Sidecar.
How awesome is that!
Sidecar pattern
â—Ź Different processes, same host
â—Ź Also known as Sidekick pattern, decomposition pattern
â—Ź Shared resources
â—‹ Network
â—‹ Storage
â—‹ Lifecycle
â—‹ IP
DQD - Dequeue Daemon
Cloud
Queue
DQD
Email
Client
DQD in a nutshell
- Dequeue items from a source
- POST item to an endpoint using http
- Find the right rate/parallelism level
- Expose metrics
- Handle errors
- Extensible
- Abstract queue-worker relation
Written once, can be used anywhere
DQD Demo
Sidecars Packages/Libraries
â—Ź Language agnostic functionality
â—Ź Isolated loosely-coupled components
â—Ź Leaner testable components
â—Ź Upgrades are easier
Host
Main
App
Sidecar
Main App
Package
Host
â—Ź Same host
â—‹ Zero Latency
â—‹ Security out of the box
â—Ź Better Availability
â—‹ Limited blast radius
â—‹ Scaling with the main application
â—Ź Shared file system
â—Ź Multiple configuration
Sidecars Microservices
Host
Main
App
Sidecar
Service
Service
Service
Service
Side cars in Production
Not all is perfect...
â—Ź Process overhead
â—Ź Operational Complexity
Operational complexity
? ? ? ? ?
Runtime
Conflicts
? ? ? ? ?
Operational complexity
? ? ? ?
Runtime
Conflicts
Security ? ? ? ?
Operational complexity
? ? ?
Runtime
Conflicts
Security Configuration ? ? ?
Operational complexity
? ?
Runtime
Conflicts
Security Configuration Health
Checking
? ?
Operational complexity
?
Runtime
Conflicts
Security Configuration Health
Checking
Scheduling /
Allocation
?
Operational complexity
Runtime
Conflicts
Security Configuration Health
Checking
Scheduling /
Allocation
Scaling
What is a container
â—Ź Isolated process
● “VM like” isolation
â—‹ Filesystem
â—‹ Process namespace
â—‹ Cpu/Memory quotas
â—‹ Networking
â—Ź Fast boot-time
What and why?
â—Ź Great containerization tooling
â—Ź Images as packages/artifact format
â—Ź No conflicting dependencies
â—Ź Easy to config
â—Ź Fast Multiple containers deployment
Operational complexity
Runtime
Conflicts
Security Configuration Health
Checking
Scheduling /
Allocation
Scaling
What and why?
â—Ź Container orchestration platform
â—Ź Scheduling
â—Ź Easy to group containers into pod
â—Ź Configuration files as deployment
â—Ź Auto-scaling
Operational complexity
Runtime
Conflicts
Security Configuration Health
Checking
Scheduling /
Allocation
Scaling
Demo k8s
How far can we go?
Soluto/Airbag - OIDC authentication
Incoming traffic Airbag
OIDC
Provider
Sync
Keys
Main
Application
Validate
jwt token
FluentD sidecar - log shipping
FluentD
/Logs
volume
Main
Application Log analytics
service
Scrape
Write
Send
Service mesh!
Istio - service mesh
Envoy
Main
Application
Envoy
Main
Application
Envoy
Main
Application
Summary
â—Ź Sidecars allow us to solve cross-cutting concerns in a language agnostic way
â—Ź Container platform make operational management much easier
â—Ź Open source Sidecars code/images can solve hard problems with relatively easy and
loose integration.
Use sidecars and go polyglot!
Additional resources
â—Ź Tools:
â—‹ AirBag - www.github.com/soluto/airbag
â—‹ DQD - www.github.com/soluto/dqd
â—‹ FluentD - https://www.fluentd.org/
â—‹ Istio - https://istio.io/
â—‹ Skaffold - https://github.com/GoogleContainerTools/skaffold
â—Ź Design patterns for container-based distributed systems
â—Ź Prana: A Sidecar for your Netflix PaaS based Applications and Services
Thank you!
@OrRosenblatt
@Yshayy
Dev.IL meetup
Questions?
@OrRosenblatt
@Yshayy
Dev.IL meetup

Languages don't matter anymore!