Top Banner
Architektur der kleinen Bausteine Jens-Christian Fischer simplificator.com @jcfischer 8.12.2011 - Internet Briefing Developer Konferenz Freitag, 9. Dezember 11
76

Architektur der kleinen Bausteine

Nov 28, 2014

Download

Documents

Betrachtungen zur Architektur von Software Systemen.
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Architektur der kleinen Bausteine

Architektur der kleinen BausteineJens-Christian Fischer

simplificator.com@jcfischer

8.12.2011 - Internet Briefing Developer Konferenz

Freitag, 9. Dezember 11

Page 2: Architektur der kleinen Bausteine

Wie baue ich eine komplette Anwendung

im BrowserJens-Christian Fischer

simplificator.com@jcfischer

8.12.2011 - Internet Briefing Developer Konferenz

Freitag, 9. Dezember 11

Page 3: Architektur der kleinen Bausteine

Freitag, 9. Dezember 11

Page 4: Architektur der kleinen Bausteine

http://www.youtube.com/watch?v=squxkHIaIdY

Freitag, 9. Dezember 11

Page 5: Architektur der kleinen Bausteine

Olsen-Banden overgiver sig aldrig1979

Freitag, 9. Dezember 11

Page 6: Architektur der kleinen Bausteine

http://www.youtube.com/watch?v=LGkkyKZVzugFreitag, 9. Dezember 11

Page 7: Architektur der kleinen Bausteine

http://www.youtube.com/watch?v=LGkkyKZVzugFreitag, 9. Dezember 11

Page 8: Architektur der kleinen Bausteine

Komplexität

Freitag, 9. Dezember 11

Page 9: Architektur der kleinen Bausteine

http://www.flickr.com/photos/d-/5300044735/in/photostream/

Komplexität

Freitag, 9. Dezember 11

Page 10: Architektur der kleinen Bausteine

Komplexität

http://www.flickr.com/photos/ecstaticist/2969032490/Freitag, 9. Dezember 11

Page 11: Architektur der kleinen Bausteine

http://www.mygreyworld.com/blog/2007/04/01/madness/

Komplexität

Freitag, 9. Dezember 11

Page 12: Architektur der kleinen Bausteine

Nicht zu vermeiden

Freitag, 9. Dezember 11

Page 14: Architektur der kleinen Bausteine

Simplicity

http://www.flickr.com/photos/stevewall/1095860966Freitag, 9. Dezember 11

Page 15: Architektur der kleinen Bausteine

Divide and Conquer

Freitag, 9. Dezember 11

Page 16: Architektur der kleinen Bausteine

Objekt Orientierung

Freitag, 9. Dezember 11

Page 17: Architektur der kleinen Bausteine

Viele, kleine Anwendungen

Freitag, 9. Dezember 11

Page 18: Architektur der kleinen Bausteine

• Eine Aufgabe, eine Anwendung

Viele, kleine Anwendungen

Freitag, 9. Dezember 11

Page 19: Architektur der kleinen Bausteine

• Eine Aufgabe, eine Anwendung

• Definierte Verantwortlichkeit

Viele, kleine Anwendungen

Freitag, 9. Dezember 11

Page 20: Architektur der kleinen Bausteine

• Eine Aufgabe, eine Anwendung

• Definierte Verantwortlichkeit

• Definiertes API

Viele, kleine Anwendungen

Freitag, 9. Dezember 11

Page 21: Architektur der kleinen Bausteine

• Eine Aufgabe, eine Anwendung

• Definierte Verantwortlichkeit

• Definiertes API

Viele, kleine Anwendungen

Freitag, 9. Dezember 11

Page 22: Architektur der kleinen Bausteine

• Eine Aufgabe, eine Anwendung

• Definierte Verantwortlichkeit

• Definiertes API

• SOA

Viele, kleine Anwendungen

Freitag, 9. Dezember 11

Page 23: Architektur der kleinen Bausteine

Zusammensetzen von grossen Anwendungen durch viele kleine Services

Super Idee!

Service Oriented Architecture

Freitag, 9. Dezember 11

Page 24: Architektur der kleinen Bausteine

SOAP<soap:Envelope xmlns:soap="http://schemas.xmlsoap.

org/soap/envelope/"

xmlns:xsi="http://www.w3.org/2001/X

MLSchema-instance" xmlns:xsd="http://www.w3.org/20

01/XMLSchema">

<soap:Body> <getLehrberufeRespons

e xmlns="somewhere.ch">

<getLehrberufeResult>

<Total_records>10</Total_records>

<Start_record>0</Start_record>

<Max_records>10</Max_records>

<List> <Lehrberuf> <BBT_nr>21107

</BBT_nr>

