Slide 1

Slide 1 text

{ "timestamp": "2013-08-06T12:30:00-0700", "title": "Distributed Systems Are Everywhere", "subtitle": "Where the full stack is headed", "location": ["Pivotal Labs", "San Francisco", "CA"], "author": { "name": "Josh Dzielak", "title": "VP Engineering", "company": "Keen IO", "email": "[email protected]", "twitter": "@dzello" } }

Slide 2

Slide 2 text

About me * Full stack developer, going on 13 years * Currently VP Engineering at Keen IO * 4+ years of startups * 5+ years of enterprise consulting * Lead Engineer / Founding team Togetherville, 2009 (Disney) A Pivotal Client!! * Interested in distributed systems, high- performance, and linear scalability

Slide 3

Slide 3 text

TL;DR The definition of a “full stack developer” is expanding to include a knowledge of distributed systems.

Slide 4

Slide 4 text

given that – applications are processing more data...

Slide 5

Slide 5 text

given that – the expectations of users and (product managers) are rising...

Slide 6

Slide 6 text

given that – and Moore’s Law is in a funk, making it impossible to just ‘scale up’...

Slide 7

Slide 7 text

Distributed systems are becoming the rule, not the exception.

Slide 8

Slide 8 text

How do we define a distributed system? broadly speaking... In computing, a system distributed amongst “nodes”, usually independent computers interfacing over a network.

Slide 9

Slide 9 text

As used today – A distributed system is a group of differentiated yet well-integrated components that solve a given problem at linear scale. Let’s look at each part.

Slide 10

Slide 10 text

Linear Scale Processing throughput grows linearly with hardware. It’s one key characteristic that is bringing distributed systems into the spotlight. See: popular distributed databases

Slide 11

Slide 11 text

Fault Tolerance Things break. Hardware fails. It’s inevitable. Distributed systems intentionally use nodes that share as little hardware/fault exposure as possible.

Slide 12

Slide 12 text

Differentiation Distinct components with different jobs. Often exposed as “services” or APIs. (By this test, we wouldn’t leap to call a homogenous group of app servers a distributed system.)

Slide 13

Slide 13 text

Integration Components within the system must be well-integrated (often loosely coupled). Usually this implies real-time and bi- directional interfaces. (By this test, we wouldn’t leap to call a batch-integrated group of legacy backends a distributed system.)

Slide 14

Slide 14 text

Differentiation + Integration = Complexity! Complex systems are good. Complicated ones are not.

Slide 15

Slide 15 text

I call these Complex-Linear Distributed Systems While there’s certainly more to them, linear scale is a common goal and a complex system is required to achieve it.

Slide 16

Slide 16 text

RECAP * distributed systems are quickly becoming the norm * most distributed systems are complex, fault tolerant, and scale linearly * henceforth I’ll use “distributed system” to mean a “complex-linear distributed system” --- why is this important to me, a full stack developer?

Slide 17

Slide 17 text

The next generation of full stack developers will speak distributed systems.

Slide 18

Slide 18 text

What’s a full stack developer? There are many definitions. Here’s mine...

Slide 19

Slide 19 text

A full stack developer can build an entire product (or company) single-handedly.

Slide 20

Slide 20 text

ARE YOU WIZARD?? No, full stack developers aren’t superhuman. (but don’t tell them that)

Slide 21

Slide 21 text

They’ve just been around the block a few times. In my experience, each lap of the block takes 2,000 to 3,000 hours. Developers who stick it out for 10-20k hours often reach the coveted ‘full-stack bad ass’ status. Full stack devs don’t always do *all* the work - they just could if they had to.

Slide 22

Slide 22 text

Full stack developers know: user experience user experience user experience business value business value business value user interface user interface user interface (some) design (some) design (some) design MVC Request Request Action Action API’s data access data access business logic business logic services services data modeling data modeling data modeling data formats data formats data formats kernel network network I/O I/O shell

