DevOps Engineering with Service Orientation

DevOps Engineering is often "perceived" as a operations matter. In fact, it's true but is not 100% JUST ops. There are some blurred lines between engineering and operations. When we take a look at the DevOps ecosystem we can highlight some great tools like Ansible, Terraform, Jenkins, Packer and so many others. Provisioning, Release, Observability, and SRE are different aspects of a broader DevOps adoption. The higher benefit comes when we start applying more engineering to DevOps. It's very important to have good tooling around. When we think about tooling engineering makes a lot of sense, however, even outside of the tooling space there are areas where we definitely need an engineering injection like Cloud Production Operation Automation. Releasing is the easy part, things get complicated when you automate the operational aspects of your systems. It sounds so meta or Inception(If you watch the movie) but Systems managing Systems looks the way to go for me. This pattern is at the very "core" of any cloud provider such as AWS, GCP or Azure. Managed Services are rising and becoming change changing in sense of speed, scalability and business enablement. AWS has Auto-Scaling groups that are capable to scale services instances without human intervention. Akka has a similar concept called Supervisors. The big pattern behind thins concepts is Self-Service Platform, Self-Healing Systems, and Self-Operating Systems.

Beyond Managed Services

Managed Services can be great and save a lot of money. At the end of the day, it really depends on your business. SMB might just use Managed Services all the time and be fine. No matter the size of your business will be in a BIG LOCK IN. There why I believe in Open Source and initiatives like CNCF. Somethings is not only about freedom or independence but actually about performance or timing or specific use cases. It's easy to scenarios where a managed services don't fit your needs.

 Right, so the natural solution might be build something in the house if you have the expertise might be a good idea. Someone might argue that is a lot of money in engineering. At the end of the day is a tradeoff between where you want to put your money and accept the tradeoffs of your choice. Do you want to put the money in Cloud Provider Bill or in People? There is no right or wrong here. IMHO cloud it will be a commodity at some point. That's why Kubernetes and having a multi-cloud solution like Waze, is the way to go.

However, when we go through the path of building self-service, self-healing, self-operating platforms in-house there are many challenges. Some of these I captured and shared in my previous posts:

The great thing about kubernetes is that is very interoperable. Once you build things for Kubernetes you will be able to run anywhere. These services required different DevOps mentality. They require different tools and different skills.

SOA meets DevOps Engineering

SOA is about principles. Managed Services has a great FIT for SOA mentality. Keep in mind I said SOA, not Microservices. Microservices are a flavor of SOA, however, microservices focus on fine granularity and IMHO often this managed-services cant be that small. Microservices have other principles like Isolation which is a very important principle and we can and should use it when building managed services. 

Managed Services often related to DATA layer so things get even more complicated. There is state and you cant loose data or have downtimes so yes is more hardcore. How we build such of thing? Well, use engineering we don't use Jenkins or Ansible. Which are not tools for this kind of jobs? Don't get me wrong I love Ansible and Jenkins but not for this kind of problems, they are not the proper tools. 

SOA is about abstraction and these solutions need to provide a higher level of abstraction in order to be effective. Languages like Java, Scala, C, C++, Go are great to build this kind of solutions because they are stable, reliable and have a great ecosystem for development and also for troubleshooting. So we are talking about applying similar mentality(Same mentality we have with Microservices) to operations solutions? Yes. The main difference is that with DATA things are harder than microservices and STABILITY is more critical. This pattern is used a lot in SV in companies like Netflix, Wallmart, Uber, Amazon and many others in Europe as well. 

Cheers,
Diego Pacheco

 


Popular posts from this blog

Kafka Streams with Java 15

Rust and Java Interoperability

HMAC in Java