<Bezeichnung_maennlich>Bäcker-Konditor

-Confiseur EBA</Bezeichnung_maennlich>

<Bezeichnung_weiblich>Bäckerin-Kondito

rin-Confiseurin EBA</Bezeichnung_weiblich>

<Beruf_nr>343381</Beruf_nr>

<Bezeichnung_lena>Bäcker/in-Konditor/i

n-Confiseur/in EBA</Bezeichnung_lena>

<Berufsgruppe_nr>2</Berufsgruppe_nr>

<Lehrjahre>2</Lehrjahre>

<Ausbildungsart>2</Ausbildungsart>

<Anzahl_frei>3</Anzahl_frei>

</Lehrberuf> <Lehrberuf>

<BBT_nr>21105</BBT_nr>

<Bezeichnung_maennlich>Bäcker-Konditor

-Confiseur EFZ</Bezeichnung_maennlich>

<Bezeichnung_weiblich>Bäckerin-Kondito

rin-Confiseurin EFZ</Bezeichnung_weiblich>

<Zusatz>Fachrichtung Bäckerei-Konditor

ei</Zusatz>

<Beruf_nr>343388</Beruf_nr>

<Bezeichnung_lena>Bäcker/in-Konditor/i

n-Confiseur/in EFZ</Bezeichnung_lena>

<Berufsgruppe_nr>2</Berufsgruppe_nr>

<Lehrjahre>3</Lehrjahre>

<Ausbildungsart>0</Ausbildungsart>

<Anzahl_frei>10</Anzahl_frei>

</Lehrberuf>

Freitag, 9. Dezember 11

Page 25: Architektur der kleinen Bausteine

SOAP

Freitag, 9. Dezember 11

Page 26: Architektur der kleinen Bausteine

SOA

Freitag, 9. Dezember 11

Page 27: Architektur der kleinen Bausteine

Simplify

SOAP XML

Freitag, 9. Dezember 11

Page 28: Architektur der kleinen Bausteine

Simplify

Freitag, 9. Dezember 11

Page 29: Architektur der kleinen Bausteine

Simplify

REST JSON

Freitag, 9. Dezember 11

Page 30: Architektur der kleinen Bausteine

http://www.flickr.com/photos/hgesell/1257717725/

Web

Freitag, 9. Dezember 11

Page 31: Architektur der kleinen Bausteine

Representational State Transfer

Fielding Roy (2000), Architectural Styles andthe Design of Network-based Software Architectures, http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm

REST

Freitag, 9. Dezember 11

Page 32: Architektur der kleinen Bausteine

• Eine Ressource hat eine Adresse

• Diese Adresse ist eine URL

• http://server.ch/konferenz/sessions/2

Ressourcen

Freitag, 9. Dezember 11

Page 33: Architektur der kleinen Bausteine

• GET - Daten ansehen

• POST - Daten neu erstellen

• PUT - Daten ändern

• DELETE - Daten löschen

Verben

Freitag, 9. Dezember 11

Page 34: Architektur der kleinen Bausteine

Einfache Verben

Freitag, 9. Dezember 11

Page 35: Architektur der kleinen Bausteine

• Gleicher Link, verschieden Darstellung

• http://example.com/customers/1.html

• http://example.com/customers/1.xml

• http://example.com/customers/1.json

Darstellungssache

Freitag, 9. Dezember 11

Page 36: Architektur der kleinen Bausteine

class CustomersController < ApplicationController respond_to :html, :xml, :json

def index @customers = Customer.all respond_with @customers end

def show @customer = Customer.find params[:id] respond_with @customer endend

Freitag, 9. Dezember 11

Page 37: Architektur der kleinen Bausteine

Freitag, 9. Dezember 11

Page 38: Architektur der kleinen Bausteine

Beliebig Skalierbar

Freitag, 9. Dezember 11

Page 39: Architektur der kleinen Bausteine

• Horizontales Skalieren

• Vertikales Skalieren

• HTTP gibt uns vieles „umsonst“

• Cache

• Load Balancing

• Proxying

Web Scale

Freitag, 9. Dezember 11

Page 40: Architektur der kleinen Bausteine

• JavaScript Object Notation

• Standardformat für Serialisierung von JavaScript Objekten

• Kompakt

• Menschenlesbar

JSON

Freitag, 9. Dezember 11

Page 41: Architektur der kleinen Bausteine

