Are Nanoservices a thing?
In class, we learned about how containerization is replacing virtualization. For me, this was an interesting topic because Professor Barreto explained the technology infrastructure differences, the benefits, and some of the challenges. As I dug deeper, I discovered that emerging trends beyond Containerization include Microservices, and even Nanoservices. Yes, they are a thing.
Before we get to next generation, let’s start with the current state. Virtualization duplicates an entire OS, whereas containerization uses an OS that’s installed on a stack. According to Webopedia, containerization is defined as “a lightweight alternative to full machine virtualization that involves encapsulating an application in a container with its own operating environment.” I ran across this image, similar to the one Professor Barreto shared, which illustrates the infrastructure differences between the two approaches:
A containerized instance has its own file system, software, binaries, and libraries. Because the containerized application abstracts on top of an existing OS without duplicating the OS, it has many benefits:
- Quicker set-up time because OS is already installed
- Quicker performance (boot-up time) for the app
- Reduces overhead and costs
Two challenges that we discussed in class include OS versioning and weaker isolation. For versioning, if an app requires macOS 10.13.5, but the stack has 10.2, then there would be issues running the containerized application. For weaker isolation, if there’s an issue at the OS layer, say a virus is installed from Container #1 – that virus could impact applications on Container #2.
One challenge we didn’t discuss in class at length is OS limitations. If a containerization application requires Windows and macOS applications, this could create limitations. For example, Unity’s Window’s application is more robust than the macOS, and as a result, most Unity developers prefer a Windows platform. However if a containerized application operates on top of macOS, it would limit functionality.
Beyond understanding benefits and functionality of containers, I also wanted to understand the leading Containerization as a Service firms. I ran across a list which listed the following:
- Docker – software for building and shipping apps
- AWS Fargate – containerizes Amazon’s ECS and EKS services
- Google Apigee – Full API management for full API lifecycle
- Kubernetes – Linux containerization management
- Azure Containerization – Azure, Microsoft’s cloud computing service, has multiple services available to containerize applications and environments
The infrastructure of Containerization enables “Microservices,” which are quickly becoming developer’s preferred method for building enterprise and consumer applications. Microservices are a variant of SOA (service oriented arch). It structures an application as a collection of services. When a microservice is too focused, some may label it as a “Nanoservice.” A nanoservice is not just a smaller microservice, according to one expert, it also must be deployable, reusable, and usable. It must provide some sort of stand-alone benefit. One example of a nanoservice is Boto 3, which is a Python SDK that enables AWS interaction for building S3 applications.