{"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\/es\/blog\/administrirovanie\/walking-in-my-shoes-stop-a-oni-markirovannye","title":{"rendered":"\u00abCaminando en mis zapatos\u00bb \u2014 espera, \u00bfest\u00e1n marcados?","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Desde 2019, en Rusia se aplica una ley sobre la obligaci\u00f3n de marcar. Esta ley no se aplica a todos los grupos de productos, y las fechas de entrada en vigor de la obligaci\u00f3n de marcar var\u00edan seg\u00fan los grupos de productos. Los primeros en estar sujetos a la obligaci\u00f3n de marcar son el tabaco, el calzado y los medicamentos; posteriormente se agregar\u00e1n otros productos, como perfumes, textiles y leche. Esta innovaci\u00f3n legislativa ha impulsado el desarrollo de nuevas soluciones inform\u00e1ticas que permitir\u00e1n rastrear toda la cadena de vida del producto desde su producci\u00f3n hasta la compra por parte del consumidor final, involucrando a todos los participantes del proceso: tanto el Estado como todas las organizaciones que venden productos sujetos a marcado.<\/p>\n<p>En X5, el sistema que rastrear\u00e1 los productos marcados y intercambiar\u00e1 datos con el Estado y los proveedores se llama \u201cMarcus\u201d. Hablaremos por orden sobre c\u00f3mo y qui\u00e9n lo ha desarrollado, cu\u00e1l es su stack tecnol\u00f3gico y por qu\u00e9 podemos sentirnos orgullosos.<\/p>\n<p><img decoding=\"async\" alt=\"\u00abCaminando en mis zapatos\u00bb \u2014 espera, \u00bfest\u00e1n 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>Un verdadero HighLoad<\/h3>\n<p>\n\u201cMarcus\u201d resuelve m\u00faltiples tareas, la principal de las cuales es la interacci\u00f3n de integraci\u00f3n entre los sistemas de informaci\u00f3n de X5 y el sistema de informaci\u00f3n estatal de productos marcados (GIS MP) para rastrear el movimiento de productos marcados. Adem\u00e1s, la plataforma almacena todos los c\u00f3digos de marcado que recibimos y toda la historia del movimiento de esos c\u00f3digos a trav\u00e9s de los objetos, ayudando a eliminar los errores de clasificaci\u00f3n de los productos marcados. Por ejemplo, en el caso de los productos de tabaco, que fueron incluidos en los primeros grupos de productos marcados, solo un cami\u00f3n de cigarrillos contiene alrededor de 600,000 paquetes, cada uno con su c\u00f3digo \u00fanico. La tarea de nuestro sistema es rastrear y verificar la legalidad de los movimientos de cada uno de esos paquetes entre almacenes y tiendas, y, en \u00faltima instancia, comprobar la admisibilidad de su venta al consumidor final. Adem\u00e1s, registramos alrededor de 125,000 operaciones de caja por hora, y a\u00fan hay que registrar c\u00f3mo cada uno de esos paquetes lleg\u00f3 a la tienda. As\u00ed, considerando todos los movimientos entre los objetos, esperamos decenas de miles de millones de registros al a\u00f1o.<\/p>\n<h3>El equipo M<\/h3>\n<p>\nA pesar de que \"Markus\" se considera un proyecto dentro de X5, se implementa con un enfoque de producto. El equipo trabaja bajo la metodolog\u00eda Scrum. El proyecto comenz\u00f3 en el verano del a\u00f1o pasado, pero los primeros resultados llegaron solo en octubre: se form\u00f3 completamente un equipo propio, se desarroll\u00f3 la arquitectura del sistema y se compr\u00f3 el equipo necesario. Actualmente, el equipo est\u00e1 compuesto por 16 personas, de las cuales seis se dedican al desarrollo de backend y frontend, y tres al an\u00e1lisis sistem\u00e1tico. Otros seis se ocupan de pruebas manuales, de carga, automatizadas y del soporte del producto. Adem\u00e1s, contamos con un especialista en SRE. <\/p>\n<p>En nuestro equipo, no solo los desarrolladores escriben c\u00f3digo, pr\u00e1cticamente todos saben programar y crean pruebas automatizadas, scripts de carga y scripts de automatizaci\u00f3n. Prestamos especial atenci\u00f3n a esto, ya que incluso el soporte del producto requiere un alto nivel de automatizaci\u00f3n. Siempre intentamos asesorar y ayudar a los colegas que antes no programaban, d\u00e1ndoles peque\u00f1as tareas a realizar.<\/p>\n<p>Debido a la pandemia de coronavirus, trasladamos a todo el equipo al trabajo remoto; la disponibilidad de todas las herramientas de gesti\u00f3n del desarrollo, y el flujo de trabajo establecido en Jira y GitLab, nos permitieron superar f\u00e1cilmente esta etapa. Los meses transcurridos en la modalidad remota demostraron que la productividad del equipo no se vio afectada, y para muchos, el confort en el trabajo aument\u00f3, lo \u00fanico que falta es la comunicaci\u00f3n cara a cara.<\/p>\n<h3>Reuni\u00f3n del equipo antes del trabajo remoto<\/h3>\n<p>\n<img decoding=\"async\" alt=\"\u00abCaminando en mis zapatos\u00bb \u2014 espera, \u00bfest\u00e1n marcados?\" src=\"\/wp-content\/uploads\/2020\/07\/c1095316fd5e3dcc147b3dd968013152.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Reuniones durante el trabajo remoto<\/h3>\n<p>\n<img decoding=\"async\" alt=\"\u00abCaminando en mis zapatos\u00bb \u2014 espera, \u00bfest\u00e1n marcados?\" src=\"\/wp-content\/uploads\/2020\/07\/0c705ebbe28afbecd439c0ce2fcf04cb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Stack tecnol\u00f3gico de la soluci\u00f3n<\/h3>\n<p>\nEl repositorio y herramienta est\u00e1ndar de CI\/CD para X5 es GitLab. Lo utilizamos para almacenar el c\u00f3digo, realizar pruebas continuas y desplegar en los servidores de pruebas y productivos. Tambi\u00e9n practicamos la revisi\u00f3n de c\u00f3digo, donde al menos 2 colegas deben aprobar los cambios en el c\u00f3digo propuestos por el desarrollador. Los analizadores de c\u00f3digo est\u00e1tico SonarQube y JaCoCo nos ayudan a mantener el c\u00f3digo limpio y garantizar el nivel requerido de cobertura con pruebas unitarias. Todos los cambios en el c\u00f3digo deben pasar necesariamente por estas verificaciones. Todos los escenarios de prueba que se ejecutan manualmente se automatizan posteriormente.<\/p>\n<p>Para el exitoso cumplimiento de los procesos comerciales de 'Markus', tuvimos que resolver una serie de desaf\u00edos tecnol\u00f3gicos, uno a uno. <\/p>\n<p><b>Tarea 1. La necesidad de escalabilidad horizontal del sistema<\/b><\/p>\n<p>Para abordar esta tarea, elegimos un enfoque microservicioso para la arquitectura. Era crucial entender las \u00e1reas de responsabilidad de los servicios. Intentamos dividirlos seg\u00fan las operaciones comerciales, teniendo en cuenta la especificidad de los procesos. Por ejemplo, la recepci\u00f3n en el almac\u00e9n es una operaci\u00f3n no muy frecuente, pero muy intensiva, en la que es necesario obtener lo m\u00e1s r\u00e1pido posible del regulador estatal informaci\u00f3n sobre las unidades de productos aceptadas, cuya cantidad en un solo env\u00edo puede alcanzar hasta 600,000, verificar la aceptabilidad de la recepci\u00f3n de ese producto en el almac\u00e9n y proporcionar toda la informaci\u00f3n necesaria al sistema de automatizaci\u00f3n del almac\u00e9n. Por otro lado, la carga desde los almacenes tiene una intensidad mucho mayor, pero opera con vol\u00famenes de datos menores. <\/p>\n<p>Todos los servicios los implementamos en un principio sin estado (stateless) y, incluso, intentamos dividir las operaciones internas en pasos, utilizando lo que llamamos, self-temas de Kafka. Esto es cuando un microservicio env\u00eda un mensaje a s\u00ed mismo, lo que permite equilibrar la carga en operaciones que demandan m\u00e1s recursos y simplifica el mantenimiento del producto, pero hablaremos de esto m\u00e1s adelante. <\/p>\n<p>Decidimos separar en servicios individuales los m\u00f3dulos de interacci\u00f3n con sistemas externos. Esto permiti\u00f3 resolver el problema de las API externas que cambian con frecuencia, pr\u00e1cticamente sin afectar a los servicios con funcionalidad comercial.<\/p>\n<p><img decoding=\"async\" alt=\"\u00abCaminando en mis zapatos\u00bb \u2014 espera, \u00bfest\u00e1n marcados?\" src=\"\/wp-content\/uploads\/2020\/07\/da1dc58791fa28e89e289528e0fd2550.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTodos los microservicios se despliegan en un cl\u00faster de OpenShift, que resuelve tanto el problema de escalar cada microservicio como nos permite no utilizar herramientas externas de descubrimiento de servicios.<\/p>\n<p><b>Tarea 2. La necesidad de mantener una alta carga y un intercambio de datos muy intenso entre los servicios de la plataforma:<\/b> solo en la fase de lanzamiento del proyecto se realizan alrededor de 600 operaciones por segundo. Esperamos que este valor aumente a 5000 op\/sec a medida que se conecten los objetos comerciales a nuestra plataforma.<\/p>\n<p>Esta tarea se resolvi\u00f3 implementando un cl\u00faster de Kafka y pr\u00e1cticamente abandonando la interacci\u00f3n sincr\u00f3nica entre los microservicios de la plataforma. Esto requiere un an\u00e1lisis muy cuidadoso de los requisitos del sistema, ya que no todas las operaciones pueden ser as\u00edncronas. Al mismo tiempo, no solo transmitimos eventos a trav\u00e9s del corredor, sino que tambi\u00e9n enviamos en el mensaje toda la informaci\u00f3n empresarial necesaria. As\u00ed, el tama\u00f1o del mensaje puede alcanzar varios cientos de kilobytes. La limitaci\u00f3n en el tama\u00f1o de los mensajes en Kafka nos exige prever con precisi\u00f3n el tama\u00f1o de los mensajes, y, si es necesario, los dividimos, pero esta divisi\u00f3n es l\u00f3gica y est\u00e1 relacionada con las operaciones comerciales. <br \/>\nPor ejemplo, el producto que llega en veh\u00edculo lo dividimos por cajas. Para las operaciones sincr\u00f3nicas se asignan microservicios separados y se lleva a cabo una rigurosa prueba de carga. El uso de Kafka nos present\u00f3 otro desaf\u00edo: verificar el funcionamiento de nuestro servicio teniendo en cuenta que la integraci\u00f3n con Kafka hace que todas nuestras pruebas unitarias sean as\u00edncronas. Para resolver esta tarea, escribimos nuestros propios m\u00e9todos utilitarios utilizando Embedded Kafka Broker. Esto no elimina la necesidad de escribir pruebas unitarias para m\u00e9todos individuales, pero preferimos probar casos complejos utilizando Kafka.<\/p>\n<p>Se prest\u00f3 mucha atenci\u00f3n al seguimiento de logs, para que sus TraceId no se perdieran al ocurrir excepciones durante la ejecuci\u00f3n de los servicios o al trabajar con Kafka batch. Y si en el primer caso no surgieron preguntas especiales, en el segundo caso tuvimos que registrar en el log todos los TraceId con los que lleg\u00f3 el batch y elegir uno para continuar la trazabilidad. As\u00ed, al buscar por el TraceId original, el usuario puede descubrir f\u00e1cilmente con cu\u00e1l se continu\u00f3 la trazabilidad.<\/p>\n<p><b>Tarea 3. Necesidad de almacenar una gran cantidad de datos: <\/b> m\u00e1s de 1 mil millones de marcas al a\u00f1o solo en tabaco entran a X5. Se requiere acceso constante y r\u00e1pido a ellos. En total, el sistema debe procesar alrededor de 10 mil millones de registros sobre el historial de movimiento de productos marcados.<\/p>\n<p>Para abordar el tercer desaf\u00edo, se eligi\u00f3 la base de datos NoSQL MongoDB. Hemos construido un shard de 5 nodos y en cada nodo un Replica Set de 3 servidores. Esto permite escalar el sistema horizontalmente, a\u00f1adiendo <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/es\/server\/\"   title=\"nuevos servidores\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"781\">nuevos servidores<\/a> en cl\u00faster y garantizar su resistencia a fallos. Aqu\u00ed nos enfrentamos a otro problema: asegurar la transaccionalidad en el cl\u00faster de mongo, teniendo en cuenta el uso de microservicios escalables horizontalmente. Por ejemplo, una de las tareas de nuestro sistema es detectar intentos de reventa de productos con c\u00f3digos de marcado id\u00e9nticos. Aqu\u00ed surgen confusiones con escaneos err\u00f3neos o con operaciones equivocadas de los cajeros. Descubrimos que estos duplicados pueden surgir tanto dentro de un batch procesado por Kafka como entre dos batches procesados en paralelo. As\u00ed, la verificaci\u00f3n de duplicados mediante consultas a la base de datos no era efectiva. Para cada uno de los microservicios resolvimos el problema por separado, seg\u00fan la l\u00f3gica empresarial de ese servicio. Por ejemplo, para los recibos, a\u00f1adimos una verificaci\u00f3n dentro del batch y un procesamiento separado para detectar duplicados al insertar. <\/p>\n<p>Para que la interacci\u00f3n de los usuarios con el historial de operaciones no afectara lo m\u00e1s importante: el funcionamiento de nuestros procesos de negocio, separamos todos los datos hist\u00f3ricos en un servicio independiente con su propia base de datos, que tambi\u00e9n recibe informaci\u00f3n a trav\u00e9s de Kafka. De esta manera, los usuarios trabajan con un servicio aislado, sin influir en los servicios que procesan datos de operaciones actuales.<\/p>\n<p><b>Tarea 4. Reprocesamiento de colas y monitoreo:<\/b><\/p>\n<p>En los sistemas distribuidos, inevitablemente surgen problemas y errores de disponibilidad de bases de datos, colas y fuentes externas de datos. En el caso de 'Markus', la fuente de tales errores es la integraci\u00f3n con sistemas externos. Era necesario encontrar una soluci\u00f3n que permitiera hacer reintentos de las solicitudes con respuestas err\u00f3neas despu\u00e9s de un tiempo de espera determinado, pero sin detener el procesamiento de solicitudes exitosas en la cola principal. Para ello, se eligi\u00f3 el concepto denominado 'retry basado en t\u00f3picos'. Para cada t\u00f3pico principal se crea uno o varios t\u00f3picos de reintentos, a los cuales se env\u00edan los mensajes con errores, excluyendo as\u00ed la demora en el procesamiento de mensajes del t\u00f3pico principal. El esquema de interacci\u00f3n es - <\/p>\n<p><img decoding=\"async\" alt=\"\u00abCaminando en mis zapatos\u00bb \u2014 espera, \u00bfest\u00e1n marcados?\" src=\"\/wp-content\/uploads\/2020\/07\/922b3107d183312312713c213488fbe1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPara implementar este esquema, necesit\u00e1bamos lo siguiente: integrar esta soluci\u00f3n con Spring y evitar la duplicaci\u00f3n de c\u00f3digo. En la red, encontramos una soluci\u00f3n similar basada en Spring BeanPostProcessor, pero nos pareci\u00f3 demasiado engorrosa. Nuestro equipo desarroll\u00f3 una soluci\u00f3n m\u00e1s simple que permite integrarse en el ciclo de creaci\u00f3n de consumidores de Spring y agregar consumidores con Retry adem\u00e1s. Proporcionamos a la comunidad de Spring un prototipo de nuestra soluci\u00f3n, que se puede ver <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/spring-projects\/spring-kafka\/issues\/1229\">aqu\u00ed<\/a><\/noindex>. La cantidad de consumidores Retry y el n\u00famero de intentos de cada consumidor se configuran a trav\u00e9s de par\u00e1metros, dependiendo de las necesidades del proceso de negocio, y para que todo funcione, solo queda aplicar la conocida anotaci\u00f3n org.springframework.kafka.annotation.KafkaListener.<\/p>\n<p>En caso de que un mensaje no se pueda procesar despu\u00e9s de todos los intentos de retry, se env\u00eda al DLT (dead letter topic) mediante Spring DeadLetterPublishingRecoverer. A petici\u00f3n del soporte, expandimos esta funcionalidad e hicimos un servicio separado que permite ver los mensajes que llegaron al DLT, el stackTrace, el traceId y otra informaci\u00f3n \u00fatil relacionada. Adem\u00e1s, se a\u00f1adieron monitorizaciones y alertas en todos los t\u00f3picos DLT, por lo que, actualmente, la aparici\u00f3n de un mensaje en el t\u00f3pico DLT es un motivo para investigar y registrar un defecto. Esto es muy conveniente: por el nombre del t\u00f3pico entendemos inmediatamente en qu\u00e9 etapa del proceso surgi\u00f3 el problema, lo que acelera significativamente la b\u00fasqueda de su causa ra\u00edz.<\/p>\n<p><img decoding=\"async\" alt=\"\u00abCaminando en mis zapatos\u00bb \u2014 espera, \u00bfest\u00e1n marcados?\" src=\"\/wp-content\/uploads\/2020\/07\/ba1110bf1c93249c73dd76c490f1d7aa.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nRecientemente implementamos una interfaz que permite reenviar mensajes mediante nuestro soporte, despu\u00e9s de corregir sus causas (por ejemplo, restaurar la funcionalidad de un sistema externo) y, por supuesto, registrar el correspondiente defecto para an\u00e1lisis. Aqu\u00ed fueron \u00fatiles nuestros self-t\u00f3picos, de modo que, en lugar de reiniciar toda la cadena de procesamiento, se puede reiniciar desde el paso necesario. <\/p>\n<p><img decoding=\"async\" alt=\"\u00abCaminando en mis zapatos\u00bb \u2014 espera, \u00bfest\u00e1n marcados?\" src=\"\/wp-content\/uploads\/2020\/07\/78c7831131808732b74b27f055b60d54.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Explotaci\u00f3n de la plataforma<\/h3>\n<p>\nLa plataforma ya est\u00e1 en operaci\u00f3n productiva, realizamos entregas y env\u00edos todos los d\u00edas, conectamos nuevos centros de distribuci\u00f3n y tiendas. En el marco del piloto, el sistema trabaja con grupos de productos \"Tabacos\" y \"Calzado\". <\/p>\n<p>Todo nuestro equipo participa en la realizaci\u00f3n de pilotos, analiza los problemas que surgen y presenta propuestas para mejorar nuestro producto, desde la mejora de los logs hasta cambios en los procesos. <\/p>\n<p>Para no repetir mis errores, todos los casos encontrados durante la fase piloto se reflejan en las pruebas automatizadas. La gran cantidad de pruebas automatizadas y pruebas unitarias permiten realizar pruebas de regresi\u00f3n y aplicar hotfixes en cuesti\u00f3n de horas.<\/p>\n<p>En este momento, seguimos desarrollando y perfeccionando nuestra plataforma, enfrent\u00e1ndonos constantemente a nuevos desaf\u00edos. Si te interesa, te contaremos sobre nuestras soluciones en los pr\u00f3ximos art\u00edculos.<br \/>\n<br \/>Fuente: <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.2 - 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\/es\/blog\/administrirovanie\/walking-in-my-shoes-stop-a-oni-markirovannye\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\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\/es\/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 espera, \u00bfest\u00e1n etiquetados?","description":"Desde 2019, en Rusia est\u00e1 en vigor una ley sobre el etiquetado obligatorio. La ley no se aplica a todos los grupos de productos y los plazos de entrada en vigencia del etiquetado obligatorio var\u00edan seg\u00fan los grupos de productos.","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/walking-in-my-shoes-stop-a-oni-markirovannye","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","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\/es\/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\/es\/wp-json\/wp\/v2\/posts\/87372","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=87372"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/87372\/revisions"}],"predecessor-version":[{"id":157972,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/87372\/revisions\/157972"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/87373"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=87372"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=87372"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=87372"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}