Slide 23

Slide 23 text

Full stack developers can do: hiring fundraising mentoring pair programming user interface A/B testing user interface A/B testing test-driven API development test-driven API development database performance tuning database performance tuning linux kernel debugging linux kernel debugging

Slide 24

Slide 24 text

That’s not enough. >:{

Slide 25

Slide 25 text

Every full-stack developer must also become a distributed systems developer.

Slide 26

Slide 26 text

WHY? The definition of ‘full stack’ is the ability to build any level of the product or business. Businesses increasingly require distributed systems to be competitive. Full stack developers must become conversant and/or fluent in distributed systems.

Slide 27

Slide 27 text

What does a DISTRIBUTED FULL STACK developer look like?

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

LOLJK Because of their experience, full stack developers can quickly acquire the tools and methodologies of distributed system building.

Slide 30

Slide 30 text

More skills: monitoring stacks DEVOPS fault tolerance distributed coordination partitioning serialization more about networking I/O and performance shell scripting

Slide 31

Slide 31 text

Distributed FS developers will need to learn: a) common software design heuristics for distributed systems: partitioning, serialization, fault tolerance, tradeoffs (like CAP), performance, capacity... path-oriented design: model the system as interdependent paths (e.g. read path / write path) and distribute complexity via priority

Slide 32

Slide 32 text

Often, performance is the essential ‘feature’ of the system/product. And thus, it becomes the key driver of the design. This is very different than traditional web/ app work where performance optimization can come later. Insufficient performance can undermine everything in the 11th hour #realtalk

Slide 33

Slide 33 text

Latency Numbers every distributed full stack developer should know execute CPU instruction 1 ns fetch from memory 100 ns send 2k over a 1Gbps network 20,000 ns read 1MB from memory 250,000 ns spinning disk seek 8,000,000 ns read 1MB from disk seq. 20,000,000 ns send packet US->UK & back 150,000,000 ns SSD disk seek 150,000 ns read 1MB seq. from SSD 1,000,000 ns round trip in same DC 500,000 ns run unit tests 60,000,000,000 ns github page load 161,000,000 ns hire a full stack engineer 2E+15 ns raise a round of funding 7.7E+15 ns From Norvig, others These numbers are guidelines and YMMV. You’ve been warned!

Slide 34

Slide 34 text

Distributed FS developers will also need to learn: b) a lot of “devops” provisioning; be it chef, puppet, or salt. oh, and vagrant (with vmware) monitoring; new relic is great, but it won’t be enough. embrace it. make friends with devops and ops folks. you will need their tools to have any idea of how your complex system is behaving.

Slide 35

Slide 35 text

You want one of these torx is a water-cooled hackintosh w/ 32GB RAM, SSD RAID, and 4960x1600 resolution

Slide 36

Slide 36 text

RECAP full stack developers have the smarts and panache to become DISTRIBUTED complex-linear full stack developers * learn new design heuristics * embrace devops

Slide 37

Slide 37 text

RECAP by embracing distributed system development, you can prevent many problems of scale AND open up new opportunities for feature and product development that wouldn’t be possible otherwise (lots of these have to do with data)

Slide 38

Slide 38 text

Practical ways to get down with distributed 1) Try out a distributed database. 2) Do a project with Storm or a similarly well-abstracted distributed system. 3) Integrate automated provisioning into your development workflow. 4) Chaos monkey ideally fault-tolerant parts of your existing system.

Slide 39

Slide 39 text

Resources Latency number gist https://gist.github.com/jboner/2841832 Teach yourself to program in 10 years http://norvig.com/21-days.html What is a full stack developer? http://www.laurencegellert.com/2012/08/what-is-a-full- stack-developer/ The Full Stack, Part 1 https://www.facebook.com/note.php? note_id=461505383919

Slide 40

Slide 40 text

Thanks! Questions? Talk at my face or email me at [email protected]