Scaling Django to a Global Audience with Playdoh

At Open Source Bridge last month, I gave a talk about Mozilla’s Playdoh project, which tweaks the Django web application framework to reach our global audience at Mozilla.

Here’s a second run of that presentation, recorded at the Mozilla offices (video credit: Rainer Cvillink).

It is a high-level overview of what the playdoh project is and what we do to write scalable web applications, that should be understandable even for nontechnical folks who would like to learn about the project. In the future, we’ll follow up with more technical, detailed posts on certain aspects of the framework.

Download video as MP4, WebM, or Ogg.

Quick summary: In an effort to standardize our web development platform across our various projects, Mozilla created the playdoh project. Playdoh is a web application template consisting of Django, plus additional libraries and documentation. Check out the (work in progress) features list, or the full documentation. The source code is available on github, and if you have any questions, feel free to step by #webdev on the Mozilla IRC network.

12 responses

  1. Paul Booker wrote on :

    Hi Fred,

    Great video.

    Currently learning Django so that i can contribute / participate building Mozilla web sites so i found this video very interesting πŸ™‚

    Best, Paul

  2. Fred Wenzel wrote on :

    Glad you liked it, Paul! πŸ™‚

  3. Mladen wrote on :

    Awweesomeee.. will be exploring it in the next few days. This is a very necessary set of tools for anyone working on or learning Django. Thanks for working on this and even more for making it available!

  4. w1sh wrote on :

    Awesome video. Awesome project. I can’t wait to dig in. πŸ™‚

    Thanks Mozilla for leading the way!

  5. Rich wrote on :

    I’d love a tutorial on how to use your migrations tool!

  6. Anderson wrote on :

    Thats great. I would love work with you guys in mozilla. Thats definitelly one of my top dream jobs.

    I have a question: You said you use at least two DB, one for writing other for reading. Wich tool, or how, you do replication between these databases?

  7. Fred Wenzel wrote on :

    Anderson: We run most of our websites off MySQL, which has replication functionality built-in. We change the settings so one database considers itself the master, and all others are slaves that replicate from that master database. If the master goes down (luckily, a rare event) one of the slaves can be “promoted” to become a master then.

  8. Fred Wenzel wrote on :

    Rich: By migrations tool you mean the tool we use to do database migrations? We use a very simple tool named “schematic” that keeps track of what “version” your database has and lets you run arbitrary SQL (and lately: Python) files to change your database schema as you go. There are some (short) docs here that might help you, have you seen them?

  9. Moreno Cunha wrote on :

    Very good news! ^-^
    I can’t wait to check it out.

  10. Anderson wrote on :

    I didn’t know that mysql has all that built-in.
    I was struggling to do a replication on postgres using londiste.

    For the migrations question above…there’s a specific reason why you dont use “south”? Because south seems to be the most used app for these migrations on Django.

    thanks for your answers and your video =].
    I really enjoyed it

  11. Fred Wenzel wrote on :

    We’re not using South by default because in the past, we had problems with it being too “smart” and applying migrations differently between our development instances and staging/production servers. We found that the pain of fixing that was much larger than the work it took to just write (or copy-and-paste) a line or two of SQL.

    That being said, there’s nothing in Playdoh that would keep you from just using South, and in fact you’re more than welcome to.

    As for replication, note that Postgres 9.0 does include “hot” replication out of the box — I haven’t used it before, but I hear it works well.

  12. Anderson wrote on :

    thanks for your answers Fred =]