Download - Iwmn architecture
![Page 1: Iwmn architecture](https://reader036.vdocuments.site/reader036/viewer/2022081403/555821e6d8b42a5e468b5032/html5/thumbnails/1.jpg)
Tuesday, 12 July 2011
![Page 2: Iwmn architecture](https://reader036.vdocuments.site/reader036/viewer/2022081403/555821e6d8b42a5e468b5032/html5/thumbnails/2.jpg)
Tuesday, 12 July 2011
![Page 3: Iwmn architecture](https://reader036.vdocuments.site/reader036/viewer/2022081403/555821e6d8b42a5e468b5032/html5/thumbnails/3.jpg)
stripped down catalyststripped the M out of the VC
Tuesday, 12 July 2011
![Page 4: Iwmn architecture](https://reader036.vdocuments.site/reader036/viewer/2022081403/555821e6d8b42a5e468b5032/html5/thumbnails/4.jpg)
pure NoSQLno relational DB left in the entire stack
Tuesday, 12 July 2011
![Page 5: Iwmn architecture](https://reader036.vdocuments.site/reader036/viewer/2022081403/555821e6d8b42a5e468b5032/html5/thumbnails/5.jpg)
iwmn in 5
• as lightweight as one gets a catalyst app
• custom authentication architecture
• Redis based session handling
• RabbitMQ driven backend
• multi language/domain/currency/anything
Tuesday, 12 July 2011
![Page 6: Iwmn architecture](https://reader036.vdocuments.site/reader036/viewer/2022081403/555821e6d8b42a5e468b5032/html5/thumbnails/6.jpg)
in a bit more detail
Tuesday, 12 July 2011
![Page 7: Iwmn architecture](https://reader036.vdocuments.site/reader036/viewer/2022081403/555821e6d8b42a5e468b5032/html5/thumbnails/7.jpg)
lightweight
• stripped out the model handling entirely
• stripped out the authentication handling
• many custom plugins (core and contrib)
Tuesday, 12 July 2011
![Page 8: Iwmn architecture](https://reader036.vdocuments.site/reader036/viewer/2022081403/555821e6d8b42a5e468b5032/html5/thumbnails/8.jpg)
authentication architecture
• multi platform handling (including different session cookie domains)
• CouchDB based storage
• OAuth
• API login (release pending)
Tuesday, 12 July 2011
![Page 9: Iwmn architecture](https://reader036.vdocuments.site/reader036/viewer/2022081403/555821e6d8b42a5e468b5032/html5/thumbnails/9.jpg)
session handling
• started with Postgres and the standard session handler
• moved to CouchDB for multi domain handling
• moved to Redis for speed
Tuesday, 12 July 2011
![Page 10: Iwmn architecture](https://reader036.vdocuments.site/reader036/viewer/2022081403/555821e6d8b42a5e468b5032/html5/thumbnails/10.jpg)
backend
• all business logic in the backend
• clusters of perl/erlang daemons
• reading off RabbitMQ
• answers cached in Redis
Tuesday, 12 July 2011
![Page 11: Iwmn architecture](https://reader036.vdocuments.site/reader036/viewer/2022081403/555821e6d8b42a5e468b5032/html5/thumbnails/11.jpg)
multi anything
• multi domain support
• different platforms in one daemon
• i18n + multi currency
• separate template trees
Tuesday, 12 July 2011
![Page 12: Iwmn architecture](https://reader036.vdocuments.site/reader036/viewer/2022081403/555821e6d8b42a5e468b5032/html5/thumbnails/12.jpg)
static content
Tuesday, 12 July 2011
![Page 13: Iwmn architecture](https://reader036.vdocuments.site/reader036/viewer/2022081403/555821e6d8b42a5e468b5032/html5/thumbnails/13.jpg)
Tuesday, 12 July 2011
![Page 14: Iwmn architecture](https://reader036.vdocuments.site/reader036/viewer/2022081403/555821e6d8b42a5e468b5032/html5/thumbnails/14.jpg)
content
• pages in CouchDB
• pages rendered with information out of CouchDB
• page skeletons entirely i18n
• template branches in git repository per platform/language
Tuesday, 12 July 2011
![Page 15: Iwmn architecture](https://reader036.vdocuments.site/reader036/viewer/2022081403/555821e6d8b42a5e468b5032/html5/thumbnails/15.jpg)
backendrequest handling
• Catalyst pushes request to RabbitMQ
• backend daemons read off queue
• push response to Redis
• Catalyst reads off Redis (direct or through Ajax)
Tuesday, 12 July 2011
![Page 16: Iwmn architecture](https://reader036.vdocuments.site/reader036/viewer/2022081403/555821e6d8b42a5e468b5032/html5/thumbnails/16.jpg)
Tuesday, 12 July 2011
![Page 17: Iwmn architecture](https://reader036.vdocuments.site/reader036/viewer/2022081403/555821e6d8b42a5e468b5032/html5/thumbnails/17.jpg)
backend in detail
• Dæmonise daemons
• plugin based daemon framework
• dungenkeeper maintaining population
• git://github.com/ideegeo/Daemonise.git
Tuesday, 12 July 2011
![Page 18: Iwmn architecture](https://reader036.vdocuments.site/reader036/viewer/2022081403/555821e6d8b42a5e468b5032/html5/thumbnails/18.jpg)
workflow engine
• CouchDB based workflows
• RabbitMQ based processing
• perl based daemons
• talked about it before: http://lnz.me/cVcW
Tuesday, 12 July 2011
![Page 19: Iwmn architecture](https://reader036.vdocuments.site/reader036/viewer/2022081403/555821e6d8b42a5e468b5032/html5/thumbnails/19.jpg)
evolution
• out of the box Catalyst app (mid 2008)
• home grown message queue for backend
• split out template tree
• moved more content to CouchDB
• moved to RabbitMQ in the backend
• moved to CouchDB for sessions
Tuesday, 12 July 2011
![Page 20: Iwmn architecture](https://reader036.vdocuments.site/reader036/viewer/2022081403/555821e6d8b42a5e468b5032/html5/thumbnails/20.jpg)
evolution 2
• moved more functionality from controller to plugins
• moved to custom Engine
• phased out Model
• moved to Redis for session handling
• moved to Redis for RabbitMQ response handling
Tuesday, 12 July 2011
![Page 21: Iwmn architecture](https://reader036.vdocuments.site/reader036/viewer/2022081403/555821e6d8b42a5e468b5032/html5/thumbnails/21.jpg)
lessons learned
• Redis rocks (not only for session handling)
• CouchDB rocks
• RabbitMQ scales like hell and rocks too
• Catalyst rocks with lots of memory too
• choose your weapons wisely
Tuesday, 12 July 2011
![Page 22: Iwmn architecture](https://reader036.vdocuments.site/reader036/viewer/2022081403/555821e6d8b42a5e468b5032/html5/thumbnails/22.jpg)
Catalyst lessons
• write plugins, lots of them
• do it the Catalyst way or you die
• message driven development is hard with Catalyst
• watch your memory and your leaks
• use a fast session storage engine
Tuesday, 12 July 2011
![Page 23: Iwmn architecture](https://reader036.vdocuments.site/reader036/viewer/2022081403/555821e6d8b42a5e468b5032/html5/thumbnails/23.jpg)
coding lessons learned
• bump out the first version as quick as possible
• rewrite it with the user feedback over time
• dense code helps avoiding bugs
• get to the point quickly, don’t spend ages on nice code
Tuesday, 12 July 2011
![Page 24: Iwmn architecture](https://reader036.vdocuments.site/reader036/viewer/2022081403/555821e6d8b42a5e468b5032/html5/thumbnails/24.jpg)
questions?
Tuesday, 12 July 2011
![Page 25: Iwmn architecture](https://reader036.vdocuments.site/reader036/viewer/2022081403/555821e6d8b42a5e468b5032/html5/thumbnails/25.jpg)
springtimesoft.com/lenz
Tuesday, 12 July 2011
![Page 26: Iwmn architecture](https://reader036.vdocuments.site/reader036/viewer/2022081403/555821e6d8b42a5e468b5032/html5/thumbnails/26.jpg)
credits• http://www.flickr.com/photos/amagill/
• http://www.flickr.com/photos/n0rthw1nd/
• http://www.flickr.com/photos/kemped/
• http://www.flickr.com/photos/vistavision/
• http://www.flickr.com/photos/brenda-starr/
• http://www.flickr.com/photos/abbeychristine/
• http://www.flickr.com/photos/beigephotos/
• http://www.flickr.com/photos/scania/
• http://www.flickr.com/photos/brewbooks/
• http://www.flickr.com/photos/dunechaser
• http://www.flickr.com/photos/neenahhistory
• http://www.flickr.com/photos/mlrs193/
• http://www.flickr.com/photos/axis/
• http://www.flickr.com/photos/thevlue/
Tuesday, 12 July 2011