<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>XML</title>
        <link>http://devcentral.f5.com/weblogs/macvittie/category/104.aspx</link>
        <description>All XML-related topics, including SOA, AJAX, and Web 2.0</description>
        <language>en-US</language>
        <copyright>Lori MacVittie</copyright>
        <managingEditor>l.macvittie@f5.com</managingEditor>
        <generator>Subtext Version 1.9.5.176</generator>
        <item>
            <title>Automating scalability and high availability services</title>
            <link>http://devcentral.f5.com/weblogs/macvittie/archive/2008/10/15/automating-scalability-and-high-availability-services.aspx</link>
            <description>&lt;p&gt;There are a lot of SOA governance solutions out there that fall into two distinct categories of purpose: one is to catalog services and associated security policies and the other is to provide run-time management for services, including enforcement of security and performance-focused policies. &lt;/p&gt;  &lt;p&gt;Vendors providing a full "SOA Stack" of functionality across the service lifecycle (design, development, testing, production) often integrate their disparate product sets for a more automated (and thus manageable) SOA infrastructure. But very few integrate those same products and functionality with the underlying network and application delivery infrastructure required to provide high-availability and scalability for those services. &lt;/p&gt;  &lt;p&gt;The question should (and must) be asked: why is that? &lt;/p&gt;  &lt;p&gt;Today's application delivery infrastructure, a.k.a. &lt;a href="http://www.f5.com/products/big-ip"&gt;application delivery controllers and load-balancers&lt;/a&gt;, are generally capable of integration via &lt;a href="http://devcentral.f5.com/iControl"&gt;standards-based APIs&lt;/a&gt;. These APIs provide complete control over the configuration and management of these platforms, making the integration of application delivery platforms with the rest of the SOA eco-system a definite reality. &lt;/p&gt;  &lt;p&gt;Most registry/repository solutions today offer the ability of external applications to subscribe to events. The events vary from platform to platform, but generally include some commonalities such as "artifact published" or "item changed". This means a listening application can subscribe to these events and take appropriate action when an event occurs. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/HowtoautomatescalabilityofSOAservices_A66D/automatingscalability_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 10px 0px 0px; border-right-width: 0px" height="259" alt="automatingscalability" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/HowtoautomatescalabilityofSOAservices_A66D/automatingscalability_thumb.jpg" width="443" align="left" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;1. A new &lt;a href="http://www.w3.org/TR/wsdl"&gt;WSDL&lt;/a&gt; describing a service interface (hosted in the service application infrastructure) is published. &lt;/p&gt;  &lt;p&gt;2. The listening application is notified of the event and retrieves the new or modified WSDL. &lt;/p&gt;  &lt;p&gt;3. The application parses the WSDL and determines the appropriate endpoint information, then automatically configures the &lt;a href="http://www.f5.com/products/big-ip"&gt;application delivery controller&lt;/a&gt; to (a) virtualize the service and (b) load balance requests across applicable servers. &lt;/p&gt;  &lt;p&gt;4. The application delivery controller begins automatically load-balancing service requests and providing high-availability and scalability services. &lt;/p&gt;  &lt;p&gt;There's some information missing that has to be supplied either via discovery, policy, or manual configuration. That's beyond the scope of this post, but would certainly be a part of the controlling application. &lt;/p&gt;  &lt;p&gt;Conceptually, as long as you have (a) a service-enabled application delivery controller and (b) an application capable of listening for events in the SOA registry/repository, you can automate the process of provisioning high-availability and scalability services for those SOA services. &lt;/p&gt;  &lt;p&gt;If you combine this with the &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/09/30/how-to-instrument-your-java-ee-applications-for-a-virtualized.aspx"&gt;ability to integrate application delivery control into the application&lt;/a&gt; itself, you can provide an even more agile, dynamic application delivery infrastructure than if you just used one concept or the other. And when you get right down to it, this doesn't just work for SOA, it could easily work just as well for any application framework, given the right integration. &lt;/p&gt;  &lt;p&gt;There already exist &lt;a href="http://www.f5.com/solutions/technology-alliances/management/amberpoint.html"&gt;some integration of application delivery infrastructure with SOA governance solutions&lt;/a&gt;, like &lt;a href="http://www.amberpoint.com"&gt;AmberPoint&lt;/a&gt;, but there could be more. There could be custom solutions for your unique architecture as well, given that the technology exists to build it. &lt;/p&gt;  &lt;p&gt;The question is, why aren't folks leveraging this integration capability to support initiatives like SOA and cloud computing that require a high level of agility and extensibility and upon which the ROI depends at least partially on the ability to reduce management costs and length of deployment cycles through automation? &lt;/p&gt;  &lt;p&gt;It's true that there seems to be an increasing awareness of the &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/07/10/3438.aspx"&gt;importance of application delivery infrastructure to architecting a scalable, highly available cloud computing environment&lt;/a&gt;. But we never really managed to focus on the importance of an agile, reusable, intelligent application delivery infrastructure to the success of SOA. &lt;/p&gt;  &lt;p&gt;Maybe it's time we backtrack a bit and do so, because many of the same &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/09/17/3622.aspx"&gt;architectural and performance issues&lt;/a&gt; that will arise in the cloud due to poor choices in application delivery infrastructure are the same as those that adversely impact SOA implementations. &lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2" width="316" border="0"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td style="color: white; background-color: #990000" valign="top" width="314"&gt;&lt;strong&gt;Related Links&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="border-right: #990000 1px solid; border-top: #990000 1px solid; border-left: #990000 1px solid; border-bottom: #990000 1px solid" width="314"&gt;         &lt;p&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/08/19/3548.aspx"&gt;Why can't clouds be inside (the data center)?&lt;/a&gt;&lt;/p&gt;          &lt;p&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/09/09/3600.aspx"&gt;Governance in the Cloud&lt;/a&gt;&lt;/p&gt;          &lt;p&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/08/18/3544.aspx"&gt;Reliability does not come from SOA Governance&lt;/a&gt;&lt;/p&gt;          &lt;p&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/09/18/3627.aspx"&gt;Building a Cloudbursting Capable Infrastructure&lt;/a&gt;&lt;/p&gt;          &lt;p&gt;&lt;a href="http://seekingalpha.com/article/99652-the-next-tech-boom-infrastructure-2-0"&gt;The Next Tech Boom: Infrastructure 2.0&lt;/a&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&lt;a href="http://twitter.com/lmacvittie"&gt;&lt;img height="18" alt="Follow me on Twitter" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_twitt-twoo-icon.png" width="18" border="0" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/Rss.aspx"&gt;&lt;img src="http://devcentral.f5.com/Portals/0/images/Icons/icon_xml_18.gif" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.slideshare.net/lmacvittie"&gt;&lt;img height="18" alt="View Lori's profile on SlideShare" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_slideshare.png" width="18" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lmacvittie.tumblr.com" border="0"&gt;&lt;img title="Follow me on Tumblr" height="18" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_tumblr.gif" width="18" border="0" /&gt;&lt;/a&gt; &lt;a href="http://lmacvittie.posterous.com/"&gt;&lt;img title="Posterous" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_posterous.png" border="0" /&gt;&lt;/a&gt; &lt;a href="http://www.linkedin.com/in/lmacvittie"&gt;&lt;img src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_linkedin_16.png" border="0" /&gt;&lt;/a&gt; &lt;a title="Subscribe using any feed reader!" href="http://www.addthis.com/feed.php?pub=lmacvittie&amp;amp;h1=http%3A%2F%2Fdevcentral.f5.com%2Fweblogs%2Fmacvittie%2FRss.aspx&amp;amp;t1="&gt;&lt;img height="18" alt="AddThis Feed Button" src="http://s9.addthis.com/button1-fd.gif" width="125" border="0" /&gt;&lt;/a&gt; &lt;a title="Bookmark and Share" onclick="window.open('http://www.addthis.com/bookmark.php?wt=nw&amp;amp;pub=lmacvittie&amp;amp;url='+encodeURIComponent(location.href)+'&amp;amp;title='+encodeURIComponent(document.title), 'addthis', 'scrollbars=yes,menubar=no,width=620,height=520,resizable=yes,toolbar=no,location=no,status=no,screenX=200,screenY=100,left=200,top=100'); return false;" href="http://www.addthis.com/bookmark.php" target="_blank"&gt;&lt;img height="18" alt="Bookmark and Share" src="http://s9.addthis.com/button1-share.gif" width="125" border="0" /&gt;&lt;/a&gt;&lt;script src="http://track.mybloglog.com/js/jsserv.php?mblID=2008070914270355" type="text/javascript"&gt;&lt;/script&gt;&lt;script src="http://feeds.feedburner.com/~s/f5/XOwx" type="text/javascript" charset="utf-8"&gt;&lt;/script&gt;&lt;script src="http://feeds.feedburner.com/~d/static/site-tracker.js" type="text/javascript" charset="utf-8"&gt;&lt;/script&gt;&lt;script src="http://feeds.feedburner.com/~d/static/site-tracker.js" type="text/javascript" charset="utf-8"&gt;&lt;/script&gt; &lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:354505f7-b63a-465a-b31e-67d4445e735e" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/MacVittie" rel="tag"&gt;MacVittie&lt;/a&gt;,&lt;a href="http://technorati.com/tags/F5" rel="tag"&gt;F5&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SOA" rel="tag"&gt;SOA&lt;/a&gt;,&lt;a href="http://technorati.com/tags/cloud%20computing" rel="tag"&gt;cloud computing&lt;/a&gt;,&lt;a href="http://technorati.com/tags/governance" rel="tag"&gt;governance&lt;/a&gt;,&lt;a href="http://technorati.com/tags/iControl" rel="tag"&gt;iControl&lt;/a&gt;,&lt;a href="http://technorati.com/tags/automation" rel="tag"&gt;automation&lt;/a&gt;,&lt;a href="http://technorati.com/tags/virtualization" rel="tag"&gt;virtualization&lt;/a&gt;,&lt;a href="http://technorati.com/tags/application%20delivery" rel="tag"&gt;application delivery&lt;/a&gt;,&lt;a href="http://technorati.com/tags/web%20services" rel="tag"&gt;web services&lt;/a&gt;,&lt;a href="http://technorati.com/tags/internet" rel="tag"&gt;internet&lt;/a&gt;,&lt;a href="http://technorati.com/tags/web" rel="tag"&gt;web&lt;/a&gt;,&lt;a href="http://technorati.com/tags/infrastructure" rel="tag"&gt;infrastructure&lt;/a&gt;&lt;/div&gt;&lt;div class='blogtags'&gt;&lt;/div&gt;&lt;img src="http://devcentral.f5.com/weblogs/macvittie/aggbug/3713.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lori MacVittie</dc:creator>
            <guid>http://devcentral.f5.com/weblogs/macvittie/archive/2008/10/15/automating-scalability-and-high-availability-services.aspx</guid>
            <pubDate>Wed, 15 Oct 2008 12:37:16 GMT</pubDate>
            <wfw:comment>http://devcentral.f5.com/weblogs/macvittie/comments/3713.aspx</wfw:comment>
            <comments>http://devcentral.f5.com/weblogs/macvittie/archive/2008/10/15/automating-scalability-and-high-availability-services.aspx#feedback</comments>
            <wfw:commentRss>http://devcentral.f5.com/weblogs/macvittie/comments/commentRss/3713.aspx</wfw:commentRss>
            <trackback:ping>http://devcentral.f5.com/weblogs/macvittie/services/trackbacks/3713.aspx</trackback:ping>
        </item>
        <item>
            <title>Silverlight 2.0 released, support for Eclipse included</title>
            <link>http://devcentral.f5.com/weblogs/macvittie/archive/2008/10/14/silverlight-2.0-released-support-for-eclipse-included.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://oreilly.com/catalog/9780596526733/"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="132" alt="XAML-Cover" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/Silverlight2.0Released_B73D/XAML-Cover_3.jpg" width="132" align="left" border="0" /&gt;&lt;/a&gt;&lt;a href="http://silverlight.net/" target="_blank"&gt;Silverlight&lt;/a&gt;, &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/06/09/3343.aspx" target="_blank"&gt;if you recall&lt;/a&gt;, appears to be &lt;a href="http://www.microsoft.com" target="_blank"&gt;Microsoft's&lt;/a&gt; answer to &lt;a href="http://www.adobe.com" target="_blank"&gt;Adobe's&lt;/a&gt; &lt;a href="http://www.adobe.com/products/air/" target="_blank"&gt;AIR&lt;/a&gt; platform. &lt;/p&gt;  &lt;p&gt;Microsoft released Silverlight 2.0 today, as expected. Part of the big exciting news is that you can now &lt;a href="http://www.eclipse4sl.org/"&gt;code up Silverlight applications in Eclipse&lt;/a&gt;. Yeah, not kidding. I know, you just hit weather.com too and checked to see what the temperature was. But seriously, Microsoft is fully supportive of the Eclipse environment for Silverlight despite its own support with its own free tool, &lt;a href="http://www.microsoft.com/express/vwd/"&gt;Visual Web Developer Express&lt;/a&gt;. I haven't checked out the Eclipse version yet, so I'll be interested to see it and hear how well it competes with Visual Web Developer Express (which would admittedly be hard to do) in terms of developing with XAML. &lt;/p&gt;  &lt;p&gt;You can read many of the juicy tips and find all the relevant links about the new version at &lt;a href="http://www.hanselman.com/blog/Silverlight2IsOut.aspx" target="_blank"&gt;Scott Hanselman's always excellent blog&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Need to learn &lt;a href="http://msdn.microsoft.com/en-us/library/ms788723.aspx" target="_blank"&gt;XAML&lt;/a&gt; so you can make the most of Silverlight and get creating some cool apps? &lt;/p&gt;  &lt;p&gt;Are you going to be at &lt;a href="http://www.drdobbs.com/" target="_blank"&gt;Dr. Dobb's&lt;/a&gt; &lt;a href="http://www.sdbestpractices.com/" target="_blank"&gt;SD Best Practices&lt;/a&gt;? &lt;/p&gt;  &lt;p&gt;If you are, stop by the &lt;a href="http://www.f5.com" target="_blank"&gt;F5&lt;/a&gt; booth and score a signed copy of &lt;a href="http://oreilly.com/catalog/9780596526733/" target="_blank"&gt;XAML in a Nutshell&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;And then ask us how we can secure, scale, and deliver Silverlight/XAML-based applications. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://twitter.com/lmacvittie"&gt;&lt;img height="18" alt="Follow me on Twitter" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_twitt-twoo-icon.png" width="18" border="0" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/Rss.aspx"&gt;&lt;img src="http://devcentral.f5.com/Portals/0/images/Icons/icon_xml_18.gif" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.slideshare.net/lmacvittie"&gt;&lt;img height="18" alt="View Lori's profile on SlideShare" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_slideshare.png" width="18" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lmacvittie.tumblr.com" border="0"&gt;&lt;img title="Follow me on Tumblr" height="18" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_tumblr.gif" width="18" border="0" /&gt;&lt;/a&gt; &lt;a href="http://lmacvittie.posterous.com/"&gt;&lt;img title="Posterous" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_posterous.png" border="0" /&gt;&lt;/a&gt; &lt;a href="http://www.linkedin.com/in/lmacvittie"&gt;&lt;img src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_linkedin_16.png" border="0" /&gt;&lt;/a&gt; &lt;a title="Subscribe using any feed reader!" href="http://www.addthis.com/feed.php?pub=lmacvittie&amp;amp;h1=http%3A%2F%2Fdevcentral.f5.com%2Fweblogs%2Fmacvittie%2FRss.aspx&amp;amp;t1="&gt;&lt;img height="18" alt="AddThis Feed Button" src="http://s9.addthis.com/button1-fd.gif" width="125" border="0" /&gt;&lt;/a&gt; &lt;a title="Bookmark and Share" onclick="window.open('http://www.addthis.com/bookmark.php?wt=nw&amp;amp;pub=lmacvittie&amp;amp;url='+encodeURIComponent(location.href)+'&amp;amp;title='+encodeURIComponent(document.title), 'addthis', 'scrollbars=yes,menubar=no,width=620,height=520,resizable=yes,toolbar=no,location=no,status=no,screenX=200,screenY=100,left=200,top=100'); return false;" href="http://www.addthis.com/bookmark.php" target="_blank"&gt;&lt;img height="18" alt="Bookmark and Share" src="http://s9.addthis.com/button1-share.gif" width="125" border="0" /&gt;&lt;/a&gt;&lt;script src="http://track.mybloglog.com/js/jsserv.php?mblID=2008070914270355" type="text/javascript"&gt;&lt;/script&gt;&lt;script src="http://feeds.feedburner.com/~s/f5/XOwx" type="text/javascript" charset="utf-8"&gt;&lt;/script&gt;&lt;script src="http://feeds.feedburner.com/~d/static/site-tracker.js" type="text/javascript" charset="utf-8"&gt;&lt;/script&gt; &lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:43a35a7b-da93-46a9-903b-54e5d7aab96d" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/MacVittie" rel="tag"&gt;MacVittie&lt;/a&gt;,&lt;a href="http://technorati.com/tags/f5" rel="tag"&gt;f5&lt;/a&gt;,&lt;a href="http://technorati.com/tags/dr.%20dobbs" rel="tag"&gt;dr. dobbs&lt;/a&gt;,&lt;a href="http://technorati.com/tags/sd%20best%20practices" rel="tag"&gt;sd best practices&lt;/a&gt;,&lt;a href="http://technorati.com/tags/adobe%20Flash" rel="tag"&gt;adobe Flash&lt;/a&gt;,&lt;a href="http://technorati.com/tags/microsoft" rel="tag"&gt;microsoft&lt;/a&gt;,&lt;a href="http://technorati.com/tags/silverlight" rel="tag"&gt;silverlight&lt;/a&gt;,&lt;a href="http://technorati.com/tags/adobe%20AIR" rel="tag"&gt;adobe AIR&lt;/a&gt;,&lt;a href="http://technorati.com/tags/XAML" rel="tag"&gt;XAML&lt;/a&gt;,&lt;a href="http://technorati.com/tags/XML" rel="tag"&gt;XML&lt;/a&gt;,&lt;a href="http://technorati.com/tags/visual%20web%20developer%20express" rel="tag"&gt;visual web developer express&lt;/a&gt;,&lt;a href="http://technorati.com/tags/security" rel="tag"&gt;security&lt;/a&gt;,&lt;a href="http://technorati.com/tags/scalability" rel="tag"&gt;scalability&lt;/a&gt;,&lt;a href="http://technorati.com/tags/application%20delivery" rel="tag"&gt;application delivery&lt;/a&gt;,&lt;a href="http://technorati.com/tags/developers" rel="tag"&gt;developers&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Scott%20Hanselman" rel="tag"&gt;Scott Hanselman&lt;/a&gt;,&lt;a href="http://technorati.com/tags/oreilly" rel="tag"&gt;oreilly&lt;/a&gt;,&lt;a href="http://technorati.com/tags/XAML%20in%20a%20Nutshell" rel="tag"&gt;XAML in a Nutshell&lt;/a&gt;&lt;/div&gt;&lt;div class='blogtags'&gt;&lt;/div&gt;&lt;img src="http://devcentral.f5.com/weblogs/macvittie/aggbug/3712.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lori MacVittie</dc:creator>
            <guid>http://devcentral.f5.com/weblogs/macvittie/archive/2008/10/14/silverlight-2.0-released-support-for-eclipse-included.aspx</guid>
            <pubDate>Tue, 14 Oct 2008 20:19:08 GMT</pubDate>
            <wfw:comment>http://devcentral.f5.com/weblogs/macvittie/comments/3712.aspx</wfw:comment>
            <comments>http://devcentral.f5.com/weblogs/macvittie/archive/2008/10/14/silverlight-2.0-released-support-for-eclipse-included.aspx#feedback</comments>
            <wfw:commentRss>http://devcentral.f5.com/weblogs/macvittie/comments/commentRss/3712.aspx</wfw:commentRss>
            <trackback:ping>http://devcentral.f5.com/weblogs/macvittie/services/trackbacks/3712.aspx</trackback:ping>
        </item>
        <item>
            <title>How Microsoft is bursting into the cloud with BizTalk</title>
            <link>http://devcentral.f5.com/weblogs/macvittie/archive/2008/10/06/how-microsoft-is-bursting-into-the-cloud-with-biztalk.aspx</link>
            <description>&lt;table cellspacing="0" cellpadding="5" width="762" border="0"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="535"&gt;&lt;a href="http://blogs.msdn.com/darrenj/default.aspx" target="_blank"&gt;Darren Jefford&lt;/a&gt; has an &lt;a href="http://blogs.msdn.com/darrenj/archive/2008/10/02/software-in-the-cloud-cloud-workflow.aspx" target="_blank"&gt;excellent (and detailed with code examples) post &lt;/a&gt;&lt;/td&gt;        &lt;td style="color: white; background-color: #990000" valign="top" align="center" width="226"&gt;&lt;strong&gt;Related Posts&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="535"&gt;&lt;a href="http://blogs.msdn.com/darrenj/archive/2008/10/02/software-in-the-cloud-cloud-workflow.aspx" target="_blank"&gt;regarding&lt;/a&gt; what could easily be categorized as cloudbursting with &lt;a href="http://www.microsoft.com/biztalk/" target="_blank"&gt;BizTalk&lt;/a&gt; workflows.           &lt;br /&gt;          &lt;br /&gt;In a nutshell, &lt;a href="http://www.microsoft.com" target="_blank"&gt;Microsoft&lt;/a&gt; allows hosting of BizTalk activities in the cloud at &lt;a href="http://biztalk.net/" target="_blank"&gt;BizTalk labs&lt;/a&gt;. Developers then integrate those cloud hosted activities into a BizTalk workflow (orchestration) by calling them as they would any other web-based service or hosted activity.           &lt;br /&gt;          &lt;br /&gt;In doing so, Microsoft is essentially allowing developers to extend the compute capacity of their data centers by leveraging the much larger data centers maintained by Microsoft. &lt;/td&gt;        &lt;td style="border-right: #990000 1px solid; padding-right: 5px; border-top: #990000 1px solid; padding-left: 5px; padding-bottom: 5px; border-left: #990000 1px solid; padding-top: 5px; border-bottom: #990000 1px solid" valign="top" width="226"&gt;         &lt;p&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/09/17/3622.aspx" target="_blank"&gt;The Three "Itys" of Cloud Computing&lt;/a&gt;&lt;/p&gt;          &lt;p&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/09/03/3584.aspx" target="_blank"&gt;Bursting the Cloud&lt;/a&gt;&lt;/p&gt;         &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/09/18/3627.aspx" target="_blank"&gt;Building a cloudbursting capable infrastructure&lt;/a&gt;           &lt;br /&gt;          &lt;br /&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/07/10/3438.aspx" target="_blank"&gt;4 things you need in a cloud computing infrastructure&lt;/a&gt; &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;table cellspacing="0" cellpadding="2" width="760" border="0"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td style="color: white; background-color: #990000" valign="top" align="center" width="229"&gt;&lt;strong&gt;What is an activity?&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="527"&gt; &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td style="border-right: #990000 1px solid; padding-right: 5px; border-top: #990000 1px solid; padding-left: 5px; padding-bottom: 5px; border-left: #990000 1px solid; padding-top: 5px; border-bottom: #990000 1px solid" valign="top" width="229"&gt;An activity is a discrete step in a business process (workflow). Activities range from calling a remote service to perform a task, e.g. calculating taxes, performing currency conversions, looking up inventory, to custom-defined services.          &lt;br /&gt;          &lt;br /&gt;Activities are orchestrated together together a workflow in BizTalk using XOML (eXtensible Object Markup Language).           &lt;br /&gt;          &lt;br /&gt;In other BPM (Business Process Management) solutions, activities are orchestrated using &lt;a href="http://www.oasis-open.org/committees/wsbpel/" target="_blank"&gt;BPEL&lt;/a&gt; (Business Process Execution Language).           &lt;br /&gt;          &lt;br /&gt;Both XOML and BPEL are XML-based markup languages used for orchestrating workflows.           &lt;br /&gt;          &lt;br /&gt;BPEL is an industry standard; XOML is Microsoft's propriety solution.&lt;/td&gt;        &lt;td valign="top" width="527"&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/MicrosoftalreadycloudburstingBizTalkwork_4D77/biztalk-cloudbursting_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="462" alt="biztalk-cloudbursting" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/MicrosoftalreadycloudburstingBizTalkwork_4D77/biztalk-cloudbursting_thumb.jpg" width="504" border="0" /&gt;&lt;/a&gt;           &lt;br /&gt;&lt;em&gt;      How Microsoft BizTalk workflows take advantage of cloud-based activities&lt;/em&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;While the first definitions of cloudbursting are focused on reactive capacity management, Microsoft appears to be taking a proactive approach to cloudbursting and capacity management. By encouraging developers to utilize the compute capacity of BizTalk labs up front during the design and development process, it alleviates the need to react hastily later when it becomes apparent that more compute resources are necessary for a specific workflow activity. &lt;/p&gt;  &lt;p&gt;The concept remains the same: utilize the cloud for additional capacity when it is apparent your own data center can't handle the load and it is cost-prohibitive to invest in additional servers and infrastructure to increase capacity. &lt;/p&gt;  &lt;p&gt;One can easily imagine that future offerings might include the ability of other organizations to subscribe to and use activities developed by third-parties, essentially offering yet another path to monetize the cloud. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://twitter.com/lmacvittie"&gt;&lt;img height="18" alt="Follow me on Twitter" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_twitt-twoo-icon.png" width="18" border="0" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/Rss.aspx"&gt;&lt;img src="http://devcentral.f5.com/Portals/0/images/Icons/icon_xml_18.gif" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.slideshare.net/lmacvittie"&gt;&lt;img height="18" alt="View Lori's profile on SlideShare" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_slideshare.png" width="18" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lmacvittie.tumblr.com" border="0"&gt;&lt;img title="Follow me on Tumblr" height="18" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_tumblr.gif" width="18" border="0" /&gt;&lt;/a&gt; &lt;a href="http://lmacvittie.posterous.com/"&gt;&lt;img title="Posterous" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_posterous.png" border="0" /&gt;&lt;/a&gt; &lt;a href="http://www.linkedin.com/in/lmacvittie"&gt;&lt;img src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_linkedin_16.png" border="0" /&gt;&lt;/a&gt; &lt;a title="Subscribe using any feed reader!" href="http://www.addthis.com/feed.php?pub=lmacvittie&amp;amp;h1=http%3A%2F%2Fdevcentral.f5.com%2Fweblogs%2Fmacvittie%2FRss.aspx&amp;amp;t1="&gt;&lt;img height="18" alt="AddThis Feed Button" src="http://s9.addthis.com/button1-fd.gif" width="125" border="0" /&gt;&lt;/a&gt; &lt;a title="Bookmark and Share" onclick="window.open('http://www.addthis.com/bookmark.php?wt=nw&amp;amp;pub=lmacvittie&amp;amp;url='+encodeURIComponent(location.href)+'&amp;amp;title='+encodeURIComponent(document.title), 'addthis', 'scrollbars=yes,menubar=no,width=620,height=520,resizable=yes,toolbar=no,location=no,status=no,screenX=200,screenY=100,left=200,top=100'); return false;" href="http://www.addthis.com/bookmark.php" target="_blank"&gt;&lt;img height="18" alt="Bookmark and Share" src="http://s9.addthis.com/button1-share.gif" width="125" border="0" /&gt;&lt;/a&gt;&lt;script src="http://track.mybloglog.com/js/jsserv.php?mblID=2008070914270355" type="text/javascript"&gt;&lt;/script&gt;&lt;script src="http://feeds.feedburner.com/~s/f5/XOwx" type="text/javascript" charset="utf-8"&gt;&lt;/script&gt;&lt;script src="http://feeds.feedburner.com/~d/static/site-tracker.js" type="text/javascript" charset="utf-8"&gt;&lt;/script&gt;&lt;script src="http://feeds.feedburner.com/~d/static/site-tracker.js" type="text/javascript" charset="utf-8"&gt;&lt;/script&gt;&lt;script src="http://feeds.feedburner.com/~d/static/site-tracker.js" type="text/javascript" charset="utf-8"&gt;&lt;/script&gt; &lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:857c00de-0936-42d9-b168-522754e636f1" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/MacVittie" rel="tag"&gt;MacVittie&lt;/a&gt;,&lt;a href="http://technorati.com/tags/F5" rel="tag"&gt;F5&lt;/a&gt;,&lt;a href="http://technorati.com/tags/cloud%20computing%20infrastructure" rel="tag"&gt;cloud computing infrastructure&lt;/a&gt;,&lt;a href="http://technorati.com/tags/cloudbursting" rel="tag"&gt;cloudbursting&lt;/a&gt;,&lt;a href="http://technorati.com/tags/BizTalk" rel="tag"&gt;BizTalk&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Microsoft" rel="tag"&gt;Microsoft&lt;/a&gt;,&lt;a href="http://technorati.com/tags/BPEL" rel="tag"&gt;BPEL&lt;/a&gt;,&lt;a href="http://technorati.com/tags/BPM" rel="tag"&gt;BPM&lt;/a&gt;,&lt;a href="http://technorati.com/tags/workflow" rel="tag"&gt;workflow&lt;/a&gt;,&lt;a href="http://technorati.com/tags/XOML" rel="tag"&gt;XOML&lt;/a&gt;,&lt;a href="http://technorati.com/tags/cloud%20computing" rel="tag"&gt;cloud computing&lt;/a&gt;,&lt;a href="http://technorati.com/tags/internet" rel="tag"&gt;internet&lt;/a&gt;,&lt;a href="http://technorati.com/tags/web" rel="tag"&gt;web&lt;/a&gt;&lt;/div&gt;&lt;div class='blogtags'&gt;&lt;/div&gt;&lt;img src="http://devcentral.f5.com/weblogs/macvittie/aggbug/3684.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lori MacVittie</dc:creator>
            <guid>http://devcentral.f5.com/weblogs/macvittie/archive/2008/10/06/how-microsoft-is-bursting-into-the-cloud-with-biztalk.aspx</guid>
            <pubDate>Mon, 06 Oct 2008 10:29:05 GMT</pubDate>
            <wfw:comment>http://devcentral.f5.com/weblogs/macvittie/comments/3684.aspx</wfw:comment>
            <comments>http://devcentral.f5.com/weblogs/macvittie/archive/2008/10/06/how-microsoft-is-bursting-into-the-cloud-with-biztalk.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://devcentral.f5.com/weblogs/macvittie/comments/commentRss/3684.aspx</wfw:commentRss>
            <trackback:ping>http://devcentral.f5.com/weblogs/macvittie/services/trackbacks/3684.aspx</trackback:ping>
        </item>
        <item>
            <title>Why it's so hard to secure JavaScript</title>
            <link>http://devcentral.f5.com/weblogs/macvittie/archive/2008/09/12/3609.aspx</link>
            <description>&lt;table cellspacing="0" cellpadding="2" width="731" border="0"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="502"&gt;         &lt;p&gt;The &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/09/11/3605.aspx"&gt;discussion yesterday on JavaScript and security&lt;/a&gt; got me thinking about why it is that there are no good options other than script management add-ons like &lt;a href="http://noscript.net/"&gt;NoScript&lt;/a&gt; for securing JavaScript. &lt;/p&gt;          &lt;p&gt;In a compiled language there may be multiple ways to write a loop, but the underlying object code generated is the same. A loop is a loop, regardless of how it's represented in the language. Security products that insert shims into the stack, run as a proxy on the server, or reside in the network can look for anomalies in that object code. This is the basis for many types of network security - IDS, IPS, AVS, intelligent firewalls. They look for anomalies in signatures and if they find one they consider it a threat.&lt;/p&gt;          &lt;p&gt;While the execution of a loop in an interpreted language is also the same regardless of how it's represented, it &lt;em&gt;looks &lt;/em&gt;different to security devices because it's often text-based as is the case with JavaScript and XML. There are only two good options for externally applying security to languages that are interpreted on the client: pattern matching/regex and parsing. &lt;/p&gt;          &lt;p&gt;Pattern matching and regular expressions provide minimal value for securing client-side interpreted languages, at best, because of the incredibly high number of possible combinations of putting together code. &lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top" width="228"&gt;         &lt;p&gt;&lt;strong&gt;      Where's F5?&lt;/strong&gt; &lt;/p&gt;          &lt;ul&gt;           &lt;li&gt;&lt;a href="http://www.vmworld.com"&gt;VMWorld&lt;/a&gt;               &lt;br /&gt;Sept 15-18 in Las Vegas &lt;/li&gt;            &lt;li&gt;&lt;a href="http://storagedecisions.techtarget.com/newyork"&gt;Storage Decisions&lt;/a&gt;               &lt;br /&gt;Sept 23-24 in New York &lt;/li&gt;            &lt;li&gt;&lt;a href="http://www.networld.com/events"&gt;Networld IT Roadmap&lt;/a&gt;               &lt;br /&gt;Sept 23 in Dallas &lt;/li&gt;            &lt;li&gt;&lt;a href="http://www.oracle.com/openworld/2008/"&gt;Oracle Open World&lt;/a&gt;               &lt;br /&gt;Sept 21-25 in San Francisco &lt;/li&gt;            &lt;li&gt;&lt;a href="http://www.snwusa.com/"&gt;Storage Networking World&lt;/a&gt;               &lt;br /&gt;Oct 13-16 in Dallas &lt;/li&gt;            &lt;li&gt;&lt;a href="http://www.storage-expo.com/"&gt;Storage Expo 2008 UK&lt;/a&gt;               &lt;br /&gt;Oct 15-16 in London &lt;/li&gt;            &lt;li&gt;&lt;a href="http://www.snweurope.com/"&gt;Storage Networking World&lt;/a&gt;               &lt;br /&gt;Oct 27-29 in Frankfurt &lt;/li&gt;         &lt;/ul&gt;                     &lt;a href="http://www.new.facebook.com/pages/Seattle-WA/F5-Networks/19466599085"&gt;&lt;img title="F5 on Facebook" height="32" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_icon_facebook.png" width="32" border="0" /&gt;&lt;/a&gt; &lt;a href="http://twitter.com/f5networks"&gt;&lt;img title="Follow F5 on Twitter" height="32" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_twitt-twoo-icon.png" width="32" border="0" /&gt;&lt;/a&gt;&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;As we learned from preventing &lt;a href="http://www.f5.com/pdf/white-papers/sql-injection-detection-wp.pdf"&gt;SQL injection&lt;/a&gt; and &lt;a href="http://www.f5.com/pdf/white-papers/xss-evasion-wp.pdf"&gt;XSS&lt;/a&gt;, attackers are easily able to avoid detection by these systems by simply adding white space, removing white space, using encoding tricks, and just generally finding a new permutation of their code. &lt;/p&gt;  &lt;p&gt;Parsing is, of course, the best answer. As &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/09/11/3605.aspx#404115"&gt;7rans noted yesterday&lt;/a&gt; regarding the &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/09/11/3605.aspx"&gt;Billion More Laughs JavaScript hack&lt;/a&gt;, if you control the stack, you control the execution of the code. Similarly, if you parse the data you can get it into a format more akin to that of a compiled language and then you can secure it. That's the reasoning behind XML threat defense, or &lt;a href="http://www.f5.com/products/big-ip/product-modules/application-security-manager.html"&gt;XML firewalls&lt;/a&gt;. In fact, all SOA and XML security devices necessarily parse the XML they are protecting - because that's the only way to know whether or not some typical XML attacks, like the Billion Laughs attack, are present. &lt;/p&gt;  &lt;p&gt;But this implementation comes at a price: &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2007/02/12/2735.aspx"&gt;performance&lt;/a&gt;. Parsing XML is compute intensive, and it necessarily adds latency. Every device you add into the delivery path that must parse the XML to route it, secure it, or transform it &lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/Theimpactofsecurityofinterpretedlanguage_32A5/failed-security.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; margin: 10px 10px 0px 0px; border-left: 0px; border-bottom: 0px" height="240" alt="failed-security" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/Theimpactofsecurityofinterpretedlanguage_32A5/failed-security_thumb.jpg" width="208" align="left" border="0" /&gt;&lt;/a&gt;adds latency and increases response time, which decreases overall application performance. This is one of the primary reasons most XML-focused solutions prefer to use a &lt;em&gt;streaming parser&lt;/em&gt;. Streaming parser performance is much better than a full DOM parser, and still provides the opportunity to validate the XML and find malicious code. It isn't a panacea, however, as there are still some situations where streaming can't be used - primarily when transformation is involved. &lt;/p&gt;  &lt;p&gt;We know this already, and also know that JavaScript and client-side interpreted languages in general are far more prolific than XML. Parsing JavaScript externally to determine whether it contains malicious code would certainly make it more secure, but it would also likely severely impact application performance - and not in a good way. We also know that streaming JavaScript isn't a solution because unlike an XML document, JavaScript is not confined. JavaScript is delimited, certainly, but it isn't confined to just being in the HEAD of an HTML document. It can be &lt;em&gt;anywhere &lt;/em&gt;in the document, and often is. &lt;/p&gt;  &lt;p&gt;Worse, JavaScript can self-modify at run-time - and often does. That means that the security threat may not be in the syntax or the code when it's delivered to the client, but it might appear once the script is executed. Not only would an intermediate security device need to parse the JavaScript, it would need to execute it in order to properly secure it. &lt;/p&gt;  &lt;p&gt;While almost all web &lt;a href="http://www.f5.com/solutions/security/"&gt;application security&lt;/a&gt; solutions - &lt;a href="http://www.f5.com/products/big-ip/product-modules/application-security-manager.html"&gt;ours included&lt;/a&gt; - are capable of finding specific attacks like XSS and SQL injection that are hidden within JavaScript, none are able to detect and prevent JavaScript code-based exploits unless they can be identified by a specific signature or pattern. And as we've just established, that's no guarantee the exploits won't morph and change as soon as they can be prevented. &lt;/p&gt;  &lt;p&gt;That's why browser add-ons like NoScript are so popular. Because JavaScript security today is binary: allow or deny. Period. There's no real in between. There is no JavaScript proxy that parses and rejects malicious script, no solution that proactively scans JavaScript for code-based exploits, no external answer to the problem. That means we have to rely on the browser developers to not only write a good browser with all the bells and whistles we like, but for security, as well. &lt;/p&gt;  &lt;p&gt;I am not aware of any security solution that currently parses out JavaScript before it's delivered to the client. If there are any out there, I'd love to hear about them. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://twitter.com/lmacvittie"&gt;&lt;img height="18" alt="Follow me on Twitter" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_twitt-twoo-icon.png" width="18" border="0" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/Rss.aspx"&gt;&lt;img src="http://devcentral.f5.com/Portals/0/images/Icons/icon_xml_18.gif" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.slideshare.net/lmacvittie"&gt;&lt;img height="18" alt="View Lori's profile on SlideShare" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_slideshare.png" width="18" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lmacvittie.tumblr.com" border="0"&gt;&lt;img title="Follow me on Tumblr" height="18" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_tumblr.gif" width="18" border="0" /&gt;&lt;/a&gt; &lt;a href="http://lmacvittie.posterous.com/"&gt;&lt;img title="Posterous" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_posterous.png" border="0" /&gt;&lt;/a&gt; &lt;a href="http://www.linkedin.com/in/lmacvittie"&gt;&lt;img src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_linkedin_16.png" border="0" /&gt;&lt;/a&gt; &lt;a title="Subscribe using any feed reader!" href="http://www.addthis.com/feed.php?pub=lmacvittie&amp;amp;h1=http%3A%2F%2Fdevcentral.f5.com%2Fweblogs%2Fmacvittie%2FRss.aspx&amp;amp;t1="&gt;&lt;img height="18" alt="AddThis Feed Button" src="http://s9.addthis.com/button1-fd.gif" width="125" border="0" /&gt;&lt;/a&gt; &lt;a title="Bookmark and Share" onclick="window.open('http://www.addthis.com/bookmark.php?wt=nw&amp;amp;pub=lmacvittie&amp;amp;url='+encodeURIComponent(location.href)+'&amp;amp;title='+encodeURIComponent(document.title), 'addthis', 'scrollbars=yes,menubar=no,width=620,height=520,resizable=yes,toolbar=no,location=no,status=no,screenX=200,screenY=100,left=200,top=100'); return false;" href="http://www.addthis.com/bookmark.php" target="_blank"&gt;&lt;img height="18" alt="Bookmark and Share" src="http://s9.addthis.com/button1-share.gif" width="125" border="0" /&gt;&lt;/a&gt;&lt;script src="http://track.mybloglog.com/js/jsserv.php?mblID=2008070914270355" type="text/javascript"&gt;&lt;/script&gt;&lt;script src="http://feeds.feedburner.com/~s/f5/XOwx" type="text/javascript" charset="utf-8"&gt;&lt;/script&gt;&lt;script src="http://feeds.feedburner.com/~d/static/site-tracker.js" type="text/javascript" charset="utf-8"&gt;&lt;/script&gt;&lt;script src="http://feeds.feedburner.com/~d/static/site-tracker.js" type="text/javascript" charset="utf-8"&gt;&lt;/script&gt;&lt;script src="http://feeds.feedburner.com/~d/static/site-tracker.js" type="text/javascript" charset="utf-8"&gt;&lt;/script&gt; &lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:7afe8b4f-40e3-4393-a0fa-f72248035f3b" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/MacVittie" rel="tag"&gt;MacVittie&lt;/a&gt;,&lt;a href="http://technorati.com/tags/F5" rel="tag"&gt;F5&lt;/a&gt;,&lt;a href="http://technorati.com/tags/web%20application%20security" rel="tag"&gt;web application security&lt;/a&gt;,&lt;a href="http://technorati.com/tags/security" rel="tag"&gt;security&lt;/a&gt;,&lt;a href="http://technorati.com/tags/XML%20firewall" rel="tag"&gt;XML firewall&lt;/a&gt;,&lt;a href="http://technorati.com/tags/JavaScript" rel="tag"&gt;JavaScript&lt;/a&gt;,&lt;a href="http://technorati.com/tags/parserss" rel="tag"&gt;parserss&lt;/a&gt;,&lt;a href="http://technorati.com/tags/interpreted%20languages" rel="tag"&gt;interpreted languages&lt;/a&gt;,&lt;a href="http://technorati.com/tags/XML" rel="tag"&gt;XML&lt;/a&gt;,&lt;a href="http://technorati.com/tags/XSS" rel="tag"&gt;XSS&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SQL%20injection" rel="tag"&gt;SQL injection&lt;/a&gt;&lt;/div&gt;&lt;div class='blogtags'&gt;&lt;/div&gt;&lt;img src="http://devcentral.f5.com/weblogs/macvittie/aggbug/3609.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lori MacVittie</dc:creator>
            <guid>http://devcentral.f5.com/weblogs/macvittie/archive/2008/09/12/3609.aspx</guid>
            <pubDate>Fri, 12 Sep 2008 11:49:44 GMT</pubDate>
            <wfw:comment>http://devcentral.f5.com/weblogs/macvittie/comments/3609.aspx</wfw:comment>
            <comments>http://devcentral.f5.com/weblogs/macvittie/archive/2008/09/12/3609.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://devcentral.f5.com/weblogs/macvittie/comments/commentRss/3609.aspx</wfw:commentRss>
            <trackback:ping>http://devcentral.f5.com/weblogs/macvittie/services/trackbacks/3609.aspx</trackback:ping>
        </item>
        <item>
            <title>A Billion More Laughs: The JavaScript hack that acts like an XML attack</title>
            <link>http://devcentral.f5.com/weblogs/macvittie/archive/2008/09/11/3605.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://devcentral.f5.com/weblogs/dmacvittie"&gt;Don&lt;/a&gt; is off in &lt;a href="http://www.lowellma.gov/"&gt;Lowell&lt;/a&gt; working on a project with our &lt;a href="http://www.acopia.com/"&gt;ARX&lt;/a&gt; folks so I was working late last night (finishing my daily read of the Internet) and ended up reading &lt;a href="http://www.hanselman.com/blog/"&gt;Scott Hanselman's&lt;/a&gt; &lt;a href="http://www.hanselman.com/blog/MicrosoftIE8AndGoogleChromeProcessesAreTheNewThreads.aspx"&gt;discussion&lt;/a&gt; of threads versus processes in &lt;a href="http://www.google.com/chrome"&gt;Chrome&lt;/a&gt; and &lt;a href="http://www.microsoft.com/windows/internet-explorer/beta/default.aspx"&gt;IE8&lt;/a&gt;. It was a great read, if you like that kind of thing (I do), and it does a great job of digging into some of the RAMifications (pun intended) of the new programmatic models for both browsers. &lt;/p&gt;  &lt;p&gt;But this isn't about processes or threads, it's about an interesting comment that caught my eye: &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;This will make IE8 Beta 2 unresponsive &lt;/p&gt;    &lt;pre&gt;&amp;lt;div id="test"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;..&lt;br /&gt;t = document.getElementById("test");&lt;br /&gt;while(true)&lt;br /&gt;{&lt;br /&gt;  t.innerHTML += "a";&lt;br /&gt;}&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;What really grabbed my attention is that this little snippet of code is so eerily similar to the &lt;a href="http://www.ibm.com/developerworks/xml/library/x-tipcfsx.html#listing1"&gt;XML "Billion Laughs" exploit&lt;/a&gt;, in which an entity is expanded recursively for, well, forever and essentially causes a &lt;a href="http://www.f5.com/glossary/denial-of-service.html"&gt;DoS&lt;/a&gt; attack on whatever system (browser, server) was attempting to parse the document. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/ABillionLaughsAJavaScripthackthatactslik_F8A4/noscript_2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 10px 0px 0px; border-right-width: 0px" height="128" alt="noscript" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/ABillionLaughsAJavaScripthackthatactslik_F8A4/noscript_thumb.png" width="128" align="left" border="0" /&gt;&lt;/a&gt; What makes scripts like this scary is that many forums and blogs that are less vehement about disallowing &lt;a href="http://www.w3.org/TR/REC-html40"&gt;HTML&lt;/a&gt; and script can be easily exploited by a code snippet like this, which could cause the browser of all users viewing the infected post to essentially "lock up". This is one of the reasons why IE8 and Chrome moved to a more segregated tabbed model, with each tab basically its own process rather than a thread - to prevent corruption in one from affecting others. But given the comment this doesn't seem to be the case with IE8 (there's no indication Chrome was tested with this code, so whether it handles the situation or not is still to be discovered). &lt;/p&gt;

