Bindings, Platforms, and Innovation
This presentation focuses on the Internet and separating myth from fact, history from the future, and the mundane from the imaginative. Bob Frankston presents a vision of what could and should be.
Tracking change and innovation in the enterprise software development community
Posted by Scott Delap on Sep 28, 2006 09:06 AM
The Jetty team released version 6 a couple of weeks ago and has also just released version 6.0.1 of the open-source web container. The Jetty 6 code base is a complete rewrite adding such features as Continuations, NIO support, and 2.5 Servlet spec compliance. InfoQ caught up with Jetty lead Greg Wilkins to find out more details on the version 6 product.Jetty 6 is a complete re-write, "adding non-blocking without rearchitecting could be done (and was done to jetty 5), but without architectural change non-blocking cost more than it gained." Greg said. "[It is like a house] ... You try and clean up every so often, but the clutter wins. Finally you give up and move to a new house."
On the new base, many new features have been added, such as Continuations. The cometd implementation and DWR/ActiveMQ integration are both based on continuations. Integrations are key to Jetty with work being done in respect to Spring, Geronimo, Glassfish, and others. The new architecture made adding new features possible with less volitility to the code base. Finally Wilkins noted that the new buffering abstraction is rather key, allowing Jetty to be deployed in byte[] only environments as well as with the lastest JVM's supporting more advanced buffers.
On Jetty's use of NIO in version 6:
Above the connection layer, Jetty is designed as a non-blocking HTTP parser and generator. This has allowed us to use NIO selectors as a non-blocking scheduler.But moreover, the rearchitecture has allowed us to use more of the NIO features. Our buffering abstraction allows direct buffer and file mapped buffers to be used when available and when appropriate. We can use gather writes, to send a header, content and trailer in a single NIO call.
But it is important to realize that we are not NIO dependant and that the new architecture should work equally as well on other IO frameworks: existing or future.
Continuations play a big part in the new server, as Greg had suggested in the past that they solve the needs of modern web 2.0 scalability.
...continuations are a reflection that the needs of scalable web 2.0 cannot be met with the current servlet API.It has always been a challenge to blend the event driven nature of protocols with the desire for procedural application environments. Continuations are a key mechanism for achieving this and Jetty continuations are a subset of a general continuation targeted specifically at suspending and resuming a HTTP request handler.
Suspend and resume are important in web 2.0, because the request handler is often forced to wait: wait for an event to send to the client (eg google chat); wait for a remote WS; wait for JDBC connection; etc.
With web 1.0, most of the waiting was done in the client or in the TCP connector. With web 2.0, most of the waiting is done within the servlet container. Without finding a cheap way to park requests from within the servlet container, web 2.0 can decrease scalability 10 fold.
With Jetty 6 continuations, we have been able to test to 10k simultaneous requests within the servlet container and we have web 2.0 applications that need this.
Wilkins talks a lot about Web 2.0 and believes that it is more than a technical issue:
Web 2.0 developers are pushing the envelope to develop the best, worst and wierdest UIs possible with the HTTP, HTML, javascript and DOM tools we have available.The jetty community embraces that exploration of the possible. The response from some other projects to the issues of web 2.0 has been "That's protocol abuse. Don't do it!". But if you come to the Jetty community with a problem that your web 2.0 app is giving you, we will listen, learn and try to adapt. If you want to do it, we want you to do it with Jetty.
Finally we asked about Wilkins about his new company Webtide. He explained the the company allows them to provide 24x7 commercial support, training, and consulting for Jetty and web 2.0 applications. They also have an extended network of OS developers that allows Webtide to cross support a wide range of technologies. The upcoming Hightide Jetty extension will be the first release from the Webtide initiative.
Download the Free Adobe® Flex® Builder 3 Trial
Adobe® Rich Internet Application Project Portal
Open Source Middleware Reference Architecture Whitepaper
I've long been impressed with the care that goes into Jetty. You can tell it is loved. We're already doing testing on Jetty6 to ensure compatibility, and I'm looking forward to seeing the results. Peace, Cameron Purdy Tangosol Coherence: The Java Data Grid
We're using Jetty 6.x and the maven-jetty-plugin 6.x and it works superb for our purposes. Great work, Jetty-team!
I would love to see a performance comparison between Jetty, Resin, and Tomcat.
I will be speaking at AjaxWorld (3-4 October) in Santa Clara next week about Jetty continuations and I'll be at the OpenAjaxAlliance meeting following that. I'll also be speaking at The Ajax Experience in Boston later in the month and hope to cover more about cometd there. So if you have detailed questions... get me face to face!
Benchmarking servlet containers has always been difficult and even more so with web 2.0. Measuring what I call "straight line speed", which is requests per second over a single connection is not realistic for most load profiles. We Jetty 6, we have concentrated on scaling issues other than straight line speed. For example, we can scale Jetty 6 to 10k simultaneous requests, which is something that most other containers simply can't do, but which is a key use-case for collaborative web 2.0 applications. Our small foot print will also have an effect, but probably only for large applications that will content for CPU cache space - unlike most benchmark apps. So my advice is benchmark your app with realistic load generators and I doubt you will have any complaints about Jetty. But if you do, we are definitely interested in hearing about it and what your load profile is like.
Congratulations to Greg and team! Jetty is a lean mean product, and I'm really pleased to see efforts to push the envelope regarding the Servlet spec. Btw I strongly urge anyone who uses Eclipse to try the Jetty Launcher: it's awesome and unbelievably fast.
Jetty is nice but ajax chat sample freeze on Internet explorer 6. Jetty 6 stable is out, but that bug is still exists.
Anyone know what status the Jetty Launcher has regarding Jetty 6.0.1? It seems it does not recognize the new version.
This presentation focuses on the Internet and separating myth from fact, history from the future, and the mundane from the imaginative. Bob Frankston presents a vision of what could and should be.
This article explores the use of JBoss and jBPM to implement design solutions that effectively address the issue of orchestrating long running activities.
This presentation covers the use of graph databases as an optimal solution for data that is difficult to fit in static tables, rapidly evolving data or data that has a lot of optional attributes.
This session introduces Real Options and shows how it can help in running your project. Real Options is a decision-making process that can be used to manage risk.
This article discusses the use of bindings on services and references (including the instance of non-configured bindings) as the means to implement SCA communications in a Web and SOA environment.
After a short introduction to DSLs, Scott Davis plays with the keyboard showing how to approach the creation of a DSL by typing working snippets of Groovy code that get executed.
IBM Rational and InfoQ present, Scaling Agile with C/ALM, an eBook showing organizations how to become “finely tuned software delivery machines” by enabling team integration and scaling.
Amanda Laucher presents a real life enterprise application written in F#. She shows actual code snippets, explaining design decisions and suggesting how to use some of the F# constructs.
8 comments
Watch Thread Reply