Codebits Handivi

56
Technology in a startup @ 7syntax Celso Pinto Coder, headbanger, biker and founder

description

Presentation on what happens behind the scenes at handivi.com by Celso Pinto for SAPO's Codebits 2008

Transcript of Codebits Handivi

Page 1: Codebits Handivi

Technology in a startup @ 7syntax

Celso PintoCoder, headbanger, biker and founder

Page 2: Codebits Handivi

And Python lover

Page 3: Codebits Handivi

Then: 2 + 1 idea

Page 4: Codebits Handivi

Now: a 5 men army

Page 5: Codebits Handivi

Fighting the evil empire!

Page 6: Codebits Handivi

with

Page 7: Codebits Handivi

A tech startup lives by it's tech

Page 8: Codebits Handivi

TECH FAIL

Page 9: Codebits Handivi

From the very back end...

http://flickr.com/photos/your_teacher/133262843/

Page 10: Codebits Handivi

Question time!

Page 11: Codebits Handivi

So, about data storage

Page 12: Codebits Handivi

✔ Fast key based access✔ Cheetah-fast list fetches✔ Prefer to search with Lucene

Relational is dead... to me!

Page 13: Codebits Handivi

✔ Fast key based access✔ Cheetah-fast list fetches✔ Prefer to search with Lucene

Cheetah fast reads

Page 14: Codebits Handivi

✔ Standard mailboxes, accessible via POP/SMTP

Stuff I actually considered

Page 15: Codebits Handivi

✔ Standard mailboxes, accessible via POP/SMTP✔ Fixed block files

Stuff I actually considered

Page 16: Codebits Handivi

✔ Standard mailboxes, accessible via POP/SMTP✔ Fixed block files✔ MogileFS (plus Lucene for complete indexing)

Stuff I actually considered

Page 17: Codebits Handivi

But then...

Page 18: Codebits Handivi

Any day now

Page 19: Codebits Handivi

✔ Easy sharding✔ Incredibly fast reads, faster than cheetahs!✔ Develop views in a(ny) familiar language✔ One instance can handle 500.000 databases✔ Each database can easily store millions of records✔ Online backups/snapshots and compaction

What we get from CouchDB

Page 20: Codebits Handivi

✔ It's a “tad” slow on inserts✔ 50 inserts per second✔ We can push it to 500 by dropping fsync's and using

tmpfs

CouchDB has warts too :-(

But it doesn't matter: we <3 CouchDB!

Page 21: Codebits Handivi

Any questions so far?

Page 22: Codebits Handivi

Programming language(s)

Page 23: Codebits Handivi

Programming languages

Page 24: Codebits Handivi

Programming languages

Page 25: Codebits Handivi

No!

Page 26: Codebits Handivi

No!

Page 27: Codebits Handivi

Programming languages

Page 28: Codebits Handivi

The Snake

HisssssssssssssssssHiss hiss Hiss hiss Hissss hiss Hisss hisss Hissss hiss Hiss hiss Hiss hisss Hisss hisssssss Hiss hisss Hiss hissssss Hiss hiss Hisss hissss Hisss hiss Hiss hiss Hisss hiss Hisss hiss Hiss hiss Hiss hisss Hisss hisss Hiss hiss Hissss hissss Hiss hiss Hissss hisssssss Hiss hiss Hiss hiss Hiss hisss Hisssss hissss Hiss hiss Hissss hisssss Hiss hiss Hisss hiss Hisssss hiss Hisss hisss Hissss hiss Hisss hiss Hisss hiss Hissss hissssssss Hiss hisssssss Hissss hisss Hiss hisss Hissss hiss Hiss hisss Hiss hiss Hisss hisss Hissss hiss Hisss hissss Hiss hiss Hissss hisssssss Hiss hissss Hiss hissss Hiss hisss Hisss hissss Hisss hiss Hiss hisssss Hisss hisss Hissss hiss Hisss hisssssss Hiss hisss Hisss hissss Hiss hisss Hiss hissssss Hiss hisss Hissss hiss Hisss hiss Hiss hisss Hiss hiss Hisss hissss Hiss hiss Hissss hiss Hiss hisssss Hisss hisssssss Hiss hissss Hiss hisss Hissss hiss Hiss hiss Hiss hiss Hissss hisss Hissss hiss Hisss hisssssss Hiss hisssss Hisss hisss Hiss hiss Hiss hisss Hiss hiss Hisss hisss Hissss hiss Hisss hiss Hiss hiss Hiss hiss Hissss hisssss Hisssss hiss Hisssssss hissss Hiss hissss Hiss hisss Hisss hiss Hissss hissss Hiss hiss Hiss hisssss

* you need Acme::Python to understand this

Page 29: Codebits Handivi

Only one restriction

4 space indentsBut you should be doing that already!

Page 30: Codebits Handivi

Other advantages

Here we have Python Some other language

Page 31: Codebits Handivi

After one year

Still Python Some other language

Page 32: Codebits Handivi

On the mobile

Page 33: Codebits Handivi

On the mobile

Page 34: Codebits Handivi

On the web front

Page 35: Codebits Handivi

On the web front

Page 36: Codebits Handivi

Any questions?

Page 37: Codebits Handivi

Frameworks vs. Libraries

Page 38: Codebits Handivi

Siza Vieira

Page 39: Codebits Handivi

The blue pill

Page 40: Codebits Handivi

✔ Modular: we can replace have replaced many parts✔ Stable/solid: impressive # of tests, great docs!✔ Easily hackable: it's Python after all

Why Django?

Page 41: Codebits Handivi

No, seriously...

Page 42: Codebits Handivi

Alright, you win

Page 43: Codebits Handivi

✔ Auth: we built our own from the start✔ Sessions: in-house developed stateless sessions✔ ORM: now on it's way to meet the dodo!✔ By extension: we never got the chance to use the

admin application

What we replaced

Page 44: Codebits Handivi

✔ Templates: inheritance is great!✔ Request handling/routing rules engine✔ Forms: lots of validation there✔ … other bits I can't really remember

What we're keeping

Page 45: Codebits Handivi

How we're using Django

Page 46: Codebits Handivi

Any questions about Django?

Page 47: Codebits Handivi

Messaging

Page 48: Codebits Handivi

✔ Throttling, balancing, loose coupling✔ We can tap into any queues and experiment✔ Remember CouchDB? MQ is the MDA for each

“mailbox”

Why is it important to us?

Page 49: Codebits Handivi

Lots of good stuff out there

Page 50: Codebits Handivi

✔ ActiveMQ: stable, small and fast enough✔ Many protocols: we chose STOMP, nice to debug✔ Had to create AsyncIO Python lib

Our choice

Page 51: Codebits Handivi

✔ Does MDB mean anything to you?✔ Python has no MDB container, had to create one✔ Python + processing (new in Python 3000):

✔ Configuration similar to Django's✔ 1 process => 1 destination consumer

Final bits on messaging

Page 52: Codebits Handivi

Any questions about messaging?

Page 53: Codebits Handivi

Wrapping up

Page 54: Codebits Handivi

Current architecture

mobile ?mobile webmobile

perlbal

API (django apps)

static Ct. adapter

consumers

writes

accounts User 1 User 2 User nCouchDB

reads S3

Page 55: Codebits Handivi

Any final questions?

Page 56: Codebits Handivi

Thank you very much!

Celso Pinto // [email protected]