&lt;p&gt;This is likely because it's not a corruption, it's valid &lt;a href="http://www.javascript.com/"&gt;JavaScript&lt;/a&gt;. It just happens to be consuming large quantities of memory very quickly and not giving the other processes in other tabs in IE8 a chance to execute. &lt;/p&gt;

&lt;p&gt;The reason the JavaScript version was so intriguing was that it's nearly impossible to stop. The &lt;a href="http://www.f5.com/glossary/xml.html"&gt;XML&lt;/a&gt; version can be easily detected and prevented by an &lt;a href="http://www.f5.com/solutions/security/web-application/"&gt;XML firewall&lt;/a&gt; and most modern XML parsers can be configured to stop parsing and thus prevent the document from wreaking havoc on a system. But this JavaScript version is much more difficult to detect and thus prevent because it's &lt;em&gt;code&lt;/em&gt; and thus not confined to a specific format with specific syntactical attributes. I can think of about 20 different versions of this script - all valid and all of them different enough to make pattern matching or regular expressions useless for detection. And I'm no evil genius, so you can bet there are many more. &lt;/p&gt;

&lt;p&gt;The best option for addressing this problem? Disable scripts. &lt;/p&gt;

&lt;p&gt;The conundrum is that disabling scripts can cause many, many sites to become unusable because they are taking advantage of &lt;a href="http://www.f5.com/glossary/ajax.html"&gt;AJAX&lt;/a&gt; functionality, which requires...yup, scripts. You can certainly enable scripts only on specific sites you trust (which is likely what most security folks would suggest should be default behavior anyway) but that's a PITA and the very users we're trying to protect aren't likely to take the time to do this - or even understand why it's necessary. &lt;/p&gt;

