{"id":87372,"date":"2020-07-07T13:42:34","date_gmt":"2020-07-07T11:42:34","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/walking-in-my-shoes-stop-a-oni-markirovannye"},"modified":"2020-07-07T13:42:34","modified_gmt":"2020-07-07T11:42:34","slug":"walking-in-my-shoes-stop-a-oni-markirovannye","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/walking-in-my-shoes-stop-a-oni-markirovannye","title":{"rendered":"\u2018Andar nos meus sapatos\u2019 \u2014 pare, eles est\u00e3o marcados?","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Desde 2019, existe uma lei na R\u00fassia sobre a rotulagem obrigat\u00f3ria. A lei n\u00e3o se aplica a todos os grupos de produtos, e os prazos para a implementa\u00e7\u00e3o da rotulagem obrigat\u00f3ria variam entre os grupos de produtos. Os primeiros a serem inclu\u00eddos na rotulagem obrigat\u00f3ria s\u00e3o tabaco, cal\u00e7ados e medicamentos, com outros produtos, como perfumes, t\u00eaxteis e leite, sendo adicionados posteriormente. Essa inova\u00e7\u00e3o legislativa estimulou o desenvolvimento de novas solu\u00e7\u00f5es de TI que permitir\u00e3o rastrear toda a cadeia de vida do produto desde a produ\u00e7\u00e3o at\u00e9 a compra pelo consumidor final, abrangendo todos os participantes do processo: tanto o pr\u00f3prio governo quanto todas as organiza\u00e7\u00f5es que comercializam produtos com rotulagem obrigat\u00f3ria.<\/p>\n<p>Na X5, o sistema que rastrear\u00e1 produtos com rotulagem e trocar\u00e1 dados com o governo e fornecedores foi chamado de \u201cMarcus\u201d. Vamos explicar, passo a passo, como e quem o desenvolveu, qual \u00e9 sua pilha de tecnologias e por que temos motivos para nos orgulhar.<\/p>\n<p><img decoding=\"async\" alt=\"\u2018Andar nos meus sapatos\u2019 \u2014 pare, eles est\u00e3o marcados?\" src=\"\/wp-content\/uploads\/2020\/07\/522382bab9b8d133f3657baea6175357.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Um verdadeiro HighLoad<\/h3>\n<p>\n\u201cMarcus\u201d resolve v\u00e1rias tarefas, sendo a principal delas a intera\u00e7\u00e3o de integra\u00e7\u00e3o entre os sistemas de informa\u00e7\u00e3o da X5 e o sistema de informa\u00e7\u00e3o estatal de produtos rotulados (GIS MP) para rastrear o movimento de produtos rotulados. Al\u00e9m disso, a plataforma armazena todos os c\u00f3digos de rotulagem que recebemos e todo o hist\u00f3rico de movimenta\u00e7\u00e3o desses c\u00f3digos entre os objetos, ajudando a eliminar a separa\u00e7\u00e3o incorreta de produtos rotulados. Tomando como exemplo os produtos de tabaco, que foram os primeiros grupos de produtos rotulados, apenas um caminh\u00e3o de cigarros cont\u00e9m cerca de 600.000 ma\u00e7os, cada um com seu c\u00f3digo \u00fanico. E a tarefa do nosso sistema \u00e9 rastrear e verificar a legalidade dos movimentos de cada um desses ma\u00e7os entre armaz\u00e9ns e lojas e, em \u00faltima inst\u00e2ncia, verificar a viabilidade da sua venda ao consumidor final. Registramos cerca de 125.000 opera\u00e7\u00f5es de caixa por hora, al\u00e9m de precisar registrar como cada um desses ma\u00e7os chegou \u00e0 loja. Assim, considerando todos os movimentos entre os objetos, esperamos dezenas de bilh\u00f5es de registros por ano.<\/p>\n<h3>Equipe M<\/h3>\n<p>\nEmbora o \"Marcus\" seja considerado um projeto dentro da X5, est\u00e1 sendo realizado com uma abordagem de produto. A equipe trabalha com Scrum. O projeto come\u00e7ou no ver\u00e3o do ano passado, mas os primeiros resultados s\u00f3 chegaram em outubro \u2014 uma equipe pr\u00f3pria foi totalmente formada, a arquitetura do sistema foi desenvolvida e o equipamento foi comprado. Atualmente, a equipe conta com 16 pessoas, das quais seis est\u00e3o envolvidas no desenvolvimento de backend e frontend, e tr\u00eas na an\u00e1lise de sistemas. Outros seis se ocupam de testes manuais, de carga, de automa\u00e7\u00e3o e do suporte ao produto. Al\u00e9m disso, temos um especialista em SRE. <\/p>\n<p>Na nossa equipe, n\u00e3o apenas os desenvolvedores escrevem c\u00f3digo, praticamente todos os membros sabem programar e escrevem autotestes, scripts de carga e scripts de automa\u00e7\u00e3o. Damos uma aten\u00e7\u00e3o especial a isso, pois mesmo o suporte ao produto requer um alto n\u00edvel de automa\u00e7\u00e3o. Sempre procuramos orientar e ajudar os colegas que antes n\u00e3o programavam, atribuindo-lhes algumas pequenas tarefas.<\/p>\n<p>Devido \u00e0 pandemia de coronav\u00edrus, transferimos toda a equipe para o trabalho remoto, e a disponibilidade de todas as ferramentas para gerenciamento de desenvolvimento, junto com o workflow definido no Jira e GitLab, permitiu que super\u00e1ssemos essa fase com facilidade. Os meses que passamos trabalhando remotamente mostraram que a produtividade da equipe n\u00e3o foi prejudicada, e para muitos, o conforto no trabalho aumentou; a \u00fanica coisa que sentimos falta foi da comunica\u00e7\u00e3o face a face.<\/p>\n<h3>Reuni\u00e3o da equipe antes do trabalho remoto<\/h3>\n<p>\n<img decoding=\"async\" alt=\"\u2018Andar nos meus sapatos\u2019 \u2014 pare, eles est\u00e3o marcados?\" src=\"\/wp-content\/uploads\/2020\/07\/c1095316fd5e3dcc147b3dd968013152.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Reuni\u00f5es durante o trabalho remoto<\/h3>\n<p>\n<img decoding=\"async\" alt=\"\u2018Andar nos meus sapatos\u2019 \u2014 pare, eles est\u00e3o marcados?\" src=\"\/wp-content\/uploads\/2020\/07\/0c705ebbe28afbecd439c0ce2fcf04cb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Pilha tecnol\u00f3gica da solu\u00e7\u00e3o<\/h3>\n<p>\nO reposit\u00f3rio padr\u00e3o e a ferramenta de CI\/CD para a X5 \u00e9 o GitLab. Usamos para armazenar c\u00f3digo, realizar testes cont\u00ednuos e implementar em servidores de teste e produ\u00e7\u00e3o. Tamb\u00e9m adotamos a pr\u00e1tica de revis\u00e3o de c\u00f3digo, que requer a aprova\u00e7\u00e3o de pelo menos dois colegas para as altera\u00e7\u00f5es feitas pelo desenvolvedor. Ferramentas de an\u00e1lise est\u00e1tica de c\u00f3digo, como SonarQube e JaCoCo, nos ajudam a manter o c\u00f3digo limpo e a garantir o n\u00edvel exigido de cobertura de testes unit\u00e1rios. Todas as altera\u00e7\u00f5es no c\u00f3digo devem passar por essas valida\u00e7\u00f5es. Todos os cen\u00e1rios de teste que s\u00e3o executados manualmente s\u00e3o posteriormente automatizados.<\/p>\n<p>Para a execu\u00e7\u00e3o bem-sucedida dos processos de neg\u00f3cios do \u201cMarcus\u201d, tivemos que resolver uma s\u00e9rie de desafios tecnol\u00f3gicos, cada um em sua ordem. <\/p>\n<p><b>Tarefa 1. A necessidade de escalabilidade horizontal do sistema<\/b><\/p>\n<p>Para resolver essa tarefa, optamos pela abordagem de microservi\u00e7os na arquitetura. Foi muito importante entender as \u00e1reas de responsabilidade dos servi\u00e7os. N\u00f3s nos esfor\u00e7amos para dividi-los de acordo com as opera\u00e7\u00f5es comerciais, levando em considera\u00e7\u00e3o a especificidade dos processos. Por exemplo, a recep\u00e7\u00e3o no armaz\u00e9m \u00e9 uma opera\u00e7\u00e3o n\u00e3o muito frequente, mas muito volumosa, durante a qual \u00e9 necess\u00e1rio obter o mais rapidamente poss\u00edvel do \u00f3rg\u00e3o regulador as informa\u00e7\u00f5es sobre as unidades de produto recebidas, cujas quantidades em uma \u00fanica remessa podem chegar a 600000, verificar a aceitabilidade da recep\u00e7\u00e3o desse produto no armaz\u00e9m e fornecer todas as informa\u00e7\u00f5es necess\u00e1rias ao sistema de automa\u00e7\u00e3o do armaz\u00e9m. J\u00e1 a expedi\u00e7\u00e3o dos armaz\u00e9ns tem uma intensidade muito maior, mas opera com volumes de dados menores. <\/p>\n<p>Todos os servi\u00e7os s\u00e3o implementados com o princ\u00edpio stateless e at\u00e9 mesmo as opera\u00e7\u00f5es internas tentamos dividir em etapas, utilizando, como chamamos, self-t\u00f3picos Kafka. Isso ocorre quando um microservi\u00e7o envia uma mensagem para si mesmo, o que ajuda a balancear a carga em opera\u00e7\u00f5es mais pesadas e simplifica a manuten\u00e7\u00e3o do produto, mas vamos falar mais sobre isso depois. <\/p>\n<p>Decidimos destacar em servi\u00e7os separados os m\u00f3dulos de intera\u00e7\u00e3o com sistemas externos. Isso resolveu o problema de APIs externas frequentemente alteradas, quase sem impactar os servi\u00e7os com funcionalidade comercial.<\/p>\n<p><img decoding=\"async\" alt=\"\u2018Andar nos meus sapatos\u2019 \u2014 pare, eles est\u00e3o marcados?\" src=\"\/wp-content\/uploads\/2020\/07\/da1dc58791fa28e89e289528e0fd2550.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTodos os microservi\u00e7os s\u00e3o implantados em um cluster OpenShift, que resolve tanto o problema de escalabilidade de cada microservi\u00e7o quanto nos permite n\u00e3o utilizar ferramentas externas de Service Discovery.<\/p>\n<p><b>Tarefa 2. A necessidade de suportar alta carga e um interc\u00e2mbio de dados muito intenso entre os servi\u00e7os da plataforma:<\/b> apenas na fase de lan\u00e7amento do projeto, cerca de 600 opera\u00e7\u00f5es por segundo s\u00e3o executadas. Esperamos que esse n\u00famero aumente para 5000 op\/sec \u00e0 medida que mais pontos comerciais se conectem \u00e0 nossa plataforma.<\/p>\n<p>Essa tarefa foi resolvida atrav\u00e9s da implementa\u00e7\u00e3o de um cluster Kafka e pela quase total elimina\u00e7\u00e3o da intera\u00e7\u00e3o s\u00edncrona entre os microsservi\u00e7os da plataforma. Isso exige uma an\u00e1lise muito cuidadosa dos requisitos do sistema, uma vez que nem todas as opera\u00e7\u00f5es podem ser ass\u00edncronas. Al\u00e9m disso, n\u00e3o estamos apenas transmitindo eventos atrav\u00e9s de um broker, mas tamb\u00e9m passando todas as informa\u00e7\u00f5es de neg\u00f3cios necess\u00e1rias na mensagem. Assim, o tamanho da mensagem pode chegar a v\u00e1rias centenas de kilobytes. A limita\u00e7\u00e3o de tamanho de mensagens no Kafka exige uma previs\u00e3o precisa do tamanho das mensagens, e, se necess\u00e1rio, as dividimos, mas essa divis\u00e3o \u00e9 l\u00f3gica, relacionada \u00e0s opera\u00e7\u00f5es de neg\u00f3cios. <br \/>\nPor exemplo, um produto que chega de carro, dividimos por caixas. Para opera\u00e7\u00f5es s\u00edncronas, s\u00e3o designados microsservi\u00e7os separados e \u00e9 realizado um rigoroso teste de carga. O uso do Kafka nos apresentou um novo desafio \u2014 o teste de funcionalidade do nosso servi\u00e7o, dado que a integra\u00e7\u00e3o com o Kafka torna todos os nossos testes unit\u00e1rios ass\u00edncronos. Para resolver essa quest\u00e3o, escrevemos nossos pr\u00f3prios m\u00e9todos utilit\u00e1rios usando o Embedded Kafka Broker. Isso n\u00e3o elimina a necessidade de escrever testes unit\u00e1rios para m\u00e9todos individuais, mas preferimos testar casos complexos usando o Kafka.<\/p>\n<p>Colocamos muita aten\u00e7\u00e3o na rastreabilidade dos logs, para garantir que seus TraceId n\u00e3o se percam em caso de exce\u00e7\u00f5es durante a opera\u00e7\u00e3o dos servi\u00e7os ou ao lidar com o Kafka batch. E se com o primeiro isso n\u00e3o gerou quest\u00f5es especiais, no segundo caso fomos for\u00e7ados a registrar no log todos os TraceId recebidos pelo batch e escolher um para continuar a rastreabilidade. Assim, ao procurar pelo TraceId original, o usu\u00e1rio facilmente encontrar\u00e1 com qual rastreamento continuou.<\/p>\n<p><b>Tarefa 3. Necessidade de armazenar grandes quantidades de dados: <\/b> mais de 1 bilh\u00e3o de etiquetas por ano apenas de tabaco chega \u00e0 X5. \u00c9 necess\u00e1rio acesso constante e r\u00e1pido a esses dados. Ao todo, o sistema deve processar cerca de 10 bilh\u00f5es de registros sobre a hist\u00f3ria do movimento de produtos com marcas registradas.<\/p>\n<p>Para resolver a terceira tarefa, foi escolhido o banco de dados NoSQL MongoDB. Constru\u00edmos um shard com 5 n\u00f3s e, em cada n\u00f3, um Replica Set com 3 servidores. Isso permite escalar o sistema horizontalmente, adicionando <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/pt\/server\/\"   title=\"novos servidores\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"781\">novos servidores<\/a> no cluster, garantindo sua resili\u00eancia. Aqui nos deparamos com outro problema \u2014 a garantia de transacionalidade no cluster do mongo, considerando o uso de microservi\u00e7os escal\u00e1veis horizontalmente. Por exemplo, uma das tarefas do nosso sistema \u00e9 identificar tentativas de revenda de produtos com c\u00f3digos de marca\u00e7\u00e3o iguais. Aqui surgem sobreposi\u00e7\u00f5es com digitaliza\u00e7\u00f5es incorretas ou com opera\u00e7\u00f5es de caixa erradas. Descobrimos que essas duplicidades podem ocorrer tanto dentro de um \u00fanico batch processado pelo Kafka, quanto entre dois batches processados em paralelo. Assim, a verifica\u00e7\u00e3o da exist\u00eancia de duplicatas atrav\u00e9s de uma consulta ao banco n\u00e3o trouxe resultados. Para cada um dos microservi\u00e7os, resolvemos o problema separadamente, baseado na l\u00f3gica de neg\u00f3cios desse servi\u00e7o. Por exemplo, para os recibos, adicionamos uma verifica\u00e7\u00e3o dentro do batch e um tratamento separado para a apari\u00e7\u00e3o de duplicatas na inser\u00e7\u00e3o. <\/p>\n<p>Para que o trabalho dos usu\u00e1rios com o hist\u00f3rico de opera\u00e7\u00f5es n\u00e3o afete o mais importante \u2014 o funcionamento dos nossos processos de neg\u00f3cios, destacamos todos os dados hist\u00f3ricos em um servi\u00e7o separado com um banco de dados separado, que tamb\u00e9m recebe informa\u00e7\u00f5es via Kafka. Assim, os usu\u00e1rios trabalham com um servi\u00e7o isolado, sem influenciar os servi\u00e7os que processam dados sobre opera\u00e7\u00f5es atuais.<\/p>\n<p><b>Tarefa 4. Reprocessamento de filas e monitoramento:<\/b><\/p>\n<p>Em sistemas distribu\u00eddos, surgem inevitavelmente problemas e erros de acessibilidade das bases de dados, filas e fontes de dados externas. No caso do 'Markus', a origem desses erros \u00e9 a integra\u00e7\u00e3o com sistemas externos. Era necess\u00e1rio encontrar uma solu\u00e7\u00e3o que permitisse fazer novas requisi\u00e7\u00f5es ap\u00f3s respostas erradas com um determinado timeout, mas sem interromper o processamento de requisi\u00e7\u00f5es bem-sucedidas na fila principal. Para isso, foi escolhida a denominada conceito de \u201cretry baseado em t\u00f3pico\u201d. Para cada t\u00f3pico principal, cria-se um ou v\u00e1rios t\u00f3picos de retry, para onde s\u00e3o direcionadas as mensagens com erro, excluindo assim a lat\u00eancia no processamento das mensagens do t\u00f3pico principal. O esquema de intera\u00e7\u00e3o \u2014 <\/p>\n<p><img decoding=\"async\" alt=\"\u2018Andar nos meus sapatos\u2019 \u2014 pare, eles est\u00e3o marcados?\" src=\"\/wp-content\/uploads\/2020\/07\/922b3107d183312312713c213488fbe1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPara implementar esse esquema, precis\u00e1vamos do seguinte - integrar essa solu\u00e7\u00e3o com o Spring e evitar a duplica\u00e7\u00e3o de c\u00f3digo. Na vastid\u00e3o da internet, encontramos uma solu\u00e7\u00e3o semelhante baseada no Spring BeanPostProcessor, mas ela nos pareceu excessivamente complicada. Nossa equipe desenvolveu uma solu\u00e7\u00e3o mais simples, permitindo integrar-se ao ciclo de cria\u00e7\u00e3o de consumidores do Spring e adicionar consumidores Retry adicionalmente. O prot\u00f3tipo da nossa solu\u00e7\u00e3o foi apresentado \u00e0 equipe do Spring, e pode ser visualizado. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/spring-projects\/spring-kafka\/issues\/1229\">aqui<\/a><\/noindex>. O n\u00famero de consumidores Retry e o n\u00famero de tentativas de cada consumidor s\u00e3o configur\u00e1veis atrav\u00e9s de par\u00e2metros, dependendo das necessidades do processo de neg\u00f3cios, e para que tudo funcione, \u00e9 necess\u00e1rio apenas adicionar a familiar anota\u00e7\u00e3o org.springframework.kafka.annotation.KafkaListener, bem conhecida entre os desenvolvedores Spring.<\/p>\n<p>Caso a mensagem n\u00e3o consiga ser processada ap\u00f3s todas as tentativas de retry, ela \u00e9 direcionada para o DLT (dead letter topic) atrav\u00e9s do Spring DeadLetterPublishingRecoverer. A pedido do suporte, ampliamos essa funcionalidade e criamos um servi\u00e7o separado que permite visualizar as mensagens que foram para o DLT, stackTrace, traceId e outras informa\u00e7\u00f5es \u00fateis sobre elas. Al\u00e9m disso, foram adicionados monitoramentos e alertas para todos os t\u00f3picos DLT, e atualmente, a apari\u00e7\u00e3o de uma mensagem no t\u00f3pico DLT \u00e9 um motivo para investiga\u00e7\u00e3o e abertura de um defeito. Isso \u00e9 muito conveniente \u2013 pelo nome do t\u00f3pico, entendemos imediatamente em qual etapa do processo surgiu o problema, o que acelera significativamente a busca pela causa raiz.<\/p>\n<p><img decoding=\"async\" alt=\"\u2018Andar nos meus sapatos\u2019 \u2014 pare, eles est\u00e3o marcados?\" src=\"\/wp-content\/uploads\/2020\/07\/ba1110bf1c93249c73dd76c490f1d7aa.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nRecentemente, implementamos uma interface que permite reenviar mensagens pela nossa equipe de suporte, ap\u00f3s a resolu\u00e7\u00e3o de suas causas (por exemplo, a restaura\u00e7\u00e3o do funcionamento de um sistema externo) e, claro, a abertura do defeito correspondente para an\u00e1lise. Aqui, nossas self-t\u00f3picos foram \u00fateis, pois, para n\u00e3o reiniciar toda a longa cadeia de processamento, podemos reinici\u00e1-la a partir do passo necess\u00e1rio. <\/p>\n<p><img decoding=\"async\" alt=\"\u2018Andar nos meus sapatos\u2019 \u2014 pare, eles est\u00e3o marcados?\" src=\"\/wp-content\/uploads\/2020\/07\/78c7831131808732b74b27f055b60d54.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Opera\u00e7\u00e3o da plataforma<\/h3>\n<p>\nA plataforma j\u00e1 est\u00e1 em opera\u00e7\u00e3o produtiva, realizamos entregas e expedi\u00e7\u00f5es todos os dias, conectamos novos centros de distribui\u00e7\u00e3o e lojas. No \u00e2mbito do piloto, o sistema opera com grupos de produtos \"Tabaco\" e \"Cal\u00e7ados\". <\/p>\n<p>Toda a nossa equipe participa na realiza\u00e7\u00e3o dos pilotos, analisa os problemas que surgem e faz sugest\u00f5es para aprimorar nosso produto, desde melhorias nos logs at\u00e9 mudan\u00e7as nos processos. <\/p>\n<p>Para n\u00e3o repetir os mesmos erros, todos os casos encontrados durante a fase piloto s\u00e3o refletidos em testes automatizados. A presen\u00e7a de um grande n\u00famero de testes automatizados e de testes unit\u00e1rios permite realizar testes de regress\u00e3o e implementar hotfixes em quest\u00e3o de poucas horas.<\/p>\n<p>Atualmente, continuamos a desenvolver e aprimorar nossa plataforma e enfrentamos novos desafios constantemente. Se voc\u00ea estiver interessado, falaremos sobre nossas solu\u00e7\u00f5es em artigos futuros.<br \/>\n<br \/>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/X5RetailGroup\/blog\/509714\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0421 2019 \u0433\u043e\u0434\u0430 \u0432 \u0420\u043e\u0441\u0441\u0438\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0437\u0430\u043a\u043e\u043d \u043e\u0431 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u043a\u0435. \u0417\u0430\u043a\u043e\u043d \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0435 \u043d\u0430 \u0432\u0441\u0435 \u0433\u0440\u0443\u043f\u043f\u044b \u0442\u043e\u0432\u0430\u0440\u043e\u0432, \u0438 \u0441\u0440\u043e\u043a\u0438 \u0432\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f \u0432 \u0441\u0438\u043b\u0443 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u0434\u043b\u044f \u0442\u043e\u0432\u0430\u0440\u043d\u044b\u0445 \u0433\u0440\u0443\u043f\u043f \u0440\u0430\u0437\u043d\u044b\u0435. \u041f\u0435\u0440\u0432\u044b\u043c\u0438 \u043f\u043e\u0434 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u043a\u0443 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0442\u0430\u0431\u0430\u043a, \u043e\u0431\u0443\u0432\u044c, \u043b\u0435\u043a\u0430\u0440\u0441\u0442\u0432\u0430, \u043f\u043e\u0437\u0434\u043d\u0435\u0435 \u0434\u043e\u0431\u0430\u0432\u044f\u0442\u0441\u044f \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0442\u043e\u0432\u0430\u0440\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u0443\u0445\u0438, \u0442\u0435\u043a\u0441\u0442\u0438\u043b\u044c, \u043c\u043e\u043b\u043e\u043a\u043e. \u042d\u0442\u043e \u0437\u0430\u043a\u043e\u043d\u043e\u0434\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043d\u043e\u0432\u043e\u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u043e\u0431\u0443\u0434\u0438\u043b\u043e \u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043d\u043e\u0432\u044b\u0445 \u0418\u0422-\u0440\u0435\u0448\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0442 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":87373,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-87372","post","type-post","status-publish","format-standard","has-post-thumbnail","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 2019 \u0433\u043e\u0434\u0430 \u0432 \u0420\u043e\u0441\u0441\u0438\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0437\u0430\u043a\u043e\u043d \u043e\u0431 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u043a\u0435. \u0417\u0430\u043a\u043e\u043d \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0435 \u043d\u0430 \u0432\u0441\u0435 \u0433\u0440\u0443\u043f\u043f\u044b \u0442\u043e\u0432\u0430\u0440\u043e\u0432, \u0438 \u0441\u0440\u043e\u043a\u0438 \u0432\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f \u0432 \u0441\u0438\u043b\u0443 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u0434\u043b\u044f \u0442\u043e\u0432\u0430\u0440\u043d\u044b\u0445 \u0433\u0440\u0443\u043f\u043f \u0440\u0430\u0437\u043d\u044b\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\/walking-in-my-shoes-stop-a-oni-markirovannye\" \/>\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\udd47\u00abWalking in my shoes\u00bb \u2014 \u0441\u0442\u043e\u043f, \u0430 \u043e\u043d\u0438 \u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435? | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0421 2019 \u0433\u043e\u0434\u0430 \u0432 \u0420\u043e\u0441\u0441\u0438\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0437\u0430\u043a\u043e\u043d \u043e\u0431 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u043a\u0435. \u0417\u0430\u043a\u043e\u043d \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0435 \u043d\u0430 \u0432\u0441\u0435 \u0433\u0440\u0443\u043f\u043f\u044b \u0442\u043e\u0432\u0430\u0440\u043e\u0432, \u0438 \u0441\u0440\u043e\u043a\u0438 \u0432\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f \u0432 \u0441\u0438\u043b\u0443 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u0434\u043b\u044f \u0442\u043e\u0432\u0430\u0440\u043d\u044b\u0445 \u0433\u0440\u0443\u043f\u043f \u0440\u0430\u0437\u043d\u044b\u0435.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/walking-in-my-shoes-stop-a-oni-markirovannye\" \/>\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-07-07T11:42:34+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-07-07T11:42:34+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\udd47\u00abWalking in my shoes\u00bb \u2014 pera, eles est\u00e3o etiquetados? | ProHoster","description":"Desde 2019, uma lei sobre etiquetagem obrigat\u00f3ria est\u00e1 em vigor na R\u00fassia. A lei n\u00e3o se aplica a todos os grupos de produtos, e os prazos para a implementa\u00e7\u00e3o da etiquetagem obrigat\u00f3ria variam entre os grupos de produtos.","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/walking-in-my-shoes-stop-a-oni-markirovannye","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\udd47\u00abWalking in my shoes\u00bb \u2014 \u0441\u0442\u043e\u043f, \u0430 \u043e\u043d\u0438 \u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435? | ProHoster","og:description":"\u0421 2019 \u0433\u043e\u0434\u0430 \u0432 \u0420\u043e\u0441\u0441\u0438\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0437\u0430\u043a\u043e\u043d \u043e\u0431 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u043a\u0435. \u0417\u0430\u043a\u043e\u043d \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0435 \u043d\u0430 \u0432\u0441\u0435 \u0433\u0440\u0443\u043f\u043f\u044b \u0442\u043e\u0432\u0430\u0440\u043e\u0432, \u0438 \u0441\u0440\u043e\u043a\u0438 \u0432\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f \u0432 \u0441\u0438\u043b\u0443 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0440\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u0434\u043b\u044f \u0442\u043e\u0432\u0430\u0440\u043d\u044b\u0445 \u0433\u0440\u0443\u043f\u043f \u0440\u0430\u0437\u043d\u044b\u0435.","og:url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/walking-in-my-shoes-stop-a-oni-markirovannye","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-07-07T11:42:34+00:00","article:modified_time":"2020-07-07T11:42:34+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"87372","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 13:52:22","updated":"2026-02-08 20:33:48","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\/87372","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=87372"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/87372\/revisions"}],"predecessor-version":[{"id":157972,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/87372\/revisions\/157972"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media\/87373"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=87372"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=87372"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=87372"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}