Top Banner
Shared Nothing Web Backends Matthias Wahl - developer @ crate.io
25

Crate Shared Nothing Web Backends - Web Backend Meetup May 2014

Jan 27, 2015

Download

Software

Matthias Wahl

Talk about building real shared nothing web backends using crate data

on Web Backend Meetup May 2014
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: Crate Shared Nothing Web Backends - Web Backend Meetup May 2014

Shared Nothing Web Backends

Matthias Wahl - developer @ crate.io

Page 2: Crate Shared Nothing Web Backends - Web Backend Meetup May 2014

Agenda

Shared Nothing

Crate

Shared Nothing Architectures using Crate

Cluster Workout

Page 3: Crate Shared Nothing Web Backends - Web Backend Meetup May 2014

Prepare for Workout

1.) bash -c "$(curl -L try.crate.io)"

https://cdn.crate.io/downloads/releases/crate-0.38.2.tar.gz

2.) sh$ bin/crate

0.) share our “craty” WLAN pw: select*fromcrate;

Page 4: Crate Shared Nothing Web Backends - Web Backend Meetup May 2014

Prepare for Workout

3.) start up the twitter tutorial

Page 5: Crate Shared Nothing Web Backends - Web Backend Meetup May 2014

Shared Nothing

Page 6: Crate Shared Nothing Web Backends - Web Backend Meetup May 2014

Shared Nothing

Wikipedia: !

a distributed computing architecture in which each

node is independent and self-sufficient, and there is no

single point of contention across the system. More

specifically, none of the nodes share memory or disk

storage.

Page 7: Crate Shared Nothing Web Backends - Web Backend Meetup May 2014

Shared Nothing

Origin:

!

Micheal Stonebraker

“The Case for Shared Nothing” (1986)

!

http://pdf.aminer.org/000/255/770/

the_case_for_shared_nothing.pdf

Page 8: Crate Shared Nothing Web Backends - Web Backend Meetup May 2014

Shared Nothing

Principle of most functional languages

Shared state/resources (memory) is what makes threading hard

No SPOF

Easy concurrency

Page 9: Crate Shared Nothing Web Backends - Web Backend Meetup May 2014

DB

Cache

App App App App

DB - Replica

Cache Cache

Bad Idea

Page 10: Crate Shared Nothing Web Backends - Web Backend Meetup May 2014

DB

Cache

App App App App

DB - Replica

Cache Cache

Bad Idea

Page 11: Crate Shared Nothing Web Backends - Web Backend Meetup May 2014

Crate

Austria and Berlin based Startup

founded 2013

open source since april https://github.com/crate/crate

Page 12: Crate Shared Nothing Web Backends - Web Backend Meetup May 2014

Crate

shared nothing massively scalable datastore

standing on the shoulders of giants

Page 13: Crate Shared Nothing Web Backends - Web Backend Meetup May 2014

Crate

Page 14: Crate Shared Nothing Web Backends - Web Backend Meetup May 2014

Crate

automatic sharding and replication

(semi-) structured models

blob support

SQL query language

Page 15: Crate Shared Nothing Web Backends - Web Backend Meetup May 2014

Crate

powerful fulltext search capabilities

complex aggregations in near real-time

- no joins

Page 16: Crate Shared Nothing Web Backends - Web Backend Meetup May 2014

Crate

crate-java

crate-jdbc

crate-python (+SQLAlchemy)

crate-ruby

CRATE Clients

Page 17: Crate Shared Nothing Web Backends - Web Backend Meetup May 2014

Shared Nothing with Crate

data and query execution is distributed among all nodes

no master/slave - all nodes are equal

automatic sharding & replication

Page 18: Crate Shared Nothing Web Backends - Web Backend Meetup May 2014

Shared Nothing with Crate

example architecture

crate

app

crate

app

crate

app

Load Balancer

Page 19: Crate Shared Nothing Web Backends - Web Backend Meetup May 2014

Shared Nothing with Crate

horizontally scalable as hell

still flexible enough for complex applications

high availability for your whole stack

Page 20: Crate Shared Nothing Web Backends - Web Backend Meetup May 2014

Shared Nothing with Crate

create table blogpost ( id string primary key, created timestamp, text string, creator string )

Page 21: Crate Shared Nothing Web Backends - Web Backend Meetup May 2014

Shared Nothing with Crate

from sqlalchemy import Column, String, DateTime from microblog.model import Base import uuid !!def genuuid(): return str(uuid.uuid4()) !!class BlogPost(Base): ! __tablename__ = 'blogpost' ! id = Column(String, default=genuuid, primary_key=True) text = Column('text', String, nullable=False) creator = Column('creator', String, nullable=False) created = Column('created', DateTime, nullable=False)

Page 22: Crate Shared Nothing Web Backends - Web Backend Meetup May 2014

Shared Nothing with Crate

@rpcmethod_route(request_method="GET") def list(self): """ Return all blogposts """ query = DBSession.query(BlogPost).order_by(BlogPost.created.desc()) blogposts = query.all() result = [] for post in blogposts: result.append({'id': post.id, 'created': post.created.isoformat(), 'text': post.text, 'creator': post.creator}) return {"data": {"blogposts": result}}

Page 23: Crate Shared Nothing Web Backends - Web Backend Meetup May 2014

Shared Nothing with Crate

get into detail: !

http://lovelysystems.github.io/lovely.microblog/

Page 24: Crate Shared Nothing Web Backends - Web Backend Meetup May 2014

Cluster Workout!!!

Page 25: Crate Shared Nothing Web Backends - Web Backend Meetup May 2014

CRATE

Thank you

web: https://crate.io/

github: https://github.com/crate

twitter: @cratedata

IRC: #crate

stackoverflow tag: cratedata