Content delivery Plone Symposium East 2010


Published on

Presentaiton on alternative content delivery modes of the Plone Content Management System.

Published in: Technology
  • Be the first to comment

No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide

Content delivery Plone Symposium East 2010

  1. 1. Alt. Content DeliveryAlan Runyan<br />Plone Symposium East<br />State College, Pennsylvania<br />5/29/09<br />
  2. 2. Overview<br />Review modes of content delivery<br />Why and what purpose <br />Existing solutions for Plone<br />Strengths and Weakness<br />ContentMirror in detail<br />Conclusion<br />
  3. 3. What is it<br />Two modes in-band & out-of-band<br />Plone Default is “in band”<br />Req to Plone; Plone computes Resp<br />e.g. XDV, mod_wsgi, mod_proxy, varnish<br />Atypical usage of Plone, “out of band”<br />Plone emits content into intermediary storage<br />Plone is not involved in responding to Req<br />No other FOSS CMS has such feature<br />
  4. 4. How Others Do It<br />Render pages to filesystem + sync<br />Custom programming to iterate over repository rendering views to disk<br />Provide an API into repository for web-tier application to source content<br />Promote the database schema as API<br />
  5. 5. Out of Band<br />Static Delivery<br />Generates static assets from Plone<br />Assets transferred to web server<br />Statically rendered content served<br />Dynamic Delivery<br />Plone pushes content into 3rd party data store<br />Separate web application to display content<br />
  6. 6. Why?<br />Static Delivery<br />Constraints in delivery mode of website<br />Security requires no moving parts<br />e.g. Kiosk, updated every X hours<br />Dynamic Delivery<br />Web application is vastly different than CMS<br />Different organizational / skill-sets being used<br />e.g. existing website is .NET; want new section to be driven by Plone<br />
  7. 7. Current Options<br />Static Delivery<br />CMFDeployment<br />enpraxis.staticsite<br />Dynamic Delivery<br />Entransit<br />ContentMirror<br />
  8. 8. Plone Approach<br />Render pages to filesystem + sync<br />CMFDeployment, enpraxis.staticsite<br />Promote the database schema as API<br />Entransit, contentmirror<br />Provide API into the Repository<br />wsapi4plone.parfait<br />
  9. 9. CMFDeployment<br />Static delivery<br />Strengths<br />Various large projects have used it<br />Very flexible configuration modes<br />Supports transport<br />Weakness<br />Flexibility brings complexity / lacks testing<br />Last release 2006<br />
  10. 10. In the Wild<br />
  11. 11. enpraxis.staticsite<br />Static delivery<br />Strengths<br />Very simple and approachable<br />Serializes Plone to file system<br />Weakness<br />Requires programming & deployment<br />Lack of documentation and testing<br />
  12. 12. In the Wild<br />
  13. 13. Entransit<br />Dynamic Delivery<br />Strengths<br />Supports staging of entire changesets<br />Conceptually simple<br />Weakness<br />Requires too much programming<br />Documentation and testing is lacking<br />Too many moving parts<br />Does not have connection to CMS during load into data store. Significantly complicates state mgmt<br />
  14. 14. In the Wild<br />
  15. 15. ContentMirror<br />Dynamic delivery<br />Strengths<br />Simple, Extensible, and Fast<br />Tight coupling with Plone event model<br />Weakness<br />Evolving data store & Plone models requires discipline<br />Data model currently exposes impl details<br />
  16. 16. In the Wild<br />
  17. 17. Wrap Up<br />Alt delivery is atypical use case for Plone<br />Systems with multiple ORG actors<br />Static Delivery vs. Dynamic Delivery<br />Building up is more approachable<br />Documentation / Testing critical<br />Dynamic delivery: CM is best bet.<br />Entransit 2 plans on layering staging on CM<br />Now lets go into details of ContentMirror<br />
  18. 18. ContentMirror Pitch <br />Sync Serialize content from Plone RDBMS<br />Just Works™<br />Small code base < 1k LOC; 99% coverage<br />Let SQLAlchemy do heavy lifting<br />RDBMS query-ability of content attributes<br />Well tested, 99% coverage + mocked<br />
  19. 19. Evaluate Today<br />Buildout: Plone, ContentMirror, and SOLREstimate: 30 minutes<br />Configuration of Relational DatabaseEstimate: 20 minutes<br />Bootstrap database with ddl.pyEstimate: 5 minutes<br />Have real time Plone Content (RDBMS) and Search (SOLR); Now pick frontend.<br />
  20. 20. Usages<br />Business reports based on content repository (i.e. Crystal Reports, iReport)<br />Provide richer queries (using SQL)<br />Store data in multiple back ends<br />RDBMS<br />Google App Engine<br />
  21. 21. You already know<br />If you do not customize Plone heavily; it migrates really well.<br />Plone lots of neat features: WebDAV (Enfold Desktop;), LDAP, Content Types, Cache Fu (Enfold Proxy;), etc.<br />So the authoring experience is flexible, configurable, and enjoyable<br />You can have multiple “sub-sites”<br />
  22. 22. Observations<br />Presentation tiers have different requirements than content repository<br />Simplicity is key. Maintaining presentation tiers have to be simple; few abstractions<br />PHP or Django have few abstractions to display dynamic data on web page<br />Isolate complexity; never will go away<br />Plone seen as self-licking ice cream cone<br />
  23. 23. The Story<br />Big university has 200 IT staff; all busy managing HR, ERP, printers, etc.<br />Individual departments are independent and have transient staff who manage web<br />Departments need way to use transient staff to maintain web presence; if CMS exists. Transient staff can use PHP.<br />PHP, Django, .NET developers are cheap <br />
  24. 24. More Story<br />There is no way IT can:<br />Manage all department changes centrally<br />Maintain system that has software changing daily or hourly<br />Allow people to make a change that impacts campus wide system<br />Noam in Linguistics should not be able write code which DoS the campus CMS<br />IT does best with focus: keep systems up.<br />
  25. 25. Even More Story?<br />IT offer primitives: LDAP (users), RDBMS (content), SOLR (search). <br />Commodity services<br />Departments implement however they like<br />ContentMirror is a lightweight step towards decoupling the CMS from presentation<br />Make presentation as flexible as possible<br />
  26. 26. Installation<br />Buildout the recipe.cfg<br />Put SQLAlchemy URI in .zcml or ENV<br />bin/instance run $DB > out.ddl<br />Execute out.ddl<br />Start Zope<br />Create Plone site and add content<br />Query your RDBMS <br />
  27. 27. Features<br />Auto-generate DDL for registered types<br />All default Plone content types work<br />Currently focused on Archetypes; z3 easy<br />Bulk import of Plone content into RDBMS<br />Re-entrant (run multiple times)<br />Schema available in JSON (vocabularies)<br />Fast. Serialized 100k content + references in < 20m<br />
  28. 28. Your content type<br />Create new zcml that is included<br /><configure xmlns=""<br />xmlns:ore=""> <br /> <ore:engineurl="mysql://user:passwd@host/database"<br /> name="mirror-db"<br /> encoding='utf8'<br /> echo="False"/><br /> <ore:mirror content="Products.AudioholicsContent.AHHomePage.AHHomePage"/><br /></ore:engine><br /></configure><br />Re-run; execute in RDBMS<br />All default Plone content types work OOTB<br />
  29. 29. Field not available?<br />ore.contentmirror/transform.zcmlcontains adapters for how AT Fields are mapped to SQLAlchemy<br />ore.contentmirror/transform.pycontains the adapter source code<br /> <adapter<br /> for=".interfaces.ITextField .interfaces.ISchemaTransformer"<br /> provides=".interfaces.IFieldTransformer"<br /> factory=".transform.TextTransform"<br /> /><br />
  30. 30. Escape Hatch<br />If you don’t want field level serialization<br />Write custom transformer for your class<br />You take full responsibility for<br />Copying state from instance to RDBMS<br />May also have to do some extra work<br />
  31. 31. Of Interest<br />ore.contentmirror/<br />Provide buffer to filter out duplicate operations<br />Simple pattern for transaction integration<br />ore.contentmirror/<br />Serializes AT schemas into RDBMS via a JSON structure<br />Presentation can easily find out what the original schema (including vocabularies)<br />Not used by default<br />
  32. 32. Dynamism<br />What about PloneFormGen or interaction?<br />ContentMirror would serialize the Form elements as database rows; FE has to draw and validate forms<br />Collage would generate data representing rows, columns pointing to content UID<br />Presentation tier does re-implement common functionality (RSS, Login, etc)<br />
  33. 33. Conclusion<br />Significant experience in community<br />Starting simple is more approachable<br />Static vs. Dynamic<br />CM has a great experience OOTB<br />rc2 has minor OOTB issue; all fixed in trunk<br />Staging not implemented across multiplecontent types. DEV, STAGE, PROD<br />Alt delivery is a minority use case.<br />
  34. 34. Conclusion<br />You would never know that Plone fits these use cases<br />Little visibility in broader community<br />Hard to separate the add-on pile<br />collective simply has too much activity<br />Costly to maintain; advocate<br />Without formal support in Plone support expensive<br />KapilThangavelu wrote ContentMirror & CMFDeployment – awesome software designer!<br />
  35. 35. Fin<br />Content Mirror (ore.contentmirror)<br />SOLR (collective.solr)<br />Enfold Systems<br />My email<br />