{"id":56387,"date":"2020-02-12T00:00:00","date_gmt":"2020-02-11T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/service-discovery-v-raspredelennyh-sistemah-na-primere-consul-aleksandr-sigachev"},"modified":"2020-02-18T14:04:39","modified_gmt":"2020-02-18T11:04:39","slug":"service-discovery-v-raspredelennyh-sistemah-na-primere-consul-aleksandr-sigachev","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/service-discovery-v-raspredelennyh-sistemah-na-primere-consul-aleksandr-sigachev","title":{"rendered":"Descoberta de Servi\u00e7os em sistemas distribu\u00eddos usando o Consul. Alexander Sigachev","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><strong>Convido a todos a conhecer a transcri\u00e7\u00e3o da apresenta\u00e7\u00e3o de Alexander Sigachev sobre Discovery de Servi\u00e7os em sistemas distribu\u00eddos, usando o Consul como exemplo.<\/strong><\/p>\n<p><\/p>\n<p>O Discovery de Servi\u00e7os foi criado para permitir a conex\u00e3o de novos aplicativos ao nosso ambiente existente com o m\u00ednimo de custo. Ao usar o Discovery de Servi\u00e7os, podemos separar ao m\u00e1ximo ou um cont\u00eainer no formato Docker, ou um servi\u00e7o virtual do ambiente em que ele est\u00e1 sendo executado. <\/p>\n<p>\n<center><div class=\"youtube-placeholder\" data-id=\"IYWsZ8HFrCw\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/IYWsZ8HFrCw\/hqdefault.jpg\" alt=\"Por que no hosting comum a administra\u00e7\u00e3o do PrestaShop \u00e9 lenta, e no seu n\u00e3o \u00e9?\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Sauda\u00e7\u00f5es a todos! Eu sou Alexander Sigachev, trabalho na empresa Inventos. Hoje, vou apresent\u00e1-los a um conceito chamado Discovery de Servi\u00e7os. Vamos examinar o Discovery de Servi\u00e7os usando o Consul como exemplo.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Descoberta de Servi\u00e7os em sistemas distribu\u00eddos usando o Consul. Alexander Sigachev\" src=\"\/wp-content\/uploads\/2020\/02\/8078ef6ee7af4e52e977deed5f1f42ab.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Quais problemas o Discovery de Servi\u00e7os resolve? O Discovery de Servi\u00e7os foi criado para conectar novos aplicativos ao nosso ambiente existente com o m\u00ednimo de custo. Usando o Discovery de Servi\u00e7os, podemos separar ao m\u00e1ximo um cont\u00eainer no formato Docker ou um servi\u00e7o virtual do ambiente em que ele est\u00e1 sendo executado. <\/p>\n<p><\/p>\n<p>Como isso se parece? Em um exemplo cl\u00e1ssico na web \u2013 \u00e9 o frontend que recebe a solicita\u00e7\u00e3o do usu\u00e1rio. Depois, ele realiza a rotea\u00e7\u00e3o dessa solicita\u00e7\u00e3o para o backend. Neste exemplo, o load-balancer equilibra duas backends.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Descoberta de Servi\u00e7os em sistemas distribu\u00eddos usando o Consul. Alexander Sigachev\" src=\"\/wp-content\/uploads\/2020\/02\/10d23c4c51543161fc2034145776461b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aqui vemos que estamos iniciando a terceira inst\u00e2ncia do aplicativo. Assim que o aplicativo \u00e9 lan\u00e7ado, ele se registra no Discovery de Servi\u00e7os. O Discovery de Servi\u00e7os notifica o load-balancer. O load-balancer muda sua configura\u00e7\u00e3o automaticamente e o novo backend j\u00e1 come\u00e7a a operar. Dessa forma, novos backends podem ser adicionados ou, ao contr\u00e1rio, exclu\u00eddos do funcionamento.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Descoberta de Servi\u00e7os em sistemas distribu\u00eddos usando o Consul. Alexander Sigachev\" src=\"\/wp-content\/uploads\/2020\/02\/88a768894d79449ffb06fbbfa5cd32a8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>O que mais \u00e9 conveniente fazer com o uso do Discovery de Servi\u00e7os? No Discovery de Servi\u00e7os, podem ser armazenadas configura\u00e7\u00f5es do nginx, certificados e uma lista de servidores backend ativos.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Descoberta de Servi\u00e7os em sistemas distribu\u00eddos usando o Consul. Alexander Sigachev\" src=\"\/wp-content\/uploads\/2020\/02\/8ebfb5f1c8cf44999904159af9695da9.jpeg\" style=\"display:block;margin: 0 auto;\" \/>Al\u00e9m disso, o Discovery de Servi\u00e7os permite detectar falhas e identifica\u00e7\u00f5es de problemas. Quais esquemas podem ser utilizados para a detec\u00e7\u00e3o de falhas?<\/p>\n<p><\/p>\n<ul>\n<li>Esse aplicativo que desenvolvemos, notifica o Discovery de Servi\u00e7os que ainda continua operacional. <\/li>\n<li>O Discovery de Servi\u00e7os, por sua vez, interroga o aplicativo sobre sua disponibilidade.<\/li>\n<li>Ou, alternativamente, pode ser utilizado um script ou aplicativo de terceiros que verifica a disponibilidade do nosso aplicativo e notifica o Discovery de Servi\u00e7os se tudo est\u00e1 bem e se pode operar, ou, ao contr\u00e1rio, se algo est\u00e1 errado e essa inst\u00e2ncia do aplicativo deve ser exclu\u00edda do balanceamento.<\/li>\n<\/ul>\n<p><\/p>\n<p>Cada um dos esquemas pode ser aplicado dependendo do software que estamos utilizando. Por exemplo, se acabamos de iniciar o desenvolvimento de um novo projeto, podemos facilmente implementar um esquema em que nosso aplicativo notifica o Service Discovery. Alternativamente, podemos conectar o Service Discovery para realizar a verifica\u00e7\u00e3o.<\/p>\n<p><\/p>\n<p>Por outro lado, se o aplicativo nos foi legado ou desenvolvido por terceiros, o terceiro cen\u00e1rio se aplica, onde escrevemos um manipulador e tudo isso se integra automaticamente ao nosso trabalho.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Descoberta de Servi\u00e7os em sistemas distribu\u00eddos usando o Consul. Alexander Sigachev\" src=\"\/wp-content\/uploads\/2020\/02\/ce4c5b452d526058b552a65926b9de58.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Este \u00e9 um dos exemplos. O load balancer na forma do nginx reinicia. \u00c9 uma ferramenta adicional fornecida junto com o Consul, chamada consul-template. Definimos uma regra. Dizemos que usamos um template (Template Engine Golang). Quando ocorrem eventos, e h\u00e1 notifica\u00e7\u00f5es de mudan\u00e7as, ele \u00e9 regenerado e o Service Discovery recebe o comando \u2018reload\u2019. Um exemplo simples \u00e9 quando o nginx \u00e9 reconfigurado e reiniciado em resposta a um evento.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Descoberta de Servi\u00e7os em sistemas distribu\u00eddos usando o Consul. Alexander Sigachev\" src=\"\/wp-content\/uploads\/2020\/02\/d829f882a52c97420750893f78bacc18.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>O que \u00e9 o Consul?<\/p>\n<p><\/p>\n<ul>\n<li>\n<p>Antes de tudo, \u00e9 um Service Discovery. <\/p>\n<p>\n<\/li>\n<li>\n<p>Ele possui um mecanismo de verifica\u00e7\u00e3o de disponibilidade \u2013 Health Checking.<\/p>\n<p>\n<\/li>\n<li>\n<p>Al\u00e9m disso, ele possui um KV Store.<\/p>\n<p>\n<\/li>\n<li>\n<p>E sua base permite a utiliza\u00e7\u00e3o de Multi Datacenter.<\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Para que tudo isso pode ser utilizado? No KV Store, podemos armazenar exemplos de configura\u00e7\u00f5es. O Health Checking nos permite verificar servi\u00e7os locais e enviar notifica\u00e7\u00f5es. O Multi Datacenter \u00e9 utilizado para construir um mapa de servi\u00e7os. Por exemplo, a Amazon possui v\u00e1rias zonas e roteia o tr\u00e1fego da maneira mais otimizada, evitando requisi\u00e7\u00f5es desnecess\u00e1rias entre data centers, que s\u00e3o cobradas separadamente do tr\u00e1fego local e, consequentemente, t\u00eam uma lat\u00eancia menor. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Descoberta de Servi\u00e7os em sistemas distribu\u00eddos usando o Consul. Alexander Sigachev\" src=\"\/wp-content\/uploads\/2020\/02\/7594fcb0dfd05193d95214d9694c39e8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vamos explorar um pouco os termos utilizados no Consul. <\/p>\n<p><\/p>\n<ul>\n<li>O Consul \u00e9 um servi\u00e7o escrito em Go. Uma das vantagens de programas em Go \u00e9 que voc\u00ea tem apenas um arquivo bin\u00e1rio, que voc\u00ea pode simplesmente baixar. Execute de qualquer lugar e n\u00e3o precisa de depend\u00eancias. <\/li>\n<li>Al\u00e9m disso, utilizando chaves, podemos iniciar este servi\u00e7o tanto em modo cliente quanto em modo servidor. <\/li>\n<li>O atributo \u2018datacenter\u2019 tamb\u00e9m permite marcar a que data center pertence este servidor. <\/li>\n<li>O consenso \u00e9 baseado no protocolo raft. Para quem tiver interesse, \u00e9 poss\u00edvel ler mais sobre isso no site do Consul. Este protocolo permite determinar um l\u00edder e identificar quais dados considerar como v\u00e1lidos e dispon\u00edveis.<\/li>\n<li>Gossip \u00e9 um protocolo que garante a comunica\u00e7\u00e3o entre n\u00f3s. Al\u00e9m disso, esse sistema \u00e9 descentralizado. Dentro de um \u00fanico data center, todos os n\u00f3s se comunicam com os vizinhos. Desta forma, as informa\u00e7\u00f5es sobre o estado atual s\u00e3o trocadas entre eles. Pode-se dizer que s\u00e3o fofocas entre vizinhos. <\/li>\n<li>LAN Gossip \u00e9 a troca local de dados entre vizinhos dentro de um \u00fanico data center. <\/li>\n<li>WAN Gossip \u00e9 utilizado quando precisamos sincronizar informa\u00e7\u00f5es entre dois data centers. As informa\u00e7\u00f5es transitam entre os n\u00f3s que s\u00e3o marcados como servidor. <\/li>\n<li>RPC permite fazer solicita\u00e7\u00f5es atrav\u00e9s do cliente ao servidor. <\/li>\n<\/ul>\n<p><\/p>\n<p>Descri\u00e7\u00e3o do RPC. Suponha que o Consul est\u00e1 sendo executado em uma m\u00e1quina virtual ou servidor f\u00edsico como cliente. N\u00f3s fazemos uma solicita\u00e7\u00e3o localmente. Em seguida, o cliente local solicita informa\u00e7\u00f5es ao servidor e se sincroniza. Dependendo das configura\u00e7\u00f5es, as informa\u00e7\u00f5es podem ser fornecidas do cache local ou podem ser sincronizadas com o l\u00edder, o mestre do servidor. <\/p>\n<p><\/p>\n<p>Esses dois esquemas t\u00eam suas vantagens e desvantagens. Se trabalhamos com cache local, \u00e9 r\u00e1pido. Se trabalhamos com dados armazenados no servidor, \u00e9 mais lento, mas obtemos informa\u00e7\u00f5es mais atualizadas.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Descoberta de Servi\u00e7os em sistemas distribu\u00eddos usando o Consul. Alexander Sigachev\" src=\"\/wp-content\/uploads\/2020\/02\/6ab034093708c0b1739af21015e50742.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Se representarmos isso graficamente, temos a seguinte imagem do site. Vemos que temos tr\u00eas mestres em funcionamento. Um deles est\u00e1 marcado com uma estrela como l\u00edder. Neste exemplo, tr\u00eas clientes est\u00e3o trocando informa\u00e7\u00f5es localmente atrav\u00e9s de UDP\/TCP. E as informa\u00e7\u00f5es entre os data centers s\u00e3o transmitidas entre os servidores. Aqui os clientes interagem entre si localmente. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Descoberta de Servi\u00e7os em sistemas distribu\u00eddos usando o Consul. Alexander Sigachev\" src=\"\/wp-content\/uploads\/2020\/02\/24a8f749195447c54e4405ad0be5728e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Que API o Consul oferece? Para obter informa\u00e7\u00f5es, existem dois tipos de API no Consul.<\/p>\n<p><\/p>\n<p>Esta \u00e9 a API DNS. Por padr\u00e3o, o Consul \u00e9 executado na porta 8600. Podemos configurar o proxy da solicita\u00e7\u00e3o e garantir o acesso atrav\u00e9s da resolu\u00e7\u00e3o local, por meio do DNS local. Podemos solicitar pelo dom\u00ednio e obteremos em resposta informa\u00e7\u00f5es sobre o endere\u00e7o IP.<\/p>\n<p><\/p>\n<p>API HTTP \u2013 ou podemos solicitar localmente na porta 8500 informa\u00e7\u00f5es sobre um servi\u00e7o espec\u00edfico e receberemos uma resposta JSON, informando qual IP o servidor tem, qual host, qual porta est\u00e1 registrada. Informa\u00e7\u00f5es adicionais podem ser transmitidas atrav\u00e9s de um token.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Descoberta de Servi\u00e7os em sistemas distribu\u00eddos usando o Consul. Alexander Sigachev\" src=\"\/wp-content\/uploads\/2020\/02\/6af7cc95a392c5d2fe278131245b8f5d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>O que \u00e9 necess\u00e1rio para iniciar o Consul?<\/p>\n<p><\/p>\n<p>No primeiro modo, indicamos no modo desenvolvedor que estamos em modo desenvolvedor. O Agent \u00e9 iniciado como servidor. E toda a fun\u00e7\u00e3o \u00e9 executada de forma independente em uma \u00fanica m\u00e1quina. \u00c9 conveniente, r\u00e1pido e praticamente n\u00e3o s\u00e3o necess\u00e1rias configura\u00e7\u00f5es adicionais para o primeiro in\u00edcio.<\/p>\n<p><\/p>\n<p>O segundo modo \u00e9 a execu\u00e7\u00e3o em produ\u00e7\u00e3o. Aqui, o in\u00edcio \u00e9 um pouco mais complicado. Se n\u00e3o temos nenhuma vers\u00e3o do consul, devemos inicializar a primeira m\u00e1quina no bootstrap, ou seja, essa m\u00e1quina assumir\u00e1 as responsabilidades de l\u00edder. Levantamos essa m\u00e1quina, depois levantamos a segunda inst\u00e2ncia do servidor, passando a ela informa\u00e7\u00f5es sobre onde est\u00e1 o master. Depois levantamos a terceira. Ap\u00f3s termos tr\u00eas m\u00e1quinas em funcionamento, reiniciamos a primeira m\u00e1quina da bootstrap em modo normal. Os dados s\u00e3o sincronizados e o cluster inicial j\u00e1 est\u00e1 em funcionamento. <\/p>\n<p><\/p>\n<p>\u00c9 recomendado executar de tr\u00eas a sete inst\u00e2ncias em modo servidor. Isso se deve ao fato de que, se o n\u00famero de servidores cresce, aumenta o tempo para sincroniza\u00e7\u00e3o das informa\u00e7\u00f5es entre eles. O n\u00famero de n\u00f3s deve ser \u00edmpar para garantir o qu\u00f3rum. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Descoberta de Servi\u00e7os em sistemas distribu\u00eddos usando o Consul. Alexander Sigachev\" src=\"\/wp-content\/uploads\/2020\/02\/6d0a230bd31980d78e73041cbac3496f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Como s\u00e3o garantidos os Health Checks? No diret\u00f3rio de configura\u00e7\u00e3o do Consul, escrevemos uma regra de verifica\u00e7\u00e3o em formato Json. A primeira op\u00e7\u00e3o \u00e9 a disponibilidade, neste exemplo, do dom\u00ednio google.com. E indicamos que a verifica\u00e7\u00e3o deve ser realizada a cada 30 segundos. Dessa forma, verificamos se nosso n\u00f3 tem acesso \u00e0 rede externa.<\/p>\n<p><\/p>\n<p>A segunda op\u00e7\u00e3o \u00e9 a verifica\u00e7\u00e3o de si mesmo. N\u00f3s fazemos um curl normal para localhost na porta especificada com um intervalo de 10 segundos. <\/p>\n<p><\/p>\n<p>Essas verifica\u00e7\u00f5es s\u00e3o somadas e enviadas para a Descoberta de Servi\u00e7os. Com base na disponibilidade, esses n\u00f3s s\u00e3o exclu\u00eddos ou aparecem na lista de m\u00e1quinas dispon\u00edveis e funcionando corretamente. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Descoberta de Servi\u00e7os em sistemas distribu\u00eddos usando o Consul. Alexander Sigachev\" src=\"\/wp-content\/uploads\/2020\/02\/551d98ded7111f48afd0a6406b83cba0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>O Consul tamb\u00e9m fornece uma interface UI, que \u00e9 iniciada com uma flag separada e estar\u00e1 dispon\u00edvel na m\u00e1quina. Isso permite visualizar informa\u00e7\u00f5es e tamb\u00e9m pode-se fazer algumas altera\u00e7\u00f5es. <\/p>\n<p><\/p>\n<p>Neste exemplo, a aba \u2018Servi\u00e7o\u2019 est\u00e1 aberta. Mostra que tr\u00eas servi\u00e7os est\u00e3o em funcionamento, um dos quais \u00e9 o Consul. O n\u00famero de verifica\u00e7\u00f5es realizadas e h\u00e1 tr\u00eas data centers em que as m\u00e1quinas est\u00e3o localizadas.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Descoberta de Servi\u00e7os em sistemas distribu\u00eddos usando o Consul. Alexander Sigachev\" src=\"\/wp-content\/uploads\/2020\/02\/cd684146191a7b262df76d1b88f7df7c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Este \u00e9 um exemplo da aba \"Nodes\". Podemos ver que eles t\u00eam nomes compostos relacionados a datacenters. Aqui tamb\u00e9m \u00e9 mostrado quais servi\u00e7os est\u00e3o em execu\u00e7\u00e3o, ou seja, vemos que as tags n\u00e3o est\u00e3o definidas. Nessas tags adicionais, \u00e9 poss\u00edvel fornecer algumas informa\u00e7\u00f5es que o desenvolvedor pode usar para especificar par\u00e2metros adicionais. <\/p>\n<p><\/p>\n<p>Tamb\u00e9m \u00e9 poss\u00edvel passar informa\u00e7\u00f5es para o Consul sobre o estado dos discos e a carga m\u00e9dia.<\/p>\n<p><\/p>\n<p>Perguntas<\/p>\n<p><\/p>\n<p>Pergunta: Temos um cont\u00eainer Docker, como us\u00e1-lo com o Consul?<\/p>\n<p><\/p>\n<p>Resposta: Para o cont\u00eainer Docker, existem v\u00e1rias abordagens. Uma das mais comuns \u00e9 usar um cont\u00eainer Docker externo respons\u00e1vel pelo registro. Ao iniciar, ele recebe a socket do Docker. Todos os eventos de registro e desregistro do cont\u00eainer s\u00e3o registrados no Consul.<\/p>\n<p><\/p>\n<p>Pergunta: Ou seja, o Consul inicia o cont\u00eainer Docker?<\/p>\n<p><\/p>\n<p>Resposta: N\u00e3o. N\u00f3s iniciamos o cont\u00eainer Docker. E na configura\u00e7\u00e3o indicamos - ou\u00e7a esta socket. \u00c9 mais ou menos como funciona com o certificado, quando passamos informa\u00e7\u00f5es sobre onde e o que temos. <\/p>\n<p><\/p>\n<p>Pergunta: Portanto, dentro do cont\u00eainer Docker que estamos tentando conectar ao Service Discovery deve haver alguma l\u00f3gica que consegue fornecer dados ao Consul?<\/p>\n<p><\/p>\n<p>Resposta: N\u00e3o exatamente. Quando ele inicia, passamos vari\u00e1veis atrav\u00e9s do ambiente. Por exemplo, nome do servi\u00e7o, porta do servi\u00e7o. O registro ouve essas informa\u00e7\u00f5es e registra no Consul.<\/p>\n<p><\/p>\n<p>Pergunta: Eu ainda tenho uma pergunta sobre a interface. N\u00f3s implantamos a interface, digamos, em um servidor de produ\u00e7\u00e3o. E quanto \u00e0 seguran\u00e7a? Onde os dados est\u00e3o armazenados? \u00c9 poss\u00edvel acumular dados de alguma forma?<\/p>\n<p><\/p>\n<p>Resposta: Na interface, na verdade, os dados v\u00eam do banco de dados e do Service Discovery. As senhas configuramos nas configura\u00e7\u00f5es manualmente. <\/p>\n<p><\/p>\n<p>Pergunta: Isso pode ser publicado na Internet?<\/p>\n<p><\/p>\n<p>Resposta: Por padr\u00e3o, o Consul inicia em localhost. Para publicar na Internet, ser\u00e1 necess\u00e1rio configurar algum proxy. N\u00f3s somos respons\u00e1veis pelas regras de seguran\u00e7a.<\/p>\n<p><\/p>\n<p>Pergunta: Ele fornece dados hist\u00f3ricos por padr\u00e3o? Estou interessado em ver estat\u00edsticas sobre os Health Checks. \u00c9 poss\u00edvel diagnosticar problemas se o servidor frequentemente falhar.<\/p>\n<p><\/p>\n<p>Resposta: N\u00e3o tenho certeza se h\u00e1 detalhes sobre as verifica\u00e7\u00f5es. <\/p>\n<p><\/p>\n<p>Pergunta: N\u00e3o \u00e9 t\u00e3o importante o estado atual, quanto importante \u00e9 a din\u00e2mica.<\/p>\n<p><\/p>\n<p>Resposta: Para an\u00e1lise \u2013 sim.<\/p>\n<p><\/p>\n<p>Pergunta: O Service Discovery para Docker, o Consul \u00e9 melhor n\u00e3o usar?<\/p>\n<p><\/p>\n<p>Resposta: Eu n\u00e3o recomendaria o uso. O objetivo da apresenta\u00e7\u00e3o \u00e9 introduzir o conceito. Historicamente, ele percorreu um caminho, na minha opini\u00e3o, at\u00e9 a vers\u00e3o 1. Agora j\u00e1 existem solu\u00e7\u00f5es mais robustas, como o Kubernetes, que possui tudo isso sob o cap\u00f4. Dentro do Kubernetes, o Service Discovery fica a cargo do Etcd. Mas n\u00e3o estou t\u00e3o familiarizado com ele quanto estou com o Consul. Portanto, decidi fazer o Service Discovery com base no Consul.<\/p>\n<p><\/p>\n<p>Pergunta: O esquema com o servidor l\u00edder n\u00e3o atrasa o in\u00edcio do aplicativo como um todo? E como o Consul determina um novo l\u00edder, se o atual estiver inativo?<\/p>\n<p><\/p>\n<p>Resposta: Eles descreveram um protocolo inteiro. Se tiver interesse, pode ser lido.<\/p>\n<p><\/p>\n<p>Pergunta: O Consul atua como um servidor completo e todas as consultas passam por ele?<\/p>\n<p><\/p>\n<p>Resposta: Ele n\u00e3o atua como um servidor completo, mas cobre uma \u00e1rea espec\u00edfica. Geralmente, ela termina em service.consul. E ent\u00e3o seguimos a l\u00f3gica. N\u00e3o usamos nomes de dom\u00ednio em produ\u00e7\u00e3o, mas sim uma infraestrutura interna, que normalmente fica oculta atr\u00e1s do cache do servidor, se trabalhamos com DNS.<\/p>\n<p><\/p>\n<p>Pergunta: Ou seja, se quisermos acessar o banco de dados, teremos que consultar o Consul primeiro para encontrar esse banco, correto?<\/p>\n<p><\/p>\n<p>Resposta: Sim. Se estamos trabalhando com DNS, isso funciona como sem o Consul, quando utilizamos nomes DNS. Geralmente, aplicativos modernos n\u00e3o consultam o nome de dom\u00ednio em cada requisi\u00e7\u00e3o, porque j\u00e1 estabelecemos a conex\u00e3o, tudo est\u00e1 funcionando e por um tempo n\u00e3o usamos. Se a conex\u00e3o falhar, ent\u00e3o \u2013 sim, vamos perguntar novamente onde est\u00e1 o banco e seguindo para ele.<\/p>\n<p><\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/ru_hashicorp\">Chat sobre produtos hashicorp<\/a><\/noindex> \u2014 Chat de usu\u00e1rios Hashicorp: Consul, Nomad, Terraform<\/p>\n<p><\/p>\n<p>P.S. Sobre health checks. No Consul, assim como no Kubernetes, utiliza-se o mesmo sistema de verifica\u00e7\u00e3o de estado de disponibilidade do servi\u00e7o baseado em c\u00f3digos de status.<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">200 OK para saud\u00e1vel\n503 Servi\u00e7o Indispon\u00edvel para n\u00e3o saud\u00e1vel<\/code><\/pre>\n<p><\/p>\n<p>Fontes:<br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/www.consul.io\/docs\/agent\/checks.html\">https:\/\/www.consul.io\/docs\/agent\/checks.html<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/tasks\/configure-pod-container\/configure-liveness-readiness-startup-probes\/\">https:\/\/kubernetes.io\/docs\/tasks\/configure-pod-container\/configure-liveness-readiness-startup-probes\/<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/thoslin.github.io\/microservice-health-check-in-kubernetes\/\">https:\/\/thoslin.github.io\/microservice-health-check-in-kubernetes\/<\/a><\/noindex><\/p>\n<p>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/487706\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u0430 \u0421\u0438\u0433\u0430\u0447\u0435\u0432\u0430 Service Discovery \u0432 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 Consul. Service Discovery \u0441\u043e\u0437\u0434\u0430\u043d \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0437\u0430\u0442\u0440\u0430\u0442\u0430\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043d\u043e\u0432\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u043d\u0430\u0448\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f Service Discovery, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043b\u0438\u0431\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0432 \u0432\u0438\u0434\u0435 \u0434\u043e\u043a\u0435\u0440\u0430, \u043b\u0438\u0431\u043e \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u043e\u0442 \u0442\u043e\u0433\u043e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u043d \u0437\u0430\u043f\u0443\u0449\u0435\u043d. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-56387","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u0430 \u0421\u0438\u0433\u0430\u0447\u0435\u0432\u0430 Service Discovery \u0432 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 Consul. Service Discovery \u0441\u043e\u0437\u0434\u0430\u043d \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c\u0438.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/service-discovery-v-raspredelennyh-sistemah-na-primere-consul-aleksandr-sigachev\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_PT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Service Discovery \u0432 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 Consul. \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440 \u0421\u0438\u0433\u0430\u0447\u0435\u0432 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u0430 \u0421\u0438\u0433\u0430\u0447\u0435\u0432\u0430 Service Discovery \u0432 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 Consul. Service Discovery \u0441\u043e\u0437\u0434\u0430\u043d \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c\u0438.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/service-discovery-v-raspredelennyh-sistemah-na-primere-consul-aleksandr-sigachev\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-02-11T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:04:39+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Service Discovery em sistemas distribu\u00eddos usando o Consul. Alexander Sigachev | ProHoster","description":"Sugiro que voc\u00ea leia a apresenta\u00e7\u00e3o de Alexander Sigachev sobre Service Discovery em sistemas distribu\u00eddos usando o Consul como exemplo. O Service Discovery foi criado para minimizar.","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/service-discovery-v-raspredelennyh-sistemah-na-primere-consul-aleksandr-sigachev","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pt_PT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Service Discovery \u0432 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 Consul. \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440 \u0421\u0438\u0433\u0430\u0447\u0435\u0432 | ProHoster","og:description":"\u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u0430 \u0421\u0438\u0433\u0430\u0447\u0435\u0432\u0430 Service Discovery \u0432 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 Consul. Service Discovery \u0441\u043e\u0437\u0434\u0430\u043d \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c\u0438.","og:url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/service-discovery-v-raspredelennyh-sistemah-na-primere-consul-aleksandr-sigachev","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-02-11T21:00:00+00:00","article:modified_time":"2020-02-18T11:04:39+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"56387","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 19:25:40","updated":"2022-10-01 05:49:52","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/56387","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=56387"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/56387\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=56387"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=56387"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=56387"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}