[Chicago] Prudence

Jon Sudlow jsudlow at gmail.com
Mon Sep 27 20:40:54 CEST 2010


+1 Maybe you and the professor who created Web2Py can get together. This is
exciting.

On Mon, Sep 27, 2010 at 1:09 PM, Daniel Griffin <dgriff1 at gmail.com> wrote:

> So you just push the processing of each request off into a thread pool or
> are you assuming each request is short?
>
> Also, way to write doc that actually explains what this does. This trend of
> people generating pydoc or whatever and thinking they are set is awful.
>
>
>
> On Mon, Sep 27, 2010 at 12:49 PM, Tal Liron <tal.liron at threecrickets.com>wrote:
>
>>  The truth is that non-blocking I/O is not a big deal for web
>> applications. Somewhere at the top, you /always/ have a thread pool. In
>> order to do anything meaningful to generate a page dynamically, you will
>> have a single thread going through some code, which you'll want to release
>> ASAP. A user generates a hit with a browser, and generates a tiny response.
>> Breaking it up to multiple calling threads will not help anything -- it will
>> just create a data synchronization burden for you, which is already
>> considerable in a multi-threaded environment, such as Prudence.
>>
>> When it comes down to it, there are actually very few use cases for pure
>> non-threaded I/O on the Internet: streaming media, or media in general --
>> basically anything /static/. Prudence does have (experimental) support in
>> version 1.0 for something called "deferred conversations," in which you can
>> release the current thread and commit it whenever you feel like it. But ...
>> what kind of user experience is that? The user will be waiting for your web
>> page to return, and meanwhile watch the browser spin. If you have a
>> potentially long request, you are far better off putting something on a task
>> queue, and returning a "please wait" page to the user, which will continue
>> polling your site until it gets a result. Think of something like
>> Travelocity's "searching for you flights" page.
>>
>> I deal with the issue in some depth in the chapter "Scaling Tips" in the
>> Prudence Manual:
>>
>> http://threecrickets.com/prudence/scaling/#toc-Subsection-89
>>
>> Where non-blocking I/O can help a pure web app is: delivering media (if
>> you really want to do it from the same server... not necessarily
>> recommended, but possible), and more graceful handling of failure. In my
>> ideal, Prudence's I/O frontend would be able to talk directly to the caching
>> layer (on the roadmap), but even that is hard to recommend as such a great
>> feature. If the thread pool handling the "dynamic" web pages is saturated,
>> and you're just returning static cached pages to some users, then your
>> application may seem to work, but is in fact quite broken. You haven't
>> solved your scaling problem, just put a bandaid on it.
>>
>> Also, though non-blocking I/O is interesting (and hard to do) it's not
>> even that necessary anymore. Modern kernels (Linux especially) do a fabulous
>> job handling many thousands of rotating threads. If you look at a few of the
>> high-scalability web servers available for Linux, some of the best
>> performing and scaling ones are those based on threads, not async.
>>
>> -Tal
>>
>>
>> On 09/27/2010 10:21 AM, Daniel Griffin wrote:
>>
>>> +1 for something really cool.
>>>
>>> How do you reconcile non-blocking I/O with blocking database calls?
>>>
>>>
>>> On Mon, Sep 27, 2010 at 10:17 AM, Trent Jurewicz <tjurewicz at gmail.com<mailto:
>>> tjurewicz at gmail.com>> wrote:
>>>
>>>    +1 to hear more about prudence in general and the caching layer
>>>    implemented...
>>>
>>>
>>>    On Mon, Sep 27, 2010 at 3:18 AM, Tal Liron
>>>    <tal.liron at threecrickets.com <mailto:tal.liron at threecrickets.com>>
>>>
>>>    wrote:
>>>
>>>
>>>
>>>        Hey ChiPy,
>>>
>>>
>>>        After more than a year of development, I'm happy to announce a
>>>        release candidate for Prudence:
>>>
>>>
>>>        http://threecrickets.com/prudence/
>>>
>>>
>>>        Yes, yet another web development framework for Python. Yawn.
>>>        But this one is a bit different:
>>>
>>>
>>>        1. Embraces the JVM. That means Jython-centric, with some
>>>        limited support for Jepp (real CPython on the JVM, bleh).
>>>
>>>        2. Designed ground-up for REST. Nothing about HTTP is hidden
>>>        from you. You know, HTTP is actually really useful.
>>>
>>>        3. Non-blocking I/O and other adult thinking about concurrency.
>>>
>>>        4. Probably the most sophisticated caching system you've seen
>>>        in a web development platform.
>>>
>>>        5. No data layer -- add your own. The example app uses
>>>        SQLAlchemy. (I have other apps talking to MongoDB.)
>>>
>>>        6. Ready-to-rumble package -- just download, and will run on
>>>        any JVM platform. Tested on Linux, OpenSolaris, OS X and
>>>        Windows. Ubuntu repository FTW.
>>>
>>>
>>>        I'd be happy to give a presentation to ChiPy on "Advanced
>>>        Caching with Prudence". Even if you never use Prudence, you
>>>        might get jealous and try to implement some of these tricks in
>>>        your own platform of choice.
>>>
>>>
>>>        Can I get a +1?
>>>
>>>
>>>        A future presentation could also be about Scripturian, the
>>>        underlying library that makes Jython work well in highly
>>>        concurrent environments. I had to do a lot of hacking in the
>>>        Jython source code, and learn things that no man should have
>>>        to know.
>>>
>>>
>>>        Love,
>>>
>>>        Tal
>>>
>>>        _______________________________________________
>>>        Chicago mailing list
>>>        Chicago at python.org <mailto:Chicago at python.org>
>>>
>>>        http://mail.python.org/mailman/listinfo/chicago
>>>
>>>
>>>
>>>    _______________________________________________
>>>    Chicago mailing list
>>>    Chicago at python.org <mailto:Chicago at python.org>
>>>
>>>    http://mail.python.org/mailman/listinfo/chicago
>>>
>>>
>>>
>>> _______________________________________________
>>> Chicago mailing list
>>> Chicago at python.org
>>> http://mail.python.org/mailman/listinfo/chicago
>>>
>> _______________________________________________
>> Chicago mailing list
>> Chicago at python.org
>> http://mail.python.org/mailman/listinfo/chicago
>>
>
>
> _______________________________________________
> Chicago mailing list
> Chicago at python.org
> http://mail.python.org/mailman/listinfo/chicago
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/chicago/attachments/20100927/f8ad38b1/attachment.html>


More information about the Chicago mailing list