424 - Despedazando servicios con Docker
¿Es mejor un único servicio que lo haga todo o varios servicios que cada uno de ellos se centre en una parte? Pues despedazando servicios con Docker
Como de decía en el episodio anterior del podcast, estoy realmente contento con el uso del bot para facilitar el feedback, pero no solo esto, sino también para mejorar la interacción en el grupo. Y ha funcionando tan bien, que he querido extender esta funcionalidad a otros servicios, empezando por las redes sociales con las que me relaciono mas habitualmente, Mastodon y Twitter. Pero, como digo esto no es mas que un empezar. La cuestión, es que lo que empezó como un MPV en un único servicio se ha convertido en cuatro servicios mas o menos independientes. De ahí precisamente el título del podcast de hoy Despedazando servicios con Docker.
Porque ¿Que es mejor un único servicio o varios servicios interrelacionados? Pues te cuento mi idea y mi experiencia, y ya si eso tu decides.
Despedazando servicios con Docker
Feedback, el oro puro
Como te decía, cuando comencé con esto del bot, está bien detectar un problema. Y esto, en general, te lleva a quejarte. Sin embargo, quejarte sin hacer nada, no tiene ningún sentido. Para eso, simplemente no te quejes y verás como tu nivel de amargura se reduce considerablemente.
Como decía en no se que curso de inteligencia emocional, si tienes un problema y no puedes hacer nada con él, olvídalo. Si tienes un problema y puedes hacer algo con él, simplemente hazlo.
Por eso, esto de estar siempre quejándose por algo, no le termino de encontrar ningún sentido. Tenemos que actuar o dejar de quejarnos.
Por otro lado, y como sabes, para mi, y para el resto de creadores de contenido, esto del feedback es oro puro. Por esto, es necesario utilizar las técnicas necesarias para extraerlo, y viendo que esto del bot en Telegram ha funcionado bien, ¿porque no extenderlo?
Situación actual
Actualmente lo que tengo es un bot que está escuchando en Telegram en busca de algunas palabras clave como idea, comentario y pregunta. Cuando alguien pronuncia estas palabras clave, se guardan en una base de datos.
¿Como está hecho esto?
Sencillo, se trata de un servicio implementado en Rust, que tiene tres partes diferenciadas,
- Un webhook que se encarga de escuchar Telegram
- Un gestor de la base de datos, que se encarga de escribir en la base de datos
- La tercera parte es la encargada de publicar en Telegram para mostrar la ayuda, o para dar las gracias, por alguna de estas acciones.
Y vienen los poyaque
Viendo que esto funciona tan estupendamente, ¿porque no hacemos una ampliación de las funcionalidades para llegar a otros medios?¿Que tal Twitter?¿Y Mastodon?
¿No sería fantástico, que cuando alguien ponga el hastag #pregunta
, esta también se guardara en la base de datos?. Pues claro que si.
- poyaque lo tenemos para Telegram también para Twitter
- poyaque lo tenemos para Twitter porque no para Mastodon
- y por supuesto poyaque tenemos todo esto, ¿porque no desde la web?
y así sucesivamente
Despedazando servicios con Docker
Llegados a este punto, y para hacerlo lo mas independiente posible, lo mejor es despedazar el servicio original, partiéndolo en varios micro servicios. Estos micro servicios estarán especializados en determinadas tareas, que ya habíamos visto, con anterioridad, en la versión original.
Así tendremos,
- Un servicio que se encargará de gestionar la base de datos y permitirá relacionarse con este servicio mediante REST API. De forma que podamos escribir y leer de este servicio fácilmente. Así, lo independizamos por completo de todo. Este es completamente autónomo.
- Para Telegram, tendremos un segundo servicio que expondrá el webhook, para saber lo que está sucediendo en Telegram y que en caso de detectar las palabras clave, haga una llamada al primer servicio para escribir en la base de datos, y además publicar en Telegram dando las gracias.
- En el caso de Twitter, esto lo hará realizando búsquedas, a partir de la última que se haya encontrado y en base a un tiempo que fijemos… Puede ser 5 minutos. Es decir, que cada cinco minutos, realice una búsqueda, y en el caso de que la encuentre, opere exactamente igual que la parte de Telegram. Y por supuesto, se encargue de dar las gracias publicando un Tweet en Twitter.
- Por supuesto, el caso de Mastodon es muy similar, simplemente, tiene que aplicarse lo mismo, pero utilizando la API de Mastodon, que a mi me parece mas sencilla e intuitiva.
- La página web. Esto ya lo comenté anteriormente. Que quería, que todo lo que se accede desde el bot, también estuviera disponible desde
- Es posible ampliar estos servicios tanto como queramos, en tanto en cuanto la API es completamente agnóstica…
En cuanto a Docker, tenemos que hacer una red interna, por la que se comuniquen vía REST API con la base de datos, y con los distintos actores, ya sea Telegram, Twitter y Mastodon, y los que vengan.
Además la parte de Telegram tiene que estar expuesta al exterior para poder interactuar con el webhook.
Quedaría pendiente la opción de plantearse exponer la API al exterior para poder interactuar con ella. Ahora mismo, no lo planteo.
Pero si que me planteo un poyaque adicional, que es una interfaz gráfica para interactuar con todo. Me refiero, a la opción de poder editar, marcar
Respecto a la base de datos, actualmente es completamente funcional, aunque, a lo mejor sería interesante indicar el origen. Esto es un poyaque bastante extra y que no se si tiene mucho sentido…. ya veremos.
Como gestionar todo esto
Todo esto es realmente sencillo de gestionar utilizando simplemente docker compose. Se levanta cada uno de los servicios, se indica las redes que tiene que utilizar cada uno, se deja la base de datos externa, y poco mas.
En realidad es prácticamente, igual que ahora, pero con un pelín mas de complejidad.
¿Porque no montarlo todo en un solo servicio?
Esto ya te lo sabes… De esta forma, cada uno de estos servicios es completamente independiente del resto. Podemos actualizarlos cada uno de ellos, de forma completamente independiente y sin afectar a los demás… Excepto, por supuesto el de la base de datos.
¿Está funcionando?
Casi…
Espero que te haya gustado este nuevo episodio del podcast. Si puedes, te agradecería una valoración en iVoox y/o en Apple Podcast.