in October 2016. • Most of my work has been focused on big refactors, and scaling and performance problems 🚀. • In 2020, I published an O’Reilly book 📕. • After 4 years in San Francisco 🌁, I relocated to New Hampshire 🌲. 2
https://slack.com/api/conversations.history?channel=C5JN6JH7V https://slack.com/api/conversations.history?channel=C5JN6JH7V https://slack.com/api/conversations.history?channel=C5JN6JH7V https://slack.com/api/conversations.history?channel=C5JN6JH7V https://slack.com/api/conversations.history?channel=C5JN6JH7V https://slack.com/api/conversations.history?channel=C5JN6JH7V https://slack.com/api/conversations.history?channel=C5JN6JH7V https://slack.com/api/conversations.history?channel=C5JN6JH7V https://slack.com/api/conversations.history?channel=C5JN6JH7V https://slack.com/api/conversations.history?channel=C5JN6JH7V https://slack.com/api/conversations.history?channel=C5JN6JH7V https://slack.com/api/conversations.history?channel=C5JN6JH7V https://slack.com/api/conversations.history?channel=C5JN6JH7V https://slack.com/api/conversations.history?channel=C5JN6JH7V https://slack.com/api/conversations.history?channel=C5JN6JH7V https://slack.com/api/conversations.history?channel=C5JN6JH7V https://slack.com/api/conversations.history?channel=C5JN6JH7V https://slack.com/api/conversations.history?channel=C5JN6JH7V Our fi rst tool was simple. It blasted API requests to our servers. Read more about API Blaster on our blog here. 6
iOS, Android) Permanent Data Stores Backend Systems (Business Logic) Real-time Services RTM API long-lived JSON web socket Edge API HTTPS Web API HTTPS 9
Android) Permanent Data Stores Backend Systems (Business Logic) Real-time Services RTM API long-lived JSON web socket Edge API HTTPS Web API HTTPS chat.postMessage “Good morning!” to #general 10
Data Stores Backend Systems (Business Logic) Real-time Services RTM API long-lived JSON web socket Web API HTTPS chat.postMessage “Good morning!” to #general 11
Slack. They wanted a channel to house all of their users, about 100,000 of which were active on a weekly basis. *unfortunately, API blaster wouldn’t cut it. 13
iOS, Android) Clients (Desktop App, Browser, iOS, Android) Clients (Desktop App, Browser, iOS, Android) Puppet Show within Slack’s architecture Headless Chrome browsers logged into slack.com/messages Permanent Data Stores Backend Systems (Business Logic) Real-time Services RTM API long-lived JSON web socket Edge API HTTPS Web API HTTPS Puppets 15
single Go routine). • A school is a collection of up to 5,000 koi (a single Go program). • The keeper manages the schools and keeps track of the overall load test state and parameters. Koi School School School Koi Koi 18
frequency. • Usually consists of a single API call, like conversations.history. • Made up of two components: a frequency de f inition, and an implementation. 22
"Calls the conversations.history API endpoint with a random channel", "steps": [ { "doc": "Get a random channel. Halt if no channel is found, otherwise call conversations.history", "pre_actions": [ "{{ set \"channel\" (randomChannel false) }}", "{{ if (not (get \"channel\")) }}{{ halt \"no random channel found\" }}{{ end }}", "{{ setCurrentChannel (get \"channel\") }}" ], ... 24
50,000 koi July 2020 Scale up to 500,000 koi Per koi cost: 0.001$ per day September 2020 Formations introduced October 2020 Successful test run with 1M koi 🎉 December 2020 Successful test run with 1.7M koi April 2021 Successful test run with 2M koi 🚀 July 2020 June 2020 *timeline not to scale