<?xml version="1.0"?>
<rss version="2.0">
<channel>
  <title>Coding the Architecture - deployment tag</title>
  <link>http://www.codingthearchitecture.com/tags/deployment/</link>
  <description>Software architecture for developers</description>
  <language>en</language>
  <copyright>Coding the Architecture</copyright>
  <lastBuildDate>Wed, 16 May 2012 08:01:04 GMT</lastBuildDate>
  <generator>Pebble (http://pebble.sourceforge.net)</generator>
  <docs>http://backend.userland.com/rss</docs>
  
  
  <item>
    <title>Simplifying deployment</title>
    <link>http://www.codingthearchitecture.com/2009/09/24/simplifying_deployment.html</link>
    
      
        <description>
          &lt;p&gt;
We had an interesting discussion about simplifying deployment on the &lt;a href=&#034;http://www.softwarearchitecturefordevelopers.com&#034;&gt;training course&lt;/a&gt; last week and I thought it would be good to re-iterate some of the points here. As part of the course, everybody is asked to put together an architecture for a small case study that can be decomposed into two major components. One of these is a scheduled/batch component responsible for processing some input files and the other is a user interface for users to modify some of the configuration used during the processing step. We&#039;ve seen many different architectural approaches to solving this case study although it&#039;s natural for people to think about them as components that are deployed separately. One typical example is a Java web application providing the user interface and a separate standalone Java program initiated by cron for the batch processing. Another option would be an ASP.NET application and a Windows service.
&lt;/p&gt;

&lt;p&gt;
We have a similar situation on one of my current projects. The main part of the system is an n-tier web application where the ASP.NET pages use WCF middle-tier services, which in turn communicate with either a backend system or a SQL Server database. There&#039;s also a batch element to the system, where a job is scheduled on the SQL Server box to look in the database and perform a very small amount of batch processing (in this case, generating files for onward transmission to another system). At a predefined interval, SQL server starts a standalone program up that looks for work to do, performs that work and then shuts down. At the next occurrence of the interval, the job is started up again. 
&lt;/p&gt;

&lt;p&gt;
In both of these cases, the architecture works and the use of a scheduled job means that we don&#039;t need to worry about failover and fault tolerance so much. If the job fails or crashes for some reason, the next run of the schedule will restart the process meaning that we don&#039;t (necessarily) need to worry about transient problems. We do need to make sure that the process initiating the scheduled job is always running, but typically this is something like an operating system or database, which are themselves usually monitored. One of the trade-offs with this approach is monitoring of the actual job though. Because such jobs are normally standalone programs that simply get executed on a scheduled basis, they have a very short window in which they are active and can be proactively monitored.
&lt;/p&gt;

&lt;p&gt;
Another trade-off is that we&#039;ve introduced a slightly more complicated deployment process. Okay, so it&#039;s not complicated to install a standalone application in the right place and schedule it to run, but we do have another *step* in the deployment process. In the case of our real-world system, we&#039;ve put a lot of effort into making the build and deployment process as streamlined as possible for the majority of the application, but sometimes we even forget to deploy the scheduled job! Partially this is because it rarely changes, but it&#039;s also because it sits on the edge of the overall architecture. It *is* an important component, but it&#039;s not immediately apparent if it stops working because (for example) the underlying database schema has changed. We tend to notice the website not working though.
&lt;/p&gt;

&lt;p&gt;
We&#039;re currently working on some new functionality that will see the introduction of another scheduled job into the architecture. In this case, we want to send e-mail from our application and have chosen to write e-mails into the database on an immediate basis so that they&#039;re captured, with a separate job sending them on a scheduled basis. With an existing scheduled job in place, it&#039;s very tempting to follow the same approach and build another standalone application that hooks into the same scheduler mechanism. But in doing this, we now have two components that we could potentially forget about and we&#039;ve introduced yet another step into the deployment process.
&lt;/p&gt;

&lt;p&gt;
This is one of those occasions where you can do some refactoring at the architecture level and simplify the deployment model by moving the scheduled jobs into our existing middle-tier. After all, it&#039;s a long running process with a very well understood build and deployment process, plus we have some bespoke diagnostics to monitor the status of the services it provides. Moving these standalone jobs into the middle-tier has been achieved by creating a very simple &#034;timer service&#034; framework (a wrapper around the platform provided timers) that kicks off a couple of timers to run the existing code every time an interval elapses. The benefits of doing this are that we&#039;ve (a) simplified the deployment process and (b) we&#039;ve introduced the ability to integrate these scheduled services with our existing middle-tier diagnostics.
&lt;/p&gt;

&lt;p&gt;
Coming back to the case study in the training course, again, merging both of the batch and UI components into a single process is a great way to simplify the deployment for what is essentially a very simple system. This also provides additional benefits when the operations and support team aren&#039;t familiar with the technology, perhaps because you&#039;re introducing something new to them. Logically, the batch and UI components are very separate in their behaviour and responsibilities, but this is one of those occasions where bringing the logical design back to reality can help you identify opportunities for simplification. The logical to physical mapping doesn&#039;t have to be one-to-one.
&lt;/p&gt;
        </description>
      
      
    
    
    
    <category>How do you define software architecture?</category>
    
    <comments>http://www.codingthearchitecture.com/2009/09/24/simplifying_deployment.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2009/09/24/simplifying_deployment.html</guid>
    <pubDate>Thu, 24 Sep 2009 15:29:58 GMT</pubDate>
  </item>
  
  <item>
    <title>Is UML on the way out?</title>
    <link>http://www.codingthearchitecture.com/2008/04/03/is_uml_on_the_way_out.html</link>
    
      
        <description>
          &lt;p&gt;
One of the presenters at QCon  (I think it was John Davies) asked the audience whether they used UML 2.0 and only a couple of people raised their hands. I wasn&#039;t one of them - I briefly looked at UML 2.0 a while back but I didn&#039;t feel compelled enough to use it. This got me thinking, how widespread is the use of UML nowadays?
&lt;/p&gt;

&lt;p&gt;
From my own perspective, here&#039;s where I tend to use UML within the context of a bespoke software project.
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#034;http://www.ibm.com/developerworks/rational/library/769.html#N1006A&#034;&gt;Use case&lt;/a&gt; diagram : A high level view of the system functionality and scope.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#034;http://www.ibm.com/developerworks/rational/library/769.html#N1010E&#034;&gt;Activity&lt;/a&gt; diagrams : A high level view of the business process that is being realised by the software. This is useful for showing parallelism.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#034;http://www.ibm.com/developerworks/rational/library/769.html#N10086&#034;&gt;Class&lt;/a&gt; and &lt;a href=&#034;http://www.ibm.com/developerworks/rational/library/769.html#N100C1&#034;&gt;sequence &lt;/a&gt; diagrams : Information about architectural patterns and blueprints (e.g. describing a common implementation pattern). These are typically used by the development team.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#034;http://www.ibm.com/developerworks/rational/library/769.html#N10128&#034;&gt;Component&lt;/a&gt; and &lt;a href=&#034;http://www.ibm.com/developerworks/rational/library/769.html#N10146&#034;&gt;deployment &lt;/a&gt; diagrams : Details about deployable components and how instances of those components will be/are deployed on pieces of hardware.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
As I&#039;ve mentioned before, I tend to go with a &lt;a href=&#034;http://www.codingthearchitecture.com/2008/01/18/how_much_software_design_detail_in_your_architecture_document.html&#034;&gt;just enough&lt;/a&gt; approach to the &lt;a href=&#034;http://www.codingthearchitecture.com/2008/03/18/software_architecture_document_guidelines.html&#034;&gt;software architecture document&lt;/a&gt;, but I do definitely find that UML is useful because you don&#039;t have to think about the notation. Having said that, I do use Visio-style block diagrams for representing things like the logical and physical/infrastructure architecture (you can see a simplified version of such a diagram on &lt;a href=&#034;http://www.codingthearchitecture.com/files/presentations/20080304-an-architecture-case-study.pdf&#034;&gt;page 3 in this presentation&lt;/a&gt;). I do this for two reasons. First of all, I don&#039;t think that UML provides an easy to understand notation for this sort of thing and second, these high-level architecture diagrams are typically distributed to a wider audience, some of who aren&#039;t technical and don&#039;t understand UML.
&lt;/p&gt;

&lt;p&gt;
So then, is UML on the way out? I&#039;d be interested in your thoughts on the following.
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What notation do you use for your architecture and design diagrams?&lt;/li&gt;
&lt;li&gt;Is a standard diagramming notation important to you?&lt;/li&gt;
&lt;li&gt;How does your audience influence how you create diagrams?&lt;/li&gt;
&lt;li&gt;If you do use UML, &lt;a href=&#034;http://www.codingthearchitecture.com/2007/07/20/whats_your_uml_tool_of_choice.html&#034;&gt;what&#039;s your UML tool of choice?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
        </description>
      
      
    
    
    
    <category>How do you share software architecture?</category>
    
    <comments>http://www.codingthearchitecture.com/2008/04/03/is_uml_on_the_way_out.html#comments</comments>
    <guid isPermaLink="true">http://www.codingthearchitecture.com/2008/04/03/is_uml_on_the_way_out.html</guid>
    <pubDate>Thu, 03 Apr 2008 19:32:00 GMT</pubDate>
  </item>
  
  </channel>
</rss>

