Thursday, September 23, 2010

How to determine deployment architecture

Lot of times especially when your Application is Enterprise level and you need to deploy that to some hardware it becomes really tough to see what Hardware is exactly needed and how do we deploy the application. The following information should be considered for doing the hardware sizing and telling about the CPU/Memory and concluding on probable deployment architecture.

There are few factors based on which we do hardware sizing and Memory sizing.

  * How many interfaces are there in the project?
  * What would the the expected peak load on each of the interface (External Systems like DB etc.s) ?
  * What is the exposure for that interface - i.e. is that by SLSB / WS /
    BPEL /BPEL based WS ?
        o Whats the load on each of the interface ?
        o Whats the message structure look like?
        o Whats the max. payload?
        o What is the hardware on which this External system runs? --
          This question is basically to know the hardware limitations
          of the systems on which the interfaces run. These should be
          factored while committing the performance numbers on that
          interface.
        o TPS (Transaction Details on each of the interfaces)
  * Whats the rationale for exposing that interface in that way ?
  * Whats the messaging infrastructure?
        o How many Queues / Topics ?
        o Whats the message load on each of these ?
        o What are the expected criteria for this -- for determining whether this is going to be deployed as another server
          process or on a grid like..
              + Reliability
              + Effect of message loss
              + Are the WS messages pushed to any Queue? If Yes, is this our system's responsibility or who is taking care
                of the reliability at this level? -- I am asking this question since we are do not have any guarantee there.
        o Do we need a grid? -- Rationale for the same. Hardware on  which the messaging grid runs.
  * Are there any EOD jobs running? If Yes, what is the expected  thruput in that case?
  * Are we running any jobs that are based on Scheduler?
        o what's the OS and environment on which it runs?
        o Are we going to incorporate the OS based scheduler? -- In some cases where we do need fine grained scheduling we need to go in for OS based schedulers.
  * What were the considerations for the grid infra at the Runtime level 
        o Whats the SLA with respect to critical interfaces?
              + Do we need to run them 24 * 7?
              + What is the expected down time of the server and at
                what interval?
              + Are we using file based interfaces at any point?
                    # how many and what are the configurations ? -
                      Since File I/O is the most time intensive and depends on things like
                          * RPM of the hard disk
                          * Interface/bus speed
                          * hardware sink etc..
              + What are the memory considerations that are thought off?
        o How many ears we are going to deploy on the Application Server?
        o Application Server version?
  * Whats the LAN infrastructure we will be having -- Is that going to be Gigabit Ethernet or is that going to be something else? This
    determines the Network latency?
  * Does the client have anything like DataCenter ? If Yes, whats the
    infrastructure there?
  * What are the future considerations for this project?
        o Scalability aspects of the system.
        o With respect to software and hardware future requirements? -
          Where would they be hosted?

YOY data with respect to projections in % (Users / TPS / etc..)

  * Business Process tuning considerations :
        o Are we going to have persist-able BPs? If yes how many in
          number?
        o We need to have a matrix where in we have number of
          instances at any point in time and then how much time each
          BP is going to be live.
        o What would the possible number of simultaneous instances we
          are going to have at any point in time?
        o Are we going to have the BP's enabled in clustered
          environment? If Yes, have we decided about the BP
          persistence Database?
        o Are we going to have any BP where in we are going to enable
          the XA persistence at the "Whole BP" level? --
              + What are the considerations for such architecture?
              + Are the scalability issues taken care or factored
                while thinking about such things?
        o Details of the WS implementations
              + Do we have security in place
              + What is the max size of message
        o

  * How are we going to deploy the UDDI Server etc. ?
  * Constraints for suggestions of the architecture -
        o Money
        o Cost
        o Time
        o Administrative
  * Possible Deployment Architectures
        o Talk about what are all the possibilities
  * Choosing an optimal architecture.
        o Choose the one best suites the context out of the lifted
          ones above.
Hardware -- What are the considerations... Which vendor etc. Based on the above information and the CPU on the Hardware proposed we can think of the number of boxes etc..
OS details -- Whats the OS, patch level etc..
Volumetric with respect Load - No. Users
Concurrent peak load
Need for session persistence / replication for the logged in users -- would everything be maintained by SSO which is the gateway -- If there are any internal users who can circumvent SSO based stuff.
What would be the average size of data thats going into the session 
Total users for the system
If clustered -- need for use of HADB for session storage.

Apart from the above which talks essentially vanilla Application Server with application consideration, we need to consider the following too which are going to reside on the environment along with the details of co-location.

SSO / SSO agents
Rule Engine component
Any other External interfaces like Databases / ERPs etc..
Any storage / retrieval systems in place etc?

With respect to the External interfaces have we run the QOS criteria and arrived the TPS that it supports on the Hardware? To think about the end to end  performance of the system we need to evaluate and know supported numbers at the interface level since that the numbers at that level would influence the overall numbers.

Once we have the above information, we can look at the measured thru-puts at some site like spec.org. We will know the the standard tests that are done on different kinds of machines, their scalability and other aspects from such reading. Depending upon the application needs we should able to choose the vendor.

Happy Deployment!!!

No comments: