{"id":56049,"date":"2020-02-04T00:00:00","date_gmt":"2020-02-03T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/highload-mihail-makurov-maksim-chernetsov-intersvyaz-zabbix-100knvps-na-odnom-servere"},"modified":"2020-02-18T14:04:13","modified_gmt":"2020-02-18T11:04:13","slug":"highload-mihail-makurov-maksim-chernetsov-intersvyaz-zabbix-100knvps-na-odnom-servere","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/highload-mihail-makurov-maksim-chernetsov-intersvyaz-zabbix-100knvps-na-odnom-servere","title":{"rendered":"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>A pr\u00f3xima confer\u00eancia HighLoad++ acontecer\u00e1 nos dias 6 e 7 de abril de 2020 em S\u00e3o Petersburgo. Detalhes e ingressos <noindex><a rel=\"nofollow\" href=\"http:\/\/bit.ly\/2sSxgBx\">no link<\/a><\/noindex>. HighLoad++ Moscovo 2018. Sala \"Moscovo\". 9 de novembro, 15:00. Resumos e <noindex><a rel=\"nofollow\" href=\"http:\/\/www.highload.ru\/moscow\/2018\/abstracts\/4141\">apresenta\u00e7\u00e3o<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/5c3e11c8449de7375d30b2cd75b5927e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n* Monitoramento \u2014 online e an\u00e1lise.<br \/>\n* Principais limita\u00e7\u00f5es da plataforma ZABBIX.<br \/>\n* Solu\u00e7\u00e3o para escalabilidade do armazenamento de an\u00e1lise.<br \/>\n* Otimiza\u00e7\u00e3o do servidor ZABBIX.<br \/>\n* Otimiza\u00e7\u00e3o da interface do usu\u00e1rio.<br \/>\n* Experi\u00eancia de opera\u00e7\u00e3o do sistema sob cargas superiores a 40k NVPS.<br \/>\n* Conclus\u00f5es resumidas.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><b>Mikhail Makurov (daqui em diante \u2014 MM):<\/b> \u2013 Ol\u00e1 a todos!<\/p>\n<p><b>Maxim Chernetzov (daqui em diante \u2014 MC):<\/b> \u2013 Bom dia!<\/p>\n<p><b>MM:<\/b> \u2013 Permitam-me apresentar Maxim. Max \u00e9 um engenheiro talentoso, o melhor especialista em redes que conhe\u00e7o. Maxim lida com redes e servi\u00e7os, seu desenvolvimento e opera\u00e7\u00e3o.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/a7fc62a03c0aede46f4a4695845daa22.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MC:<\/b> \u2013 E eu gostaria de falar sobre Mikhail. Mikhail \u00e9 um desenvolvedor em C. Ele escreveu v\u00e1rias solu\u00e7\u00f5es de alta carga para processamento de tr\u00e1fego para nossa empresa. Vivemos e trabalhamos nos Urais, na cidade de homens fortes, Chelyabinsk, na empresa \"Intersvyaz\". Nossa empresa \u00e9 um fornecedor de servi\u00e7os de internet e televis\u00e3o a cabo para um milh\u00e3o de pessoas em 16 cidades.<\/p>\n<p><b>MM:<\/b> \u2013 E \u00e9 importante dizer que \"Intersvyaz\" \u00e9 muito mais do que apenas um provedor, \u00e9 uma empresa de TI. A maioria de nossas solu\u00e7\u00f5es \u00e9 feita pelo nosso departamento de TI.<\/p>\n<p><b>A:<\/b> desde servidores que processam tr\u00e1fego at\u00e9 o call center e o aplicativo m\u00f3vel. No departamento de TI, agora h\u00e1 cerca de 80 pessoas com compet\u00eancias muito variadas.<\/p>\n<h3>Sobre o Zabbix e sua arquitetura<\/h3>\n<p>\n<b>MC:<\/b> \u2013 E agora tentarei estabelecer um recorde pessoal e explicar em um minuto o que \u00e9 o Zabbix (daqui em diante \u2013 \"Zabbix\").<\/p>\n<p>\"Zabbix\" se posiciona como um sistema de monitoramento \"pronto para uso\" em n\u00edvel empresarial. Ele possui muitas fun\u00e7\u00f5es que facilitam a vida: regras de escalonamento avan\u00e7adas, API para integra\u00e7\u00e3o, agrupamento e auto-descoberta de hosts e m\u00e9tricas. No \"Zabbix\", existem o que s\u00e3o chamados de meios de escalabilidade \u2013 proxies. O \"Zabbix\" \u00e9 um sistema de c\u00f3digo aberto.<\/p>\n<p>Resumindo sobre a arquitetura. Pode-se dizer que ela consiste em tr\u00eas componentes:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/0d2ae3ee04d00885d65e17b8cf44182b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ul>\n<li>Servidor. Escrito em C. Com processamento e transmiss\u00e3o de informa\u00e7\u00f5es entre threads bastante complexos. Todo o processamento ocorre nele: desde a recep\u00e7\u00e3o at\u00e9 o armazenamento no banco de dados.<\/li>\n<li>Todos os dados s\u00e3o armazenados no banco de dados. O \"Zabbix\" suporta MySQL, PostgreSQL e Oracle.<\/li>\n<li>A interface web \u00e9 escrita em PHP. Na maioria dos sistemas, vem com o servidor Apache, mas funciona de forma mais eficiente em combina\u00e7\u00e3o com nginx + php.<\/li>\n<\/ul>\n<p>\nHoje gostar\u00edamos de contar uma hist\u00f3ria da vida da nossa empresa, relacionada ao Zabbix\u2026<\/p>\n<h3>Uma hist\u00f3ria da vida da empresa Intersvyaz. O que temos e o que precisamos?<\/h3>\n<p>\n<img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/407c35b81995ddca6444fa418941063f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Cinco ou seis meses atr\u00e1s. Uma vez, depois do trabalho\u2026<\/i><\/p>\n<p><b>MC:<\/b> \u2013 Misha, ol\u00e1! Fico feliz que consegui te encontrar \u2013 preciso conversar. Tivemos problemas novamente com a monitoriza\u00e7\u00e3o. Durante um grande acidente, tudo travou e n\u00e3o havia nenhuma informa\u00e7\u00e3o sobre o estado da rede. Infelizmente, isso n\u00e3o \u00e9 a primeira vez que acontece. Preciso da sua ajuda. Vamos fazer com que nossa monitoriza\u00e7\u00e3o funcione em qualquer circunst\u00e2ncia!<\/p>\n<p><b>MM:<\/b> \u2013 Mas vamos nos sincronizar primeiro. N\u00e3o olhei para isso h\u00e1 alguns anos. Pelo que me lembro, desistimos do Nagios e migramos para o Zabbix h\u00e1 cerca de 8 anos. E agora temos, parece, 6 servidores poderosos e cerca de uma dezena de proxies. N\u00e3o estou confundindo nada?<\/p>\n<p><b>MC:<\/b> \u2013 Quase. Temos 15 servidores, alguns dos quais s\u00e3o m\u00e1quinas virtuais. O mais importante \u00e9 que isso n\u00e3o nos salva no momento em que mais precisamos. Sempre que ocorre um acidente \u2013 os servidores travam e nada \u00e9 vis\u00edvel. Tentamos otimizar a configura\u00e7\u00e3o, mas isso n\u00e3o traz um aumento significativo de desempenho.<\/p>\n<p><b>MM:<\/b> \u2013 Entendi. Voc\u00eas j\u00e1 analisaram algo, descobriram alguma coisa do diagn\u00f3stico?<\/p>\n<p><b>MC:<\/b> \u2013 A primeira coisa com que estamos lidando \u00e9 o banco de dados. O MySQL j\u00e1 est\u00e1 constantemente sobrecarregado, registrando novas m\u00e9tricas, e quando o Zabbix come\u00e7a a gerar uma enxurrada de eventos \u2013 o banco fica pra dentro literalmente por algumas horas. J\u00e1 te falei sobre a otimiza\u00e7\u00e3o da configura\u00e7\u00e3o, mas este ano atualizamos o hardware: os servidores t\u00eam mais de cem gigas de mem\u00f3ria e arrays de disco em SSD RAID \u2013 n\u00e3o faz sentido continuar aumentando linearmente. O que vamos fazer?<\/p>\n<p><b>MM:<\/b> \u2013 Entendi. Afinal, o MySQL \u00e9 um banco LTP. Parece que ele n\u00e3o \u00e9 mais adequado para armazenar o arquivo de m\u00e9tricas do nosso tamanho. Vamos resolver isso.<\/p>\n<p><b>MC:<\/b> \u2013 Vamos l\u00e1!<\/p>\n<h3>Integra\u00e7\u00e3o do Zabbix e Clickhouse como resultado do hackathon<\/h3>\n<p>\nAp\u00f3s algum tempo, obtivemos dados interessantes:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/46899e843b1e89524c6d762c1c167a6c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA maior parte do espa\u00e7o em nosso banco de dados estava ocupada por um arquivo de m\u00e9tricas e menos de 1% era utilizado para configura\u00e7\u00e3o, modelos e ajustes. Naquele momento, j\u00e1 est\u00e1vamos utilizando a solu\u00e7\u00e3o Big Data baseada em Clickhouse h\u00e1 mais de um ano. A dire\u00e7\u00e3o do nosso trabalho era clara. Durante nosso \"Hackathon\" da primavera, escrevi uma integra\u00e7\u00e3o do \"Zabbix\" com o \"Clickhouse\" para o servidor e o frontend. Naquela \u00e9poca, o \"Zabbix\" j\u00e1 suportava o ElasticSearch, e decidimos comparar os dois.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/92fa3da527de48102cbdcf6959d46814.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Compara\u00e7\u00e3o entre Clickhouse e Elasticsearch<\/h3>\n<p>\n<b>MM:<\/b> \u2013 Para a compara\u00e7\u00e3o, geramos uma carga equivalente \u00e0quela que o servidor do \"Zabbix\" fornece e observamos o comportamento dos sistemas. Escrevemos dados em lotes de 1000 linhas, utilizando CURL. Sup\u00fanhamos previamente que o \"Clickhouse\" seria mais eficiente para o perfil de carga gerado pelo \"Zabbix\". Os resultados superaram nossas expectativas:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/354be7147b23a0bcb9ada3af93f59fac.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEm condi\u00e7\u00f5es id\u00eanticas, nos testes, o \"Clickhouse\" escreveu tr\u00eas vezes mais dados. Ao mesmo tempo, ambos os sistemas consumiram recursos de maneira muito eficiente ao ler os dados. No entanto, o \"ElasticSearch\" exigiu uma quantidade significativa de processamento ao fazer grava\u00e7\u00f5es:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/fea7f7f7801024cee0f9367c49d81d5b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNo total, o \"Clickhouse\" superou significativamente o \"Elasticsearch\" em consumo de CPU e velocidade. Al\u00e9m disso, devido \u00e0 compress\u00e3o de dados, o \"Clickhouse\" usa 11 vezes menos espa\u00e7o em disco e realiza aproximadamente 30 vezes menos opera\u00e7\u00f5es de disco:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/50c24c4615ed350d7d78ec8655423409.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MC:<\/b> \u2013 Sim, o trabalho com o subsistema de disco do \"Clickhouse\" \u00e9 realizado de forma muito eficiente. Discos grandes SATA podem ser usados para os bancos e obter uma velocidade de grava\u00e7\u00e3o de centenas de milhares de linhas por segundo. O sistema \"pronto para uso\" suporta sharding, replica\u00e7\u00e3o e \u00e9 bastante simples de configurar. Estamos mais do que satisfeitos com sua opera\u00e7\u00e3o durante um ano.<\/p>\n<p>Para otimiza\u00e7\u00e3o de recursos, \u00e9 poss\u00edvel instalar o \"Clickhouse\" ao lado do banco existente, economizando assim uma enorme quantidade de tempo de CPU e opera\u00e7\u00f5es de disco. Transferimos o arquivo de m\u00e9tricas para os clusters do \"Clickhouse\" j\u00e1 existentes:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/4cf44eae47a13f2fc50377fec884ecc8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDescarregamos tanto a base principal do MySQL que conseguimos unific\u00e1-la em uma \u00fanica m\u00e1quina com o servidor do \"Zabbix\" e dispensar um servidor dedicado para o MySQL.<\/p>\n<h3>Como funciona o polling no Zabbix?<\/h3>\n<p>\n<i>4 meses atr\u00e1s<\/i><\/p>\n<p><b>MM:<\/b> \u2013 Ent\u00e3o, podemos esquecer os problemas com o banco de dados?<\/p>\n<p><b>MC:<\/b> \u2013 Isso \u00e9 verdade! Outra tarefa que precisamos resolver \u00e9 a coleta lenta de dados. Agora, todos os nossos 15 servidores proxy est\u00e3o sobrecarregados com processos SNMP e polling. E n\u00e3o h\u00e1 outra solu\u00e7\u00e3o a n\u00e3o ser adicionar novos servidores.<\/p>\n<p><b>MM:<\/b> \u2013 \u00d3timo. Mas primeiro, conte-me como funciona o polling no 'Zabbix'?<\/p>\n<p><b>MC:<\/b> \u2013 Em resumo, existem 20 tipos de m\u00e9tricas e uma d\u00fazia de formas de obt\u00ea-las. O 'Zabbix' pode coletar dados em modo 'request \u2013 response', ou esperar novos dados atrav\u00e9s da 'Interface Trapper'.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/cb2d974ee113b4147a4a588c1f35c730.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVale ressaltar que, na vers\u00e3o original do 'Zabbix', esse m\u00e9todo (Trapper) \u00e9 o mais r\u00e1pido. <\/p>\n<p>Existem servidores proxy para distribui\u00e7\u00e3o de carga:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/7b5c94a82b7e06aff6df6ea5549babdf.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOs proxies podem realizar as mesmas fun\u00e7\u00f5es de coleta que o servidor 'Zabbix', recebendo tarefas dele e enviando as m\u00e9tricas coletadas atrav\u00e9s da interface Trapper. Este \u00e9 o modo de distribui\u00e7\u00e3o de carga recomendado oficialmente. Al\u00e9m disso, os proxies s\u00e3o \u00fateis para monitorar uma infraestrutura remota que opera por NAT ou em um canal lento:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/dbfb2777f9dd9b4adb81f1fa89f3bdd5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MM:<\/b> \u2013 A arquitetura est\u00e1 clara. Precisamos olhar os c\u00f3digos-fonte\u2026<\/p>\n<p><i>Alguns dias depois<\/i><\/p>\n<h3>A hist\u00f3ria de como nmap e fping venceram<\/h3>\n<p>\n<b>MM:<\/b> \u2013 Parece que encontrei algo.<\/p>\n<p><b>MC:<\/b> \u2013 Conte-me!<\/p>\n<p><b>MM:<\/b> \u2013 Descobri que, nas verifica\u00e7\u00f5es de disponibilidade, o 'Zabbix' verifica um m\u00e1ximo de 128 hosts simultaneamente. Eu tentei aumentar esse n\u00famero para 500 e diminui o intervalo entre pacotes no ping \u2013 isso aumentou o desempenho em duas vezes. Mas gostaria de n\u00fameros maiores.<\/p>\n<p><b>MC:<\/b> \u2013 Na minha pr\u00e1tica, \u00e0s vezes preciso verificar a disponibilidade de milhares de hosts, e nada mais r\u00e1pido que o nmap eu encontrei para isso. Tenho certeza de que \u00e9 o m\u00e9todo mais r\u00e1pido. Vamos tentar! Precisamos aumentar significativamente o n\u00famero de hosts por itera\u00e7\u00e3o.<\/p>\n<p><b>MM:<\/b> \u2013 Verificar mais de quinhentos? 600?<\/p>\n<p><b>MC:<\/b> \u2013 Pelo menos duas mil.<\/p>\n<p><b>MM:<\/b> \u2013 Ok. A coisa mais importante que queria dizer: descobri que a maioria do polling no 'Zabbix' \u00e9 feita de forma s\u00edncrona. Precisamos mud\u00e1-la para o modo ass\u00edncrono. Assim, poderemos aumentar drasticamente o n\u00famero de m\u00e9tricas coletadas pelos pollers, especialmente se aumentarmos o n\u00famero de m\u00e9tricas por itera\u00e7\u00e3o.<\/p>\n<p><b>MC:<\/b> \u2013 \u00d3timo! E quando?<\/p>\n<p><b>MM:<\/b> \u2013 Como sempre, ontem.<\/p>\n<p><b>MC:<\/b> \u2013 Comparamos ambas as vers\u00f5es fping e nmap:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/4be4cfe019b6b318ae2fbdbf82577111.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEm um grande n\u00famero de hosts, o nmap foi, como esperado, at\u00e9 cinco vezes mais eficaz. Como o nmap verifica apenas a acessibilidade e o tempo de resposta, transferimos a contagem de perdas para os gatilhos e reduzimos significativamente os intervalos de verifica\u00e7\u00e3o de acessibilidade. Descobrimos que a quantidade ideal de hosts para o nmap est\u00e1 em torno de 4 mil por itera\u00e7\u00e3o. O nmap nos permitiu reduzir em tr\u00eas vezes o uso da CPU nas verifica\u00e7\u00f5es de acessibilidade e diminuir o intervalo de 120 segundos para 10.<\/p>\n<h3>Otimiza\u00e7\u00e3o do polling<\/h3>\n<p>\n<b>MM:<\/b> \u2013 Em seguida, trabalhamos nos pollers. Nosso principal interesse era a coleta de SNMP e agentes. No 'Zabbix', o polling \u00e9 feito de forma s\u00edncrona e foram tomadas medidas especiais para aumentar a efici\u00eancia do sistema. No modo s\u00edncrono, a inacessibilidade dos hosts causa uma degrada\u00e7\u00e3o significativa no polling. Existe um sistema inteiro de estados, existem processos especiais \u2013 os chamados pollers inacess\u00edveis, que funcionam apenas com hosts inacess\u00edveis:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/6a001eff121f2392fffda69d719ebad6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEste \u00e9 um coment\u00e1rio que demonstra a matriz de estados, toda a complexidade do sistema de transi\u00e7\u00f5es que \u00e9 necess\u00e1ria para que o sistema permane\u00e7a eficiente. Al\u00e9m disso, o pr\u00f3prio polling s\u00edncrono \u00e9 bastante lento:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/3579a4a3de85c37f812ba2ca71cf4b3d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00c9 por isso que milhares de threads de pollers em uma dezena de proxies n\u00e3o conseguiram coletar a quantidade necess\u00e1ria de dados. A implementa\u00e7\u00e3o ass\u00edncrona resolveu n\u00e3o apenas os problemas com a quantidade de threads, mas tamb\u00e9m simplificou significativamente o sistema de estados dos hosts inacess\u00edveis, porque, independentemente do n\u00famero de hosts verificados em uma itera\u00e7\u00e3o do polling, o tempo m\u00e1ximo de espera era de 1 timeout:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/c5f2d9bb3e558f8bba6bd8a96d8ed6a6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAl\u00e9m disso, modificamos e aprimoramos o sistema de polling para requisi\u00e7\u00f5es SNMP. O fato \u00e9 que a maioria n\u00e3o consegue responder a v\u00e1rias requisi\u00e7\u00f5es SNMP ao mesmo tempo. Portanto, implementamos um modo h\u00edbrido, onde o polling SNMP do mesmo host \u00e9 feito de forma ass\u00edncrona:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/eb61766e8afce9bf72d6e9757492559e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIsso \u00e9 feito para toda a carga de hosts. Esse modo, no final, n\u00e3o \u00e9 mais lento do que o totalmente ass\u00edncrono, pois a coleta de uma centena e meia de valores SNMP ainda \u00e9 muito mais r\u00e1pida do que 1 timeout.<\/p>\n<p>Nossos experimentos mostraram que a quantidade ideal de requisi\u00e7\u00f5es em uma itera\u00e7\u00e3o \u00e9 de aproximadamente 8 mil durante o polling SNMP. No total, a transi\u00e7\u00e3o para o modo ass\u00edncrono permitiu aumentar a performance do polling em 200 vezes, em v\u00e1rias centenas de vezes.<\/p>\n<p><b>MC:<\/b> As otimiza\u00e7\u00f5es de polling demonstraram que podemos n\u00e3o apenas nos livrar de todos os proxies, mas tamb\u00e9m reduzir os intervalos em muitas verifica\u00e7\u00f5es, e os proxies se tornar\u00e3o desnecess\u00e1rios como forma de distribui\u00e7\u00e3o de carga.<\/p>\n<p><i>Cerca de tr\u00eas meses atr\u00e1s<\/i><\/p>\n<h3>Mude a arquitetura \u2013 aumente a carga!<\/h3>\n<p>\n<b>MM:<\/b> Ent\u00e3o, Max, est\u00e1 na hora de ir para a produ\u00e7\u00e3o? Eu preciso de um servidor poderoso e um bom engenheiro.<\/p>\n<p><b>MC:<\/b> Certo, vamos planejar. J\u00e1 est\u00e1 na hora de avan\u00e7ar dos 5 mil metrics por segundo.<\/p>\n<p><i>Manh\u00e3 ap\u00f3s a atualiza\u00e7\u00e3o<\/i><\/p>\n<p><b>MC:<\/b> Misha, n\u00f3s atualizamos, mas at\u00e9 de manh\u00e3 voltamos atr\u00e1s... Adivinha qual velocidade conseguimos alcan\u00e7ar?<\/p>\n<p><b>MM:<\/b> Cerca de 20 mil no m\u00e1ximo.<\/p>\n<p><b>MC:<\/b> Aha, 25! Infelizmente, estamos no mesmo lugar que come\u00e7amos.<\/p>\n<p><b>MM:<\/b> E por que \u00e9 assim? Alguma diagn\u00f3stica foi feita?<\/p>\n<p><b>MC:<\/b> Sim, claro! Aqui, por exemplo, um top interessante:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/09ac3336a820977b643ee5328ad2a851.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MM:<\/b> Vamos dar uma olhada. Vejo que tentamos um enorme n\u00famero de threads de polling:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/346e8047f1f6f2bb1b1dd91a728e437b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMas ao mesmo tempo n\u00e3o conseguimos utilizar o sistema nem pela metade:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/be1843dbec0fb10d8da59e8c570adc5b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nE a performance geral \u00e9 bastante baixa, cerca de 4 mil metrics por segundo:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/02eaf0b56629ebc6d3d5c132374a91b8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTem mais alguma coisa?<\/p>\n<p><b>MC:<\/b> Sim, strace de um dos pollers:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/73fc58bd2925859f6fbbcd118a0483c0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MM:<\/b> Aqui est\u00e1 claro que o processo de polling est\u00e1 esperando por 'semaforos'. S\u00e3o bloqueios:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/d0bec44a9677ec111066dccc1dd8c5dc.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MC:<\/b> N\u00e3o est\u00e1 claro.<\/p>\n<p><b>MM:<\/b> Olha, isso se parece com uma situa\u00e7\u00e3o em que um monte de threads est\u00e1 tentando trabalhar com um recurso que pode ser acessado por apenas um de cada vez. Ent\u00e3o, tudo o que eles podem fazer \u00e9 compartilhar esse recurso por tempo:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/7dbb9e8941b01b666dd48f6301151ec9.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nE a produtividade total trabalhando com tal recurso \u00e9 limitada pela velocidade de um n\u00facleo:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/e00b197577f4ea7350fe56665dbae299.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEsse problema pode ser resolvido de duas maneiras.<\/p>\n<p>Aprimorar o hardware da m\u00e1quina, passando para n\u00facleos mais r\u00e1pidos:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/296d84b434ed7277fb558a8a4dd5ac47.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOu mudar a arquitetura e, ao mesmo tempo \u2013 a carga:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/efea73106440db4e5eda5aa475dd088b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MC:<\/b> Por falar nisso, na m\u00e1quina de teste usaremos menos n\u00facleos do que na produ\u00e7\u00e3o, mas eles s\u00e3o 1,5 vezes mais r\u00e1pidos em frequ\u00eancia por n\u00facleo!<\/p>\n<p><b>MM:<\/b> Entendeu? Precisamos olhar o c\u00f3digo do servidor.<\/p>\n<h3>O caminho dos dados no servidor Zabbix<\/h3>\n<p>\n<b>MC:<\/b> Para entender melhor, come\u00e7amos a analisar como os dados s\u00e3o transmitidos dentro do servidor 'Zabbix':<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/b3d84e3fcb12e7afe3c974bdeacc357a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nUma imagem legal, n\u00e3o? Vamos passar por ela passo a passo para esclarecer mais ou menos. Existem threads e servi\u00e7os respons\u00e1veis pela coleta de dados:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/966db6fa84723d4d3bde8a23736294d6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAs m\u00e9tricas coletadas s\u00e3o enviadas atrav\u00e9s de um socket para o Preprocessor manager, onde s\u00e3o armazenadas em uma fila:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/1e34fe2c4194f7bd71ec409d6169fb94.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nO 'Preprocessor manager' passa os dados para seus trabalhadores, que executam as instru\u00e7\u00f5es de pr\u00e9-processamento e os retornam pelo mesmo socket:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/d647caf3886f0c9378a32314e812edc1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAp\u00f3s isso, o gerenciador de pr\u00e9-processamento os salva no cache de hist\u00f3rico:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/ff0e29b0d974d76bd3a3b71d36a1cc68.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDe l\u00e1, s\u00e3o retirados pelos sincronizadores de hist\u00f3rico, que desempenham v\u00e1rias fun\u00e7\u00f5es: por exemplo, c\u00e1lculo de gatilhos, preenchimento do cache de valores e, o mais importante, salvamento de m\u00e9tricas no armazenamento de hist\u00f3rico. Em geral, o processo \u00e9 complexo e bastante confuso.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/c418a17edeb9153a03dff233aa8f715e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MM:<\/b> \u2013 A primeira coisa que vimos foi que a maioria das threads concorria pelo chamado 'cache de configura\u00e7\u00e3o' (\u00e1rea de mem\u00f3ria onde est\u00e3o armazenadas todas as configura\u00e7\u00f5es do servidor). Muitos bloqueios eram feitos pelas threads respons\u00e1veis pela coleta de dados:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/589d8f564ece6e63457450e9c5081b80.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u2026j\u00e1 que na configura\u00e7\u00e3o est\u00e3o armazenadas n\u00e3o apenas m\u00e9tricas com seus par\u00e2metros, mas tamb\u00e9m filas, de onde os pollers retiram informa\u00e7\u00f5es sobre o que fazer a seguir. Quando h\u00e1 muitos pollers, e um bloqueia a configura\u00e7\u00e3o, os outros esperam por solicita\u00e7\u00f5es:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/8026cdfcd7def84cb3708b7255b08c66.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Os pollers n\u00e3o devem conflitar<\/h3>\n<p>\n<img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/d436cd3415a6f58e1db5a609689c12b6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPor isso, a primeira coisa que fizemos foi dividir a fila em 4 partes e permitir que os pollers bloqueassem essas filas, essas partes, simultaneamente em condi\u00e7\u00f5es seguras:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/9466e5f0053dff583e76713f10e30a89.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIsso eliminou a concorr\u00eancia pelo cache de configura\u00e7\u00e3o, e a velocidade de opera\u00e7\u00e3o dos pollers aumentou significativamente. Mas, em seguida, enfrentamos o problema de que o gerenciador de pr\u00e9-processamento come\u00e7ou a acumular a fila de tarefas:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/dd58e625823310fb0a818ed81abdceac.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>O gerenciador de pr\u00e9-processamento deve ser capaz de priorizar<\/h3>\n<p>\nIsso acontecia em casos em que ele n\u00e3o tinha desempenho suficiente. Ent\u00e3o, tudo o que ele podia fazer era acumular solicita\u00e7\u00f5es dos processos de coleta de dados e armazen\u00e1-las em um buffer at\u00e9 que consumisse toda a mem\u00f3ria e falhasse:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/b215d880863d470ea6ca960c6338b8ae.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPara resolver esse problema, adicionamos um segundo socket, que foi dedicado especialmente aos workers:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/09d1bb92a009f9d29ba68d966de54210.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDessa forma, o gerenciador de pr\u00e9-processamento obteve a capacidade de priorizar seu trabalho e, em caso de crescimento do buffer, a tarefa era desacelerar a coleta, dando aos workers a oportunidade de pegar esse buffer:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/8f4db3661c428e6e6dcfe4cc0c44c016.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEm seguida, descobrimos que uma das raz\u00f5es para a desacelera\u00e7\u00e3o eram os pr\u00f3prios workers, pois competiam por um recurso que n\u00e3o era importante para o seu trabalho. Resolvemos esse problema com um bug-fix, e nas novas vers\u00f5es do 'Zabbix' j\u00e1 est\u00e1 corrigido:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/eedb359823dd23d369339e3735e341fb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Aumentamos a quantidade de sockets \u2013 obtivemos resultados<\/h3>\n<p>\nDepois, o pr\u00f3prio gerenciador de pr\u00e9-processamento se tornou um gargalo, pois era uma \u00fanica thread. Ele estava limitado pela velocidade do n\u00facleo, atingindo uma velocidade m\u00e1xima de cerca de 70 mil m\u00e9tricas por segundo:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/f93ccbc656c0f9e103873d99a9397495.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPor isso, fizemos quatro, com quatro conjuntos de sockets, workers:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/81a3dea3aa0f8807add8d045cf64a609.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nE isso permitiu aumentar a velocidade para cerca de 130 mil m\u00e9tricas:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/016ff07cd021a7221caef19e6ce36a9b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA n\u00e3o linearidade do crescimento se explica pelo fato de que surgiu concorr\u00eancia pelo cache de hist\u00f3rico. Quatro gerentes de pr\u00e9-processador e sincronizadores de hist\u00f3rico estavam competindo por isso. Nesse momento, est\u00e1vamos obtendo cerca de 130 mil m\u00e9tricas por segundo na m\u00e1quina de teste, utilizando cerca de 95% da CPU:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/62162254cd8bc66c1cef697158691588.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Cerca de 2,5 meses atr\u00e1s<\/i><\/p>\n<h3>A sa\u00edda do snmp-community aumentou os NVPs em 1,5 vezes<\/h3>\n<p>\n<b>MM:<\/b> \u2013 Max, preciso de uma nova m\u00e1quina de teste! N\u00e3o cabemos mais nesta atual.<\/p>\n<p><b>MC:<\/b> \u2013 E o que temos agora?<\/p>\n<p><b>MM:<\/b> \u2013 Agora temos 130k NVPs e a CPU \"na prateleira\".<\/p>\n<p><b>MC:<\/b> \u2013 Uau! Legal! Espera, eu tenho duas perguntas. Pelas minhas contas, nossa necessidade \u00e9 em torno de 15-20 mil m\u00e9tricas por segundo. Por que precisamos de mais?<\/p>\n<p><b>MM:<\/b> \u2013 Quero terminar o trabalho de maneira completa. Quero ver quanto podemos extrair deste sistema.<\/p>\n<p><b>MC:<\/b> \u2013 Mas...<\/p>\n<p><b>MM:<\/b> \u2013 Mas para o neg\u00f3cio \u00e9 in\u00fatil.<\/p>\n<p><b>MC:<\/b> \u2013 Entendi. E a segunda pergunta: o que temos agora, conseguiremos manter sozinhos, sem a ajuda de um desenvolvedor?<\/p>\n<p><b>MM:<\/b> \u2013 N\u00e3o acho. Alterar o funcionamento do cache de configura\u00e7\u00e3o \u00e9 um problema. Isso diz respeito a mudan\u00e7as na maioria dos fluxos e \u00e9 bastante complicado de manter. Provavelmente, ser\u00e1 muito dif\u00edcil mant\u00ea-lo.<\/p>\n<p><b>MC:<\/b> \u2013 Ent\u00e3o precisamos de alguma alternativa.<\/p>\n<p><b>MM:<\/b> \u2013 Existe essa op\u00e7\u00e3o. Podemos mudar para n\u00facleos r\u00e1pidos, enquanto desistimos do novo sistema de bloqueio. Ainda assim, obteremos um desempenho de 60-80 mil m\u00e9tricas. Podemos manter todo o restante do c\u00f3digo. ClickHouse, polling ass\u00edncrono funcionar\u00e3o. E isso ser\u00e1 f\u00e1cil de manter.<\/p>\n<p><b>MC:<\/b> \u2013 Maravilha! Proponho pararmos por aqui.<\/p>\n<p>Ap\u00f3s a otimiza\u00e7\u00e3o da parte do servidor, finalmente conseguimos colocar o novo c\u00f3digo em produ\u00e7\u00e3o. Abandonamos algumas mudan\u00e7as em favor da mudan\u00e7a para uma m\u00e1quina com n\u00facleos r\u00e1pidos e minimiza\u00e7\u00e3o do n\u00famero de altera\u00e7\u00f5es no c\u00f3digo. Tamb\u00e9m simplificamos a configura\u00e7\u00e3o e, sempre que poss\u00edvel, desistimos de macros em elementos de dados, pois elas s\u00e3o fontes de bloqueios adicionais.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/2b1ed396b09bd815fba973ebb5f73d76.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPor exemplo, a sa\u00edda da macro snmp-community, que \u00e9 comum na documenta\u00e7\u00e3o e exemplos, neste caso nos permitiu acelerar ainda mais os NVPs em aproximadamente 1,5 vezes.<\/p>\n<p><i>Ap\u00f3s dois dias em produ\u00e7\u00e3o<\/i><\/p>\n<h3>Removemos as janelas pop-up do hist\u00f3rico de incidentes<\/h3>\n<p>\n<b>MC:<\/b> \u2013 Misha, j\u00e1 estamos utilizando o sistema h\u00e1 dois dias e tudo funciona. Mas s\u00f3 quando tudo est\u00e1 funcionando! Tivemos manuten\u00e7\u00f5es planejadas com a transfer\u00eancia de um segmento grande da rede, e n\u00f3s conferimos manualmente o que estava funcionando e o que n\u00e3o estava.<\/p>\n<p><b>MM:<\/b> \u2013 N\u00e3o pode ser! N\u00f3s conferimos isso 10 vezes. O servidor processa at\u00e9 mesmo a indisponibilidade total da rede instantaneamente.<\/p>\n<p><b>MC:<\/b> \u2013 Eu entendo tudo: servidor, base, top, austat, logs \u2013 tudo r\u00e1pido\u2026 Mas estamos olhando a interface da web, e l\u00e1 est\u00e1: o processador 'no espa\u00e7o' no servidor e isso aqui:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/828a44d71f67ac585055bffcc01ab46e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MM:<\/b> \u2013 Entendido. Vamos analisar a web. Descobrimos que, na situa\u00e7\u00e3o em que havia um grande n\u00famero de incidentes ativos, a maioria dos widgets de desempenho come\u00e7ava a funcionar muito lentamente:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/22fdb735aa6136cd9967b40341d2a5cf.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA raz\u00e3o para isso era a gera\u00e7\u00e3o de janelas pop-up com o hist\u00f3rico de incidentes, que s\u00e3o geradas para cada elemento da lista. Portanto, desistimos de gerar essas janelas (comentamos 5 linhas no c\u00f3digo), e isso resolveu nossos problemas.<\/p>\n<p>O tempo de carregamento dos widgets, mesmo em total indisponibilidade, foi reduzido de v\u00e1rios minutos para aceit\u00e1veis 10-15 segundos, e o hist\u00f3rico ainda pode ser visualizado ao clicar no tempo:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/d15341ce76578880a23651a7a68dd802.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Ap\u00f3s o trabalho. H\u00e1 2 meses atr\u00e1s<\/i><\/p>\n<p><b>MC:<\/b> \u2013 Misha, voc\u00ea est\u00e1 saindo? Precisamos conversar.<\/p>\n<p><b>MM:<\/b> \u2013 N\u00e3o estava planejando. Algo de novo com o 'Zabbix'?<\/p>\n<p><b>MC:<\/b> \u2013 N\u00e3o, relaxa! Eu s\u00f3 queria dizer: tudo funciona, obrigado! A pr\u00f3xima rodada \u00e9 por minha conta.<\/p>\n<h3>Zabbix \u00e9 eficiente<\/h3>\n<p>\nO 'Zabbix' \u00e9 um sistema e ferramenta bastante vers\u00e1til e rica. Pode ser utilizado para pequenas instala\u00e7\u00f5es 'pronto para uso', mas \u00e0 medida que as necessidades crescem, \u00e9 necess\u00e1rio otimiz\u00e1-lo. Para armazenar um grande arquivo de m\u00e9tricas, use um armazenamento apropriado:<\/p>\n<ul>\n<li>pode-se utilizar os recursos integrados de integra\u00e7\u00e3o com o 'Elasticsearch' ou exportar o hist\u00f3rico para arquivos de texto (dispon\u00edvel a partir da quarta vers\u00e3o);<\/li>\n<li>pode-se aproveitar nossa experi\u00eancia e integra\u00e7\u00e3o com o 'ClickHouse'.<\/li>\n<\/ul>\n<p>\nPara aumentar drasticamente a velocidade de coleta de m\u00e9tricas, colete-as por m\u00e9todos ass\u00edncronos e envie-as atrav\u00e9s da interface trapper para o servidor 'Zabbix'; ou utilize um patch para a ass\u00edncrona dos pollers do pr\u00f3prio 'Zabbix'.<\/p>\n<p>O Zabbix \u00e9 escrito em C e \u00e9 bastante eficiente. Algumas solu\u00e7\u00f5es arquitet\u00f4nicas limitadas tamb\u00e9m permitem aumentar sua performance e, de acordo com nossa experi\u00eancia, obter mais de 100 mil m\u00e9tricas em uma m\u00e1quina de um \u00fanico processador.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/46559b481b5e53dc3cc3d2562a94531d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Aquele patch do Zabbix<\/h3>\n<p>\n<b>MM:<\/b> \u2013 Eu quero acrescentar alguns pontos. Todo o relat\u00f3rio atual, todos os testes e n\u00fameros apresentados s\u00e3o para a configura\u00e7\u00e3o que usamos. Com isso, estamos coletando cerca de 20 mil m\u00e9tricas por segundo. Se voc\u00ea est\u00e1 tentando entender se isso funcionar\u00e1 para voc\u00ea - pode comparar. O que foi discutido hoje est\u00e1 dispon\u00edvel no GitHub como um patch: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/miklert\/zabbix\">github.com\/miklert\/zabbix<\/a><\/noindex><\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/e5880b2f01cb03809057db08306b23c7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nO patch inclui:<\/p>\n<ul>\n<li>integra\u00e7\u00e3o completa com ClickHouse (tanto no servidor Zabbix quanto no front-end);<\/li>\n<li>solu\u00e7\u00e3o de problemas com o pr\u00e9-processador;<\/li>\n<li>polling ass\u00edncrono.<\/li>\n<\/ul>\n<p>\nO patch \u00e9 compat\u00edvel com toda a vers\u00e3o 4, incluindo lts. Provavelmente, com altera\u00e7\u00f5es m\u00ednimas, funcionar\u00e1 na vers\u00e3o 3.4.<\/p>\n<p>Obrigado pela aten\u00e7\u00e3o.<\/p>\n<h3>Perguntas<\/h3>\n<p>\nPergunta da audi\u00eancia (a seguir \u2013 A): \u2013 Boa tarde! Por favor, voc\u00ea tem planos para uma intera\u00e7\u00e3o intensa com a equipe do Zabbix ou eles com voc\u00eas, de modo que isso n\u00e3o seja um patch, mas um comportamento normal do Zabbix?<\/p>\n<p><b>MM:<\/b> \u2013 Sim, parte das mudan\u00e7as certamente ser\u00e1 comprometida. Algumas coisas permanecer\u00e3o no patch.<\/p>\n<p><b>A:<\/b> \u2013 Muito obrigado pela \u00f3tima apresenta\u00e7\u00e3o! Poderia me informar, por favor, ap\u00f3s aplicar o patch, o suporte por parte do Zabbix continuar\u00e1 e como ser\u00e1 a atualiza\u00e7\u00e3o para vers\u00f5es mais altas? Haver\u00e1 a possibilidade de atualizar o Zabbix ap\u00f3s seu patch para 4.2, 5.0?<\/p>\n<p><b>MM:<\/b> \u2013 Sobre o suporte, n\u00e3o posso comentar. Se eu fosse o suporte t\u00e9cnico do Zabbix, provavelmente diria n\u00e3o, porque \u00e9 c\u00f3digo de terceiros. Em rela\u00e7\u00e3o \u00e0 base de c\u00f3digo 4.2, nossa posi\u00e7\u00e3o \u00e9 a seguinte: \"N\u00f3s iremos acompanhar as atualiza\u00e7\u00f5es e nos atualizaremos para a pr\u00f3xima vers\u00e3o\". Portanto, por algum tempo, publicaremos patches para vers\u00f5es atualizadas. J\u00e1 mencionei na apresenta\u00e7\u00e3o que o n\u00famero de mudan\u00e7as entre as vers\u00f5es ainda \u00e9 relativamente pequeno. Acredito que a migra\u00e7\u00e3o de 3.4 para 4 levou cerca de 15 minutos. Algumas coisas mudaram, mas n\u00e3o de forma significativa.<\/p>\n<p><b>A:<\/b> \u2013 Ou seja, voc\u00eas planejam manter seu patch e \u00e9 seguro instal\u00e1-lo em produ\u00e7\u00e3o, recebendo atualiza\u00e7\u00f5es de alguma forma?<\/p>\n<p><b>MM:<\/b> \u2013 N\u00f3s recomendamos categoricamente. Isso resolve muitos problemas para n\u00f3s.<\/p>\n<p><b>MC:<\/b> \u2013 Mais uma vez, gostaria de ressaltar que as mudan\u00e7as que n\u00e3o dizem respeito \u00e0 arquitetura e n\u00e3o envolvem bloqueios ou filas s\u00e3o modulares, est\u00e3o em m\u00f3dulos separados. Mesmo altera\u00e7\u00f5es menores podem ser mantidas com relativa facilidade.<\/p>\n<p><b>MM:<\/b> \u2013 Se voc\u00ea est\u00e1 interessado nos detalhes, o Clickhouse utiliza uma chamada biblioteca de hist\u00f3rico. Ela \u00e9 independente \u2013 \u00e9 uma c\u00f3pia do suporte do Elasticsearch, ou seja, \u00e9 configur\u00e1vel. O polling muda apenas os pollers. Acreditamos que isso funcionar\u00e1 por um longo tempo.<\/p>\n<p><b>A:<\/b> \u2013 Muito obrigado. E voc\u00ea poderia me dizer se h\u00e1 alguma documenta\u00e7\u00e3o das mudan\u00e7as feitas?<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetso (Intersvyaz): Zabbix, 100k NVPS em um \u00fanico servidor\" src=\"\/wp-content\/uploads\/2020\/02\/f3842ba578f736721c96794941b8f071.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MM:<\/b> \u2013 A documenta\u00e7\u00e3o \u00e9 o patch. \u00d3bvio que, com a introdu\u00e7\u00e3o do Clickhouse e novos tipos de pollers, surgem novas op\u00e7\u00f5es de configura\u00e7\u00e3o. No link do \u00faltimo slide, h\u00e1 uma breve descri\u00e7\u00e3o de como utiliz\u00e1-las.<\/p>\n<h3>Sobre a substitui\u00e7\u00e3o do fping pelo nmap<\/h3>\n<p>\n<b>A:<\/b> \u2013 Como voc\u00ea implementou isso no final? Pode dar exemplos espec\u00edficos: voc\u00ea usa strappers e um script externo? O que verifica t\u00e3o rapidamente um enorme n\u00famero de hosts? Como voc\u00ea obt\u00e9m esses hosts? \u00c9 preciso alimentar o nmap de alguma forma, conseguir de algum lugar, colocar, executar...?<\/p>\n<p><b>MM:<\/b> \u2013 Legal. Muito boa pergunta! A ess\u00eancia \u00e9 a seguinte. Modificamos a biblioteca (ICMP ping, parte do Zabbix) para verifica\u00e7\u00f5es ICMP, onde o n\u00famero de pacotes especificados \u00e9 um (1), e o c\u00f3digo tenta usar o nmap. Ou seja, isso se tornou o trabalho interno do Zabbix, agora um trabalho interno do pinger. Portanto, nenhuma sincroniza\u00e7\u00e3o ou uso de trapping \u00e9 necess\u00e1rio. Isso foi feito intencionalmente para manter o sistema \u00edntegro e evitar a sincroniza\u00e7\u00e3o de duas bases: o que verificar, carregar atrav\u00e9s do poller, e se a carga n\u00e3o falhou... \u00c9 muito mais simples.<\/p>\n<p><b>A:<\/b> \u2013 Isso tamb\u00e9m funciona para proxies?<\/p>\n<p><b>MM:<\/b> \u2013 Sim, mas n\u00e3o testamos. O c\u00f3digo de polling \u00e9 o mesmo no Zabbix e no servidor. Deve funcionar. Reitero: a performance do sistema \u00e9 tal que n\u00e3o precisamos de proxies.<\/p>\n<p><b>MC:<\/b> \u2013 A resposta correta para a pergunta \u00e9: \"Por que voc\u00ea precisaria de proxies em um sistema como este?\" Apenas por causa do NAT ou para monitorar atrav\u00e9s de um canal lento\u2026<\/p>\n<p><b>A:<\/b> \u2013 Voc\u00eas usam o Zabbix como um alerta, se eu entendi corretamente. Ou os gr\u00e1ficos (onde o armazenamento de arquivos) foram transferidos para outro sistema, como Grafana? Ou voc\u00eas n\u00e3o utilizam essa funcionalidade?<\/p>\n<p><b>MM:<\/b> \u2013 Eu reitero: fizemos uma integra\u00e7\u00e3o completa. Estamos despejando o hist\u00f3rico no \"ClickHouse\", mas ao mesmo tempo, alteramos o frontend em PHP. O frontend em PHP acessa o \"ClickHouse\" e gera todos os gr\u00e1ficos a partir de l\u00e1. Entretanto, para ser sincero, temos uma parte que constr\u00f3i a partir do mesmo \"ClickHouse\", com os mesmos dados do \"Zabbix\" para gerar dados em outros sistemas de visualiza\u00e7\u00e3o gr\u00e1fica.<\/p>\n<p><b>MC:<\/b> \u2013 No \"Grafana\", inclusive.<\/p>\n<h3>Como foi tomada a decis\u00e3o sobre a aloca\u00e7\u00e3o de recursos?<\/h3>\n<p>\n<b>A:<\/b> \u2013 Compartilhe um pouco da cozinha interna. Como foi tomado a decis\u00e3o de que era necess\u00e1rio alocar recursos para uma reformula\u00e7\u00e3o significativa do produto? Isso, de fato, implica certos riscos. E diga, por favor, no contexto de que voc\u00ea pretende suportar novas vers\u00f5es: como essa decis\u00e3o se justifica do ponto de vista da gest\u00e3o?<\/p>\n<p><b>MM:<\/b> \u2013 Aparentemente, n\u00e3o contamos bem a dram\u00e1tica da hist\u00f3ria. Nos encontramos em uma situa\u00e7\u00e3o onde algo precisava ser feito, e seguimos, na verdade, com duas equipes paralelas:<\/p>\n<ul>\n<li>Uma se ocupava do lan\u00e7amento de um sistema de monitoramento com novos m\u00e9todos: monitoramento como servi\u00e7o, um conjunto padr\u00e3o de solu\u00e7\u00f5es open source que combinamos e em seguida tentamos modificar o processo de neg\u00f3cios para trabalhar com o novo sistema de monitoramento.<\/li>\n<li>Em paralelo, t\u00ednhamos um programador entusiasta que se dedicava a isso (sobre si mesmo). Aconteceu que ele venceu.<\/li>\n<\/ul>\n<p>\n<b>A:<\/b> \u2013 E qual \u00e9 o tamanho da equipe?<\/p>\n<p><b>MC:<\/b> \u2013 Ela est\u00e1 diante de voc\u00ea.<\/p>\n<p><b>A:<\/b> \u2013 Ou seja, como sempre, \u00e9 necess\u00e1rio um passional?<\/p>\n<p><b>MM:<\/b> \u2013 N\u00e3o sei o que \u00e9 passional.<\/p>\n<p><b>A:<\/b> \u2013 Neste caso, aparentemente, voc\u00ea. Muito obrigado, voc\u00eas s\u00e3o incr\u00edveis.<\/p>\n<p><b>MM:<\/b> \u2013 Obrigado.<\/p>\n<h3>Sobre patches para Zabbix<\/h3>\n<p>\n<b>A:<\/b> \u2013 Para um sistema que utiliza proxy (por exemplo, em alguns sistemas distribu\u00eddos), \u00e9 poss\u00edvel adaptar e aplicar seu patch, digamos, nos pollers, proxies e parcialmente no pr\u00e9-processador do pr\u00f3prio \"Zabbix\"; e sua intera\u00e7\u00e3o? \u00c9 poss\u00edvel otimizar as implementa\u00e7\u00f5es existentes para um sistema com m\u00faltiplos proxies?<\/p>\n<p><b>MM:<\/b> \u2013 Eu sei que o servidor \"Zabbix\" \u00e9 montado com a ajuda de proxy (\u00e9 compilado e resulta em c\u00f3digo). N\u00e3o verificamos isso em produ\u00e7\u00e3o. N\u00e3o estou certo, mas, ao que parece, o gerente do pr\u00e9-processador n\u00e3o \u00e9 utilizado no proxy. A tarefa do proxy \u00e9 pegar um conjunto de m\u00e9tricas do \"Zabbix\", descart\u00e1-las (ele tamb\u00e9m grava a configura\u00e7\u00e3o, o banco local) e devolver ao servidor \"Zabbix\". O pr\u00e9-processamento ser\u00e1 feito depois pelo pr\u00f3prio servidor, quando o receber.<\/p>\n<p>O interesse por proxies \u00e9 compreens\u00edvel. Vamos verificar isso. \u00c9 um assunto interessante.<\/p>\n<p><b>A:<\/b> \u2013 A ideia era a seguinte: se \u00e9 poss\u00edvel aplicar patches nos pollers, podemos aplicar patches nos proxies e ajustar a intera\u00e7\u00e3o com o servidor, e adaptar o pr\u00e9-processador apenas no servidor para esses fins.<\/p>\n<p><b>MM:<\/b> \u2013 Acho que tudo \u00e9 ainda mais simples. Voc\u00ea pega o c\u00f3digo, aplica o patch, depois configura conforme necess\u00e1rio \u2013 re\u00fane proxies (por exemplo, com ODBC) e distribui o c\u00f3digo patchado pelos sistemas. Onde for necess\u00e1rio, re\u00fane proxies, onde for necess\u00e1rio, o servidor.<\/p>\n<p><b>A:<\/b> \u2013 Provavelmente n\u00e3o ser\u00e1 preciso aplicar patches adicionais na transmiss\u00e3o de proxies para o servidor?<\/p>\n<p><b>MC:<\/b> \u2013 N\u00e3o, \u00e9 padr\u00e3o.<\/p>\n<p><b>MM:<\/b> \u2013 Na verdade, uma das ideias n\u00e3o foi mencionada. Sempre mantivemos o equil\u00edbrio entre a explos\u00e3o de ideias e a quantidade de altera\u00e7\u00f5es, al\u00e9m da facilidade de manuten\u00e7\u00e3o.<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"3yRt9jSwrlg\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/3yRt9jSwrlg\/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><\/p>\n<h3>Um pouco de publicidade \ud83d\ude42<\/h3>\n<p>\nObrigado por permanecer conosco. Voc\u00ea gosta dos nossos artigos? Quer ver mais materiais interessantes? Apoie-nos fazendo um pedido ou recomendando para conhecidos. <noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/cloudvps\/nl\">VPS em nuvem para desenvolvedores a partir de $4.99<\/a><\/noindex>, <b>uma alternativa \u00fanica aos servidores entry-level, que criamos para voc\u00ea:<\/b> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/347386\/\">Toda a verdade sobre VPS (KVM) E5-2697 v3 (6 N\u00facleos) 10GB DDR4 480GB SSD 1Gbps a partir de $19 ou como dividir um servidor corretamente?<\/a><\/noindex> (dispon\u00edveis op\u00e7\u00f5es com RAID1 e RAID10, at\u00e9 24 n\u00facleos e at\u00e9 40GB DDR4).<\/p>\n<p><b>Dell R730xd por 2 vezes mais barato no datacenter Equinix Tier IV em Amsterd\u00e3?<\/b> Somente conosco <b><noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/serversnl\">2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100TB a partir de $199<\/a><\/noindex> na Holanda! <b>Dell R420 \u2014 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB \u2014 a partir de $99!<\/b><\/b> Leia sobre <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/329618\/\">Como construir uma infraestrutura de classe corporativa utilizando servidores Dell R730xd E5-2650 v4 com custo de 9000 euros por centavos?<\/a><\/noindex><br \/>\n<br \/>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/ua-hosting\/blog\/486540\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f HighLoad++ \u043f\u0440\u043e\u0439\u0434\u0435\u0442 6 \u0438 7 \u0430\u043f\u0440\u0435\u043b\u044f 2020 \u0433\u043e\u0434\u0430 \u0432 \u0421\u0430\u043d\u043a\u0442-\u041f\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u0433\u0435 \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0438 \u0431\u0438\u043b\u0435\u0442\u044b \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435. HighLoad++ Moscow 2018. \u0417\u0430\u043b \u00ab\u041c\u043e\u0441\u043a\u0432\u0430\u00bb. 9 \u043d\u043e\u044f\u0431\u0440\u044f, 15:00. \u0422\u0435\u0437\u0438\u0441\u044b \u0438 \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u044f. * \u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u2014 \u043e\u043d\u043b\u0430\u0439\u043d \u0438 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430. * \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b ZABBIX. * \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438. * \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430 ZABBIX. * \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f UI. * \u041e\u043f\u044b\u0442 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 [&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-56049","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=\"\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f HighLoad++ \u043f\u0440\u043e\u0439\u0434\u0435\u0442 6 \u0438 7 \u0430\u043f\u0440\u0435\u043b\u044f 2020 \u0433\u043e\u0434\u0430 \u0432 \u0421\u0430\u043d\u043a\u0442-\u041f\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u0433\u0435 \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0438 \u0431\u0438\u043b\u0435\u0442\u044b \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435.\" \/>\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\/highload-mihail-makurov-maksim-chernetsov-intersvyaz-zabbix-100knvps-na-odnom-servere\" \/>\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\udd47HighLoad++, \u041c\u0438\u0445\u0430\u0438\u043b \u041c\u0430\u043a\u0443\u0440\u043e\u0432, \u041c\u0430\u043a\u0441\u0438\u043c \u0427\u0435\u0440\u043d\u0435\u0446\u043e\u0432 (\u0418\u043d\u0442\u0435\u0440\u0441\u0432\u044f\u0437\u044c): Zabbix, 100kNVPS \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f HighLoad++ \u043f\u0440\u043e\u0439\u0434\u0435\u0442 6 \u0438 7 \u0430\u043f\u0440\u0435\u043b\u044f 2020 \u0433\u043e\u0434\u0430 \u0432 \u0421\u0430\u043d\u043a\u0442-\u041f\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u0433\u0435 \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0438 \u0431\u0438\u043b\u0435\u0442\u044b \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/highload-mihail-makurov-maksim-chernetsov-intersvyaz-zabbix-100knvps-na-odnom-servere\" \/>\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-03T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:04:13+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\udd47HighLoad++, Mikhail Makurov, Maxim Chernetsov (Inter\u0441onnection): Zabbix, 100kNVPS em um \u00fanico servidor | ProHoster","description":"A pr\u00f3xima confer\u00eancia HighLoad++ ocorrer\u00e1 nos dias 6 e 7 de abril de 2020 em S\u00e3o Petersburgo. Detalhes e ingressos no link.","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/highload-mihail-makurov-maksim-chernetsov-intersvyaz-zabbix-100knvps-na-odnom-servere","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\udd47HighLoad++, \u041c\u0438\u0445\u0430\u0438\u043b \u041c\u0430\u043a\u0443\u0440\u043e\u0432, \u041c\u0430\u043a\u0441\u0438\u043c \u0427\u0435\u0440\u043d\u0435\u0446\u043e\u0432 (\u0418\u043d\u0442\u0435\u0440\u0441\u0432\u044f\u0437\u044c): Zabbix, 100kNVPS \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 | ProHoster","og:description":"\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f HighLoad++ \u043f\u0440\u043e\u0439\u0434\u0435\u0442 6 \u0438 7 \u0430\u043f\u0440\u0435\u043b\u044f 2020 \u0433\u043e\u0434\u0430 \u0432 \u0421\u0430\u043d\u043a\u0442-\u041f\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u0433\u0435 \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0438 \u0431\u0438\u043b\u0435\u0442\u044b \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435.","og:url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/highload-mihail-makurov-maksim-chernetsov-intersvyaz-zabbix-100knvps-na-odnom-servere","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-03T21:00:00+00:00","article:modified_time":"2020-02-18T11:04:13+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"56049","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:31:44","updated":"2022-09-30 17:33:39","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\/56049","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=56049"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/56049\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=56049"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=56049"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=56049"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}