Adding resiliency in services

Recently I have been asked to work on few resiliency improvement in our system. As part of that I had to work on implementing different retry strategies to handle partial failures, batching, queuing etc. I learnt a good deal from few articles and sharing them here:

  1. Implementing Resilient Applications – This is a good resource from Microsoft documentation which talks about different resiliency patterns.
  2. Marc Brooker has couple of good articles on Exponential back off and Jitter. Definitely a good read.
  3. Polly – Polly is a .NET resilience and transient-fault-handling library. This is a very rich library and if you go through the github link you would also find some great links to PluralSight tutorials and many interesting reading links.

Experience working in Azure DevOps team

I have been working with Azure DevOps for the last 6 years and it has been an amazing experience. I have been part of the team since it was called TFS Online, then VS Online, then VSTS and now Azure DevOps. As I have joined new team, I wanted to recollect some of my memories.

  1. I still remember the day I joined Visual Studio team when we were developing Visual Studio 2013 (it was still under development). We use the earlier version of VS to build the next version and I was thrilled about it (using VS to build VS :)).
  2. Our team owned the Load test framework which was part of VS Ultimate SKU. I felt proud that we are one of the key contributors to the revenue 😉
  3. I have done improvements in the Load test framework.
  4. After a couple of months, we started building Cloud Load Test Service – this is the first Azure DevOps services built from Hyderabad and it was great experience to be part of it.
    1. As part of this team, I worked on initial scale improvements to meet our preview goals.
    2. Worked in building telemetry collection, analysis and building dashboards.
    3. Built experiences in VS for configuring and viewing Application Insights data.
    4. Built the first user experience in Azure DevOps for CLT
    5. Built key experiences in Azure Portal for Load testing Azure App Service.
  5. After spending a good 4 years in building CLT, moved to Release Management aka Azure Pipelines.
    1. Built key experiences:
      1. Azure App Service CD – Connect 2016
      2. Azure DevOps Project – Connect 2017
      3. Azure Kubernetes support in Azure DevOps – Build 2018
    2. Gained deep understanding of Azure Portal architecture.
  6. Feel really proud of receiving good awards and recognition.

Made good number of friends, had a great time with team outings (Lonavala, Kerala, Goa), worked with real best brains, great technologies (we being the developer services org need to maintain the best practices), fantastic managers, even better management.

Pretty amazing time, memories to stick for a very long time.

I am moving to a team to work on massive high scale stuff. Hope to have a good learning curve in the new team.

Learning Blockchain

A few days back, when I was looking at my LinkedIn profile, I got a recommendation to learn “Blockchain Basics”. Given that the course was for an hour I could finish it. Though it was a good introduction, the course made me curious (of course left me confused leaving so many questions :P). Today I happened to watch a video by Mark Russinovich (CTO of Microsoft Azure) which gave a very good technical information of Blockchain, bitcoin, ethereum, COCO framework etc.

This blog is to share pointers to the getting started with blockchain.

  1. Introduction to Blockchain by Mark Russinovich – This is definitely a must watch video.
  2. Blockchain basics on LinkedIn – This got me started with Blockchain.
  3. How did Satoshi manage to mine bitcoins as the first user – Thank god there is an answer to this. I had the same question as you need to do some proof of work for transactions to earn bitcoins (as per my initial understanding). This post gave an answer how you can earn.
  4. What is a smart contract? – This is a pretty well written blog. I liked the analogy with buying movie tickets which made it easier to understand the concept better.

I should probably find more time to explore ethereum and solidity and try out to create a small ICO on my private cluster as shown by Mark in his video.

Blockchain is pretty exciting.


Getting started with Kubernetes

I have started understanding Kubernetes aka k8s as part of my work recently and went through some learning. I will share some high level notes which I have made while reading through different content and also the links to resources for a quick getting started.


  • Good to have a high level understanding of containers (Docker etc)

Learning links:

  1. Kubernetes tutorial – this is the first link I went through to get a very high level overview of what Kubernetes is and how do we go about using different commands on the k8s cluster.
  2. Scalable Microservices with Kubernetes – this is a very good course on Udacity which gives very good overview. This same course is referenced from the above tutorial.
  3. Using Visual Studio Team Service to deploy applications to Azure Container Service – This blog talks about using VSTS Release Management solution to automate deployments to K8S
  4. A very good site to understand few internal details about K8S, worth the read – Julia Evans Kubernetes

Learning notes:

  • In simple terms you can consider k8s as a platform for containers cluster management.
  • A k8s cluster has a master node – which manages the cluster and a set of other nodes – which are workers that run the applications. For a production traffic scenario, k8s cluster should have atleast 3 nodes
  • Key terms in k8s – Deployment, Pods, Volumes, Services, kubelet, ConfigMaps/Secrets etc
  • minikube is a light weight k8s implementation that creates a VM on local machine and deploys a simple cluster with one node.
    • While following the Hello Minukube section on windows, you can run “minikube docker-env” instead of “eval $(minikube docker-env)“. Once the “minikube docker-env” command is executed it prints a message with the subsequent command (a for loop) to be run to set certain variables, ensure to run that step
  • kubectl commands are used for all the cluster management

