<?xml version="1.0"?>
<rss version="2.0">
<channel>
  <title>Coding the Architecture - scalability tag</title>
  <link>http://www.codingthearchitecture.com/tags/scalability/</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>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>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>
  
  <item>
    <title>Separating the non-functionals</title>
    <link>http://www.codingthearchitecture.com/2007/10/02/separating_the_non_functionals.html</link>
    
      
        <description>
          &lt;p&gt;
I was recently involved in a discussion where we were talking about the best way to increase the scalability of a software system, which is essentially a Java EE web application.
The most obvious way to do this is to horizontally scale-out the application across multiple web servers (Tomcat, in this case), although I found it really interesting that the conversation soon turned towards topics such as the performance impact that session replication would have. Important as this is, we had moved on to talk about performance, availability, reliability and failover before finishing the scalability discussion. After all, there are some other options that are available.
&lt;/p&gt;

&lt;p&gt;
My experience indicates that it&#039;s really easy to get sidetracked when dealing with non-functional requirements and this is just one such example. Yes, you do need to take a holistic view of your non-functional requirements, but you do also need to take each in turn and look at all of the available options. In this particular example, I had a very clear idea of the scalability requirements but not the availability and reliability requirements. For all I know, it might be okay if a user is forced to log back into the application in the event of a Tomcat node going down.
&lt;/p&gt;

&lt;p&gt;
My advice is this - start by focussing on one thing at a time. On a related note, &lt;a href=&#034;http://www.infoq.com/news/2007/10/whatisscalability&#034;&gt;Think you know what scalability is?&lt;/a&gt; is a timely article that provides a good overview of what scalability is all about.
&lt;/p&gt;
        </description>
      
      
    
    
    
    <category>How do you define software architecture?</category>
    
    <comments>http://www.codingthearchitecture.com/2007/10/02/separating_the_non_functionals.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2007/10/02/separating_the_non_functionals.html</guid>
    <pubDate>Tue, 02 Oct 2007 11:07:00 GMT</pubDate>
  </item>
  
  <item>
    <title>Scaling is much more than software</title>
    <link>http://www.codingthearchitecture.com/2006/01/24/scaling_is_much_more_than_software.html</link>
    
      
        <description>
          &lt;p&gt;
From &lt;a href=&#034;http://www.mosseri.org/blog/archives/2006/01/scaling_is_much.html&#034;&gt;Scaling is much more than software&lt;/a&gt; comes this great little snippet about one of the ways to solve problems with your architecture.
&lt;/p&gt;

&lt;blockquote&gt;
What was the solution? Re-evaluating the business logic and requirements with the customer.
&lt;/blockquote&gt;

&lt;p&gt;
Whenever I&#039;m talking to aspiring software architects about the role, I always find myself emphasising and re-emphasising that an architect must take both the functional and the non-functional requirements into account when designing a system. This reminds me of the previous question about &lt;a href=&#034;http://www.thepragmaticarchitect.com/2006/01/19/business_analysis.html&#034;&gt;business analysis&lt;/a&gt; - it&#039;s certainly part of the role and, as an architect, you shouldn&#039;t be afraid to question the customer&#039;s expectations, particularly if you feel that they are going to adversely affect other aspects of the development. Architecture, and it&#039;s success, is about balance.
&lt;/p&gt;
        </description>
      
      
    
    
    
    <category>What is the the role of a software architect?</category>
    
    <comments>http://www.codingthearchitecture.com/2006/01/24/scaling_is_much_more_than_software.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2006/01/24/scaling_is_much_more_than_software.html</guid>
    <pubDate>Tue, 24 Jan 2006 22:21:38 GMT</pubDate>
  </item>
  
  </channel>
</rss>

