Neste artigo, descreveremos como implantamos o Service Mesh, resolvemos alguns dos problemas na arquitetura de microsserviços e reduzimos a carga nos desenvolvedores e engenheiros de infraestrutura.
Por que precisávamos de uma malha de serviço
O Service Mesh está ganhando popularidade. Eu acho que não faz sentido, mais uma vez, definir e descrever tudo por que isso pode ser útil. Se você não sabe do que se trata, mas sua empresa possui muitas equipes, serviços ou você deseja compartilhar um monólito, familiarize-se com o assunto. Você pode começar traduzindo um artigo escrito pelo criador do primeiro projeto do Service Mesh, William Morgan.
No ano passado, o número de equipes de produtos na empresa cresceu 1,5 vezes. No momento da redação deste artigo, temos mais de 20 equipes, quase todo mundo tem desenvolvedores. Com o aumento de seu número, o desenvolvimento do monólito não ficou mais fácil, então começamos a avançar mais ativamente em direção à arquitetura de microsserviços. Enquanto estamos no início de nossa jornada, no entanto, já há 3 a 4 anos, serviços para diversos fins começaram a se multiplicar com velocidade decente.
Obviamente, quanto mais serviços, mais difícil é controlá-los, mais difícil é gerenciá-los e a configuração da infraestrutura. Isso seria especialmente difícil em um sistema tradicional em que existe uma barreira entre desenvolvedores e administradores. Portanto, simultaneamente à criação dos microsserviços, passamos a dar a maior parte da responsabilidade pelo lançamento e operação do serviço aos desenvolvedores, fornecendo o exame de operações como um serviço. No entanto, os desenvolvedores, é claro, não conhecem todas as sutilezas da configuração da infraestrutura.
O Service Mesh combina e abstrai com sucesso de desenvolvedores coisas como:
- Descoberta de serviço
- Rastreamento distribuído;
- Quebra de Circuito / Novas Tentativas / Tempos Limites;
- Interações de monitoramento / telemetria e muitas outras.
, , Docker-. Nomad, Consul. , Kubernetes , Nomad .
, Kubernetes, , HashiCorp-.
Nomad Docker- ( QEMU, raw/isolated fork/exec Java). Consul Service Discovery DNS-.

Nomad- Consul-. - ( ), .
Nomad Consul . Consul , (node), healthcheck . (TCP, HTTP, gRPC, script). Nomad key-value Consul Vault, , -. Nomad consul-template.
Nomad, Consul HTTP API, , , Nomad , — ip-port - healthcheck. , k8s Pod, Allocation, .
, , operations engineer. , , : , , .
HashiCorp-, . Service Mesh , Redis .
Service Mesh
Service Mesh : (data plane control plane). Data plane , - . control plane, . .
— sidecar ( Pod’e/). , .
Service Mesh . Linkerd linkerd-proxy, Consul Connect Istio third-party . Envoy Lyft. open source , .
, :
- Service Mesh 2018 . , .
- .
- control plane .
control plane
control plane — , Service Mesh . , , . , , .
Service Mesh , Mesh, . Envoy , , , .
Envoy data plane
Envoy sidecar- . sidecar-, . . (ingress) Consul, (egress) -. , , , .
: Nomad .

Service Discovery
Service Discovery? , ? sidecar, control plane agent, control plane API, API Consul API Envoy. endpoint discovery (EDS). «» - Consul. Envoy , .
Prometheus. Envoy , , Circuit Breaker - . :

, , Vizceral Netflix:

— , . , - . , Envoy Distributed tracing Zipkin/Jaeger (X-b3-headers).

, , Jaeger Elastic APM (Application Performance Management). — Kibana, . Elastic , , , Jaeger, , APM Distributed tracing. Jaeger-, Envoy, , , , Elastic APM. Jaeger, Elastic APM , HTTP- trace-id . Jaeger , Elastic , .
Service Mesh . — . HTTP/1, TCP Redis. Mesh , . , . , Service Mesh.
Ops- Mesh: , , Canary, . , Istio .
Service Mesh
, Service Mesh:
- — .
- Service Discovery , - . c-plane 10 , , , , . , . Envoy 150 RAM, . , 100 RPS, 30 .
- . 2–3 .
- — , .
: