David Glick – Plone developer
But why did the site get faster?
Looking at a munin graph of server activity, I observed a noticeable drop in the number of rescheduling interrupts -- a change that coincided with my change in server configuration:
I suspect that the "before" portion of this graph illustrates a problem that occurs when running multi-threaded Python programs on multi-core machines, wherein threads running in different cores fight for control of the Global Interpreter Lock (a problem Dave Beazley has called to the community's attention in a recent presentation) -- and that this explains the improvement in performance once I switched to multiple processes with fewer threads. By switching to multiple processes, we let concurrent processing get managed by the operating system, which is much better at it.
Moral of the story: If you're running Zope on a multi-core machine, having more than 2 threads per Zope instance is probably a bad move performance-wise, compared to the option of running more (load-balanced) instances with fewer threads.
(Using a single thread per instance might be even better, although of course you need to make sure you have enough instances to still handle your load, and you need to make sure single-threaded instances don't make calls to external services which then call back to that instance and block. I haven't experimented with using single-threaded instances yet myself.)
The goal of the sprint is to improve the Dexterity content type framework (a modern alternative to Archetypes created by Martin Aspeli and others). As part of the Dexterity team, I want to offer the following list of potential projects to help get your creative juices flowing.
At the sprint, you could...
Implement one of Dexterity's missing features, such as:
- a way to relate Dexterity content to Archetypes content and vice versa
- automatic image scales
- "exclude from navigation" behavior
- multilingual content
- link integrity checking
- selectable type constraints for containers
Fix some of the other outstanding issues in the Dexterity issue tracker.
Create a ZopeSkel template for Dexterity-based projects.
Improve the through-the-web content type editor.
- improve usability and/or sexiness
- add UI for exporting types for work on the filesystem
- add support for defining vocabularies
- add support for selecting/configuring custom widgets
Create an editor that allows through-the-web editing of new behaviors (which can then be applied to existing types in a schema-extender-like fashion.)
Add a view editor to accompany the through-the-web schema editor. Deco is coming and will be great, but in the meantime it would be nice to at least have something that generates a basic view template based on your schema and then lets you tweak it and export it to the filesystem.
Build a better workflow editor to accompany the above.
Write a guide to migrating Archetypes-based content types to Dexterity. Or build a tool to do it automatically.
Create replacements for the ATContentTypes types using Dexterity types.
Determine how to handle existing content items sanely when editing schemas.
Devise a PloneFormGen successor that stores its schema in a fashion similar to Dexterity, and makes it easy to convert a form + results into a full-blown content type. Bonus points if the form editing is done using Deco. :)
There are so many interesting possibilities I'm having trouble deciding what to focus on myself. Space is limited, so if any of this strikes your fancy, head on over to Coactivate and sign right up to join us at the sprint!
Here's a one-minute screencast showing how it works.