Tuesday, November 22, 2016

Why In-memory computing plays an important role in Microservices Architecture?

Microservices is the new architecture paradigm everyone is talking about, but it comes with its own set of complexities. As our industry gets more matured about using Microservices architecture, one of the key learnings coming out as:
The outer architectural building blocks are playing far more important role than the inner architecture of each microservice itself.
I will be sharing my perspective on microservices' outer architectural building blocks (In-memory computing & caching, API Gateway, Containers, DevOps & Cloud Computing) in a series of upcoming blog posts. This blog post is focused on "in-memory computing technology", which plays an important role in microservices architecture.

In-memory computing, in itself, is a vast technology domain but in the context of microservices architecture, I would like to keep it focused on following solution offerings:
  • In-memory database - a database system primarily residing in memory (SQL or NOSQL).
  • In-memory data grid - distributed computing based caching system usually having KV (key-value) storage.

In-memory database (IMDB)
In-memory database plays a collaborative role in microservices architecture as usually it can be deployed independently and provides highly efficient storage support to microservices. 

Note that to sustain data stored in in-memory database during deployments, a backup approach with file-system based storage is required.

These are following key design patterns, which can be applied in the context of in-memory database:
  • Pattern A - IMDB per microservice, where each microservice having its own storage
    • Applicability: Greenfield development where you have opportunity to do microservices based architecture first
    • Pros: Independent (inclusive of deployment flexibility) & completely in adherence to microservices principles
    • Cons: Duplication of data across services
  • Pattern B - IMDB as a shared component across multiple Microservices having common storage
    • Applicability: Brownfield development where you are on a path to refactor monolith application to microservices
    • Pros: Practical approach when you have shared data across services
    • Cons: Not completely aligned with Microservices principles
  • Pattern C - Hybrid of Pattern A or B (some microservices having shared database)

Microservices Architecture - In-memory database design patterns

In-memory data grid (IMDG)
In-memory data grid relies on distributed computing using clustering as underlying approach and provides a shared component (grid) for CRUD operations using memory.

As microservices architecture recommends independent deployable units with minimal shared data, in-memory data grid is not completely aligned to this architectural approach. However, in-memory grid products can provide independent cache nodes to respective microservice with variation of distributed cluster to store backup data in the grid.
In nutshell, conceptually these are different approaches:
  • Microservices architecture - It promotes independence and less dependency for linear scalability (cluster of instances of microservice but clustering at layer level is not recommended).
  • In-memory data grid - It relies on cluster of nodes (data layer) for horizontal scalability (nodes can be added/removed on need basis for scalability).

Because of the above reason, vendor like Oracle has started their cloud roadmap with less emphasis on Oracle Coherence for microservices architecture and more on cloud based offering for Cache-as-a-service, which can be easily integrated with microservices Architecture. However, this is also similar to common grid solution with variance that cloud is now playing the common grid. Also, In-memory grid solution is still relevant and playing its role behind the scenes (to support cloud's cache-as-a-service). 

From applicability perspective, following patterns can be leveraged for microservices architecture along with in-memory datagrid solution:
  • Pattern A - In-memory data grid as event/messages store
    • Applicability: Primarily for inter-microservice communication, this pattern can be leveraged.
  • Pattern B - In-memory data grid as shared data
    • Applicability: To store shared data such as backend system response (cached data), response data, content data, etc.
  • Pattern C - In-memory data grid as storage
    • Applicability: To store data in grid for a microservice and use partition approaches to separate data for each microservice

To conclude, in-memory computing plays a significant role for Microservices architecture as an underlying storage mechanism for each microservice. Also, in-memory grid computing offers an alternative solution, which respects microservice's principle of independence up to certain extent and provides a out-of-the-box solution to solve inter-communication & storage challenges for microservice architecture.


 In-memory database & In-memory data grid solutions
In-memory database & In-memory data-grid solutions

Thursday, March 24, 2016

5 Skills A Software Developer Should Have To Be A Smart Developer

A software developer in any project plays a very critical role in realizing architecture & design. Current modern architecture world needs modern or smart developers, where they should possess pragmatic skills. Being Aware, Being Social & Being Smart is what world is looking forward to.
Smart Developer is the need of the hour
So, how do we define a smart developer? 5 key areas, which can make a developer a smart developer:

  • Ability to be focused & goal oriented
It starts with introspection and planning for your career. You can think of an approach as you take for your code:
§               Keep it modular - Personal, professional - both aspects need to be well-thought of and your TODOs (like in code), needs to be taken care of on regular basis.
§               Keep it clean & comply with rules - As we follow coding compliance rules, some rules for yourself and keep your objectives very clean and measurable
§               Keep it loosely coupled - Like your code, don't couple many objectives together - keep it simple and flexible so that they can vary independently.
§               Keep it measurable - Like your code performance SLA, keep your objectives SLA based and measure it every fortnightly/monthly/quarterly/yearly as frequent as possible.

  • Ability to market & sell your idea
o                 This is the most ignored aspect and the most difficult part. As you grow, your ideas need to be told and to be executed and in order to that, first thing is you need to sell your ideas to people. 
o                 Storytelling is a well-known technique to convey your thoughts in a way anybody can understand.
o                  SapientNitro has redefined Storytelling to Storyscaping, which is a new way to tell powerful stories with connected experiences (used in marketing). This can be applied in usual storytelling as well.

  • Ability to increase your productivity
o                 A constant effort & thought process to come up with new & improved ways to do things. A simple example - a Jmeter script to do unit-level performance test and reduce cost of quality by detecting any issues earlier.
o                 Share your knowledge with team (in the form of blog or webinars). It helps to improve productivity of entire team and also an opportunity to get feedback from others.

  • Ability to keep up with learning
o                 By reading blogs from leading tech companies (Netflix Tech Blog,Oracle OTNAWS Blogs, IBM Emerging Tech BlogDZoneTechGig,TechCrunch),
o                 Through developer wsebsite of tech companies (such as Facebook for DevelopersTwitter DevelopersAmazon AWSFacebook for developers)
o                 Asking questions on question-answer websites (such as QuoraStackoverflow)
o                 Learning through MOOC sites (CourseraUdemy etc.) or Youtube channels
o                 Finally, by following key technology people/companies on social media channels (Twitter, LinkedIn, etc.).

  • Ability to keep a healthy mind, body & soul
    • The most important one as it keeps up the spirit and make sure we have fresh & healthy mind to counter any challenge and come up with innovative ways to do things.
In conclusion, these 5 skill-sets can help being more successful in today's demanding culture with dynamic & fast changing technology world.



All data and information provided on this site is for informational purposes only. This site makes no representations as to accuracy, completeness, correctness, suitability, or validity of any information on this site and will not be liable for any errors, omissions, or delays in this information or any losses, injuries, or damages arising from its display or use. All information is provided on an as-is basis.This is a personal weblog. The opinions expressed here represent my own and not those of my employer or any other organization.