&lt;p&gt;With the increasing dependence upon scripting to provide functionality for RIAs (Rich Interactive Applications) we're going to have to figure out how to address this problem, and address it soon. Eliminating scripting is not an option, and a default deny policy (essentially whitelisting) is unrealistic. &lt;/p&gt;

&lt;p&gt;Perhaps it's time for &lt;a href="http://www.mozilla.org/projects/security/components/signed-scripts.html"&gt;signed scripts&lt;/a&gt; to make a comeback. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://twitter.com/lmacvittie"&gt;&lt;img height="18" alt="Follow me on Twitter" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_twitt-twoo-icon.png" width="18" border="0" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/Rss.aspx"&gt;&lt;img src="http://devcentral.f5.com/Portals/0/images/Icons/icon_xml_18.gif" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.slideshare.net/lmacvittie"&gt;&lt;img height="18" alt="View Lori's profile on SlideShare" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_slideshare.png" width="18" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lmacvittie.tumblr.com" border="0"&gt;&lt;img title="Follow me on Tumblr" height="18" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_tumblr.gif" width="18" border="0" /&gt;&lt;/a&gt; &lt;a href="http://lmacvittie.posterous.com/"&gt;&lt;img title="Posterous" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_posterous.png" border="0" /&gt;&lt;/a&gt; &lt;a href="http://www.linkedin.com/in/lmacvittie"&gt;&lt;img src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_linkedin_16.png" border="0" /&gt;&lt;/a&gt; &lt;a title="Subscribe using any feed reader!" href="http://www.addthis.com/feed.php?pub=lmacvittie&amp;amp;h1=http%3A%2F%2Fdevcentral.f5.com%2Fweblogs%2Fmacvittie%2FRss.aspx&amp;amp;t1="&gt;&lt;img height="18" alt="AddThis Feed Button" src="http://s9.addthis.com/button1-fd.gif" width="125" border="0" /&gt;&lt;/a&gt; &lt;a title="Bookmark and Share" onclick="window.open('http://www.addthis.com/bookmark.php?wt=nw&amp;amp;pub=lmacvittie&amp;amp;url='+encodeURIComponent(location.href)+'&amp;amp;title='+encodeURIComponent(document.title), 'addthis', 'scrollbars=yes,menubar=no,width=620,height=520,resizable=yes,toolbar=no,location=no,status=no,screenX=200,screenY=100,left=200,top=100'); return false;" href="http://www.addthis.com/bookmark.php" target="_blank"&gt;&lt;img height="18" alt="Bookmark and Share" src="http://s9.addthis.com/button1-share.gif" width="125" border="0" /&gt;&lt;/a&gt;&lt;script src="http://track.mybloglog.com/js/jsserv.php?mblID=2008070914270355" type="text/javascript"&gt;&lt;/script&gt;&lt;script src="http://feeds.feedburner.com/~s/f5/XOwx" type="text/javascript" charset="utf-8"&gt;&lt;/script&gt;&lt;script src="http://feeds.feedburner.com/~d/static/site-tracker.js" type="text/javascript" charset="utf-8"&gt;&lt;/script&gt; &lt;/p&gt;

