Micro Wants to Move Beyond Containers with Go-Based Microservices Framework
London-based engineer Asim Aslam aims to translate his experience with building a microservices platform into a framework for easing that pain for others. He founded Micro last year, building on his experience as a former site reliability engineer for Google and cloud architect at Hailo, a British a taxi-hailing service.
So far he’s released the Go-based Micro toolkit and is working on a wider microservices platform.
“The focus for the industry has been mostly about containers: How do we move from VMs to containers? How do we move to public cloud? How do we move to being cloud-native? But there’s this thing called microservices, and I think that might help us in this next phase,” he said.
“Some players have emerged, but I don’t necessarily think the current players in the container ecosystem will be able to solve the problems because the container ecosystem is all about how I run my application. The microservices ecosystem is all about how I build my application. I think that’s a very different landscape.”
The Micro Toolkit
The Micro toolkit provides the core requirements for building and managing microservices, including an RPC-based (remote procedure call) library written in Go and a set of pluggable interfaces.
It uses a sidecar, a lightweight companion service conceptually “attached” to the parent (main) application to integrate applications written in any language via an HTTP interface.
Designed to be a pluggable system, the default service discovery mechanism for the registry is Consul, for instance, but it can easily be swapped with a plugin for etcd, zookeeper or anything else.
Its other features include:
- An API as a single entry point to query microservices and a gateway for external access.
- Reverse proxying, which, with microservice request routing, gives it the ability to support REST.
- A web UI providing a simple dashboard for observing and interacting with a running system.
- A command line tool to observe, interact and manage services in a running environment.
You’ll find a demo here.
Easing Developer Pain
At Hailo, Aslam helped built out a microservices platform on AWS, which led him to leave that job and start Micro.
“In 2013, the company was scaling very, very rapidly to compete with Uber. It hit the wall in terms of organizational and technological scale,” he explained.
“People couldn’t work in parallel on projects because of the monolithic code base. That meant we couldn’t do feature development in parallel. From the technical side, it wouldn’t scale for that same reason. So seeing that it seemed there was a need for it in the larger tech industry, but the tools just weren’t there.
“There’s quite a few people talking about microservices right now, but there’s not that many that have actually executed on it, and there’s even less tooling out there for it. So I thought there’s a need for this, so I thought who better than someone with the experience?”
So far, Micro is a one-man company. He has one enterprise sponsor using his tools in production, which also provides him a way to validate the tools he’s building, and two other companies working with them toward production.
He describes Micro as a layered system, with the toolkit just the first part.
“The fundamentals of microservices are service discovery. I need a way to communicate; I need to understand the protocols and whatnot. At the higher level, how do I do authentication? How do I do distribute tracing? How do I do monitoring in a microservices ecosystem? How do I do label-based routing or how do I dynamically route based on my requirements at the time and dynamic configuration? These are higher-level concerns that are needed in the microservices environment,” he said.
For developers, Micro focuses on simplifying building and managing distributed systems, Aslam said.
“We’re moving to this world of containers where they’re being orchestrated by some scheduling system, which means they come and go. That means your applications have to be developed in a different manner. They have to be fault-tolerant, they have to work at scale, especially if we have all this compute available to us and so many more people coming online,” he said.
“So I want to make it easy to write a distributed system. How do I write services that talk to each other? It provides you a way to write a server like you would any other server, except you would register it with a discovery system. It will provide you a client library to call other services almost as if you were calling them like native functions in your code. That’s where it gives you the building blocks.
“It doesn’t try to get in your way. A lot of frameworks are kind of magical. If you think of Ruby on Rails, how far it’s come and what it does for you. Micro’s not trying to be Ruby on Rails. It’s trying to be a very lightweight, robust framework,” he said.
The platform layer that he’s working on now will address enterprise concerns.
“At that layer, identity and authentication and encryption are really important,” he said. “As I work with this enterprise company, we’re going to fully get to those parts. Authentication will be built as OAuth2 and there will be service-to-service identification, and we will treat AWS-style IM (information management) policies as a core requirement of this system.”
He said he’s written first versions of everything and now is focused on testing. He predicts it will take another six to nine months of work until he’s comfortable using it in production.
In the past few days, he’s also written Micro Bot, which sits inside your microservices platform that allows you to interact via Slack, HipChat, XMPP and others.
“I started thinking about ChatOps and how powerful that is to be able to do things from Slack and HipChat. I decided to code something together and found I’d replicated the features of the command line tool into a bot,” he said.
“I think it’s a very powerful concept that, as we go further, could develop into something much more. When we think about this whole artificial intelligence thing, the management of microservices via the bot. What if you just told the bot to go run something and take care of it?”
Aslam’s isn’t the only microservices framework around: WSO2 and AquaJS, as well as Lightbend, previously known as Typesafe, have released versions in Java.
Aslam said microservices are not the holy grail for everyone.
“There are tradeoffs. It’s not the place where I’d recommend a company start. Just writing the system that’s monolithic first, I think that’s important. It happens organically. When you have one person, it’s very easy to write in a single code base. When you have 10, it might be a bit more difficult; when you have 100, it becomes almost impossible. So we’ll see where this ends up.”
Feature Image: “Game of Go in our club” by Jaro Larnos, licensed under CC BY-SA 2.0.