SlideShare a Scribd company logo
1 of 76
Download to read offline
SCALING
Òscar Vilaplana
@grimborg
http://oscarvilaplana.cat
WHAT’S THIS ABOUT?
People
Technology
Tools
PEOPLE
Care
Focus
Automate & Test.
Shared brain
Finish & DRY.
TECH
Design to clone
Separate pieces
API
Offload everything
Measure
VIRTUAL QUEUE
Queue
Instance
Queue
Instance
Queue
Instance
Queue
Instance
VIRTUAL QUEUE
Queue
Instance
Queue
Instance
Queue
Instance
VIRTUAL QUEUE
Queue
Instance
Queue
Instance
Queue
Instance
VIRTUAL QUEUE
Queue
Instance
Queue
Instance
Queue
Instance
Queue
Instance
TECH
• Design to clone
• Separate pieces
• API
• Offload everything
• Measure
TYPES OF TASKS
• Realtime
• ASAP
• When you have time } Async!
INSTAGRAM’S FEED
• Redis queue per follower.
• New media: push to queues
• Small chained tasks
INSTAGRAM’S FEED
harro wouter orestis siebejan oscar
Schedule

next

batch
SMALL TASKS
• 10k followers per task
• < 2s
• Finer-grained load balancing
• Lower penalty of failure/reload
CELERY: REDIS
• Good: Fast
• Bad:
• Polling for task distribution
• Messy non-synchronous replication
• Memory limits task capacity
CELERY: BEANSTALK
• Good:
• Fast
• Push to consumers
• Writes to disk
• Bad:
• No replication
• Only useful for Celery
CELERY: RABBITMQ
• Fast
• Writes to disk
• Low-maintenance synchronous replication
• Excellent Celery compatibility
• Supports other use cases
RESERVATIONS
• UI
• Room locking
• Room availability
• Registration manager
• Email, PDF invoice
• Payment
• Login
• …
WE DON’T DO THIS
def do_everything(request):
hotel_id = request.GET.hotel_id
room_number = request.GET.room_number
with room_mutex(hotel_id, room_number):
room = (session.query(Room)
.filter(Room.hotel_id == hotel_id)
.filter(Room.room_number == room_number).one())
if not room.available:
return Response("Room not available”,
template=room_template)
reservation = Reservation(client=request.client, room=room)
session.add(reservation)
room.available = False
price = # price_calculation
payment = Payment(reservation=reservation, price=price)
session.add(payment)
session.commit()
url = payment.get_psp_url()
return Redirect(url)
BUT WE DO THIS
• Frontend UI
• Locking rooms
• Calculating room availability
• Temporarily locking rooms
• Payment processing
• Mail
• PDF invoice generation
BUT WE CAN SCALE!
SCALE DB: HARD
• Slaves
• Master-
Master?
• Sharding?
SCALING
MINOR SCALE
MAJOR SCALE
FRONTEND
Everything
Frontend
External

payment

providers
User
Everything
Frontend
Master
Read slaves
SPLIT
• Responsibility
• Stateful/stateless
• Type of system
TYPES OF SYSTEMS
• Unique (mutex, datastore)
• Multiple
TYPES OF TASKS
• Realtime
• ASAP
• When you have time } Async!
SPLIT THIS
Everything
Frontend
External

payment

providers
User
Everything
Frontend
Master
Read slaves
AUTONOMOUS SYSTEMS
Payment
External

payment

providers
Locking
Invoice

PDF
Mailer
UI
Reservations
Manager
User
Session

Storage
Datawarehouse
Reporting
Configuration
Payout
CLONABILITY
CLONABILITY
CLONABILITY
Frontend
CLONABILITY
Everything
Frontend
External

payment

