A piece of code in a dev environment is in a nascent state ; it needs a production environment to generate the cashflow for the company. This is the time when architecting deployments becomes a crucial task .
1. Never underestimate the importance of a staging environment . Dev-UAT resemble each other closely ,
and Staging - Production environments should resemble even closer. Every deployment model, script, scalability, failover, high availability solution that needs to be there in production, needs first to be there for testing and optimization in the staging server . Once it stabilizes , it can be safely deployed to production.
2. Anwers to the following questions should be clear to you because these answers will determine how your deployment diagram will look like.
What are my hardware / software limitations
How critical is the system
How many physical servers/boxes do I have
Minimum two if you want failover
Do I have virtualization technology?
What does my software license limit me to ?
Is it a per cpu license, per virtual machine license or per server license.
How scalable should my system be ?
If it supports x systems now, in y year/s might it require to support z more?
How robust is my system
If some day the Transaction per second tripled, can it still work smoothly?
How will my system have a clean high availability / failover startegy
Without losing or duplicating data if one server goes down.
What existing systems will yours need to interact/integrate with?
How do you intend to monitor the system once it has been deployed?
How secure does the system need to be
Identify the distribution architecture
Will your application have two tiers, three tiers, or more?
Here is a stepwise guide to build a small deployment diagram of an integration system.
1. Identify the scope and make separate models:
Are you planning to deploy a version of a single application or scale it out to the deployment of the system within your organization .
2.Identify the nodes and their connections
Think about separate modules of your application and which servers they will be deployed in .
Eg . Make a digram of all the different kind of servers your system might need :Web Servers, Application Servers, Database Servers, JMS Server, Mail Server etc. You may represent them as boxes. In this step you need to make platform decisions such as the hardware and operating systems to be deployed, including how the various nodes will be connected
Add to the diagram which module will be hosted in which environment .
Connect these with the kind of interaction these modules will have ( eg messages, ack, RMI) .
Distribute software to nodes.
What you have here is the basic deployment diagram .
In my next post I will discuss further how to factor in different considerations like sizing, resource optimization , redundancy etc into the basic diagram so that you can reach the next level , ie, getting your deployment architecture ready for the enterprise level.