Sunday, September 8, 2019

Basics to Understand Modern Infrastructure


When discussing modern infrastructure or cloud infrastructure lots of terms are tossed around like virtualization, container, docker, etc. While it is not essential for everyone to understand these in detail, a basic/fundamental understanding/view is becoming essential for those who are  in the field of software development.

In fact, even a lot of people who may already use one or more of these, may still have some "vagueness" when it comes to explaining them to others. So, I wanted to capture some quick points which helped me have a high level  understanding of these. These may not be 100% technically correct, but should help the aforementioned purpose.

Virtualization / Virtual Machine (VM)

This once is fairly straight forward and most of us have a clear view on this. We have a physical machine with certain resources. Slicing this into multiple machines virtually is called virtualization. The OS running on these machines will see them as a physical machine. By the way, the physical machine is referred as the metal or bare metal servers. Sometimes they are also referred as host machines. The slices are called virtual machines or VMs.

Vagrant

When slicing the physical machine into multiple into virtual ones, we need to provide the definition, including its software configuration, for each of these machines. As multiple virtualization tools came up, there was a need to create this definition that was not tied to a specific tool. Vagrant is a tool that fills that need. Create the definition as a vagrant definition and use that definition to run the VM and the software setup on any virtualization tool.
Container and Docker

A container is actually a combination features of Linux kernel which provide an isolation to a group of processes. For this reason they are also called as OS level virtualization. While the features required for this like cgroups and namespace isolation are available at the OS level, container tools offer them as a bundle, hiding the details. See LXC

Docker is a tool that helps to define such containers with a specific run time like OS etc. and then run them by leveraging the container features of Linux. See here for more details and technically correct information.

Kubernetes
Kubernetes (you would see this also referred as k8s) is a container orchestration platform. Instead of dealing with individual containers, Kubernetes deals with what's called a Pod, that represent the group of resources for an application. It then manages them by scaling the number of instances, choosing the node to run them, monitor, restart etc. See here for more information.

Thursday, August 29, 2019

Starter Toolkit for Programming Beginners

One of the things that is going on in my mind for a while was creating a quick guide on the toolkit for programming beginners. When I say toolkit, I don't mean the tools like IDE etc., but rather the skills and nuances that are mostly learnt on the job, assuming that we get to have a good mentor. It is not uncommon for even programmers with enough experience in the industry not getting a chance to acquire these skills.

Some of the Gen Y/Z kids may have got some insight into some of these aspects, thanks to the active opensource communities. But, still collating these in one place so that they get a view or an introduction to most of these by the time to get into full-time programming.

I am planning to expand on each of these topics, as the time permits and would be linking to the blog article as I write them.

Here is the inventory of items that are part of the tool kit, with predominant focus on model web applications and mobile apps:

  • Understanding of the networking involved - the client browser to multiple servers where different pieces even seeming simple websites exist, the overwhelming TLAs invented to scare the new comers, etc.
  • Understanding what happens in the server and what happens in the client (the web and mobile)
  • Security - What are the basics to know and modern security concepts
  • Source control or version control - How to protect your work from getting lost
  • Refactoring - The art of routing maintenance of the code you write 
  • Debugging anything
  • Scripting tools a.k.a. Automating boring work
  • *nix Basics - Programmers paradise