{"id":83248,"date":"2020-05-29T19:42:48","date_gmt":"2020-05-29T17:42:48","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/dihotomiya-dannyh-pereosmyslenie-otnosheniya-k-dannym-i-servisam"},"modified":"2020-05-29T19:42:48","modified_gmt":"2020-05-29T17:42:48","slug":"dihotomiya-dannyh-pereosmyslenie-otnosheniya-k-dannym-i-servisam","status":"publish","type":"post","link":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/dihotomiya-dannyh-pereosmyslenie-otnosheniya-k-dannym-i-servisam","title":{"rendered":"Dicotom\u00eda de datos: repensando la relaci\u00f3n con los datos y los servicios","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i><b>\u00a1Hola a todos! Tenemos excelentes noticias, en junio OTUS lanza nuevamente un curso <noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/rVZl\/\">\u00abArquitecto de Software\u00bb<\/a><\/noindex>, por lo que tradicionalmente compartimos con ustedes material \u00fatil.<\/b><\/i><\/p>\n<p><img decoding=\"async\" alt=\"Dicotom\u00eda de datos: repensando la relaci\u00f3n con los datos y los servicios\" src=\"\/wp-content\/uploads\/2020\/05\/6092ffb23e765239b4a8f27d4a0cb846.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n Si te has encontrado con toda esta historia sobre microservicios sin ning\u00fan contexto, es comprensible que la encuentres un poco extra\u00f1a. Dividir una aplicaci\u00f3n en fragmentos interconectados a trav\u00e9s de la red necesariamente implica a\u00f1adir modos complejos de tolerancia a fallos en el sistema distribuido resultante. <\/p>\n<p>A pesar de que este enfoque implica dividirse en numerosos servicios independientes, el objetivo final es mucho m\u00e1s grande que simplemente hacer que estos servicios funcionen en diferentes m\u00e1quinas. Se trata de interactuar con el mundo circundante, que en su esencia tambi\u00e9n es distribuido. No en un sentido t\u00e9cnico, sino m\u00e1s bien en el de un ecosistema que consiste en muchas personas, equipos y programas, y cada una de estas partes de una u otra forma debe cumplir su funci\u00f3n.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Las empresas, por ejemplo, se componen de un conjunto de sistemas distribuidos que en conjunto contribuyen a alcanzar un objetivo. Ignoramos este hecho durante d\u00e9cadas, tratando de lograr la integraci\u00f3n, transfiriendo archivos por FTP o utilizando herramientas de integraci\u00f3n empresarial, mientras nos enfoc\u00e1bamos en nuestros propios objetivos individuales. Pero con la llegada de los servicios, todo cambi\u00f3. Los servicios nos ayudaron a ver m\u00e1s all\u00e1 del horizonte y a observar un mundo de programas interdependientes que trabajan juntos. Sin embargo, para operar con \u00e9xito, es necesario entender y dise\u00f1ar dos mundos fundamentalmente diferentes: el mundo exterior, donde existimos en un ecosistema de muchos otros servicios, y nuestro propio mundo interno, donde gobernamos en soledad.<\/p>\n<p><img decoding=\"async\" alt=\"Dicotom\u00eda de datos: repensando la relaci\u00f3n con los datos y los servicios\" src=\"\/wp-content\/uploads\/2020\/05\/93f535f6f3319d7b2829d35c0fe1c48f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n Este mundo distribuido es diferente del que hemos crecido y al que estamos acostumbrados. Los principios de construcci\u00f3n de una arquitectura monol\u00edtica tradicional no soportan ning\u00fan tipo de cr\u00edtica. Por lo tanto, entender correctamente tales sistemas es algo m\u00e1s que crear un esquema atractivo en una pizarra blanca o una impresionante prueba de concepto. Se trata de hacer que dicho sistema funcione correctamente durante un largo periodo. Afortunadamente, los servicios han existido durante bastante tiempo, aunque se presentan de diferentes maneras. <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Service-oriented_architecture\">Lecciones de SOA<\/a><\/noindex> siguen siendo relevantes, incluso condimentados con Docker, Kubernetes y ligeramente desgastados por barbas hipster. <\/p>\n<p>As\u00ed que hoy veremos c\u00f3mo han cambiado las reglas, por qu\u00e9 necesitamos repensar nuestro enfoque hacia los servicios y los datos que se transmiten entre ellos, y por qu\u00e9 necesitaremos herramientas completamente diferentes para ello.<\/p>\n<h3>La encapsulaci\u00f3n no siempre ser\u00e1 tu amiga<\/h3>\n<p>\n Los microservicios pueden operar de manera independiente entre s\u00ed. Esta propiedad les confiere su mayor valor. Esta misma caracter\u00edstica permite que los servicios se escalen y crezcan. No tanto en el sentido de escalar a cuatrillones de usuarios o petabytes de datos (aunque aqu\u00ed tambi\u00e9n pueden ayudar), sino en t\u00e9rminos de escalar desde la perspectiva de las personas, a medida que los equipos y las organizaciones crecen continuamente.<\/p>\n<p><img decoding=\"async\" alt=\"Dicotom\u00eda de datos: repensando la relaci\u00f3n con los datos y los servicios\" src=\"\/wp-content\/uploads\/2020\/05\/ec36218b6152c2b713f72689b4ea6916.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSin embargo, la independencia es un arma de doble filo. Es decir, un servicio por s\u00ed solo puede funcionar f\u00e1cilmente y sin complicaciones. Pero si dentro de un servicio se implementa una funci\u00f3n que requiere la interacci\u00f3n con otro servicio, al final tenemos que hacer cambios en ambos servicios casi simult\u00e1neamente. En un monolito, esto es f\u00e1cil, simplemente haces el cambio y lo env\u00edas a producci\u00f3n, pero en el caso de la sincronizaci\u00f3n de servicios independientes, habr\u00e1 m\u00e1s problemas. La coordinaci\u00f3n entre equipos y ciclos de lanzamiento desaf\u00eda la flexibilidad.<\/p>\n<p><img decoding=\"async\" alt=\"Dicotom\u00eda de datos: repensando la relaci\u00f3n con los datos y los servicios\" src=\"\/wp-content\/uploads\/2020\/05\/5fc993636f29e9eb9831d05cbc0bd7f8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEn el enfoque est\u00e1ndar, se intenta simplemente evitar dolorosos cambios transversales, separando claramente la funcionalidad entre los servicios. Un servicio de entrada \u00fanica al sistema puede ser un buen ejemplo aqu\u00ed. Tiene un rol claramente definido que lo diferencia de otros servicios. Este claro desglose significa que, en un mundo de requisitos cambiantes para los servicios que lo rodean, es poco probable que el servicio de entrada \u00fanica al sistema cambie. Existe dentro de un contexto estrictamente limitado.<\/p>\n<p><img decoding=\"async\" alt=\"Dicotom\u00eda de datos: repensando la relaci\u00f3n con los datos y los servicios\" src=\"\/wp-content\/uploads\/2020\/05\/095fd7a6e02ead4924abf180e3b1d26b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n El problema radica en que en el mundo real, los servicios de negocios no pueden mantener una separaci\u00f3n de roles perfectamente limpia de manera constante. Por ejemplo, esos mismos servicios de negocios operan en gran medida con datos que provienen de otros servicios similares. Si te dedicas al comercio minorista en l\u00ednea, el procesamiento de pedidos, el cat\u00e1logo de productos o la informaci\u00f3n de los usuarios se convertir\u00e1 en un requisito para muchos de tus servicios. Cada uno de estos servicios necesitar\u00e1 acceso a esos datos para funcionar. <\/p>\n<p><img decoding=\"async\" alt=\"Dicotom\u00eda de datos: repensando la relaci\u00f3n con los datos y los servicios\" src=\"\/wp-content\/uploads\/2020\/05\/2a3d23850c88d574c990dfdc6015072c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>La mayor\u00eda de los servicios de negocios utilizan el mismo flujo de datos, por lo que su funcionamiento est\u00e1 invariablemente entrelazado.<\/i><\/p>\n<p>As\u00ed llegamos a un punto importante sobre el cual vale la pena hablar. Mientras que los servicios funcionan bien para los componentes de infraestructura que operan en gran medida de manera aislada, la mayor\u00eda de los servicios de negocios tienden a estar entrelazados de una manera mucho m\u00e1s cercana.<\/p>\n<h3>Dicotom\u00eda de datos<\/h3>\n<p>\n Los enfoques centrados en servicios pueden que ya existan, pero a\u00fan hay poca informaci\u00f3n sobre c\u00f3mo intercambiar grandes vol\u00famenes de datos entre servicios.<\/p>\n<p>El problema principal es que los datos y los servicios son inseparables. Por un lado, la encapsulaci\u00f3n nos insta a ocultar los datos para que los servicios puedan separarse unos de otros, facilitando su crecimiento y cambios futuros. Por el otro lado, necesitamos tener la capacidad de compartir y controlar libremente los datos comunes, al igual que con cualquier otro. Se trata de poder comenzar a trabajar de inmediato, tan libremente como en cualquier otro sistema de informaci\u00f3n.<\/p>\n<p>Sin embargo, los sistemas de informaci\u00f3n tienen poco que ver con la encapsulaci\u00f3n. De hecho, es todo lo contrario. Las bases de datos hacen todo lo posible para proporcionar acceso a los datos almacenados en ellas. Vienen equipadas con una poderosa interfaz declarativa que permite modificar los datos como necesites. Esta funcionalidad es importante en la fase de investigaci\u00f3n preliminar, pero no para gestionar la creciente complejidad de un servicio en constante evoluci\u00f3n.<\/p>\n<p><img decoding=\"async\" alt=\"Dicotom\u00eda de datos: repensando la relaci\u00f3n con los datos y los servicios\" src=\"\/wp-content\/uploads\/2020\/05\/830465d4aa3bd2e6c02772a982f170bd.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n Y aqu\u00ed surge la dilema. Una contradicci\u00f3n. Una dicotom\u00eda. Los sistemas de informaci\u00f3n se tratan de proporcionar datos, mientras que los servicios se centran en ocultar.<\/p>\n<p>Estas dos fuerzas son fundamentales. Se encuentran en la base de gran parte de nuestro trabajo, luchando constantemente por la supremac\u00eda en los sistemas que creamos.<\/p>\n<p>A medida que los sistemas de servicios crecen y evolucionan, vemos diversas manifestaciones de las consecuencias de la dicotom\u00eda de los datos. O bien la interfaz del servicio crecer\u00e1, ofreciendo un conjunto cada vez m\u00e1s amplio de funciones y comenzar\u00e1 a parecerse a una extra\u00f1a base de datos casera, o nos enfrentaremos a la frustraci\u00f3n y implementaremos alg\u00fan m\u00e9todo para extraer o mover grandes conjuntos de datos de un servicio a otro.<\/p>\n<p><img decoding=\"async\" alt=\"Dicotom\u00eda de datos: repensando la relaci\u00f3n con los datos y los servicios\" src=\"\/wp-content\/uploads\/2020\/05\/da718c87570a4eb20b18f9c880ae8a1b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n A su vez, crear algo que se asemeje a una extra\u00f1a base de datos casera llevar\u00e1 a una serie de problemas. No entraremos en detalles sobre lo que es peligroso el <i>shared database<\/i>, solo diremos que representa considerables dificultades de ingenier\u00eda y operacionales costosas <noindex><a rel=\"nofollow\" href=\"http:\/\/microservices.io\/patterns\/data\/shared-database.html\">para la empresa que intenta utilizarlo.<\/a><\/noindex> Peor a\u00fan, los vol\u00famenes de datos multiplican los problemas con los l\u00edmites de los servicios. Cuantos m\u00e1s datos compartidos haya dentro del servicio, m\u00e1s complicada se volver\u00e1 la interfaz y m\u00e1s dif\u00edcil ser\u00e1 combinar conjuntos de datos provenientes de diferentes servicios.<\/p>\n<p>Un enfoque alternativo de extracci\u00f3n y movimiento de grandes conjuntos de datos tambi\u00e9n tiene sus problemas. El enfoque com\u00fan a este respecto parece ser simplemente extraer y almacenar un conjunto de datos completo, y luego mantenerlo localmente en cada servicio consumidor.<\/p>\n<p>El problema es que diferentes servicios interpretan los datos que consumen de manera diferente. Estos datos est\u00e1n siempre a mano. Se modifican y procesan localmente. Con bastante rapidez dejan de tener algo en com\u00fan con los datos en la fuente.<\/p>\n<p><img decoding=\"async\" alt=\"Dicotom\u00eda de datos: repensando la relaci\u00f3n con los datos y los servicios\" src=\"\/wp-content\/uploads\/2020\/05\/63934c6876cb89e87155d4c097657617.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n Cuanto m\u00e1s mutables sean las copias, m\u00e1s diferir\u00e1n los datos con el tiempo.<\/p>\n<p><img decoding=\"async\" alt=\"Dicotom\u00eda de datos: repensando la relaci\u00f3n con los datos y los servicios\" src=\"\/wp-content\/uploads\/2020\/05\/616e390ad3df3317ac34ac8d861ce804.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <i>Para colmo, esos datos son dif\u00edciles de corregir en retrospectiva (<\/i><\/p>\n<p>y aqu\u00ed es donde realmente puede ayudar). De hecho, algunos de los problemas tecnol\u00f3gicos intratables que enfrenta el negocio surgen de datos heterog\u00e9neos, que se multiplican de una aplicaci\u00f3n a otra.<noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Master_data_management\">MDM<\/a><\/noindex> Para encontrar una soluci\u00f3n a este problema de los datos compartidos, debemos pensar de manera diferente. Deben convertirse en objetos de primera clase en las arquitecturas que construimos.<\/p>\n<p>Pat Helland <noindex><a rel=\"nofollow\" href=\"http:\/\/cidrdb.org\/cidr2005\/papers\/P12.pdf\">P\u00e9t Helland<\/a><\/noindex> denomina estos datos como \u00abexternos\u00bb, y esta es una caracter\u00edstica muy importante. Necesitamos encapsulaci\u00f3n para no revelar el funcionamiento interno del servicio, pero debemos facilitar el acceso de los servicios a los datos compartidos para que puedan realizar su trabajo correctamente.<\/p>\n<p><img decoding=\"async\" alt=\"Dicotom\u00eda de datos: repensando la relaci\u00f3n con los datos y los servicios\" src=\"\/wp-content\/uploads\/2020\/05\/9703ffdbb528320edc62ee7a680a3258.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n El problema es que ninguno de los enfoques actuales es relevante, ya que ni las interfaces de servicio, ni la mensajer\u00eda, ni las bases de datos compartidas ofrecen una buena soluci\u00f3n para trabajar con datos externos. Las interfaces de servicio son poco adecuadas para el intercambio de datos a cualquier escala. La mensajer\u00eda mueve los datos, pero no conserva su historial, por lo tanto, los datos se deterioran con el tiempo. Las bases de datos compartidas se concentran demasiado en un solo punto, lo que limita el progreso. Inequ\u00edvocamente nos quedamos atrapados en un ciclo de insolvencia de datos:<\/p>\n<p><img decoding=\"async\" alt=\"Dicotom\u00eda de datos: repensando la relaci\u00f3n con los datos y los servicios\" src=\"\/wp-content\/uploads\/2020\/05\/f17ac7063a813cb76bad71ae8622912c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <i>Ciclo de insolvencia de datos<\/i><\/p>\n<h3>Flujos: un enfoque descentralizado para datos y servicios<\/h3>\n<p>\n En ideal, necesitamos cambiar el enfoque sobre c\u00f3mo los servicios trabajan con datos comunes. En este momento, cualquier enfoque enfrenta la dicotom\u00eda mencionada anteriormente, ya que no hay ninguna varita m\u00e1gica que se pueda esparcir generosamente para hacer desaparecer el problema. Sin embargo, podemos repensar el problema y llegar a un compromiso.<\/p>\n<p>Este compromiso implica cierto grado de centralizaci\u00f3n. Podemos aprovechar el mecanismo de registros distribuidos, ya que proporciona flujos escalables y fiables. Ahora necesitamos que los servicios puedan unirse y trabajar con estos flujos comunes, sin embargo, queremos evitar servicios centralizados complejos que realicen dicho procesamiento. Por lo tanto, la mejor opci\u00f3n es integrar el procesamiento de flujos en cada servicio consumidor. As\u00ed, los servicios podr\u00e1n combinar conjuntos de datos de diferentes fuentes y trabajar con ellos seg\u00fan lo necesiten.<\/p>\n<p>Una de las formas de lograr este enfoque es utilizando una plataforma de streaming. Hay muchas opciones, pero hoy nos enfocaremos en Kafka, ya que su procesamiento de flujos con estado permite abordar eficazmente el problema planteado.<\/p>\n<p><img decoding=\"async\" alt=\"Dicotom\u00eda de datos: repensando la relaci\u00f3n con los datos y los servicios\" src=\"\/wp-content\/uploads\/2020\/05\/353c7f12af87901e721abb7ea92d8196.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n La utilizaci\u00f3n de un mecanismo de registro distribuido nos permite seguir un camino establecido y usar mensajer\u00eda para trabajar con <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Event-driven_architecture\">arquitectura orientada a eventos<\/a><\/noindex>. Se considera que este enfoque proporciona una mejor escalabilidad y separaci\u00f3n que el mecanismo de \"solicitud-respuesta\", ya que otorga el control del flujo al receptor y no al remitente. Sin embargo, todo tiene un precio en esta vida, y aqu\u00ed necesitar\u00e1s un broker. Pero para sistemas grandes, esta compensaci\u00f3n vale la pena (a diferencia de tus aplicaciones web promedio).<\/p>\n<p>Si el registro distribuido es gestionado por un broker en lugar de un sistema de mensajer\u00eda tradicional, se pueden aprovechar caracter\u00edsticas adicionales. El transporte puede escalar linealmente casi tan bien como un sistema de archivos distribuido. Los datos pueden almacenarse en logs durante un per\u00edodo significativo, por lo que no solo obtenemos mensajer\u00eda, sino tambi\u00e9n un almacenamiento de informaci\u00f3n. Almacenamiento escalable sin miedo a obtener un estado compartido mutable.<\/p>\n<p>Luego, se puede utilizar un mecanismo de procesamiento de flujo con estado (stateful stream processing) para agregar herramientas de base de datos declarativas a los servicios consumidores. Esta es una idea muy importante. Mientras los datos se almacenan en flujos compartidos, a los cuales todos los servicios pueden acceder, la combinaci\u00f3n y procesamiento que realiza el servicio son privados. Est\u00e1n aislados dentro de un contexto estrictamente limitado.<\/p>\n<p><img decoding=\"async\" alt=\"Dicotom\u00eda de datos: repensando la relaci\u00f3n con los datos y los servicios\" src=\"\/wp-content\/uploads\/2020\/05\/01c8beabb9a02e4c06dffb84f9161324.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <i>Elimina la dicotom\u00eda de datos separando el flujo de estados inmutables. Luego, agrega esta funci\u00f3n a cada servicio a trav\u00e9s del procesamiento de flujo con estado.<\/i><\/p>\n<p>De este modo, si tu servicio necesita trabajar con pedidos, cat\u00e1logo de productos, almac\u00e9n, tendr\u00e1 acceso completo: solo t\u00fa decidir\u00e1s qu\u00e9 datos combinar, d\u00f3nde procesarlos y c\u00f3mo deben cambiar con el tiempo. A pesar de que los datos son compartidos, la operaci\u00f3n sobre ellos es completamente descentralizada. Se realiza dentro de cada servicio, en un mundo donde todo sigue tus reglas.<\/p>\n<p><img decoding=\"async\" alt=\"Dicotom\u00eda de datos: repensando la relaci\u00f3n con los datos y los servicios\" src=\"\/wp-content\/uploads\/2020\/05\/4b2635ad8ddd18f455eea654e472f85e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Comparte datos de manera que no se comprometa su integridad. Encapsula la funci\u00f3n, no la fuente, en cada servicio que la necesite.<\/i><\/p>\n<p>A veces es necesario mover datos masivamente. En ocasiones, el servicio requiere un conjunto hist\u00f3rico local de datos en el motor de base de datos seleccionado. La clave es que se puede garantizar que, si es necesario, una copia puede ser restaurada desde la fuente mediante la utilizaci\u00f3n del mecanismo de registro distribuido. Los conectores en Kafka manejan esta tarea de manera excelente.<\/p>\n<p>As\u00ed que el enfoque que hemos revisado hoy tiene varias ventajas:<\/p>\n<ul>\n<li>Los datos se utilizan en forma de flujos compartidos, que pueden ser almacenados durante mucho tiempo en los registros, y el propio mecanismo para trabajar con datos compartidos est\u00e1 integrado en cada contexto individual, lo que permite a los servicios operar de forma \u00e1gil y r\u00e1pida. De esta manera, se puede equilibrar la dicotom\u00eda de datos.<\/li>\n<li>Los datos que provienen de diversos servicios pueden ser f\u00e1cilmente combinados en conjuntos. As\u00ed, se simplifica la interacci\u00f3n con datos compartidos y se elimina la necesidad de mantener conjuntos de datos locales en la base de datos.<\/li>\n<li>El procesamiento de flujos con estado solo almacena datos en cach\u00e9, siendo los registros compartidos la fuente de verdad, por lo que el problema de la corrupci\u00f3n de datos con el tiempo no es tan agudo.<\/li>\n<li>Por su naturaleza, los servicios son impulsados por datos, es decir, a pesar del crecimiento constante en el volumen de datos, los servicios a\u00fan pueden reaccionar r\u00e1pidamente a los eventos del negocio.<\/li>\n<li>Los problemas de escalabilidad recaen en el corredor, no en los servicios. De esta manera, se reduce significativamente la complejidad de escribir servicios, ya que no es necesario preocuparse por la escalabilidad.<\/li>\n<li>Agregar nuevos servicios no requiere modificar los antiguos, por lo que la integraci\u00f3n de nuevos servicios se vuelve m\u00e1s sencilla.<\/li>\n<\/ul>\n<p>\nComo pueden ver, esto es m\u00e1s que simplemente REST. Hemos obtenido un conjunto de herramientas que permite trabajar con datos compartidos de forma descentralizada.<\/p>\n<p>En el art\u00edculo de hoy no se han explorado todos los aspectos. A\u00fan necesitamos averiguar c\u00f3mo equilibrar entre la paradoja de la \"solicitud-respuesta\" y la paradigma orientado a eventos. Pero esto lo abordaremos la pr\u00f3xima vez. Hay temas con los que deber\u00edamos familiarizarnos mejor, como por qu\u00e9 el procesamiento de flujos con estado es tan bueno. Sobre eso hablaremos en el tercer art\u00edculo. Tambi\u00e9n existen otras construcciones poderosas que podemos aprovechar si decidimos utilizarlas, como <noindex><a rel=\"nofollow\" href=\"https:\/\/cwiki.apache.org\/confluence\/display\/KAFKA\/KIP-98+-+Exactly+Once+Delivery+and+Transactional+Messaging\">Exactly Once Processing<\/a><\/noindex>. Con ella se transforman las reglas del juego para los sistemas empresariales distribuidos, ya que esta construcci\u00f3n proporciona garant\u00edas transaccionales para <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/X\/Open_XA\">XA<\/a><\/noindex> de manera escalable. De esto se hablar\u00e1 en el cuarto art\u00edculo. Y, por \u00faltimo, necesitaremos repasar los detalles de la implementaci\u00f3n de estos principios.<\/p>\n<p><img decoding=\"async\" alt=\"Dicotom\u00eda de datos: repensando la relaci\u00f3n con los datos y los servicios\" src=\"\/wp-content\/uploads\/2020\/05\/f66eadcc538cf3da74ccb120e1de2ae7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPero por ahora simplemente recuerden lo siguiente: la dicotom\u00eda de los datos es la fuerza con la que nos enfrentamos al crear servicios empresariales. Y debemos tener esto en cuenta. El enfoque est\u00e1 en voltear todo de cabeza y comenzar a considerar los datos generales como objetos de primera clase. El Procesamiento de Flujos con Estado proporciona un compromiso \u00fanico para ello. Evita los \u201cComponentes Dios\u201d centralizados que limitan el progreso. Adem\u00e1s, garantiza la inmediatez, escalabilidad y resiliencia de los pipelines de streaming de datos y los integra en cada servicio. Por lo tanto, podemos centrarnos en el flujo com\u00fan de conciencia al que cualquier servicio puede conectarse y trabajar con sus datos. As\u00ed, los servicios se vuelven m\u00e1s escalables, intercambiables y aut\u00f3nomos. Por lo tanto, no solo lucir\u00e1n bien en las pizarras de planificaci\u00f3n y al verificar hip\u00f3tesis, sino que tambi\u00e9n funcionar\u00e1n y se desarrollar\u00e1n durante d\u00e9cadas. <\/p>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/rVZl\/\">Descubre m\u00e1s sobre el curso.<br \/>\n<\/a><\/noindex><\/p>\n<p>Fuente: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/504310\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u0423 \u043d\u0430\u0441 \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0435 \u043d\u043e\u0432\u043e\u0441\u0442\u0438, \u0432 \u0438\u044e\u043d\u0435 OTUS \u0441\u043d\u043e\u0432\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043a\u0443\u0440\u0441 \u00ab\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u043e\u0440 \u041f\u041e\u00bb, \u0432 \u0441\u0432\u044f\u0437\u0438 \u0441 \u0447\u0435\u043c \u043c\u044b \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e \u0434\u0435\u043b\u0438\u043c\u0441\u044f \u0441 \u0432\u0430\u043c\u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u043c. \u0415\u0441\u043b\u0438 \u0432\u044b \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0438\u0441\u044c \u0441\u043e \u0432\u0441\u0435\u0439 \u044d\u0442\u043e\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439 \u0441 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c\u0438 \u0431\u0435\u0437 \u043a\u0430\u043a\u043e\u0433\u043e-\u043b\u0438\u0431\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430, \u0442\u043e \u0432\u0430\u043c \u043f\u0440\u043e\u0441\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0435\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0439. \u0420\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u0441\u0435\u0442\u044c\u044e, \u043d\u0435\u043f\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":83249,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-83248","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=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442!\" \/>\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\/dihotomiya-dannyh-pereosmyslenie-otnosheniya-k-dannym-i-servisam\" \/>\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\u0414\u0438\u0445\u043e\u0442\u043e\u043c\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445: \u043f\u0435\u0440\u0435\u043e\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u0438\u0435 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043a \u0434\u0430\u043d\u043d\u044b\u043c \u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442!\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/dihotomiya-dannyh-pereosmyslenie-otnosheniya-k-dannym-i-servisam\" \/>\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-05-29T17:42:48+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-05-29T17:42:48+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\udd47Dicotom\u00eda de datos: repensar la relaci\u00f3n con los datos y los servicios | ProHoster","description":"\u00a1Hola a todos!","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/dihotomiya-dannyh-pereosmyslenie-otnosheniya-k-dannym-i-servisam","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\u0414\u0438\u0445\u043e\u0442\u043e\u043c\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445: \u043f\u0435\u0440\u0435\u043e\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u0438\u0435 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043a \u0434\u0430\u043d\u043d\u044b\u043c \u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c | ProHoster","og:description":"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442!","og:url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/dihotomiya-dannyh-pereosmyslenie-otnosheniya-k-dannym-i-servisam","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-05-29T17:42:48+00:00","article:modified_time":"2020-05-29T17:42:48+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"83248","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 15:22:24","updated":"2022-09-30 09:53:41","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\/83248","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=83248"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/83248\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/83249"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=83248"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=83248"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=83248"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}