z.B. Twitter API{ "completed_in" : 0.10000000000000001, "max_id" : 144353241361154049, "max_id_str" : "144353241361154049", "next_page" : "?page=2&max_id=144353241361154049&q=internet%20briefing", "page" : 1, "query" : "internet+briefing", "refresh_url" : "?since_id=144353241361154049&q=internet%20briefing", "results" : [ { "created_at" : "Tue, 06 Dec 2011 17:37:10 +0000", "from_user" : "thlang", "from_user_id" : 16402761, "from_user_id_str" : "16402761", "from_user_name" : "Thomas Lang", "geo" : null, "id" : 144108129351766016, "id_str" : "144108129351766016", "iso_language_code" : "de", "metadata" : { "result_type" : "recent" }, "profile_image_url" : "http://a3.twimg.com/profile_images/1570004977/thlang2011b_normal.jpg", "source" : "<a href="http://www.tweetdeck.com" rel="nofollow">TweetDeck</a>", "text" : "Fast ein kleines TweetUp am Internet-Briefing mit @sufranke @RetoHartinger @ooniboni @mhegi @rolfgeisser @JoergEugster und mehr.", "to_user" : null, "to_user_id" : null, "to_user_id_str" : null, "to_user_name" : null }, // ... ], "results_per_page" : 15, "since_id" : 0, "since_id_str" : "0"}

Freitag, 9. Dezember 11

Page 42: Architektur der kleinen Bausteine

{ "completed_in" : 0.10000000000000001, "max_id" : 144353241361154049, "max_id_str" : "144353241361154049", "next_page" : "?page=2&max_id=144353241361154049&q=internet%20briefing", "page" : 1, "query" : "internet+briefing", "refresh_url" : "?since_id=144353241361154049&q=internet%20briefing", "results" : [ { "created_at" : "Tue, 06 Dec 2011 17:37:10 +0000", "from_user" : "thlang", "from_user_id" : 16402761, "from_user_id_str" : "16402761", "from_user_name" : "Thomas Lang", "geo" : null, "id" : 144108129351766016, "id_str" : "144108129351766016", "iso_language_code" : "de", "metadata" : { "result_type" : "recent" }, "profile_image_url" : "http://a3.twimg.com/profile_images/1570004977/thlang2011b_normal.jpg", "source" : "<a href="http://www.tweetdeck.com" rel="nofollow">TweetDeck</a>", "text" : "Fast ein kleines TweetUp am Internet-Briefing mit @sufranke @RetoHartinger @ooniboni @mhegi @rolfgeisser @JoergEugster und mehr.", "to_user" : null, "to_user_id" : null, "to_user_id_str" : null, "to_user_name" : null }, // ... ], "results_per_page" : 15, "since_id" : 0, "since_id_str" : "0"}

Freitag, 9. Dezember 11

Page 43: Architektur der kleinen Bausteine

Praxis: Mobino

Freitag, 9. Dezember 11

Page 44: Architektur der kleinen Bausteine

Trichet Volcker Duisenberg Greenspan Keynes Smith

Mobino Crew

Freitag, 9. Dezember 11

Page 45: Architektur der kleinen Bausteine

Volcker Trichet

Duisenberg Keynes Greenspan

SmithRedis

Postgres 9

Freeswitch

Acapela

VAAS

Customer Web Merchant WebWidget Customer Voice

Freitag, 9. Dezember 11

Page 46: Architektur der kleinen Bausteine

Volcker Trichet

Duisenberg Keynes Greenspan

SmithRedis

Postgres 9

Freeswitch

Acapela

VAAS

Customer Web Merchant WebWidget Customer Voice

Freitag, 9. Dezember 11

Page 47: Architektur der kleinen Bausteine

Volcker Trichet

Duisenberg Keynes Greenspan

SmithRedis

Postgres 9

Freeswitch

Acapela

VAAS

Customer Web Merchant WebWidget Customer Voice

VOICE

FRONT

Back

Database

Freitag, 9. Dezember 11

Page 48: Architektur der kleinen Bausteine

• Eigentlich alles - gewisse sind allerdings geeigneter als andere

• Ruby

• Python

• JavaScript - CoffeeScript

Technologien?

Freitag, 9. Dezember 11

Page 49: Architektur der kleinen Bausteine

• Kaum Einschränkungen

• REST API

• JSON

• HTTP

• Alle sprechen mit allen

• Austausch von Komponenten möglich

Server

Freitag, 9. Dezember 11

Page 50: Architektur der kleinen Bausteine

Client Server

http://www.flickr.com/photos/obd-design/2374030181Freitag, 9. Dezember 11

Page 51: Architektur der kleinen Bausteine

Browser

Freitag, 9. Dezember 11

Page 52: Architektur der kleinen Bausteine

Freitag, 9. Dezember 11

Page 53: Architektur der kleinen Bausteine

JavaScript

Gute SpracheNettes Spielzeug

Freitag, 9. Dezember 11

Page 54: Architektur der kleinen Bausteine

• Model

• View

• Controller

MVC

Freitag, 9. Dezember 11

Page 55: Architektur der kleinen Bausteine

• Model

• View

• Controller

MVC

Freitag, 9. Dezember 11

Page 56: Architektur der kleinen Bausteine

Ruby / Python

Freitag, 9. Dezember 11

Page 57: Architektur der kleinen Bausteine

• Backbone http://documentcloud.github.com/backbone

• Sammy http://sammyjs.org

• Flatironhttp://flatironjs.org

• Derbyhttp://derbyjs.com/

JavaScript Libraries

Freitag, 9. Dezember 11

Page 58: Architektur der kleinen Bausteine

• Modelle

• Verbindung zu Daten-Backends

• Routes

• Views

• Templates

Was bieten diese Libraries?

Freitag, 9. Dezember 11

Page 59: Architektur der kleinen Bausteine

• SproutCorehttp://sproutcore.com

• Cappucinohttp://cappuccino.org

JavaScript Frameworks

Freitag, 9. Dezember 11

Page 60: Architektur der kleinen Bausteine

• Komplettes Angebot an Komponenten

• Neue Programmiersprache: Objective-J (Cappuccino)

• Portierung von UI-Kit (Cappuccino)

• Everything and the Kitchensink

Und die Frameworks?

Freitag, 9. Dezember 11

Page 61: Architektur der kleinen Bausteine

Sammy Anwendung// initialize the applicationvar app = Sammy('#main', function() { // include a plugin this.use('Mustache'); // define a 'route' this.get('#/', function() { // load some data this.load('posts.json') // render a template .renderEach('post.mustache') // swap the DOM with the new content .swap(); });});// start the applicationapp.run('#/')

Freitag, 9. Dezember 11

Page 62: Architektur der kleinen Bausteine

var app = Sammy(function(request) { this.post('#/widgets', function() { jQuery.ajax({ url: '/widgets', method: 'post', data: request.params['widget'], success: function(){ request.redirect('#/') } }); });});

GET / POST / PUT / ...

Freitag, 9. Dezember 11

Page 63: Architektur der kleinen Bausteine

Templates

var view = { title: "Joe", calc: function() { return 2 + 4; }}

var template = "{{title}} spends {{calc}}";

var html = Mustache.to_html(template, view)

http://mustache.github.com/

Freitag, 9. Dezember 11

Page 64: Architektur der kleinen Bausteine

Templates

Templates können sowohl auf Server als auch im Browser ausgeführt werden:

Keine Codeduplizierung!

Freitag, 9. Dezember 11

Page 65: Architektur der kleinen Bausteine

JavaScript auf Server

Freitag, 9. Dezember 11

Page 66: Architektur der kleinen Bausteine

JavaScript auf Server

Freitag, 9. Dezember 11

Page 67: Architektur der kleinen Bausteine

JavaScript auf Server

Auf jeden FallGaht‘s no?

Freitag, 9. Dezember 11

Page 68: Architektur der kleinen Bausteine

node.js

http://nodejs.org

Freitag, 9. Dezember 11

Page 69: Architektur der kleinen Bausteine

var http = require('http');http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n');}).listen(1337, "127.0.0.1");console.log('Server running at http://127.0.0.1:1337/')

HTTP Server

Freitag, 9. Dezember 11

Page 70: Architektur der kleinen Bausteine

• Anwendung läuft halb / halb im Browser und auf dem Server - transparent für den Entwickler

• Beispiel mit derby.js

Beispiel Server / Client

Freitag, 9. Dezember 11

Page 71: Architektur der kleinen Bausteine

var express = require('express'), hello = require('./hello'), server = express.createServer() .use(express.static(__dirname + '/public')) // Apps create an Express middleware .use(hello.router()),

// Apps also provide a server-side store for syncing data store = hello.createStore({ listen: server });

server.listen(3000)

server.js

Freitag, 9. Dezember 11

Page 72: Architektur der kleinen Bausteine

hello.jsvar hello = require('derby').createApp(module), view = hello.view, get = hello.get;

// Templates define both HTML and model <- -> view bindingsview.make('Body', 'Holler: <input value="((message))"><h1>((message))</h1>');

// Routes render on client as well as serverget('/', function(page, model) { // Subscribe specifies the data to sync model.subscribe('message', function() { page.render(); });});

Freitag, 9. Dezember 11

Page 73: Architektur der kleinen Bausteine

Wohin jetzt?

Freitag, 9. Dezember 11

Page 74: Architektur der kleinen Bausteine

Freitag, 9. Dezember 11

Page 75: Architektur der kleinen Bausteine

Fragen

Freitag, 9. Dezember 11

Page 76: Architektur der kleinen Bausteine

Jens-Christian [email protected]

@jcfischer

Kontakt

Freitag, 9. Dezember 11