Experiência na implementação de Service Mesh no Nomad e Consul

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 .
  • — , .

:


  • , .
  • - Envoy, .
  • , ( , ).

All Articles