Lets understand the key terms:

  • Deployment: 
    • is a declarative way to say what goes where in the cluster
    • use ReplicaSets to maintain enough number of Pods as the desired config state
    • used to enforce the desired state as provided by the user
    • if a node goes down, deployment takes care of creating a new pod and place it into the available nodes
    • create a ReplicaSet to handle pod creation/deletion/updation
    • own and manage ReplicaSets
  • Pods:
    • Logical Applications
    • each pod has one more containers. When you have apps that have hard dependency on one another, you package them to the same pod
    • Shares volumes. Volumes live as long as the pod lives
    • has a shared namespace – help in containers to communicate with each other
    • each pod has one IP address
    • containers in a pod can communicate with each other using inter-process communication (IPC). Containers in different pods have different IPs, hence can’t communicate using IPC
    • Why Pods?
  • Volumes: 
    • you can consider them as shared storage
  • Kubelet:
    • each node has a kubelet
    • manages the pod and containers running on it
    • its an agent which helps the nodes to talk to master
  • Services:
    • defines logical set of pods and policy by which to access them
    • provide persistent endpoints for pods
    • enable loose coupling between pods
    • are defined using YAML/JSON
    • set of pods targeted by a service is determined by label selector
    • pod’s IPs are not exposed out of cluster without service
    • services have a integrated load balancer to distribute network traffic to all pods
    • you can expose you pods/containers using “kubectl expose” command
    • While creating the service following the “Hello Minikube” Section, set the type as NodePort in case the LoadBalancer type doesn’t work.

Kubernetes is very actively worked on and many things are rapidly changing. There is an interesting talk from Deis (PaaS on Kubernetes), in which it is mentioned that in CNCF “Kubernetes  has been offered as a seed technology” – this also signifies that k8s is a good technology to invest your time to learn.

PS: Azure has a very strong support for containers, container registry, different orchestration platforms like Docker Swarm, DC/OS, K8s. Do try out things on Azure and keep learning.

Electricity transfer process for a new flat in Hyderabad

(First non-technical post on my blog ;-))

This post is to highlight the simplicity in the process of transferring electricity bill to an individual’s name from Builder and encourage people to avoid using an agent help (especially avoiding the special pricing part). The overall process hardly take an hour and is cost effective.

Below are the steps and required documents:

  1. Take a printout of the document shared here, this document needs to be signed by your builder. Fill all the required details before giving the document to the builder
  2. Carry a Xerox of your latest EC. (not more than 3 months old). It takes about 250 Rupees to get a new EC. You would receive the EC within 4 days. You can save this 250 if you have a latest one.
  3. Take 2 copies of the Sale deed on both sides. One is needed for address change and the other for title change.
  4. 2 Passport size photos
  5. ID Proof
  6. Latest electricity bill
  7. You would need a Rs.100 Title Change Indemnity bond.
  8. You need to pay a Rs.25 challan
  9. Link document (both sides) if flat is land owner’s flat
  10. Rs.10 NOC by the joint owner, in case your flat is jointly owned.

Go to the near by electricity department with the above mentioned documents. There are enough shops around the electricity board where you can get bond mentioned in point 7 (even though it is 100/-, you would end up paying 160 or so depending on the shop). Usually there would be someone around in the board who would help you organise your documents and help in submission. I found the staff in Kukatpally electricity board really helpful and they didn’t expect any money.

In this process, you would maximum spend an amount of 500/-. If you try to go through a broker you would pay around 1200/- to 1500/- (it can vary depending on your relation and negotiation). The difference here might not be high but the point is if we understand the system, we can appreciate how things are organised, else we keep cribbing about bribery. Even if couple of folks avoid paying additional prices after reading this, I would be happy 🙂


Web debugging tip : Using Fiddler to load local files instead of remote files

I was recently asked a question by one of my team mates if there is a way to load a file locally instead of the remote file, keeping rest of the files served from the remote server. My instinct said it should be very well possible to do it. I did a quick search and found an interesting feature in Fiddler, it is named “AutoResponder”.



Here is a good video by Eric, the creator of Fiddler which talks about it

As shown in the video, you can create a rule which can say – given a request which matches a pattern pick a local file. After adding the rule, do select “Enable rules” for the rules to take affect. Make sure to select “Unmatched request passthrough”, else all the requests which doesn’t match the rule will fail.

You can also do little advanced things using FiddlerScript. For example: if you want to pick a local file which matches a pattern, you can write code in OnBeforeRequest() and specify the pattern match by your self.

And in order for these rules to work, you shouldn’t bundle your files for obvious reasons 🙂

Continuous Delivery to Azure App Services using VSTS Release Management

Our team has been working on a very important feature addition to Azure App Service for the last couple of months which went Preview in the recent connect() 2016 event. I have built most of the UX and back end for enabling this experience.

This is feature is about how to make it easy for a customer to configure Continuous Delivery/Deployment from the new Azure Portal for a given App Service. The Source code can be either in VSTS (currently only Git Repos are supported) or Github and the applications can be either ASP.NET or ASP.NET Core.

A detailed blog post can be found here – Continuous Delivery to Azure App Service

A video of the demo shown at the Connect() event by Brian and Jamie can be found below (You can skip to 55 minutes to start seeing our experience :))

Do try out the new feature and share your comments.