<?xml version="1.0"?>
<rss version="2.0">
<channel>
  <title>Coding the Architecture - performance tag</title>
  <link>http://www.codingthearchitecture.com/tags/performance/</link>
  <description>Software architecture for developers</description>
  <language>en</language>
  <copyright>Coding the Architecture</copyright>
  <lastBuildDate>Mon, 21 May 2012 09:41:00 GMT</lastBuildDate>
  <generator>Pebble (http://pebble.sourceforge.net)</generator>
  <docs>http://backend.userland.com/rss</docs>
  
  
  <item>
    <title>Jitter</title>
    <link>http://www.codingthearchitecture.com/2011/09/06/jitter.html</link>
    
      
        <description>
          &lt;p&gt;
On CTA we often talk about non-functional requirements and how this can drive the architecture of a system. Most of these cover issues of desired response time and capacity (latency, throughput, storage etc) but I believe that Jitter is a metric which is either forgotten or unknown to some software engineers – even though it&#039;s essential for hardware engineers.
&lt;/p&gt;
&lt;p&gt;
The most basic definition would be “variation in response”. In other words, the response, transmission or latency in a system will not be a constant. In many systems this variation goes unnoticed as it is small compared to the response itself. However I believe that as the systems we deal with become more performant and demanding, software engineers will need to understand, measure and tune this.
&lt;/p&gt;
&lt;p&gt;
A quick web-search of jitter shows the term being used to cover performance degradations due to activities such as garbage collection or unexpected user actions. This seems to greatly annoy telecommunications and hardware engineers who would argue that these are predictable, system and user events which could just be turned off – although ignoring your users and asking for a machine with infinite memory may get you fired. They would argue that true Jitter is an unpredictable variation in response whose occurrence frequency follows a normal distribution. Like most effects that are normally distributed it is caused by cumulative random events, most of which are due to the switching actions. Personally, I think you should measure whatever makes sense in your system.
&lt;/p&gt;
&lt;p&gt;
Jitter means that hard limits for latency can be statistically likely but not guaranteed. Specifications such as:
&lt;/p&gt;
&lt;blockquote&gt;
“The system should respond to action X within 200ms”.
&lt;/blockquote&gt;
&lt;p&gt;
Should be challenged and replaced with statements like:
&lt;/p&gt;
&lt;blockquote&gt;
“The systems should response to action X within 200ms for 95% of requests”
&lt;/blockquote&gt;
&lt;p&gt;
Of course we are making the implicit assumption that this is normally distributed and the system WILL, eventually, respond. You might want to explicitly state that all actions will be executed but stating a hard limit for all responses means that if you measure for long enough, you&#039;ll break your specification.
&lt;/p&gt;
&lt;p&gt;
Jitter can be quite obvious on messaging based systems that contain many hops. This will also tend to have a nice, Gaussian distribution due to the cumulative random delays.
&lt;/p&gt;
&lt;p&gt;
The best way to measure Jitter is to set up a standard test where you can sequentially fire a large number of requests into your system and measure the response time. However, rather than simply add these up and find an average we need to count how many responses are in a set of timing windows e.g. how many responses fall between 5ms-10ms, 10ms-15ms, 15ms-20ms etc. If we plot the number in each section we should see our expected Normal distribution.
&lt;/p&gt;

&lt;p&gt;
Reducing Jitter is subtly different from reducing latency itself. You are trying to reduce the variation in the response times or &#039;squeeze&#039; the response profile.
&lt;/p&gt;
&lt;p&gt;
Often when you reduce latency you will reduce the Jitter proportionally however this is not always the case. For example, network hops are a common cause of latency but each hop will increase the Jitter as well – you are accumulating more random delays with each hop. If you change the physical architecture of your system to have more but quicker hops you will almost certainly increase the jitter (remember this is the variation in response and not the actual response) even if the average latency is lower. It IS important to measure it and monitor as the system evolves.
&lt;/p&gt;
&lt;p&gt;
Simon is covering a number of related issues in his Skills Matter tutorial
&lt;a href=&#034;http://www.codingthearchitecture.com/2011/08/25/load_testing_for_developers.html&#034;&gt;Load Testing for Developers&lt;/a&gt;.

&lt;/p&gt;
        </description>
      
      
    
    
    
    <category>How do you define software architecture?</category>
    
    <comments>http://www.codingthearchitecture.com/2011/09/06/jitter.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2011/09/06/jitter.html</guid>
    <pubDate>Tue, 06 Sep 2011 08:02:41 GMT</pubDate>
  </item>
  
  <item>
    <title>Stating the obvious</title>
    <link>http://www.codingthearchitecture.com/2009/06/16/stating_the_obvious.html</link>
    
      
        <description>
          &lt;p&gt;
If you&#039;ve watched &lt;a href=&#034;http://www.codingthearchitecture.com/2009/06/15/a_developers_guide_to_load_testing_video.html&#034;&gt;A developer&#039;s guide to load testing&lt;/a&gt;, you will have seen the graph below already. It shows the results from load testing a website written in .NET with the &lt;a href=&#034;http://jakarta.apache.org/jmeter/index.html&#034;&gt;Apache JMeter&lt;/a&gt; load testing tool. Along the bottom of the graph are the actions that make up the load test script, while the vertical axis is the response time in seconds. Each line represents the results from a different test run with a different number of concurrent users.
&lt;/p&gt;

&lt;div align=&#034;center&#034;&gt;
&lt;img src=&#034;http://www.codingthearchitecture.com/images/load-testing-graph.png&#034; alt=&#034;Load testing graph&#034; /&gt;
&lt;/div&gt;

&lt;p&gt;
The interesting thing about this graph is that the average response time for any page request is just a few seconds, with the exception of the spike around a third of the way in. This spike is caused by the .NET web tier having to aggregate information from several calls to a backend system, where some resource locking bottlenecks the incoming requests. From analysing the load testing environment during the test run, we were able to ascertain where the hotspot was because (a) the CPU load for the web-tier dropped off when this call was taking place and (b) we could see the requests being queued up on the backend system. From a technical perspective then, load testing is a fantastic way to find and highlight bottlenecks in the overall architecture, providing an opportunity to present some real evidence about the performance degradation and where the hotspots are.
&lt;/p&gt;

&lt;p&gt;
Furthermore, in this example there was a general feeling that this particular action was slow, but the evidence was only empirical. People had experienced this slowness but had never actually measured it before. &lt;a href=&#034;http://www.codingthearchitecture.com/authors/kseal/&#034;&gt;Kevin&lt;/a&gt; made a comment during the last user group where he mentioned that the architect sits between the technical and business spaces, spanning the two and bringing them together. Raw results from a load test are one thing, but presenting the data in a way that makes sense to non-technical people can tell a completely different story. Sometimes your load testing results state the obvious, but sometimes they don&#039;t.
&lt;/p&gt;
        </description>
      
      
    
    
    
    <category>How do you deliver software architecture?</category>
    
    <comments>http://www.codingthearchitecture.com/2009/06/16/stating_the_obvious.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2009/06/16/stating_the_obvious.html</guid>
    <pubDate>Tue, 16 Jun 2009 14:08:33 GMT</pubDate>
  </item>
  
  <item>
    <title>Using new technology will make it faster</title>
    <link>http://www.codingthearchitecture.com/2009/05/15/using_new_technology_will_make_it_faster.html</link>
    
      
        <description>
          &lt;p&gt;
I heard an interesting throwaway comment recently that I thought I&#039;d share. To paraphrase...
&lt;/p&gt;

&lt;blockquote&gt;
The system is being rewritten with new technology, so it won&#039;t be slower than what we have now.
&lt;/blockquote&gt;

&lt;p&gt;
While it&#039;s true that new and updated technology *can* improve performance, it&#039;s also very easy to misuse that technology and come up with something that performs perceivably slower. I&#039;ve seen this a few times, predominantly where simple websites have been rewritten using new technologies. One of the biggest contributing factors is that new technologies often provider &#034;better&#034; and more complex ways to solve the same problem. For example, it&#039;s easy to see how a simple two-tier web application could be rewritten with a web-MVC framework and a distributed middle-tier added to make the architecture more fashionably SOA-like. Here, the added complexity could result in net performance gains or losses, depending on how the technology is applied through the design and architecture.
&lt;/p&gt;

&lt;p&gt;
There&#039;s nothing wrong with refreshing a software (or hardware) system with new technology, but it&#039;s naive to assume that performance won&#039;t degrade. New technology generally brings added complexity, and this complexity introduces more things that can go wrong. Any software/hardware architecture should undergo *some* non-functional testing before it goes live, and this still holds true for systems that are being rewritten as part of a technology refresh strategy. Don&#039;t assume anything ... &lt;a href=&#034;http://www.codingthearchitecture.com/pages/book/role.html#architectureEvaluation&#034;&gt;test it&lt;/a&gt;.
        </description>
      
      
    
    
    
    <category>How do you define software architecture?</category>
    
    <comments>http://www.codingthearchitecture.com/2009/05/15/using_new_technology_will_make_it_faster.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2009/05/15/using_new_technology_will_make_it_faster.html</guid>
    <pubDate>Fri, 15 May 2009 10:57:11 GMT</pubDate>
  </item>
  
  <item>
    <title>Discussion from the May 2008 user group</title>
    <link>http://www.codingthearchitecture.com/2008/08/30/discussion_from_the_may_2008_user_group.html</link>
    
      
        <description>
          &lt;p&gt;
Although this happened a few months ago, we recorded the discussion that followed our London user group where Moudud Ahmed talked about &lt;a href=&#034;http://www.codingthearchitecture.com/2008/04/25/london_user_group_may_2008.html&#034;&gt;building a high volume, low latency system in Java&lt;/a&gt;. Here are some of the topics that we talked about.
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Performance and scalability.&lt;/li&gt;
&lt;li&gt;Measuring latency.&lt;/li&gt;
&lt;li&gt;Domain-driven design.&lt;/li&gt;
&lt;li&gt;BEA&#039;s real-time Java platform.&lt;/li&gt;
&lt;li&gt;Writing applications with large heap sizes that can survive not doing garbage collection during the working day.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
The audio levels are very low on the recording, but we think that the interesting discussion was worth rescuing and publishing. You can grab the &lt;a href=&#034;http://static.codingthearchitecture.com/podcasts/londonusergroup-may2008.mp3&#034;&gt;discussion from here (mp3 format)&lt;/a&gt; ... just don&#039;t listen on a tube train! If you missed the user group, a &lt;a href=&#034;http://skillsmatter.com/podcast/java-jee/coding-the-architecture-user-group&#034;&gt;streaming video of the presentation&lt;/a&gt; is also available.
&lt;/p&gt;
        </description>
      
      
    
    
    
    <comments>http://www.codingthearchitecture.com/2008/08/30/discussion_from_the_may_2008_user_group.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2008/08/30/discussion_from_the_may_2008_user_group.html</guid>
    <pubDate>Sat, 30 Aug 2008 06:57:27 GMT</pubDate>
  </item>
  
  <item>
    <title>Who should own the non-functional tests?</title>
    <link>http://www.codingthearchitecture.com/2008/07/07/who_should_own_the_non_functional_tests.html</link>
    
      
        <description>
          &lt;p&gt;
This is a follow-up to a post entitled &lt;a href=&#034;http://www.codingthearchitecture.com/2007/11/05/performance_tuning_java_systems.html&#034;&gt;Performance tuning Java systems&lt;/a&gt; that I made last year, which talked about some performance testing that I was doing for a customer. Last week, I went back to the same customer to make some small tweaks to the test scripts, and this very simple act highlighted something I thought was very interesting.
&lt;/p&gt;

&lt;p&gt;
The key thing about the system being tested is that it&#039;s a customized version of an existing vendor product (a high volume, low latency trading platform), with the vendor being responsible for making all of the changes. At some point last year, my customer wanted to run some tests to ensure that the platform could grow with their business, and that&#039;s where I got involved. After a round of testing, environment reconfiguration and patches, the system more or less delivered on what it promised.
&lt;/p&gt;

&lt;p&gt;
Fast-forward to the current day and I was bought back in to make some changes to the test scripts, because the vendor had made some changes to their web application. Since our performance tests were JMeter based, those changes had a knock-on effect on the tests. The thing I found interesting is that the performance test pack hadn&#039;t been handed over to the vendor. Regardless of the reasons, the benefits of doing this are fairly clear.
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Ownership&lt;/b&gt; : although it&#039;s good that my customer wanted to proactively test some of the non-functional aspects of the software, I can&#039;t help feeling that the software vendor should have ownership of the test pack. My understanding is that they do little in the way of non-functional testing themselves, so this is an ideal opportunity to rectify this.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Continuous execution&lt;/b&gt; : if the vendor has ownership, they can include the test pack as a part of their integration/build/release process for continuous execution and early warning of performance degrading changes.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Accuracy&lt;/b&gt; : I like to think that we did a good job at putting together the performance testing scripts, but we don&#039;t have the inside knowledge of the system that the vendor has. Vendor ownership would ensure that the test scripts are as accurate and representative as possible.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Up to date&lt;/b&gt; : the test scripts are inherently tied to the AJAX web application, which means that they need to be kept in sync when changes are made to the user experience. Again, the vendor is best positioned to do this, and taking a more proactive approach would ensure that user experience changes don&#039;t degrade the non-functional characteristics of the software.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
The overriding question here is why doesn&#039;t the vendor undertake their own performance testing? They *should* take responsibility for the non-functional characteristics of their software, particularly when they are making claims of how fast and scalable it is. But perhaps more interesting is that the vendor of another product in use in the same space also doesn&#039;t do performance testing. Shouldn&#039;t we be asking more from commercial product vendors?
&lt;/p&gt;
        </description>
      
      
    
    
    
    <category>How do you deliver software architecture?</category>
    
    <comments>http://www.codingthearchitecture.com/2008/07/07/who_should_own_the_non_functional_tests.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2008/07/07/who_should_own_the_non_functional_tests.html</guid>
    <pubDate>Mon, 07 Jul 2008 10:03:00 GMT</pubDate>
  </item>
  
  <item>
    <title>NFRs for system replacements</title>
    <link>http://www.codingthearchitecture.com/2008/05/28/nfrs_for_system_replacements.html</link>
    
      
        <description>
          &lt;p&gt;
As software architects, we tend to write about &lt;a href=&#034;http://www.codingthearchitecture.com/tags/nonfunctionalrequirements/&#034;&gt;non-functional requirements&lt;/a&gt; a lot; particularly about how they should be &lt;a href=&#034;http://www.codingthearchitecture.com/2007/09/06/engaging_without_non_functional_requirements.html&#034;&gt;defined&lt;/a&gt; and &lt;a href=&#034;http://www.codingthearchitecture.com/2007/09/26/nines.html&#034;&gt;challenged&lt;/a&gt; because of the &lt;a href=&#034;http://www.codingthearchitecture.com/2007/07/09/the_influence_of_non_functional_requirements.html&#034;&gt;influence&lt;/a&gt; they have. One of the reasons for talking about NFRs a lot is that, in the majority, project teams don&#039;t give them the attention that they should. And here&#039;s a great example that&#039;s slightly different from &lt;a href=&#034;http://www.codingthearchitecture.com/2007/09/06/engaging_without_non_functional_requirements.html&#034;&gt;the story where none of the NFRs were defined&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
As is the case in most organisations, technology has a limited lifespan. Perhaps the business evolves, the technology becomes harder to maintain, etc. Whatever the reason, many organisations regularly look at replacing their existing systems with solutions that are shinier and more buzzword compliant.
&lt;/p&gt;

&lt;p&gt;
In one of these cases, an organisation put together a 125 page specification for the replacement system detailing exactly what the system should do along with some details of the non-functional requirements. However, out of those 125 pages, only 1 of them featured the NFRs, and they can be summarised as follows.
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Performance&lt;/b&gt; : the system must be fast.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Scalability&lt;/b&gt; : the system must be able to support 100 messages per second.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Availability&lt;/b&gt; : the system must be available 24x7.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Security&lt;/b&gt; : only certain individuals are permitted to access the system.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
Credit where credit is due ... at least some thought was put into the non-functional requirements and conversations to explore those requirements aren&#039;t starting from scratch. But on the other hand, those requirements are meaningless!
&lt;/p&gt;

&lt;p&gt;
I want to end this post on a positive note, so let me contrast this story with another replacement project that I&#039;ve been involved with recently. In this instance, the team *had* thought about the non-functional requirements and had detailed definitions for what they should be. This is excellent, particularly considering that the non-functional requirements surrounding the current implementation are vague in nature. System replacements are an opportunity to revisit what&#039;s important,  and that includes the non-functional aspects too.
&lt;/p&gt;
        </description>
      
      
    
    
    
    <category>How do you define software architecture?</category>
    
    <comments>http://www.codingthearchitecture.com/2008/05/28/nfrs_for_system_replacements.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2008/05/28/nfrs_for_system_replacements.html</guid>
    <pubDate>Wed, 28 May 2008 10:35:00 GMT</pubDate>
  </item>
  
  <item>
    <title>Scalability Principles</title>
    <link>http://www.infoq.com/articles/scalability-principles</link>
    
      
      
        <description>
          &lt;p&gt;
At the simplest level, &lt;a href=&#034;http://www.infoq.com/news/2007/10/whatisscalability&#034;&gt;scalability is
about doing more of something&lt;/a&gt;. This could be responding to more user requests, executing more work or
handling more data. While designing software has its complexities, making that software
capable of doing lots of work presents its own set of problems.
This article presents some principles and guidelines for building scalable software systems.
&lt;/p&gt;&lt;p&gt;&lt;a href=&#034;http://www.infoq.com/articles/scalability-principles&#034;&gt;Read more...&lt;/a&gt;&lt;/p&gt;
        </description>
      
    
    
    
    <category>How do you define software architecture?</category>
    
    <comments>http://www.codingthearchitecture.com/2008/05/21/scalability_principles.html#comments</comments>
    <guid isPermaLink="true">http://www.infoq.com/articles/scalability-principles</guid>
    <pubDate>Wed, 21 May 2008 13:12:25 GMT</pubDate>
  </item>
  
  <item>
    <title>London User Group - May 2008</title>
    <link>http://www.codingthearchitecture.com/2008/04/25/london_user_group_may_2008.html</link>
    
      
        <description>
          &lt;p&gt;
Here are the details of the May &lt;a href=&#034;http://www.codingthearchitecture.com/pages/londonusergroup.html&#034;&gt;London User Group&lt;/a&gt;.
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Title&lt;/b&gt; : Building a high volume, low latency system in Java&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Summary&lt;/b&gt; : This session will provide some insight into the architecture, design and development of a greenfield high volume, low latency trading and pricing system. Topics include :
&lt;ul&gt;
&lt;li&gt;The architecture and design itself.&lt;/li&gt;
&lt;li&gt;How the early development of an executable reference architecture was used to help prove the low latency requirements.&lt;/li&gt;
&lt;li&gt;The structure of the team and how the architecture was shared between a team of architects.&lt;/li&gt;
&lt;li&gt;How mainstream technologies such as Java 5, Spring, JMS, and Oracle were used to successfully deliver a solution where other technologies like C++ might be the immediate first choice for low latency applications.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Speaker&lt;/b&gt; : Moudud Ahmed, &lt;a href=&#034;http://www.detica.com&#034;&gt;Detica&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Date&lt;/b&gt; : Tuesday, 6th May 2008&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Time&lt;/b&gt; : 18:30-20:00&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Location&lt;/b&gt; : Skills Matter, &lt;a href=&#034;http://maps.google.co.uk/maps?f=q&amp;hl=en&amp;q=1+Sekforde+Street+London&amp;sll=53.098145,-2.443696&amp;sspn=11.997343,29.619141&amp;ie=UTF8&amp;ll=51.523271,-0.104671&amp;spn=0.006061,0.014462&amp;z=16&amp;om=1&#034;&gt;1 Sekforde Street&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Format&lt;/b&gt; : Presentation followed by a breakout for discussion, with further discussion in a local pub (The Crown).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Cost&lt;/b&gt; : Free, but &lt;a href=&#034;http://skillsmatter.com/event/java-jee/coding-the-architecture-user-group-meeting&#034;&gt;registration is required&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p align=&#034;center&#034;&gt;
&lt;a href=&#034;http://www.skillsmatter.com&#034;&gt;&lt;img src=&#034;http://www.codingthearchitecture.com/images/skillsmatter.gif&#034; alt=&#034;Skills Matter&#034; border=&#034;0&#034; /&gt;&lt;/a&gt;

&lt;br/&gt;
Many thanks to Skills Matter for sponsoring the user group. 
&lt;/p&gt;
&lt;p&gt;
        </description>
      
      
    
    
    
    <comments>http://www.codingthearchitecture.com/2008/04/25/london_user_group_may_2008.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2008/04/25/london_user_group_may_2008.html</guid>
    <pubDate>Fri, 25 Apr 2008 13:30:52 GMT</pubDate>
  </item>
  
  <item>
    <title>Podcast #2 : QCon revisited</title>
    <link>http://www.codingthearchitecture.com/2008/03/25/podcast_2_qcon_revisited.html</link>
    
      
        <description>
          &lt;p&gt;
&lt;a href=&#034;http://www.codingthearchitecture.com/2008/03/06/the_first_cta_podcast.html&#034;&gt;As promised&lt;/a&gt; the 2nd CTA podcast is a roundtable discussion between some of the CTA contributors - namely &lt;a href=&#034;http://www.codingthearchitecture.com/authors/sbrown/&#034;&gt;Simon Brown&lt;/a&gt;, &lt;a href=&#034;http://www.codingthearchitecture.com/authors/sdalton/&#034;&gt;Sam Dalton&lt;/a&gt; and &lt;a href=&#034;http://www.codingthearchitecture.com/authors/kseal/&#034;&gt;Kevin Seal&lt;/a&gt;. In this podcast we discuss some of the themes emerging from the recent QCon conference held in London and our views on those themes.
&lt;/p&gt;

&lt;p&gt;
The podcast can be downloaded &lt;a href=&#034;http://static.codingthearchitecture.com/podcasts/podcast-march2008.mp3&#034;&gt;here&lt;/a&gt; or you can &lt;a href=&#034;http://www.codingthearchitecture.com/tags/podcast/rss.xml&#034;&gt;subscribe&lt;/a&gt;. Full show notes follow below:
&lt;/p&gt;

&lt;h3&gt;1. Introduction&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;QCon Conference London detail can be found &lt;a href=&#034;http://jaoo.dk:80/london-2008/conference/&#034;&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;2. Monitoring and Management (0:27)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Roll your own vs. &#034;off the shelf&#034; monitoring&lt;/li&gt;
&lt;li&gt;Asynchronous monitoring&lt;/li&gt;
&lt;li&gt;&lt;a href=&#034;http://www.jinspired.com&#034;&gt;JXInsight&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The need for an System Architect and an overall understanding of WHAT to monitor and a holistic view&lt;/li&gt;
&lt;li&gt;Including Monitoring NFRs upfront in SAD&lt;/li&gt;
&lt;li&gt;Monitoring the monitoring vs. best effort&lt;/li&gt;
&lt;li&gt;eBay and 1.5TB of monitoring and logfile information per day&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;3. Rehashing Refactoring (11:56)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Refactoring now mainstream, now emphasizing at the micro-level&lt;/li&gt;
&lt;li&gt;Code-debt - how can you measure it?&lt;/li&gt;
&lt;li&gt;Refactoring is not something to be &#034;saved up&#034;&lt;/li&gt;
&lt;li&gt;Lots of rearchitecture projects sold as refactoring&lt;/li&gt;
&lt;li&gt;Sometimes starting again is a better solution than large scale refactoring&lt;/li&gt;
&lt;li&gt;Why do things end up in such a mess so often?&lt;/li&gt;
&lt;li&gt;Need to get back to writing code for humans to understand&lt;/li&gt;
&lt;li&gt;Worry about emphasis on low-level code optimizations rather than architecture&lt;/li&gt;
&lt;li&gt;Is refactoring its own worst enemy being referred to as a separate discipline to regular software development?&lt;/li&gt;
&lt;li&gt;We are our own worst enemies - we (especially the architects) need to stand up for the quality of our code - stop allowing ourselves to be convinced to make shortcuts&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;4. The Return of the Architect? (25:08)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Thinking about performance, monitoring etc upfront&lt;/li&gt;
&lt;li&gt;&lt;a href=&#034;http://www.terracotta.org/&#034;&gt;Terracotta&lt;/a&gt;, &lt;a href=&#034;http://www.oracle.com/technology/products/coherence/index.html&#034;&gt;Coherence&lt;/a&gt;, &lt;a href=&#034;http://www.gigaspaces.com/&#034;&gt;Gigaspaces&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#034;http://www.codingthearchitecture.com/2007/03/15/qcon_open_terracotta.html&#034;&gt;Kevin&#039;s views on Terracotta&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;How much performance could you squeeze from a system in 2 weeks with code changes alone?&lt;/li&gt;
&lt;li&gt;Real-time VMs and performance improvements&lt;/li&gt;
&lt;li&gt;The benefits of continuous performance testing&lt;/li&gt;
&lt;li&gt;Premature optimization&lt;/li&gt;
&lt;li&gt;Understanding a system&#039;s deficiencies can be as valuable as fixing them&lt;/li&gt;
&lt;/ul&gt;
        </description>
      
      
    
    
    
    <comments>http://www.codingthearchitecture.com/2008/03/25/podcast_2_qcon_revisited.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2008/03/25/podcast_2_qcon_revisited.html</guid>
    <pubDate>Tue, 25 Mar 2008 10:23:20 GMT</pubDate>
  </item>
  
  <item>
    <title>Performance tuning Java systems</title>
    <link>http://www.codingthearchitecture.com/2007/11/05/performance_tuning_java_systems.html</link>
    
      
        <description>
          &lt;p&gt;
One of my current projects involves me performance testing a third party Java system. In essence, it&#039;s a distributed/n-tier Java EE web application and we&#039;re hitting it with a high simulated load thanks to Apache JMeter. One of the things we found is that performance degraded quite dramatically as load increased, to the point where some requests could take anywhere up to a minute or two to be serviced. By plotting the raw results and calculating (for example) the 95% percentile, we were able to see that only a very small number of the requests suffered in this way.
&lt;/p&gt;

&lt;p&gt;
After some investigation, the suspected cause of these high response times was &#034;stop the world&#034; garbage collection and we eventually proved this by monitoring the JVM during a test run. Thankfully, the new Java VMs include a ton of tuning options and I&#039;ve found the following references particularly useful in the past.
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#034;http://java.sun.com/docs/hotspot/gc5.0/ergo5.html&#034;&gt;Ergonomics in the 5.0 Java Virtual Machine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#034;http://java.sun.com/performance/reference/whitepapers/5.0_performance.html&#034;&gt;J2SE 5.0 Performance White Paper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#034;http://java.sun.com/javase/technologies/hotspot/index.jsp&#034;&gt;Java SE HotSpot at a Glance&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
So then, some advice :
&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Make sure that you define your &lt;a href=&#034;http://www.codingthearchitecture.com/tags/nonfunctionalrequirements&#034;&gt;non-functional requirements&lt;/a&gt; as early in the project as you can, specifying performance in the context of scalability. Once you&#039;ve done this, you can focus on figuring out &lt;a href=&#034;http://www.codingthearchitecture.com/2007/10/02/separating_the_non_functionals.html&#034;&gt;how to meet them&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Make sure that you test your key non-functional requirements as soon as possible, preferably with something like a &lt;a href=&#034;http://www.codingthearchitecture.com/2007/10/10/reference_architectures.html&#034;&gt;reference architecture&lt;/a&gt;. Tuning your JVMs early lets you gauge how much more performance you might get with further tuning in the future.&lt;/li&gt;
&lt;li&gt;Make sure that you document your JVM settings if you&#039;ve had to tune them to meet your performance targets. The system I&#039;m testing is a third party product and there&#039;s no way that the customer should even be running, what&#039;s basically a &#034;real-time&#034; system, on untuned JVMs.&lt;/li&gt;
&lt;li&gt;If you need to start investigating performance problems, this article over at InfoQ (&lt;a href=&#034;http://www.infoq.com/articles/the-box&#034;&gt;The Box: A Shortcut to finding Performance Bottlenecks&lt;/a&gt;) has some good tips for starting out on this route.&lt;/li&gt;
&lt;li&gt;Ensure that your Java system is easy to monitor, using something like JMX, because this will really help you prove and diagnose any issues you might come across. More on that later in the week.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;
If you get the opportunity to do some performance testing then I highly recommend it. Assuring the non-functional requirements is a key part of an architect&#039;s role so it&#039;s great experience.
&lt;/p&gt;
        </description>
      
      
    
    
    
    <category>How do you deliver software architecture?</category>
    
    <comments>http://www.codingthearchitecture.com/2007/11/05/performance_tuning_java_systems.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2007/11/05/performance_tuning_java_systems.html</guid>
    <pubDate>Mon, 05 Nov 2007 12:23:34 GMT</pubDate>
  </item>
  
  </channel>
</rss>