&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:86a38d01-d2af-4541-8c82-cfc84ef21228" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/MacVittie" rel="tag"&gt;MacVittie&lt;/a&gt;,&lt;a href="http://technorati.com/tags/F5" rel="tag"&gt;F5&lt;/a&gt;,&lt;a href="http://technorati.com/tags/ARX" rel="tag"&gt;ARX&lt;/a&gt;,&lt;a href="http://technorati.com/tags/ASM" rel="tag"&gt;ASM&lt;/a&gt;,&lt;a href="http://technorati.com/tags/XML%20firewall" rel="tag"&gt;XML firewall&lt;/a&gt;,&lt;a href="http://technorati.com/tags/AJAX" rel="tag"&gt;AJAX&lt;/a&gt;,&lt;a href="http://technorati.com/tags/JavaScript" rel="tag"&gt;JavaScript&lt;/a&gt;,&lt;a href="http://technorati.com/tags/billion%20laughs" rel="tag"&gt;billion laughs&lt;/a&gt;,&lt;a href="http://technorati.com/tags/exploits" rel="tag"&gt;exploits&lt;/a&gt;,&lt;a href="http://technorati.com/tags/digital%20signatures" rel="tag"&gt;digital signatures&lt;/a&gt;,&lt;a href="http://technorati.com/tags/RIA" rel="tag"&gt;RIA&lt;/a&gt;,&lt;a href="http://technorati.com/tags/IE8" rel="tag"&gt;IE8&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Chrome" rel="tag"&gt;Chrome&lt;/a&gt;,&lt;a href="http://technorati.com/tags/threads" rel="tag"&gt;threads&lt;/a&gt;,&lt;a href="http://technorati.com/tags/processes" rel="tag"&gt;processes&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Scott%20Hanselman" rel="tag"&gt;Scott Hanselman&lt;/a&gt;,&lt;a href="http://technorati.com/tags/security" rel="tag"&gt;security&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Web%202.0" rel="tag"&gt;Web 2.0&lt;/a&gt;,&lt;a href="http://technorati.com/tags/web" rel="tag"&gt;web&lt;/a&gt;,&lt;a href="http://technorati.com/tags/http" rel="tag"&gt;http&lt;/a&gt;,&lt;a href="http://technorati.com/tags/internet" rel="tag"&gt;internet&lt;/a&gt;&lt;/div&gt;&lt;div class='blogtags'&gt;&lt;/div&gt;&lt;img src="http://devcentral.f5.com/weblogs/macvittie/aggbug/3605.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lori MacVittie</dc:creator>
            <guid>http://devcentral.f5.com/weblogs/macvittie/archive/2008/09/11/3605.aspx</guid>
            <pubDate>Thu, 11 Sep 2008 11:01:27 GMT</pubDate>
            <wfw:comment>http://devcentral.f5.com/weblogs/macvittie/comments/3605.aspx</wfw:comment>
            <comments>http://devcentral.f5.com/weblogs/macvittie/archive/2008/09/11/3605.aspx#feedback</comments>
            <slash:comments>8</slash:comments>
            <wfw:commentRss>http://devcentral.f5.com/weblogs/macvittie/comments/commentRss/3605.aspx</wfw:commentRss>
            <trackback:ping>http://devcentral.f5.com/weblogs/macvittie/services/trackbacks/3605.aspx</trackback:ping>
        </item>
        <item>
            <title>How AJAX can make a more agile enterprise</title>
            <link>http://devcentral.f5.com/weblogs/macvittie/archive/2008/09/02/3578.aspx</link>
            <description>&lt;p&gt;In general, we talk a lot about the benefits of &lt;a href="http://www.f5.com/glossary/soa.html"&gt;SOA&lt;/a&gt; in terms of agility, aligning IT with the business, and risk mitigation. Then we talk about WOA (web oriented architecture) separately from SOA (service oriented architecture) but go on to discuss how the two architectures can be blended to create a giant application architecture milkshake that not only tastes good, but looks good. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.f5.com/glossary/ajax.html"&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/HowAJAXcanmakeyoumoreagile_2BFF/ajax_2.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; margin: 0px 10px 10px 0px; border-left: 0px; border-bottom: 0px" height="119" alt="ajax" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/HowAJAXcanmakeyoumoreagile_2BFF/ajax_thumb.png" width="119" align="left" border="0" /&gt;&lt;/a&gt;AJAX&lt;/a&gt; (Asynchronous JavaScript and &lt;a href="http://www.f5.com/glossary/xml.html"&gt;XML&lt;/a&gt;) gets lumped under the umbrella of "&lt;a href="http://www.f5.com/glossary/web-2-0.html"&gt;Web 2.0&lt;/a&gt;" technologies. It's neither WOA nor SOA, being capable of participating in both architectural models easily. Some might argue that AJAX, being bound to the browser and therefore the web, is WOA. But WOA and SOA are both &lt;em&gt;architectural &lt;/em&gt;models, and AJAX can participate in both - it is neither one or the other. &lt;/p&gt;  &lt;p&gt;It's seen as a tool; a means to an end, rather than as an enabling facet of either architectural model. It's seen as a mechanism for building interactive and more responsive user interfaces, as a cool tool to implement interesting tricks in the browser, and as yet another cross-browser incompatible scripting technology that makes developer's lives miserable. &lt;/p&gt;  &lt;p&gt;But AJAX, when used to build enterprise applications, can actually enable and encourage a more agile application environment. When AJAX is applied to user-interface elements to manipulate corporate data the applications or scripts on the server-side that interact with the GUI are often distilled into discrete blocks of functionality that can be reused in other applications and scripts in which that particular functionality is required. &lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/HowAJAXcanmakeyoumoreagile_2BFF/ajax-model.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="176" alt="ajax-model" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/HowAJAXcanmakeyoumoreagile_2BFF/ajax-model_thumb.jpg" width="379" align="right" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;And thus services are born. Services that are themselves agile and thus enable broader agility within the application architecture. They aren't SOA services, at least that's what purists would say, but they are services, empowered with the same characteristics of their SOA-based cousins: reusable and granular. &lt;/p&gt;  &lt;p&gt;The problem is that AJAX is still seen as an allen wrench in an architecture that requires screwdrivers. It's often viewed only in terms of building a user interface, and the services it creates or takes advantage of on the back-end as being unequal to those specifically architected for inclusion in the enterprise SOA. &lt;/p&gt;  &lt;p&gt;Because AJAX drives the development of discrete services on the server-side, it can be a valued assistant in decomposing applications into its composite services. It can force you to think about the &lt;em&gt;services &lt;/em&gt;and the &lt;em&gt;operations &lt;/em&gt;required because AJAX necessarily interacts with granular functions of a service in a singular fashion. &lt;/p&gt;  &lt;p&gt;If we force AJAX development to focus on the user-interface, we lose some of the benefits we can derive from the design and development process by ignoring how well AJAX fits into the service-oriented paradigm. We lose the time and effort that goes into defining the discrete services that will be used by an AJAX-enabled component in the user-interface, and the possibility of reusing those services in the broader SOA. &lt;/p&gt;  &lt;p&gt;An SOA necessarily compels us to ignore platform and language and concentrate on the service. Services deployed on a web server utilizing &lt;a href="http://www.php.net/"&gt;PHP&lt;/a&gt; or &lt;a href="http://www.asp.net/"&gt;ASP&lt;/a&gt; or &lt;a href="http://www.ruby-lang.org/"&gt;Ruby&lt;/a&gt; as their implementation language are no different than those deployed on heavy application servers using &lt;a href="http://java.sun.com/products/jsp/docs.html"&gt;JSP&lt;/a&gt; or &lt;a href="http://www.java.com/ "&gt;Java&lt;/a&gt; or &lt;a href="http://www.microsoft.com/NET/"&gt;.NET&lt;/a&gt;. They can and should be included in the architectural design process to ensure they can be reused when possible.  &lt;/p&gt;  &lt;p&gt;AJAX forces you to think in a service-oriented way. The services required by an AJAX-enabled user-interface should be consistent with the enterprise's architectural model and incorporated into that architecture whenever possible in order to derive agility and reuse from those services. &lt;/p&gt;  &lt;p&gt;AJAX is inherently an agile technology. Recognizing that early and incorporating the services required by AJAX-enabled components can help build a more agile, more consistent, more SOA-like application infrastructure. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://twitter.com/lmacvittie"&gt;&lt;img height="18" alt="Follow me on Twitter" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_twitt-twoo-icon.png" width="18" border="0" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/Rss.aspx"&gt;&lt;img src="http://devcentral.f5.com/Portals/0/images/Icons/icon_xml_18.gif" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.slideshare.net/lmacvittie"&gt;&lt;img height="18" alt="View Lori's profile on SlideShare" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_slideshare.png" width="18" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lmacvittie.tumblr.com" border="0"&gt;&lt;img title="Follow me on Tumblr" height="18" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_tumblr.gif" width="18" border="0" /&gt;&lt;/a&gt; &lt;a href="http://lmacvittie.posterous.com/"&gt;&lt;img title="Posterous" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_posterous.png" border="0" /&gt;&lt;/a&gt; &lt;a href="http://www.linkedin.com/in/lmacvittie"&gt;&lt;img src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_linkedin_16.png" border="0" /&gt;&lt;/a&gt; &lt;a title="Subscribe using any feed reader!" href="http://www.addthis.com/feed.php?pub=lmacvittie&amp;amp;h1=http%3A%2F%2Fdevcentral.f5.com%2Fweblogs%2Fmacvittie%2FRss.aspx&amp;amp;t1="&gt;&lt;img height="18" alt="AddThis Feed Button" src="http://s9.addthis.com/button1-fd.gif" width="125" border="0" /&gt;&lt;/a&gt; &lt;a title="Bookmark and Share" onclick="window.open('http://www.addthis.com/bookmark.php?wt=nw&amp;amp;pub=lmacvittie&amp;amp;url='+encodeURIComponent(location.href)+'&amp;amp;title='+encodeURIComponent(document.title), 'addthis', 'scrollbars=yes,menubar=no,width=620,height=520,resizable=yes,toolbar=no,location=no,status=no,screenX=200,screenY=100,left=200,top=100'); return false;" href="http://www.addthis.com/bookmark.php" target="_blank"&gt;&lt;img height="18" alt="Bookmark and Share" src="http://s9.addthis.com/button1-share.gif" width="125" border="0" /&gt;&lt;/a&gt;&lt;script src="http://track.mybloglog.com/js/jsserv.php?mblID=2008070914270355" type="text/javascript"&gt;&lt;/script&gt;&lt;script src="http://feeds.feedburner.com/~s/f5/XOwx" type="text/javascript" charset="utf-8"&gt;&lt;/script&gt;&lt;script src="http://feeds.feedburner.com/~d/static/site-tracker.js" type="text/javascript" charset="utf-8"&gt;&lt;/script&gt; &lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:05025e78-ab7c-4fc9-a3b0-424f7c87d586" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/MacVittie" rel="tag"&gt;MacVittie&lt;/a&gt;,&lt;a href="http://technorati.com/tags/F5" rel="tag"&gt;F5&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SOA" rel="tag"&gt;SOA&lt;/a&gt;,&lt;a href="http://technorati.com/tags/AJAX" rel="tag"&gt;AJAX&lt;/a&gt;,&lt;a href="http://technorati.com/tags/PHP" rel="tag"&gt;PHP&lt;/a&gt;,&lt;a href="http://technorati.com/tags/ASP" rel="tag"&gt;ASP&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Ruby" rel="tag"&gt;Ruby&lt;/a&gt;,&lt;a href="http://technorati.com/tags/JSP" rel="tag"&gt;JSP&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Java" rel="tag"&gt;Java&lt;/a&gt;,&lt;a href="http://technorati.com/tags/.NET" rel="tag"&gt;.NET&lt;/a&gt;,&lt;a href="http://technorati.com/tags/agile" rel="tag"&gt;agile&lt;/a&gt;,&lt;a href="http://technorati.com/tags/reuse" rel="tag"&gt;reuse&lt;/a&gt;,&lt;a href="http://technorati.com/tags/user-interface" rel="tag"&gt;user-interface&lt;/a&gt;,&lt;a href="http://technorati.com/tags/services" rel="tag"&gt;services&lt;/a&gt;,&lt;a href="http://technorati.com/tags/internet" rel="tag"&gt;internet&lt;/a&gt;,&lt;a href="http://technorati.com/tags/web" rel="tag"&gt;web&lt;/a&gt;,&lt;a href="http://technorati.com/tags/http" rel="tag"&gt;http&lt;/a&gt;,&lt;a href="http://technorati.com/tags/architecture" rel="tag"&gt;architecture&lt;/a&gt;,&lt;a href="http://technorati.com/tags/application%20infrastructure" rel="tag"&gt;application infrastructure&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Web%202.0" rel="tag"&gt;Web 2.0&lt;/a&gt;&lt;/div&gt;&lt;div class='blogtags'&gt;&lt;/div&gt;&lt;img src="http://devcentral.f5.com/weblogs/macvittie/aggbug/3578.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lori MacVittie</dc:creator>
            <guid>http://devcentral.f5.com/weblogs/macvittie/archive/2008/09/02/3578.aspx</guid>
            <pubDate>Tue, 02 Sep 2008 10:50:54 GMT</pubDate>
            <wfw:comment>http://devcentral.f5.com/weblogs/macvittie/comments/3578.aspx</wfw:comment>
            <comments>http://devcentral.f5.com/weblogs/macvittie/archive/2008/09/02/3578.aspx#feedback</comments>
            <wfw:commentRss>http://devcentral.f5.com/weblogs/macvittie/comments/commentRss/3578.aspx</wfw:commentRss>
            <trackback:ping>http://devcentral.f5.com/weblogs/macvittie/services/trackbacks/3578.aspx</trackback:ping>
        </item>
        <item>
            <title>Layer 7 Switching + Load Balancing = Layer 7 Load Balancing</title>
            <link>http://devcentral.f5.com/weblogs/macvittie/archive/2008/08/12/3529.aspx</link>
            <description>&lt;p&gt;Modern load balancers (application delivery controllers) blend traditional load-balancing capabilities with advanced, application aware layer 7 switching to support the design of a highly scalable, optimized application delivery network. Here's the difference between the two technologies, and the benefits of combining the two into a single application delivery controller. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;LOAD BALANCING&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.f5.com/glossary/load-balancing.html"&gt;Load balancing&lt;/a&gt; is the process of balancing load (application requests) across a number of servers. The load balancer presents to the outside world a "virtual server" that accepts requests on behalf of a pool (also called a cluster or farm) &lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/Layer7SwitchingversusLoadBalancing_8AEE/loadbalancing_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 10px 0px 0px; border-right-width: 0px" height="332" alt="loadbalancing" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/Layer7SwitchingversusLoadBalancing_8AEE/loadbalancing_thumb.jpg" width="284" align="left" border="0" /&gt;&lt;/a&gt;of servers and distributes those requests across all servers based on a load-balancing algorithm. All servers in the pool must contain the same content. &lt;/p&gt;  &lt;p&gt;Load balancers generally use one of several industry standard algorithms to distribute request. Some of the most common standard load balancing algorithms are: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;em&gt;round-robin &lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;weighted round-robin &lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;least connections &lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;weighted least connections &lt;/em&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Load balancers are used to increase the capacity of a web site or application, ensure availability through failover capabilities, and to improve application performance. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;LAYER 7 SWITCHING&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/05/28/3301.aspx"&gt;Layer 7 switching&lt;/a&gt; takes its name from the OSI model, indicating that the device switches requests based on layer 7 (application) data. Layer 7 switching is also known as "request switching", "application switching", and "content based routing". &lt;/p&gt;  &lt;p&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/Layer7SwitchingversusLoadBalancing_8AEE/appswitching_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="315" alt="appswitching" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/Layer7SwitchingversusLoadBalancing_8AEE/appswitching_thumb.jpg" width="269" align="right" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;A layer 7 switch presents to the outside world a "virtual server" that accepts requests on behalf of a number of servers and distributes those requests based on policies that use application data to determine which server should service which request. This allows for the application infrastructure to be specifically tuned/optimized to serve specific types of content. For example, one server can be tuned to serve only images, another for execution of server-side scripting languages like PHP and ASP, and another for static content such as &lt;span class="acronym" title="HyperText Markup Language"&gt;HTML&lt;/span&gt; , &lt;span class="acronym" title="Cascading Style Sheet"&gt;CSS&lt;/span&gt; , and JavaScript. &lt;/p&gt;  &lt;p&gt;Unlike load balancing, layer 7 switching does not require that all servers in the pool (farm/&lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2007/09/25/2953.aspx"&gt;cluster&lt;/a&gt;) have the same content. In fact, layer 7 switching expects that servers will have different content, thus the need to more deeply inspect requests before determining where they should be directed. Layer 7 switches are capable of &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2008/03/06/3099.aspx"&gt;directing requests based on URI&lt;/a&gt;, host, HTTP headers, and anything in the application message. &lt;/p&gt;  &lt;p&gt;The latter capability is what gives layer 7 switches the ability to perform &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2007/11/14/2989.aspx"&gt;content based routing for ESBs&lt;/a&gt; and XML/SOAP services. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;LAYER 7 LOAD BALANCING&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;By combining load balancing with layer 7 switching, we arrive at layer 7 load balancing, a core capability of all modern load balancers (a.k.a. application &lt;a href="http://www.f5.com/products/big-ip"&gt;delivery controllers&lt;/a&gt;). &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/Layer7SwitchingversusLoadBalancing_8AEE/layer7loadbalancing_2.jpg"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; margin: 0px 10px 0px 0px; border-right-width: 0px" height="313" alt="layer7loadbalancing" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/WindowsLiveWriter/Layer7SwitchingversusLoadBalancing_8AEE/layer7loadbalancing_thumb.jpg" width="372" align="left" border="0" /&gt;&lt;/a&gt;&lt;/strong&gt;Layer 7 load balancing combines the standard load balancing features of a load balancing to provide failover and improved capacity for specific types of content. This allows the architect to design an application delivery network that is highly optimized to serve specific types of content but is also highly available. &lt;/p&gt;  &lt;p&gt;Layer 7 load balancing allows for additional features offered by application delivery controllers to be applied based on content type, which further improves performance by executing only those policies that are applicable to the content. For example, data security in the form of &lt;a href="http://www.f5.com/products/big-ip/product-modules/application-security-manager.html"&gt;data scrubbing&lt;/a&gt; is likely not necessary on JPG or GIF images, so it need only be applied to HTML and PHP. &lt;/p&gt;  &lt;p&gt;Layer 7 load balancing also allows for increased efficiency of the application infrastructure. For example, only two highly tuned image servers may be required to meet application performance and user concurrency needs, while three or four optimized servers may be necessary to meet the same requirements for PHP or ASP scripting services. Being able to separate out content based on type, URI, or data allows for better allocation of physical resources in the application infrastructure. &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://twitter.com/lmacvittie"&gt;&lt;img height="18" alt="Follow me on Twitter" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_twitt-twoo-icon.png" width="18" border="0" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/Rss.aspx"&gt;&lt;img src="http://devcentral.f5.com/Portals/0/images/Icons/icon_xml_18.gif" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.slideshare.net/lmacvittie"&gt;&lt;img height="18" alt="View Lori's profile on SlideShare" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_slideshare.png" width="18" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lmacvittie.tumblr.com" border="0"&gt;&lt;img title="Follow me on Tumblr" height="18" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_tumblr.gif" width="18" border="0" /&gt;&lt;/a&gt; &lt;a href="http://lmacvittie.posterous.com/"&gt;&lt;img title="Posterous" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_posterous.png" border="0" /&gt;&lt;/a&gt; &lt;a href="http://www.linkedin.com/in/lmacvittie"&gt;&lt;img src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_linkedin_16.png" border="0" /&gt;&lt;/a&gt; &lt;a title="Subscribe using any feed reader!" href="http://www.addthis.com/feed.php?pub=lmacvittie&amp;amp;h1=http%3A%2F%2Fdevcentral.f5.com%2Fweblogs%2Fmacvittie%2FRss.aspx&amp;amp;t1="&gt;&lt;img height="18" alt="AddThis Feed Button" src="http://s9.addthis.com/button1-fd.gif" width="125" border="0" /&gt;&lt;/a&gt; &lt;a title="Bookmark and Share" onclick="window.open('http://www.addthis.com/bookmark.php?wt=nw&amp;amp;pub=lmacvittie&amp;amp;url='+encodeURIComponent(location.href)+'&amp;amp;title='+encodeURIComponent(document.title), 'addthis', 'scrollbars=yes,menubar=no,width=620,height=520,resizable=yes,toolbar=no,location=no,status=no,screenX=200,screenY=100,left=200,top=100'); return false;" href="http://www.addthis.com/bookmark.php" target="_blank"&gt;&lt;img height="18" alt="Bookmark and Share" src="http://s9.addthis.com/button1-share.gif" width="125" border="0" /&gt;&lt;/a&gt;&lt;script src="http://w.sharethis.com/widget/?tabs=web%2Cpost%2Cemail&amp;amp;charset=utf-8&amp;amp;style=default&amp;amp;publisher=b38ba4d2-6d9c-465a-98d8-a7f5fdb0abb6" type="text/javascript"&gt;&lt;/script&gt;&lt;span id="sharethis_0"&gt; &lt;/span&gt;&lt;/p&gt; &lt;script src="http://track.mybloglog.com/js/jsserv.php?mblID=2008070914270355" type="text/javascript"&gt;&lt;/script&gt;&lt;script src="http://feeds.feedburner.com/~s/f5/XOwx" type="text/javascript" charset="utf-8"&gt;&lt;/script&gt;&lt;script src="http://feeds.feedburner.com/~d/static/site-tracker.js" type="text/javascript" charset="utf-8"&gt;&lt;/script&gt;&lt;script src="http://feeds.feedburner.com/~d/static/site-tracker.js" type="text/javascript" charset="utf-8"&gt;&lt;/script&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:958fc5ce-ce0b-4d73-ae77-dcb7d3f862f1" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/MacVittie" rel="tag"&gt;MacVittie&lt;/a&gt;,&lt;a href="http://technorati.com/tags/F5" rel="tag"&gt;F5&lt;/a&gt;,&lt;a href="http://technorati.com/tags/load-balancing" rel="tag"&gt;load-balancing&lt;/a&gt;,&lt;a href="http://technorati.com/tags/layer%207%20switching" rel="tag"&gt;layer 7 switching&lt;/a&gt;,&lt;a href="http://technorati.com/tags/application%20delivery" rel="tag"&gt;application delivery&lt;/a&gt;,&lt;a href="http://technorati.com/tags/application%20switching" rel="tag"&gt;application switching&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SOA" rel="tag"&gt;SOA&lt;/a&gt;,&lt;a href="http://technorati.com/tags/XML" rel="tag"&gt;XML&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SOA%20delivery" rel="tag"&gt;SOA delivery&lt;/a&gt;,&lt;a href="http://technorati.com/tags/clustering" rel="tag"&gt;clustering&lt;/a&gt;&lt;/div&gt; &lt;script src="http://track.mybloglog.com/js/jsserv.php?mblID=2008070914270355" type="text/javascript"&gt;&lt;/script&gt;&lt;script src="http://feeds.feedburner.com/~s/f5/XOwx" type="text/javascript" charset="utf-8"&gt;&lt;/script&gt;&lt;script src="http://feeds.feedburner.com/~d/static/site-tracker.js" type="text/javascript" charset="utf-8"&gt;&lt;/script&gt;&lt;script src="http://feeds.feedburner.com/~d/static/site-tracker.js" type="text/javascript" charset="utf-8"&gt;&lt;/script&gt;&lt;div class='blogtags'&gt;&lt;/div&gt;&lt;img src="http://devcentral.f5.com/weblogs/macvittie/aggbug/3529.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lori MacVittie</dc:creator>
            <guid>http://devcentral.f5.com/weblogs/macvittie/archive/2008/08/12/3529.aspx</guid>
            <pubDate>Tue, 12 Aug 2008 11:44:57 GMT</pubDate>
            <wfw:comment>http://devcentral.f5.com/weblogs/macvittie/comments/3529.aspx</wfw:comment>
            <comments>http://devcentral.f5.com/weblogs/macvittie/archive/2008/08/12/3529.aspx#feedback</comments>
            <wfw:commentRss>http://devcentral.f5.com/weblogs/macvittie/comments/commentRss/3529.aspx</wfw:commentRss>
            <trackback:ping>http://devcentral.f5.com/weblogs/macvittie/services/trackbacks/3529.aspx</trackback:ping>
        </item>
        <item>
            <title>Honey? Does this format make my data look fat?</title>
            <link>http://devcentral.f5.com/weblogs/macvittie/archive/2008/07/09/3434.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://www.cnet.com" target="_blank"&gt;CNet&lt;/a&gt; is reporting that &lt;a href="http://www.google.com" target="_blank"&gt;Google&lt;/a&gt; &lt;a href="http://news.cnet.com/8301-10784_3-9985254-7.html?part=rss&amp;amp;tag=feed&amp;amp;subj=NewsBlog" target="_blank"&gt;is ditching&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/XML" target="_blank"&gt;XML&lt;/a&gt; for a faster, more compact alternative known as &lt;a href="http://code.google.com/p/protobuf/" target="_blank"&gt;ProtocolBuffers&lt;/a&gt;. I'm going to type this post &lt;em&gt;really &lt;/em&gt;fast before &lt;a href="http://devcentral.f5.com/weblogs/dmacvittie" target="_blank"&gt;Don&lt;/a&gt; finds out and starts laughing at me because he's always had this thing against XML, claiming it was too bloated and slow. &lt;/p&gt;  &lt;p&gt;Apparently Google, the 800-pound gorilla, is on Don's side of this argument, as it &lt;a href="http://www.mattcutts.com/blog/google-releases-protocol-buffers/" target="_blank"&gt;just blogged about its newest&lt;/a&gt; creation, ProtocolBuffers. &lt;/p&gt; &lt;fieldset style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; padding-top: 5px"&gt;&lt;legend&gt;From CNet's Blog Post&lt;/legend&gt;Google thought of using XML as a lingua franca to send messages between its different servers. But XML can be complicated to work with and, more significantly, creates large files that can slow application performance.&lt;/fieldset&gt;   &lt;p&gt;I disagree with the statement that it is &lt;em&gt;XML &lt;/em&gt;that creates large files. No, no it's not. It's &lt;em&gt;people &lt;/em&gt;that create large files in a data format, and that can happen regardless of whether it's binary or not. If you've ever worked in &lt;a href="http://www.adci.com/" target="_blank"&gt;digital cartography&lt;/a&gt; or drafting, then you know what I'm talking about. &lt;a href="http://usa.autodesk.com" target="_blank"&gt;AutoCAD&lt;/a&gt; files are &lt;em&gt;huge, &lt;/em&gt;and they're binary. It's the application and the people designing the application combined with the amount of data &lt;img height="432" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_xml-label.gif" width="360" align="left" /&gt; that's being stored or transferred that determines whether a file will end up large or small. While binary is almost always more compact and more efficient than XML, it isn't &lt;em&gt;always&lt;/em&gt; the case, nor is it inevitable that XML files will end up large and bloated. &lt;/p&gt;  &lt;p&gt;Bad code can be just as inefficient and slow and bloated as inefficient use of a data format. I'm not saying Google's engineers have written bad code or that they are going to write bad code. In fact they probably won't given their track record. But blaming poor performance on a data format is like blaming poor car performance on the car's frame. There's just too many other factors that go into application performance to single out a data format. Network conditions, server load, server platform, coding techniques, etc... can all impact the performance of an application positively and negatively. &lt;/p&gt;  &lt;p&gt;While it's certainly likely that Google will see an improvement in performance by moving to its new data exchange format, it's going to be losing at the same time. It's losing the simple integration and interoperability that comes from a standards-based technology like XML. We've been moving away from EAI-like technology that requires coding and development to integrate applications since the advent of SOA, so it's surprising to see such a services-oriented organization like Google move back into the dark ages of integration with this decision. XML became the lingua-franca of integration because it's much easier to integrate into a meta-data driven architecture, which is really one of the foundational pillars of Web 2.0 and SOA. &lt;/p&gt;  &lt;p&gt;I will admit that ProtocolBuffers are intriguing and that given the performance needs of an organization like Google it very well may be necessary for it to move away from XML due at least in part to the performance of modern parsers to something more processor efficient, which certainly sounds like ProtocolBuffers. But it's the rare organization that needs &lt;em&gt;that&lt;/em&gt; kind of speed and, for the most part, XML will continue to suit the majority of folks just fine. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://twitter.com/lmacvittie"&gt;&lt;img height="18" alt="Follow me on Twitter" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_twitt-twoo-icon.png" width="18" border="0" /&gt;&lt;/a&gt; &lt;a href="http://devcentral.f5.com/weblogs/macvittie/Rss.aspx"&gt;&lt;img src="http://devcentral.f5.com/Portals/0/images/Icons/icon_xml_18.gif" border="0" /&gt;&lt;/a&gt;&lt;a href="http://www.slideshare.net/lmacvittie"&gt;&lt;img height="18" alt="View Lori's profile on SlideShare" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_slideshare.png" width="18" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lmacvittie.tumblr.com" border="0"&gt;&lt;img title="Follow me on Tumblr" height="18" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_tumblr.gif" width="18" border="0" /&gt;&lt;/a&gt; &lt;a href="http://lmacvittie.posterous.com/"&gt;&lt;img title="Posterous" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_posterous.png" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:cb6bdd25-aa3b-4d39-8fc6-a9e265369ef7" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/MacVittie" rel="tag"&gt;MacVittie&lt;/a&gt;,&lt;a href="http://technorati.com/tags/F5" rel="tag"&gt;F5&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Google" rel="tag"&gt;Google&lt;/a&gt;,&lt;a href="http://technorati.com/tags/XML" rel="tag"&gt;XML&lt;/a&gt;,&lt;a href="http://technorati.com/tags/ProtocolBuffers" rel="tag"&gt;ProtocolBuffers&lt;/a&gt;,&lt;a href="http://technorati.com/tags/integration" rel="tag"&gt;integration&lt;/a&gt;,&lt;a href="http://technorati.com/tags/EAI" rel="tag"&gt;EAI&lt;/a&gt;,&lt;a href="http://technorati.com/tags/binary" rel="tag"&gt;binary&lt;/a&gt;,&lt;a href="http://technorati.com/tags/web" rel="tag"&gt;web&lt;/a&gt;,&lt;a href="http://technorati.com/tags/server" rel="tag"&gt;server&lt;/a&gt;&lt;/div&gt;&lt;div class='blogtags'&gt;&lt;/div&gt;&lt;img src="http://devcentral.f5.com/weblogs/macvittie/aggbug/3434.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lori MacVittie</dc:creator>
            <guid>http://devcentral.f5.com/weblogs/macvittie/archive/2008/07/09/3434.aspx</guid>
            <pubDate>Wed, 09 Jul 2008 11:31:53 GMT</pubDate>
            <wfw:comment>http://devcentral.f5.com/weblogs/macvittie/comments/3434.aspx</wfw:comment>
            <comments>http://devcentral.f5.com/weblogs/macvittie/archive/2008/07/09/3434.aspx#feedback</comments>
            <slash:comments>10</slash:comments>
            <wfw:commentRss>http://devcentral.f5.com/weblogs/macvittie/comments/commentRss/3434.aspx</wfw:commentRss>
            <trackback:ping>http://devcentral.f5.com/weblogs/macvittie/services/trackbacks/3434.aspx</trackback:ping>
        </item>
        <item>
            <title>We iz in ur networkz, deep inspecting ur XML packetz. Wait, what?</title>
            <link>http://devcentral.f5.com/weblogs/macvittie/archive/2008/05/22/3291.aspx</link>
            <description>&lt;p&gt;A recent article discussing the recent challenges to enterprise service bus (ESB) products by XML/SOA gateway products contained a sentence that I found extremely puzzling. &lt;/p&gt; &lt;fieldset style="padding-right: 5px; padding-left: 5px; padding-bottom: 5px; padding-top: 5px"&gt;&lt;legend&gt;Puzzling sentence&lt;/legend&gt;    &lt;p&gt;...the technology behind both solution-sets is based on deep XML packet visibility and manipulation capabilities.&lt;/p&gt; &lt;/fieldset&gt;   &lt;p&gt;I know what the author was &lt;em&gt;trying &lt;/em&gt;to say, but this sentence really is full of epic fail. "Packet" visibility is even more irrelevant to &lt;a href="http://www.w3.org/XML/" target="_blank"&gt;XML&lt;/a&gt; than it is for &lt;a href="http://www.w3.org/MarkUp/" target="_blank"&gt;HTML&lt;/a&gt; or any other application layer protocol, for that matter.  &lt;/p&gt;  &lt;p&gt;The problem with putting "XML" and "packet" together is that application layer data is almost never contained within any single packet, and if you're going to interpret, act on, or manipulate the &lt;img style="margin: 10px 10px 5px 0px" height="240" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_ConfusedChallenge.jpg" width="233" align="left" /&gt;actual application messages (i.e. the XML, the HTML, the application protocol) then you have to assemble the packets into a document or message first. &lt;/p&gt;  &lt;p&gt;"Packet" level visibility is a term used to describe network devices like routers, switches, traditional firewalls and network drivers. These types of products work on a packet-processing level; they look at individual packets, at the IP and TCP characteristics contained within the headers, and little more. Packet-processing devices aren't designed to provide "deep" visibility into application layer protocols because they aren't designed to reassemble the documents and messages. &lt;/p&gt;  &lt;p&gt;Packet processing is to delivering applications what fingers are to an individual. Having just one means you might be able to identify the person/application, but you don't *know* anything else about either. Basically, there may be some amount of application data that is valuable in any given packet that might be of limited use, say in identification of application type for rate shaping / classification purposes. This is often what's behind the use of the term "deep packet inspection" as it relates to applications. Identification. &lt;/p&gt;  &lt;p&gt;In the context of any network-positioned device, like an XML or &lt;a href="http://www.f5.com/glossary/soa.html" target="_blank"&gt;SOA&lt;/a&gt; gateway, an &lt;a href="http://www.f5.com/products/big-ip" target="_blank"&gt;application delivery controller&lt;/a&gt;, or an &lt;a href="http://www.f5.com/glossary/xml-firewall.html" target="_blank"&gt;XML firewall&lt;/a&gt;, visibility and processing &lt;strong&gt;must necessarily &lt;/strong&gt;be at the application layer. The contents of any single given packet are irrelevant and, in the case of XML, practically useless. &lt;/p&gt;  &lt;p&gt;XML must be parsed and put into a format which can be interpreted by a machine, and that means that it must be reassembled first. While "streaming" parsers appear to do this on a per-packet basis that is not completely accurate, for it is often the case that a specific element will be nested deep enough and be large enough to span two packets, which breaks the packet-processing model completely. Streaming simply means that the XML is being interpreted &lt;em&gt;as the document is being reassembled; &lt;/em&gt;the document is still being viewed as application data, not necessarily individual packets. &lt;/p&gt;  &lt;p&gt;What the author was &lt;em&gt;trying &lt;/em&gt;to convey the sense that XML &amp;amp; SOA gateways are capable of reassembling XML documents and processing them, providing security and routing and message enrichment functionality just like an ESB, because though they are "network" devices, they are also full-proxies. &lt;/p&gt;  &lt;p&gt;But that's not "deep XML packet inspection", or even just "deep packet inspection". That's flow or even message-based processing, not packet processing. The terms "packet inspection" and "[insert application layer protocol here]" should never be used concurrently in the same sentence. &lt;/p&gt;  &lt;p&gt;Unless you're trying to explain why it is that packet processing is teh fail when it comes to true visibility into and manipulation of application messages. &lt;/p&gt;  &lt;p&gt;&lt;em&gt;Imbibing: Water&lt;/em&gt;&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:773939e6-0c36-47b3-bd6a-cd1e4a2b3677" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/MacVittie" rel="tag"&gt;MacVittie&lt;/a&gt;,&lt;a href="http://technorati.com/tags/F5" rel="tag"&gt;F5&lt;/a&gt;,&lt;a href="http://technorati.com/tags/XML" rel="tag"&gt;XML&lt;/a&gt;,&lt;a href="http://technorati.com/tags/packet-processing" rel="tag"&gt;packet-processing&lt;/a&gt;,&lt;a href="http://technorati.com/tags/message%20based%20processing" rel="tag"&gt;message based processing&lt;/a&gt;,&lt;a href="http://technorati.com/tags/full%20proxy" rel="tag"&gt;full proxy&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SOA" rel="tag"&gt;SOA&lt;/a&gt;&lt;/div&gt;&lt;div class='blogtags'&gt;&lt;/div&gt;&lt;img src="http://devcentral.f5.com/weblogs/macvittie/aggbug/3291.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lori MacVittie</dc:creator>
            <guid>http://devcentral.f5.com/weblogs/macvittie/archive/2008/05/22/3291.aspx</guid>
            <pubDate>Thu, 22 May 2008 19:12:03 GMT</pubDate>
            <wfw:comment>http://devcentral.f5.com/weblogs/macvittie/comments/3291.aspx</wfw:comment>
            <comments>http://devcentral.f5.com/weblogs/macvittie/archive/2008/05/22/3291.aspx#feedback</comments>
            <wfw:commentRss>http://devcentral.f5.com/weblogs/macvittie/comments/commentRss/3291.aspx</wfw:commentRss>
            <trackback:ping>http://devcentral.f5.com/weblogs/macvittie/services/trackbacks/3291.aspx</trackback:ping>
        </item>
        <item>
            <title>Accelerating AJAX</title>
            <link>http://devcentral.f5.com/weblogs/macvittie/archive/2008/05/20/3279.aspx</link>
            <description>&lt;p&gt;If you've ever used the quite popular &lt;a href="http://www.prototypejs.org" target="_blank"&gt;Prototype&lt;/a&gt; framework, you've noticed that there are some unique options available that are designed to help reduce the number of connections made to the server when automatically updating specific content. The &lt;em&gt;decay &lt;/em&gt;rate in Prototype's &lt;em&gt;&lt;a href="http://www.prototypejs.org/api/ajax/periodicalupdater" target="_blank"&gt;PeriodicalUpdater&lt;/a&gt;&lt;/em&gt; is designed to help reduce the number of requests made to the server when content is not refreshing on every request. &lt;/p&gt;  &lt;p&gt;&lt;em&gt;        Ajax.PeriodicalUpdater("content-id", "url", { frequency: 10, decay: 2, method: 'get'} )&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;This code will start making a call to &lt;em&gt;url &lt;/em&gt;and updating &lt;em&gt;content-id &lt;/em&gt;every 10 seconds. If the content hasn't changed, &lt;em&gt;decay &lt;/em&gt;will be used to increase the update interval, essentially doubling the time between calls until the content has changed, at which time the interval is reset to its original value and the process begins again. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_Web%202%20and%20Application%20Delivery%20PUBLIC.jpg" target="_blank"&gt;&lt;img style="margin: 0px 10px 0px 0px" height="261" src="http://devcentral.f5.com/weblogs/images/devcentral_f5_com/weblogs/macvittie/125/o_Web 2 and Application Delivery PUBLIC.jpg" width="348" align="left" /&gt;&lt;/a&gt; I point this out because it's an attempt to ameliorate the problems inherent with making continuous requests for content including the additional burden on the server of maintaining a connection. Maintaining the connection requires the maintenance of a session on the server, which consumes resources and may impact the total capacity of that server. &lt;/p&gt;  &lt;p&gt;One would think that by increasing the interval when content is not changing would decrease the burden on the server, but that's not entirely true. At some point the interval between requests becomes high enough that a new connection will be necessary and the burden changes from maintaining a session to opening/closing a &lt;a href="http://www.faqs.org/rfcs/rfc793.html" target="_blank"&gt;TCP&lt;/a&gt;/&lt;a href="http://www.faqs.org/rfcs/rfc791.html" target="_blank"&gt;IP&lt;/a&gt; connection and creating a new session on the server. &lt;/p&gt;  &lt;p&gt;Basically, the solution is a good effort, but it still places a burden on the server. Combining this partial solution with an &lt;a href="http://www.f5.com/glossary/application-delivery-networking.html" target="_blank"&gt;application delivery network&lt;/a&gt; that combines &lt;a href="http://www.f5.com/pdf/solution-guides/user-experience-guide3.pdf" target="_blank"&gt;connection optimization&lt;/a&gt; and &lt;a href="http://www.f5.com/products/big-ip/product-modules/webaccelerator.html" target="_blank"&gt;web application acceleration&lt;/a&gt; technology such as dynamic caching will complete the solution. The web application acceleration solution alleviates the burden on the server when the content hasn't changed, thus making &lt;a href="http://www.prototypejs.org" target="_blank"&gt;Prototype's&lt;/a&gt; solution even more efficient, and is smart enough to know when to revalidate the content it's caching. &lt;/p&gt;  &lt;p&gt;The connection optimization features of the &lt;a href="http://www.f5.com/products/big-ip" target="_blank"&gt;application delivery controller&lt;/a&gt; ensure that the server isn't overwhelmed at any time by excessive requests, even if the content is changing every second and requires processing on the server, by mediating client requests and managing the connections to the server. &lt;/p&gt;  &lt;p&gt;Not using &lt;a href="http://www.prototypejs.org" target="_blank"&gt;Prototype&lt;/a&gt; but still want to get the benefits of dynamically updating intervals? An application delivery controller can help you there, too, if it's smart enough to be a platform on which you can programmatically manipulate content in requests and responses. &lt;a href="http://devcentral.f5.com/weblogs/macvittie/archive/2007/11/19/2993.aspx" target="_blank"&gt;This post&lt;/a&gt; explains how to use &lt;a href="http://devcentral.f5.com/Default.aspx?tabid=75" target="_blank"&gt;iRules&lt;/a&gt; and a &lt;a href="http://www.f5.com/products/big-ip" target="_blank"&gt;BIG-IP&lt;/a&gt; to dynamically adjust the AJAX update interval for requests. &lt;/p&gt;  &lt;p&gt;&lt;em&gt;Imbibing: Coffee&lt;/em&gt;&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:f77b9c2b-da01-4c47-b06a-e695a3f047dd" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/MacVittie" rel="tag"&gt;MacVittie&lt;/a&gt;,&lt;a href="http://technorati.com/tags/F5" rel="tag"&gt;F5&lt;/a&gt;,&lt;a href="http://technorati.com/tags/BiG-IP" rel="tag"&gt;BiG-IP&lt;/a&gt;,&lt;a href="http://technorati.com/tags/application%20acceleration" rel="tag"&gt;application acceleration&lt;/a&gt;,&lt;a href="http://technorati.com/tags/application%20delivery" rel="tag"&gt;application delivery&lt;/a&gt;,&lt;a href="http://technorati.com/tags/prototype.js" rel="tag"&gt;prototype.js&lt;/a&gt;,&lt;a href="http://technorati.com/tags/AJAX" rel="tag"&gt;AJAX&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Web%202.0" rel="tag"&gt;Web 2.0&lt;/a&gt;,&lt;a href="http://technorati.com/tags/caching" rel="tag"&gt;caching&lt;/a&gt;,&lt;a href="http://technorati.com/tags/connection%20management" rel="tag"&gt;connection management&lt;/a&gt;,&lt;a href="http://technorati.com/tags/development" rel="tag"&gt;development&lt;/a&gt;&lt;/div&gt;&lt;div class='blogtags'&gt;&lt;/div&gt;&lt;img src="http://devcentral.f5.com/weblogs/macvittie/aggbug/3279.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Lori MacVittie</dc:creator>
            <guid>http://devcentral.f5.com/weblogs/macvittie/archive/2008/05/20/3279.aspx</guid>
            <pubDate>Tue, 20 May 2008 11:36:38 GMT</pubDate>
            <wfw:comment>http://devcentral.f5.com/weblogs/macvittie/comments/3279.aspx</wfw:comment>
            <comments>http://devcentral.f5.com/weblogs/macvittie/archive/2008/05/20/3279.aspx#feedback</comments>
            <wfw:commentRss>http://devcentral.f5.com/weblogs/macvittie/comments/commentRss/3279.aspx</wfw:commentRss>
            <trackback:ping>http://devcentral.f5.com/weblogs/macvittie/services/trackbacks/3279.aspx</trackback:ping>
        </item>
    </channel>
</rss>