With the advent of micro-services, the application design paradigm has undergone a major shift. The days of developing monolithic applications are over. We are bringing in the principles (read SOA) hereto the preserve of applications or system integration space into the application development world.

General steps for solution architecture are –
  • Break down/decompose the application into functional areas. These functional area’s provide us the with the bounded context
  • Within the functional bounded context, design/define your micro services
  • Functional areas talk to each other over micro services or use some kind of event queue models 
  • Each of the functional areas only expose services to be consumed by the application 
Since the micro-services are consumed within the application, the need of ESB is not there. There is no message transformation or mediations required. But service discovery & load balancing of service instance still need to be done, new tools have come up (e.g. Netflix Eureka)

Now from the design perspective, you have the service identified, exposing endpoints.
Qs comes, who will do the orchestration of service invocation and aggregation of data from multiple services? 

Where does the intelligence lies ?


  • Server Side - Create an aggregator service that internally invokes other services (across functional domains) and aggregates the results. This aggregator service is invoked by the application presentation tier
  • Presentation/Application Side – If you implementing JSP or server side view creation, the presentation tier can perform the orchestration across the services and aggregate the data. One can use Lambda/Futures to implement non blocking call model also
  • Client Side – In this case, the invocation of services and aggregation of data happens at client side. The UI is composes of multiple widgets, which call up individual services and aggregate the response on the client side

Where should you intelligence lie?

There is no correct answer, depending on the use case, different options can be applied. One can also apply multiple options within the same application depending on the type of the client to be supported or at times, you do not want to expose individual services and an aggregator service might be better.

This post originally appeared at www.techspot.co.in
Slide deck of my talk at Cloud Connect 2013 in Mumbai.   I spoke on the topic of architecting multi-cloud applications.   

This post originally appeared at www.techspot.co.in

Pieter Hintjens, one of pioneers of the distributed computing and author of ZeroMQ library explains the basic premise behind ZeroMQ design and community. He covers fundamentals of designing large distributed applications using ZeroMQ library.

First and foremost, the book is meant for intermediate to advanced programmers. You need to be aware of the networking concepts. All examples are in C, so you should have good enough grounding in the language. Once you are past these, understanding the concepts in the book is fairly easy.

First part of the book is about Learning to work with ZeroMQ. This section covers all the patterns – Request-Reply, Dealer-Router, Pub-Sub, Proxy, Load Balancing and their combination and usage with each other. The example scenarios detail the scenario’s where these patterns fit in. This section also covers how to build reliability and availability as part of the distributed application.

There is a significant change in how software is developed over the last decade. Agile had been the buzzword over the last decade and probably is most significant of changes in software development to date. Now that the hype around Agile has been subsided, it is worth an effort to understand what it is like post agile. Often we see Agile with a narrow perspective, limiting it to a few programming practices and nothing more. We also fail to notice the indirect influence and the larger impact of Agile over the last decade.

State of post Agile Software Development will have to be seen in multiple dimensions in order to really understand its impact:

  •  Software Development & Life cycle tooling landscape has completely changed 
  •  Software Project management methods (apart from development method) have changed 
  •  Focus on Software craftsmanship
  •  Re-imagined Technology stack