providers
User
Everything
Frontend
Master
Read slaves
WHAT’S IN AN EASY STEP
As little change as possible.
Reuse.
Unintrusive.
Measure.
Go on the right direction.
SMALL STEPS
PROBLEMS?
!
Oversells
Configuration
Reporting
Payout
Everything
Frontend
Everything
Frontend
Everything
Frontend
Everything
Frontend
Everything
Frontend
Everything
Frontend
SMALL STEPS
PROBLEMS?
!
Oversells
Configuration
Reporting
Payout
SessionsRoom
Availability
Lock
Read
Everything
Frontend
Everything
Frontend
Everything
Frontend
Everything
Frontend
Everything
Frontend
Everything
Frontend
ISOLATED SYSTEM
Best technology
Decoupled
API
Testable
SMALL STEPS
PROBLEMS?
!
Oversells
Configuration
Reporting
Payout
Sessions
Everything
Frontend
Config
Backend
Settings
Everything
Frontend
Everything
Frontend
Everything
Frontend
Everything
Frontend
Everything
Frontend
Everything
Frontend
INITIAL SYSTEM
Everything
Frontend
INITIAL SYSTEM (MODIFIED)
Everything
Frontend Sales
Sync
INITIAL SYSTEM (MODIFIED)
Sales Backend
SMALL STEPS
PROBLEMS?
!
Oversells
Configuration
Reporting
Payout
Sessions
Everything
Frontend
Sales
Backend
Sales
Main DB
Everything
Frontend
Everything
Frontend
Everything
Frontend
Everything
Frontend
Everything
Frontend
Everything
Frontend
SMALL STEPS
PROBLEMS?
!
Oversells
Configuration
Reporting
Payout
SessionsSession
Storage Everything
Frontend
Everything
Frontend
Everything
Frontend
Everything
Frontend
Everything
Frontend
Everything
Frontend
WHEN?
• Difficult.
• Measure everything.
• Find patterns.
• Define thresholds.
• Design: address as risk.
• Don’t overenigneer — Don’t ignore.
EVENTBRITE
• 2012: $600M ticket sales
• Accumulated: $1B
TECHNOLOGY
• Monitoring: nagios, ganglia, pingdom
• Email: offloaded to StrongMail
• Load-balanced read slave pool
• Feature flags
• Automated server configuration and
release with Puppet and Jenkins
TECHNOLOGY
• Feature flags
• Develop on Vagrant
• Celery + RabbitMQ
• Virtual customer queue
• Big data for reporting, fraud, spam,
event recommendations
TECHNOLOGY
• Hadoop
• Cassandra
• HBase
• Hive
• Separated into independent services
TIPS
• Instrument and monitor everything
• Lean
HOW BIG?
• 2Gb/day database transactions
• 3.5Tb/day social data analyzed
• 15Gb/day logs
ORDER PROCESSOR
• Pub/sub queue with Cassandra and
Zookeeper
PUBLISHING
Publisher
Get queue lock+last batch id
Create new batch
“process orders 10, 11, 12”
Store batch id, release lock
SUBSCRIBING
Subscriber
Get my latest processed batch id
Store result
Update my latest processed batch id
SCALING STORAGE
• Move to NoSQL
• Aggressively move queries to slaves
• Different indexes per slave
• Better hardware
• Most optimal tables for large and
highly-utilized datasets
EMAIL ADDRESSES
• Users have many email addresses.
• Lookup by email, join to users table
FIRST ATTEMPT
CREATE TABLE `user_emails` (
`id` int NOT NULL AUTO_INCREMENT,
`email_address` varchar(255) NOT NULL,
... --other columns about the user
`user_id` int, --foreign key to users
KEY (`email_address`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
FIRST ATTEMPT
LOOKUP
CAN IT BE IMPROVED?
INDEX VS PK
• InnoDB: B+trees, O(log n)
• Known user id: index on email not
needed.
• Small win on lookup: O(1)
• Big win on not storing the index.
INNODB INDEXES
HASH TABLE
DISQUS
• >165K messages per second
• <10ms latency
• 1.3B unique visitors
• 10B page views
• 500M users in discussions
• 3M communitios
• 25M comments
ORIGINAL REALTIME BACKEND
• Python + gevent
• NginxPushStream
• Network IO: great
• CPU: choking at peaks
• <15ms latency
CURRENT REALTIME BACKEND
• Go
• Handles all users
• Normal load:

3200 connections/machine/sec
• <10ms latency
• Only 10%-20% CPU
Workers
CURRENT REALTIME BACKEND
Subscribed to results
Push result to user
NginxPushStream
TESTING
• Test with real traffic
• Measure everything
LESSONS
• Do work once, distribute results.
• Most likely to fail: your code. Don’t
reinvent. Keep team small.
• End-to-end ACKs are expensive.
Avoid.
• Understand use cases when load
testing.
• Tune architecture to scale.
LEARN MORE
• Instagram
• Braintree
• highscalability.com
• VelocityConf (youtube, nov 2014 @ bcn?)
QUESTIONS?
ANSWERS?
THANKS!
Òscar Vilaplana
@grimborg
http://oscarvilaplana.cat

More Related Content

What's hot

Nordstrom Data Lab Recommendo API with Node.js
Nordstrom Data Lab Recommendo API with Node.jsNordstrom Data Lab Recommendo API with Node.js
Nordstrom Data Lab Recommendo API with Node.js
David Von Lehman
 

What's hot (20)

A tale of 3 databases
A tale of 3 databasesA tale of 3 databases
A tale of 3 databases
 
[Rakuten TechConf2014] [C-2] Big Data for eBooks and eReaders
[Rakuten TechConf2014] [C-2] Big Data for eBooks and eReaders[Rakuten TechConf2014] [C-2] Big Data for eBooks and eReaders
[Rakuten TechConf2014] [C-2] Big Data for eBooks and eReaders
 
High Availability Perl DBI + MySQL
High Availability Perl DBI + MySQLHigh Availability Perl DBI + MySQL
High Availability Perl DBI + MySQL
 
Ajax presentation
Ajax presentationAjax presentation
Ajax presentation
 
AWS Meetup - Nordstrom Data Lab and the AWS Cloud
AWS Meetup - Nordstrom Data Lab and the AWS CloudAWS Meetup - Nordstrom Data Lab and the AWS Cloud
AWS Meetup - Nordstrom Data Lab and the AWS Cloud
 
Parallel and Asynchronous Programming - ITProDevConnections 2012 (English)
Parallel and Asynchronous Programming -  ITProDevConnections 2012 (English)Parallel and Asynchronous Programming -  ITProDevConnections 2012 (English)
Parallel and Asynchronous Programming - ITProDevConnections 2012 (English)
 
Cross-Platform Desktop Apps with Electron (JSConf UY)
Cross-Platform Desktop Apps with Electron (JSConf UY)Cross-Platform Desktop Apps with Electron (JSConf UY)
Cross-Platform Desktop Apps with Electron (JSConf UY)
 
Actors Set the Stage for Project Orleans
Actors Set the Stage for Project OrleansActors Set the Stage for Project Orleans
Actors Set the Stage for Project Orleans
 
Serverless On Stage - Serverless URL Shortener
Serverless On Stage - Serverless URL ShortenerServerless On Stage - Serverless URL Shortener
Serverless On Stage - Serverless URL Shortener
 
Hashicorp at holaluz
Hashicorp at holaluzHashicorp at holaluz
Hashicorp at holaluz
 
Cloud tools
Cloud toolsCloud tools
Cloud tools
 
Building Enterprise Grade Front-End Applications with JavaScript Frameworks
Building Enterprise Grade Front-End Applications with JavaScript FrameworksBuilding Enterprise Grade Front-End Applications with JavaScript Frameworks
Building Enterprise Grade Front-End Applications with JavaScript Frameworks
 
Nordstrom Data Lab Recommendo API with Node.js
Nordstrom Data Lab Recommendo API with Node.jsNordstrom Data Lab Recommendo API with Node.js
Nordstrom Data Lab Recommendo API with Node.js
 
improving the performance of Rails web Applications
improving the performance of Rails web Applicationsimproving the performance of Rails web Applications
improving the performance of Rails web Applications
 
Devops With Boxfuse and Shippable
Devops With Boxfuse and ShippableDevops With Boxfuse and Shippable
Devops With Boxfuse and Shippable
 
Parallel and Asynchronous Programming - ITProDevConnections 2012 (Greek)
Parallel and Asynchronous Programming -  ITProDevConnections 2012 (Greek)Parallel and Asynchronous Programming -  ITProDevConnections 2012 (Greek)
Parallel and Asynchronous Programming - ITProDevConnections 2012 (Greek)
 
O365Con19 - Things I've Learned While Building a Product on SharePoint Modern...
O365Con19 - Things I've Learned While Building a Product on SharePoint Modern...O365Con19 - Things I've Learned While Building a Product on SharePoint Modern...
O365Con19 - Things I've Learned While Building a Product on SharePoint Modern...
 
eMusic: WordPress in the Enterprise
eMusic: WordPress in the EnterpriseeMusic: WordPress in the Enterprise
eMusic: WordPress in the Enterprise
 
Serverless brewbox
Serverless   brewboxServerless   brewbox
Serverless brewbox
 
Ansible Berlin Meetup Intro talk by @danvaida
Ansible Berlin Meetup Intro talk by @danvaidaAnsible Berlin Meetup Intro talk by @danvaida
Ansible Berlin Meetup Intro talk by @danvaida
 

Viewers also liked (7)

Aislacion ibañez
Aislacion ibañezAislacion ibañez
Aislacion ibañez
 
Reports Automation
Reports AutomationReports Automation
Reports Automation
 
Fast Report VCL 5
Fast Report VCL 5Fast Report VCL 5
Fast Report VCL 5
 
Pentaho BootCamp : Using the Pentaho Reporting Tools
Pentaho BootCamp : Using the Pentaho Reporting ToolsPentaho BootCamp : Using the Pentaho Reporting Tools
Pentaho BootCamp : Using the Pentaho Reporting Tools
 
White Paper on Subreports ActiveReports
White Paper on Subreports ActiveReportsWhite Paper on Subreports ActiveReports
White Paper on Subreports ActiveReports
 
SAS Macros part 1
SAS Macros part 1SAS Macros part 1
SAS Macros part 1
 
An introduction to Google Analytics
An introduction to Google AnalyticsAn introduction to Google Analytics
An introduction to Google Analytics
 

Similar to Scaling

Fixing Twitter Improving The Performance And Scalability Of The Worlds Most ...
Fixing Twitter  Improving The Performance And Scalability Of The Worlds Most ...Fixing Twitter  Improving The Performance And Scalability Of The Worlds Most ...
Fixing Twitter Improving The Performance And Scalability Of The Worlds Most ...
xlight
 
Lotuscript for large systems
Lotuscript for large systemsLotuscript for large systems
Lotuscript for large systems
Bill Buchan
 
Building High Scale Systems Using Serverless Architecture for a Burning Man E...
Building High Scale Systems Using Serverless Architecture for a Burning Man E...Building High Scale Systems Using Serverless Architecture for a Burning Man E...
Building High Scale Systems Using Serverless Architecture for a Burning Man E...
DevOpsDays Tel Aviv
 

Similar to Scaling (20)

Chirp 2010: Scaling Twitter
Chirp 2010: Scaling TwitterChirp 2010: Scaling Twitter
Chirp 2010: Scaling Twitter
 
Fixing twitter
Fixing twitterFixing twitter
Fixing twitter
 
Fixing_Twitter
Fixing_TwitterFixing_Twitter
Fixing_Twitter
 
Fixing Twitter Improving The Performance And Scalability Of The Worlds Most ...
Fixing Twitter  Improving The Performance And Scalability Of The Worlds Most ...Fixing Twitter  Improving The Performance And Scalability Of The Worlds Most ...
Fixing Twitter Improving The Performance And Scalability Of The Worlds Most ...
 
Fixing Twitter Improving The Performance And Scalability Of The Worlds Most ...
Fixing Twitter  Improving The Performance And Scalability Of The Worlds Most ...Fixing Twitter  Improving The Performance And Scalability Of The Worlds Most ...
Fixing Twitter Improving The Performance And Scalability Of The Worlds Most ...
 
John adams talk cloudy
John adams   talk cloudyJohn adams   talk cloudy
John adams talk cloudy
 
Service-Oriented Architecture
Service-Oriented ArchitectureService-Oriented Architecture
Service-Oriented Architecture
 
Jeremy Edberg (MinOps ) - How to build a solid infrastructure for a startup t...
Jeremy Edberg (MinOps ) - How to build a solid infrastructure for a startup t...Jeremy Edberg (MinOps ) - How to build a solid infrastructure for a startup t...
Jeremy Edberg (MinOps ) - How to build a solid infrastructure for a startup t...
 
Modern software architectures - PHP UK Conference 2015
Modern software architectures - PHP UK Conference 2015Modern software architectures - PHP UK Conference 2015
Modern software architectures - PHP UK Conference 2015
 
The server side story: Parallel and Asynchronous programming in .NET - ITPro...
The server side story:  Parallel and Asynchronous programming in .NET - ITPro...The server side story:  Parallel and Asynchronous programming in .NET - ITPro...
The server side story: Parallel and Asynchronous programming in .NET - ITPro...
 
Lotuscript for large systems
Lotuscript for large systemsLotuscript for large systems
Lotuscript for large systems
 
How Serverless Changes DevOps
How Serverless Changes DevOpsHow Serverless Changes DevOps
How Serverless Changes DevOps
 
Optimizing Access with SQL Server
Optimizing Access with SQL ServerOptimizing Access with SQL Server
Optimizing Access with SQL Server
 
When ordering Matters - Flink Forward EU - Berlin - 2019
When ordering Matters - Flink Forward EU - Berlin - 2019 When ordering Matters - Flink Forward EU - Berlin - 2019
When ordering Matters - Flink Forward EU - Berlin - 2019
 
Building High Scale Systems Using Serverless Architecture for a Burning Man E...
Building High Scale Systems Using Serverless Architecture for a Burning Man E...Building High Scale Systems Using Serverless Architecture for a Burning Man E...
Building High Scale Systems Using Serverless Architecture for a Burning Man E...
 
Using Riak for Events storage and analysis at Booking.com
Using Riak for Events storage and analysis at Booking.comUsing Riak for Events storage and analysis at Booking.com
Using Riak for Events storage and analysis at Booking.com
 
Metrics driven development with dedicated Observability Team
Metrics driven development with dedicated Observability TeamMetrics driven development with dedicated Observability Team
Metrics driven development with dedicated Observability Team
 
Modern DevOps across Technologies on premises and clouds with Oracle Manageme...
Modern DevOps across Technologies on premises and clouds with Oracle Manageme...Modern DevOps across Technologies on premises and clouds with Oracle Manageme...
Modern DevOps across Technologies on premises and clouds with Oracle Manageme...
 
Hard Coding as a design approach
Hard Coding as a design approachHard Coding as a design approach
Hard Coding as a design approach
 
Inside Wordnik's Architecture
Inside Wordnik's ArchitectureInside Wordnik's Architecture
Inside Wordnik's Architecture
 

More from Òscar Vilaplana

Tornado in Depth
Tornado in DepthTornado in Depth
Tornado in Depth
Òscar Vilaplana
 

More from Òscar Vilaplana (8)

Type Checking in Python at Tiqets
Type Checking in Python at TiqetsType Checking in Python at Tiqets
Type Checking in Python at Tiqets
 
Lean Software Development: Validated Learning
Lean Software Development: Validated LearningLean Software Development: Validated Learning
Lean Software Development: Validated Learning
 
Celery
CeleryCelery
Celery
 
Handling Massive Traffic with Python
Handling Massive Traffic with PythonHandling Massive Traffic with Python
Handling Massive Traffic with Python
 
Software Architecture: How Much Design?
Software Architecture: How Much Design?Software Architecture: How Much Design?
Software Architecture: How Much Design?
 
Continuous deployment
Continuous deploymentContinuous deployment
Continuous deployment
 
Tornado in Depth
Tornado in DepthTornado in Depth
Tornado in Depth
 
Scrum
ScrumScrum
Scrum
 

Recently uploaded

Recently uploaded (20)

Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...
Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...
Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...
 
IESVE for Early Stage Design and Planning
IESVE for Early Stage Design and PlanningIESVE for Early Stage Design and Planning
IESVE for Early Stage Design and Planning
 
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
Integrating Telephony Systems with Salesforce: Insights and Considerations, B...
 
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
 
Designing for Hardware Accessibility at Comcast
Designing for Hardware Accessibility at ComcastDesigning for Hardware Accessibility at Comcast
Designing for Hardware Accessibility at Comcast
 
Strategic AI Integration in Engineering Teams
Strategic AI Integration in Engineering TeamsStrategic AI Integration in Engineering Teams
Strategic AI Integration in Engineering Teams
 
Free and Effective: Making Flows Publicly Accessible, Yumi Ibrahimzade
Free and Effective: Making Flows Publicly Accessible, Yumi IbrahimzadeFree and Effective: Making Flows Publicly Accessible, Yumi Ibrahimzade
Free and Effective: Making Flows Publicly Accessible, Yumi Ibrahimzade
 
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...
SOQL 201 for Admins & Developers: Slice & Dice Your Org’s Data With Aggregate...
 
WebAssembly is Key to Better LLM Performance
WebAssembly is Key to Better LLM PerformanceWebAssembly is Key to Better LLM Performance
WebAssembly is Key to Better LLM Performance
 
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
TEST BANK For, Information Technology Project Management 9th Edition Kathy Sc...
 
IoT Analytics Company Presentation May 2024
IoT Analytics Company Presentation May 2024IoT Analytics Company Presentation May 2024
IoT Analytics Company Presentation May 2024
 
Extensible Python: Robustness through Addition - PyCon 2024
Extensible Python: Robustness through Addition - PyCon 2024Extensible Python: Robustness through Addition - PyCon 2024
Extensible Python: Robustness through Addition - PyCon 2024
 
ASRock Industrial FDO Solutions in Action for Industrial Edge AI _ Kenny at A...
ASRock Industrial FDO Solutions in Action for Industrial Edge AI _ Kenny at A...ASRock Industrial FDO Solutions in Action for Industrial Edge AI _ Kenny at A...
ASRock Industrial FDO Solutions in Action for Industrial Edge AI _ Kenny at A...
 
10 Differences between Sales Cloud and CPQ, Blanka Doktorová
10 Differences between Sales Cloud and CPQ, Blanka Doktorová10 Differences between Sales Cloud and CPQ, Blanka Doktorová
10 Differences between Sales Cloud and CPQ, Blanka Doktorová
 
Connecting the Dots in Product Design at KAYAK
Connecting the Dots in Product Design at KAYAKConnecting the Dots in Product Design at KAYAK
Connecting the Dots in Product Design at KAYAK
 
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdfIntroduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
 
THE BEST IPTV in GERMANY for 2024: IPTVreel
THE BEST IPTV in  GERMANY for 2024: IPTVreelTHE BEST IPTV in  GERMANY for 2024: IPTVreel
THE BEST IPTV in GERMANY for 2024: IPTVreel
 
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdfHow Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
 
Salesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
Salesforce Adoption – Metrics, Methods, and Motivation, Antone KomSalesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
Salesforce Adoption – Metrics, Methods, and Motivation, Antone Kom
 
Demystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John StaveleyDemystifying gRPC in .Net by John Staveley
Demystifying gRPC in .Net by John Staveley
 

Scaling