
  
{"id":4267,"date":"2019-03-14T12:06:36","date_gmt":"2019-03-14T11:06:36","guid":{"rendered":"https:\/\/www.integratecnologia.es\/la-innovacion-necesaria\/?p=4267"},"modified":"2023-12-26T17:55:53","modified_gmt":"2023-12-26T16:55:53","slug":"arquitectura-dirigida-por-eventos","status":"publish","type":"post","link":"https:\/\/www.integratecnologia.es\/la-innovacion-necesaria\/arquitectura-dirigida-por-eventos\/","title":{"rendered":"Arquitectura de software dirigida por eventos"},"content":{"rendered":"<p>Cada vez que iniciamos un nuevo proyecto software, una de las preguntas principales que debemos hacernos es: \u00bfc\u00f3mo estructuro mi sistema? es decir, \u00bfqu\u00e9 arquitectura uso para mi desarrollo?<\/p>\n<p>Una arquitectura software es el dise\u00f1o a m\u00e1s alto nivel de la estructura de un sistema. Esta decisi\u00f3n debe ser tomada en funci\u00f3n de nuestros requisitos y nuestras limitaciones. Algunas de las arquitecturas m\u00e1s conocidas y usadas son: la <strong>descomposici\u00f3n en m\u00f3dulos y cliente-servidor.<\/strong> Pero en este art\u00edculo vamos a hablar de una arquitectura algo menos conocida, la <strong>arquitectura dirigida por<\/strong> <strong>evento<\/strong> o <strong>EDA<\/strong> por sus siglas en ingl\u00e9s.<\/p>\n<p>La arquitectura dirigida por eventos es un tipo de arquitectura software que se basa en la producci\u00f3n, detenci\u00f3n y procesamiento de eventos y, si se considera oportuno, la reacci\u00f3n ante ellos. En la mayor\u00eda de los casos, el dispositivo que genera un evento no es el mismo que el que lo recibe y procesa. Por ejemplo, un sensor lanza un evento cuando detecta movimiento y lo env\u00eda a un servidor que lo recibe y act\u00faa seg\u00fan se haya programado anteriormente o seg\u00fan unas reglas.<\/p>\n<p>Dichos eventos son as\u00edncronos, pueden ocurrir en cualquier momento. Por lo que el servidor no puede predecir cu\u00e1ndo va a recibir uno ni cu\u00e1ntos van a llegar en un periodo corto de tiempo. Por este motivo, en muchas ocasiones se hace necesario usar un sistema de colas para mantener un evento en espera hasta que el servidor pueda atenderlo.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u00cdndice de contenidos <\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Alternar tabla de contenidos\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #3acdef;color:#3acdef\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #3acdef;color:#3acdef\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.integratecnologia.es\/la-innovacion-necesaria\/arquitectura-dirigida-por-eventos\/#eventos\" >Eventos<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.integratecnologia.es\/la-innovacion-necesaria\/arquitectura-dirigida-por-eventos\/#procesamiento-de-eventos\" >Procesamiento de eventos&nbsp;<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.integratecnologia.es\/la-innovacion-necesaria\/arquitectura-dirigida-por-eventos\/#ventajas-e-inconvenientes\" >Ventajas e inconvenientes<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"eventos\"><\/span><strong>Eventos<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Bueno, pero \u00bfqu\u00e9 es un evento? Seg\u00fan la RAE, un evento es un \u00abacaecimiento\u00bb y acaecimiento es \u00abcosa que sucede\u00bb. Definiremos un evento como un proceso instant\u00e1neo sin duraci\u00f3n en el tiempo que ocurre en un momento en concreto. Para que el evento tenga utilidad en esta arquitectura, se debe enviar una notificaci\u00f3n a un servidor en el momento en el que sucede. En realidad, al servidor no llega el evento, llega la notificaci\u00f3n del evento, pero por facilidad, cuando hablemos de evento nos referiremos directamente a la notificaci\u00f3n de dicho evento.<\/p>\n<p>Cada evento se compone de cabecera y cuerpo. <strong>La cabecera<\/strong> contiene informaci\u00f3n importante como su tipo, su nombre, su generador y el momento en el que ha ocurrido. Y el <strong>cuerpo<\/strong> contiene los datos. Por ejemplo, tenemos un termostato que env\u00eda un evento cada 30 minutos con la temperatura ambiente. Una posible estructura ser\u00eda:<\/p>\n<ul>\n<li><strong>Cabecera<\/strong>:\n<ul>\n<li><strong>Tipo<\/strong>: Temperatura.<\/li>\n<li><strong>Nombre<\/strong>: Temperatura peri\u00f3dica<\/li>\n<li><strong>Generador<\/strong>: Termostato1<\/li>\n<li><strong>Timestamp<\/strong>: 2019-03-05 9:23:00<\/li>\n<\/ul>\n<\/li>\n<li><strong>Cuerpo<\/strong>:\n<ul>\n<li><strong>Temperatura<\/strong>: 23\u00b0C<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"procesamiento-de-eventos\"><\/span><strong>Procesamiento de eventos&nbsp;<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Cuando el evento llega al servidor, hay que procesarlo. Para estudiar c\u00f3mo se procesa uno o varios eventos, podemos diferenciar en cuatro capas, el flujo total desde la emisi\u00f3n del evento hasta el desencadenamiento de la acci\u00f3n correspondiente. Estas <strong>cuatro capas<\/strong> son:<\/p>\n<ul>\n<li><strong>Generador del evento:<\/strong> Es la fuente que arroja el evento. Cualquier tipo de dispositivo o aplicaci\u00f3n podr\u00eda ser el generador, el \u00fanico requisito es que sea entendible, es decir, que se use la misma estructura. Un generador puede crear un evento <strong>notable<\/strong> (se env\u00eda directamente al procesador) u <strong>ordinario<\/strong> (primero debe pasar por un preprocesador donde se decide si se convierte en notable). En el ejemplo anterior, el termostato ser\u00eda nuestro generador.<\/li>\n<li><strong>Canal del evento:<\/strong> Es el medio de uni\u00f3n entre el generador y el procesador. Su objetivo es transportar los mensajes.<\/li>\n<li><strong>Procesador del evento:<\/strong> Es el servidor que recibe los eventos, los procesa, los compara con reglas preestablecidas y realiza las acciones. Las reglas, y por tanto las acciones, no son definidas por los generadores de evento, sino por la persona que lo programe. Una posible regla para el ejemplo anterior ser\u00eda, que si se superan los 35\u00b0C se encienda el aire acondicionado. Como vemos, el termostato no decide esa temperatura l\u00edmite, \u00fanicamente se dedica a enviar lo que lee.<\/li>\n<li><strong>Actividad de respuesta:<\/strong> Es la acci\u00f3n que se hace si se cumple alguna de las reglas. Puede ser cualquier tipo de acci\u00f3n, desde un aviso a una persona hasta un proceso interno totalmente transparente al usuario. En algunos casos, los usuarios se deben subscribir para ser avisados de dicha actividad.<\/li>\n<\/ul>\n<p>En esta arquitectura, podemos distinguir tres tipos diferentes de <strong>procesamiento de eventos<\/strong>:<\/p>\n<ul>\n<li><strong>Procesamiento simple: <\/strong>Eval\u00faa un evento e inmediatamente se inicia una actividad de respuesta. Suele ser utilizado para controlar el flujo de trabajo en tiempo real.<\/li>\n<li><strong>Procesamiento complejo:<\/strong> Eval\u00faa una serie de eventos y despu\u00e9s se inicia una actividad de respuesta. En este tipo de procesamiento se comparan eventos que llegan a lo largo de un periodo de tiempo buscando patrones y se responde en consecuencia.<\/li>\n<li><strong>Procesamiento <em>stream<\/em>: <\/strong>Se utiliza una plataforma de transmisi\u00f3n de datos intermedia a la que le llegan los eventos y reenv\u00eda a los procesadores de flujo. Los procesadores tratan el flujo o lo transforman. Se utiliza cuando hay un tr\u00e1fico constante de datos.<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"ventajas-e-inconvenientes\"><\/span><strong>Ventajas e inconvenientes<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Como cualquier arquitectura que elijamos, tiene sus ventajas e inconvenientes. Depender\u00e1 de nuestros requisitos el peso que estas van a tener:<\/p>\n<p>Las principales&nbsp;<strong>ventajas<\/strong> de esta arquitectura son:<\/p>\n<ul>\n<li><strong>Desacoplo de servidor y clientes:<\/strong> Los servidores y los clientes \u00fanicamente deber\u00e1n usar la misma estructura en los mensajes de los eventos, pero se pueden programar en distintos lenguajes de programaci\u00f3n y ser totalmente independientes.<\/li>\n<li><strong>Desacoplo entre dispositivos:<\/strong> EDA presenta una topolog\u00eda en estrella en la cual, cada dispositivo solo tiene que comunicarse con el servidor. De esta manera, se puede relacionar cualquier dispositivo entre s\u00ed sin l\u00edmite. Por ejemplo, se podr\u00eda conectar un sensor de movimiento directamente a una luz para encenderla, lo que limitar\u00eda mucho las posibles acciones. Sin embargo, si el sensor env\u00eda un evento a un servidor, este podr\u00eda realizar cualquier acci\u00f3n con cualquier dispositivo: encender la luz, mostrar un mensaje de bienvenida en la televisi\u00f3n, poner m\u00fasica,\u2026<\/li>\n<li><strong>Altamente escalable:<\/strong> Gracias al desacoplo entre dispositivos se puede a\u00f1adir f\u00e1cilmente cualquier nuevo servicio al sistema.<\/li>\n<\/ul>\n<p>Los principales&nbsp;<strong>inconvenientes<\/strong> son:<\/p>\n<ul>\n<li>El servidor no podr\u00eda saber nunca si un servicio se ha ca\u00eddo, ya que no hay ninguna conexi\u00f3n real entre ellos. Del mismo modo, un dispositivo tampoco sabe si el servidor est\u00e1 ca\u00eddo.<\/li>\n<li>No se puede comprobar si un evento ha sido atendido.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p><em>Art\u00edculo redactado por: Carlos Moro<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cada vez que iniciamos un nuevo proyecto software, una de las preguntas principales que debemos hacernos es: \u00bfc\u00f3mo estructuro mi sistema? es decir, \u00bfqu\u00e9 arquitectura uso para mi desarrollo? Una arquitectura software es el dise\u00f1o a m\u00e1s alto nivel de la estructura de un sistema. Esta decisi\u00f3n debe ser tomada en funci\u00f3n de nuestros requisitos [&hellip;]<\/p>\n","protected":false},"author":92,"featured_media":9747,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"om_disable_all_campaigns":false,"_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[365],"tags":[238,246],"class_list":{"0":"post-4267","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-tecnologia-para-la-empresa","8":"tag-software","9":"tag-tecnologia","10":"entry"},"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.integratecnologia.es\/la-innovacion-necesaria\/wp-json\/wp\/v2\/posts\/4267","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.integratecnologia.es\/la-innovacion-necesaria\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.integratecnologia.es\/la-innovacion-necesaria\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.integratecnologia.es\/la-innovacion-necesaria\/wp-json\/wp\/v2\/users\/92"}],"replies":[{"embeddable":true,"href":"https:\/\/www.integratecnologia.es\/la-innovacion-necesaria\/wp-json\/wp\/v2\/comments?post=4267"}],"version-history":[{"count":0,"href":"https:\/\/www.integratecnologia.es\/la-innovacion-necesaria\/wp-json\/wp\/v2\/posts\/4267\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.integratecnologia.es\/la-innovacion-necesaria\/wp-json\/wp\/v2\/media\/9747"}],"wp:attachment":[{"href":"https:\/\/www.integratecnologia.es\/la-innovacion-necesaria\/wp-json\/wp\/v2\/media?parent=4267"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.integratecnologia.es\/la-innovacion-necesaria\/wp-json\/wp\/v2\/categories?post=4267"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.integratecnologia.es\/la-innovacion-necesaria\/wp-json\/wp\/v2\/tags?post=4267"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}