what every programmer should know about distributed systems

34
What Every Programmer Should Know About Distributed Systems Friday, November 11, 11

Upload: pedrobelo

Post on 12-May-2015

1.779 views

Category:

Technology


0 download

DESCRIPTION

It's time to talk about distributed systems: what are they, why you should be writing one, and what to look for while doing so. We'll cover the basics, understand some of the technology behind it - like REST, MQ with AMQP, ZeroMQ, etc - and discuss things we're doing at Heroku to avoid the pitfalls of a distributed architecture.

TRANSCRIPT

Page 1: What Every Programmer Should Know About Distributed Systems

What Every Programmer Should

Know About Distributed Systems

Friday, November 11, 11

Page 2: What Every Programmer Should Know About Distributed Systems

What Every Programmer Could

Possibly Want To Know About Me

Friday, November 11, 11

Page 3: What Every Programmer Should Know About Distributed Systems

Friday, November 11, 11

Page 4: What Every Programmer Should Know About Distributed Systems

Friday, November 11, 11

Page 5: What Every Programmer Should Know About Distributed Systems

Friday, November 11, 11

Page 6: What Every Programmer Should Know About Distributed Systems

Friday, November 11, 11

Page 7: What Every Programmer Should Know About Distributed Systems

What Every Programmer Should

Know About Distributed Systems

Friday, November 11, 11

Page 8: What Every Programmer Should Know About Distributed Systems

IDefinition

Friday, November 11, 11

Page 9: What Every Programmer Should Know About Distributed Systems

A distributed system consists of multiple autonomous applications that interact with each other to achieve a common goal.

Friday, November 11, 11

Page 10: What Every Programmer Should Know About Distributed Systems

Photo by Matt Gibson

IICode Granularity

Friday, November 11, 11

Page 11: What Every Programmer Should Know About Distributed Systems

print "Converting Celsius or Fahrenheit? "option = gets[0,1].downcasecase optionwhen "c" print "Convert C: " celsius = gets.to_i fahrenheit = celsius * 9/5 + 32 puts "#{celsius}C = #{fahrenheit}F"when "f" print "Convert F: " fahrenheit = gets.to_i celsius = (fahrenheit - 32) * 5/9 puts "#{fahrenheit}F = #{celsius}C"end

Friday, November 11, 11

Page 12: What Every Programmer Should Know About Distributed Systems

def main convert(pick_unit)end

def pick_unit print "Convert Celsius ou Fahrenheit? " gets[0,1].downcaseend

def convert(unit) case unit when "c": convert_celsius when "f": convert_fahrenheit endend

...

Friday, November 11, 11

Page 13: What Every Programmer Should Know About Distributed Systems

Ideal Granularity

Somewhere in between

Friday, November 11, 11

Page 14: What Every Programmer Should Know About Distributed Systems

Units & OO

• Methods

• Classes

• Packages

Friday, November 11, 11

Page 15: What Every Programmer Should Know About Distributed Systems

Units & Languages

• Ruby

• Java

• PHP

# sinatra.rbmodule Sinatra class Application ... class Event ... module Streaming class FileStreamer ...

Friday, November 11, 11

Page 16: What Every Programmer Should Know About Distributed Systems

Units & Languages

• Ruby

• Java

• PHP$ javac Sinatra.javasinatra.java:5: class Application is public, should bedeclared in a file named Application.java

Friday, November 11, 11

Page 17: What Every Programmer Should Know About Distributed Systems

Units & Languages

• Ruby

• Java

• PHP

Friday, November 11, 11

Page 18: What Every Programmer Should Know About Distributed Systems

Units & Architecture

• Applications

Friday, November 11, 11

Page 19: What Every Programmer Should Know About Distributed Systems

From Google Maps

IIIThe Evolution of Óbidos

Friday, November 11, 11

Page 20: What Every Programmer Should Know About Distributed Systems

Friday, November 11, 11

Page 21: What Every Programmer Should Know About Distributed Systems

Heroku

• Instance management

• Billing & invoices

• Process orchestration

• Public API

Friday, November 11, 11

Page 22: What Every Programmer Should Know About Distributed Systems

Heroku

• Instance management

• Billing & invoices

• Process orchestration

• Public API

Friday, November 11, 11

Page 23: What Every Programmer Should Know About Distributed Systems

Heroku

• Instance management

• Billing & invoices

• Process orchestration

• Public API

Friday, November 11, 11

Page 24: What Every Programmer Should Know About Distributed Systems

Heroku

• Instance management

• Billing & invoices

• Process orchestration

• Public API

Friday, November 11, 11

Page 25: What Every Programmer Should Know About Distributed Systems

IVDeveloping the Medium

Friday, November 11, 11

Page 26: What Every Programmer Should Know About Distributed Systems

Problem:

?

Friday, November 11, 11

Page 27: What Every Programmer Should Know About Distributed Systems

Share the Database

Friday, November 11, 11

Page 28: What Every Programmer Should Know About Distributed Systems

Share the DatabaseDO NOT

Friday, November 11, 11

Page 29: What Every Programmer Should Know About Distributed Systems

REST

RestClient.get "host/users/1" get "/users/:id" do |id| user = User.find(id) user.to_jsonend

Friday, November 11, 11

Page 30: What Every Programmer Should Know About Distributed Systems

MQ

AMQP.start(:host => "1.2.3.4") do q = MQ.new.queue("user.created") q.publish(:email => "[email protected]")end

AMQP.start(:host => "1.2.3.4") do q = MQ.new.queue("user.created") q.subscribe do |msg| ... endend

Friday, November 11, 11

Page 31: What Every Programmer Should Know About Distributed Systems

VChallenges

Friday, November 11, 11

Page 32: What Every Programmer Should Know About Distributed Systems

Challenges

• Versioning

• Testing

• Authentication

• Development environment

• Visual consistency

• Deploying

Friday, November 11, 11

Page 33: What Every Programmer Should Know About Distributed Systems

Summary

1. Definition

2. Code Granularity

3. The Evolution of Óbidos

4. Developing the Medium

5. Challenges

Friday, November 11, 11

Page 34: What Every Programmer Should Know About Distributed Systems

Thank you!

[email protected]

http://pedro.heroku.com

@ped

Friday, November 11, 11