How we do Cloud Native
Cloud Native Application Development isn't just a buzzword to us. We’ve built a culture of automation, orchestration, and security that is at the core of our organization. Our team integrates infrastructure as code, open source software, and SRE expertise to manage scalable clusters.
AutomationAgile systems that respond to rapid changes require automation. We obsess over automated pipelines like GitOps to provision our infrastructure, K8s to auto scale, slash commands to deploy code, and container runtime security to detect anomalous behavior.
Vendor AgnosticBeing tied to a specific vendor or technology incurs substantial long-term feed and reduces your agility. Instead, we architect open source solutions that provide flexibility to switch between cloud providers without impacting mission objective.
ScalabilityModern software should be scalable from the first day in Production. For application level scalability, we break the solution down into microservices that use non-blocking IO, following the Twelve-Factor App methodology and Reactive Manifesto. At the infrastructure level we utilize the best battle-tested open source container orchestration system currently available: Kubernetes.
Event SourcingA traditional database driven application can only answer questions about the current state of the application, however having access to the full history of the applicaton is incredibly valuable. By building event sourcing architecture, our engineers can decode the data evolution, clarify product operation, and allow for faster debugging.
Domain Driven Design (DDD)Domain experts and engineers are two separate pieces of the development process, but they should speak the same language. By establishing a ubiquitous code (Domain Specific Language - DSL), tailored to our client's domain, we ensure collaborative cooperation and avoid programming discrepancies.
Fault ToleranceModern critical applications must remain available even in the presence of failures. At the application layer, our engineers provide automated fault tolerance (using Hystrix) when microservices fail. While at the infrastructure level, we configure multiple availability zones, and use K8s (control plane) to automatically reschedule the pods from the faulty node onto other healthy nodes in the cluster.
MicroservicesSmaller microservices working together to fulfill business requirements provide the software agility needed in enterprise software. Our team builds RESTFul microservices that are containerized and platform/cloud agnostic. Each microservice exposes its health metrics that are fetched by Prometheus.
KubernetesUsing a mix of open source tools and best practices, our engineering team builds Kubernetes clusters that are quick to setup and yet secure. The clusters built and maintained are production ready and include necessary tools like EFK, Prometheus, Grafana, Istio, and Admission Control.
Air Gapped EnvironmentsOur team knows the process and benefits of building low and deploying high. The containers built by our team are self-contained, include all external dependencies, and can be built on air-gapped environments. Additionally, our team understands the intricacies between classified offering of cloud vendors (C2S, Azure Classified Cloud).
KafkaEvent driven architectures are made possible by using Kafka to pub/sub events between microservices. Our team also uses Kafka to prepare stream processing pipelines and KSQL to gather real time insights from the data.
Infrastructure as Code (IaC)Our team lives by the moto: if it isn't in code, it doesn't exist. Using IaC allows our engineers to build K8s clusters in shorter time and ensure that the clusters are securely configured from Day 1.
ServerlessFrom writing one-off functions in the cloud to running complex microservices on serverless platforms, our team ensures costs, application state, and security are all managed with a fair balance.