Slide 1

Slide 1 text

Hello, again. Designing Systems that Scale

Slide 2

Slide 2 text

Who am I? Software Engineer @ Branded3 Technical Lead on a Search Analytics Platform C# / F# / Go mainly. MongoDB / Cassandra

Slide 3

Slide 3 text

Last time on HeyStac… There was some data, we thought it was big [August] …. it wasn’t [November]. [August] MongoDB. 700 million rows / objects in one collection. [November] 5 billion rows+. 2 tables.

Slide 4

Slide 4 text

This Talk. Less about data, more about building things.

Slide 5

Slide 5 text

I’m not …

Slide 6

Slide 6 text

What do we mean by “Scale”? What do I think when I think scalability?

Slide 7

Slide 7 text

Maintainability. How hard is it to change things, add to the system, extend it?

Slide 8

Slide 8 text

Testability How easy is it to test the application or small parts of the application?

Slide 9

Slide 9 text

Efficiency How does the system help you, as a developer, build on top of the already existing application?

Slide 10

Slide 10 text

- Smallest Unit of Work - Strongly Typed Languages Ultimately, writing small chunks of the bigger picture.

Slide 11

Slide 11 text

Smallest Unit of Work A real world example from our system. Our Task Management System. - Our Task Management system allows a developer design any type of task whether it be a web scraper or something against our dataset and scale it across our cluster of worker machines. - A developer only has to write two things: - A Task - A Task Processor

Slide 12

Slide 12 text

Smallest Unit of Work Simple version (C#):

Slide 13

Slide 13 text

Task Processor Serialization Me as the developer Other things that we don’t care about because someone else already wrote it ages ago :) (that person was you) Message Queue Deserialization

Slide 14

Slide 14 text

Smallest Unit of Work It saves so much time. No one has to care about message queues, the machines running it, threading…

Slide 15

Slide 15 text

Strongly Typed Languages - Enforce API’s like this at compile time. - You cannot compile a processor that does not take in an ITask - Less dumb-fuckery. - Even with documentation, people still get it wrong. - In a dynamic interpreted [PHP / JS] language, how feasible is this? But more importantly how many people will use it wrong?

Slide 16

Slide 16 text

Testing the Processor with F#

Slide 17

Slide 17 text

Using the Processor in Production

Slide 18

Slide 18 text

TypeScript - we have the same power in browser - Compiles down JS. - Interop - You can use JS in TypeScript - Strongly Typed!

Slide 19

Slide 19 text

Strongly Typed - This won’t compile. - Node.JS - In Browser

Slide 20

Slide 20 text

Less to think about, more to reuse. - Write types that are used both in the Frontend JS and the Backend - Large applications benefit from these features. Why? - Because you can write API’s that result in more robust applications.

Slide 21

Slide 21 text

At the end of the day - Scalable systems design is about saving time for you and your peers in the future. - By taking advantage of technology and feature sets of tools that allow you to focus on building those small pieces.

Slide 22

Slide 22 text

Thanks for listening to my ramblings…