Stuff mentioned in a microservice related job posting
Tags: microservices, interview, servicemesh, apigateway
Published: 2020-12-23 10:28:37

When I was reading a job posting, I encountered a bunch of technologies and tools which they have had stated as requirements. I feel this is a lengthy list for a job posting, so I am going to review each one with a more detail. You can imagine this as a cheat sheet! Almost all technologies, tools and patterns are common in distributed and microservice architecture.

## Zabbix

[Zabbix](https://en.wikipedia.org/wiki/Zabbix) is an open-source monitoring software tool for diverse IT components, including networks, servers, virtual machines (VMs) and cloud services.

## Prometheus

[Prometheus](https://en.wikipedia.org/wiki/Prometheus_(software)) is a free software application used for event monitoring and alerting.[2] It records real-time metrics in a time series database (allowing for high dimensionality) built using a HTTP pull model, with flexible queries and real-time alerting.

## Grafana

[Grafana](https://en.wikipedia.org/wiki/Grafana) is a multi-platform open source analytics and interactive visualization web application. It provides charts, graphs, and alerts for the web when connected to supported data sources.

## Kong

[Kong](https://en.wikipedia.org/wiki/Kong_Inc.) is an open-source API and Microservices gateway.

## Service Mesh

[Service mesh](https://en.wikipedia.org/wiki/Service_mesh) is a dedicated infrastructure layer for facilitating service-to-service communications between microservices, often using a sidecar proxy.

## Sharding

[A database shard](https://en.wikipedia.org/wiki/Shard_(database_architecture)), or simply a shard, is a horizontal partition of data in a database or search engine. Each shard is held on a separate database server instance, to spread load. Some data within a database remains present in all shards,[notes 1] but some appears only in a single shard. Each shard (or server) acts as the single source for this subset of data.

## Replica Set

[A replica set](https://www.tutorialspoint.com/mongodb/mongodb_replication.htm) is a group of `mongod` instances that host the same data set. In a replica, one node is primary node that receives all write operations. All other instances, such as secondaries, apply operations from the primary so that they have the same data set. Replica set can have only one primary node.

## SAGA Pattern

[The Saga Pattern](https://docs.microsoft.com/en-us/azure/architecture/reference-architectures/saga/saga) is as microservices architectural pattern to implement a transaction that spans multiple services.

## 2PC (Two-phase commit protocol)

[It is a distributed algorithm](https://en.wikipedia.org/wiki/Two-phase_commit_protocol) that coordinates all the processes that participate in a distributed atomic transaction on whether to commit or abort (roll back) the transaction (it is a specialized type of consensus protocol).

## Istio

[Istio](https://www.redhat.com/en/topics/microservices/what-is-istio) is an open source service mesh platform that provides a way to control how microservices share data with one another. It includes APIs that let Istio integrate into any logging platform, telemetry, or policy system.

## Linkerd

[Linkerd](https://github.com/linkerd/linkerd) is a transparent service mesh, designed to make modern applications safe and sane by transparently adding service discovery, load balancing, failure handling, instrumentation, and routing to all inter-service communication.

## Kafka

[Apache Kafka](https://en.wikipedia.org/wiki/Apache_Kafka) is an open-source stream-processing software platform. The project aims to provide a unified, high-throughput, low-latency platform for handling real-time data feeds.

## WebSocket

[The WebSocket protocol](https://en.wikipedia.org/wiki/WebSocket) enables interaction between a web browser (or other client application) and a web server with lower overhead than half-duplex alternatives such as HTTP polling, facilitating real-time data transfer from and to the server. This is made possible by providing a standardized way for the server to send content to the client without being first requested by the client, and allowing messages to be passed back and forth while keeping the connection open.

## Socket.IO

[Socket.IO](https://en.wikipedia.org/wiki/Socket.IO) is a JavaScript library for realtime web applications. It enables realtime, bi-directional communication between web clients and servers. It has two parts: a client-side library that runs in the browser, and a server-side library for Node.js. Both components have a nearly identical API. Like Node.js, it is event-driven.

## Sentry

[Sentry](https://github.com/getsentry/sentry) is a service that helps you monitor and fix crashes in realtime. The server is in Python, but it contains a full API for sending events from any language, in any application.

## Jaeger

[Jaeger](https://github.com/jaegertracing/jaeger) can be used for monitoring microservices-based distributed systems:

* Distributed context propagation
* Distributed transaction monitoring
* Root cause analysis
* Service dependency analysis
* Performance / latency optimization

## Envoy

As on the ground microservice practitioners quickly realize, the majority of operational problems that arise when moving to a distributed architecture are ultimately grounded in two areas: networking and observability. It is simply an orders of magnitude larger problem to network and debug a set of intertwined distributed services versus a single monolithic application. Originally built at Lyft, [Envoy](https://www.envoyproxy.io/) is a high performance C++ distributed proxy designed for single services and applications, as well as a communication bus and “universal data plane” designed for large microservice “service mesh” architectures.

## Kiali

[Kiali](https://kiali.io/) is a management console for Istio-based service mesh. It provides dashboards, observability and lets you to operate your mesh with robust configuration and validation capabilities. It shows the structure of your service mesh by inferring traffic topology and displays the health of your mesh. Kiali provides detailed metrics, powerful validation, Grafana access, and strong integration for distributed tracing with Jaeger.

## GitFlow

[GitFlow](https://datasift.github.io/gitflow/IntroducingGitFlow.html) is a branching model for Git.