Sunday, February 1, 2015

Architect - enroute


I'm trying to transition from a senior level engineer to a Software Architect. I believe the key to that transition is designing applications that can scale to take enterprise level performance loads. That in turn boils down to the following questions:-


  1. Most production systems are distributed, i.e. several nodes sit behind a domain address and share the work load as determined by a load balancer.
    1. How to do Capacity Planning for such a system:-
      1. number of nodes
      2. amount of memory and processors on each node
      3. How do you performance test such a system.
    2. If such a load balanced cluster exists at a middleware level, What is the best way of running a batch job over that cluster?
    3. How does such a system maintain state or sessions?
  2. How to determine the best technology stack for a given application?
  3. When would you use an asynchronous channel of communication? JMS or Kafka?
  4. How would you determine if a regular RDBMS such as Oracle or a NoSQL system such as Cassandra needs to be used?
  5. When would you use object caching systems like MemcacheD or CouchBase? 
  6. How to trace requests that flow across several clusters e.g. an incoming HTTP request for a page view could flow across a front server cluster and then proceed to a middleware cluster before hitting the DB and then back..

I hope to find the answers to all these questions and come up with blog posts for each of these.. Architect en route.. :)