Nameko: Framework de Microservicios con Python

in spanish •  6 years ago  (edited)


Desde hace un momento he querido meterme en microservicios. Los microservicios son tareas especificas que viven en su propio ambiente, también son para tareas especiales que viven fuera de los frameworks mas grandes. Nameko es un framework el cual ha crecido para comunicarse con otras herramientas.

El microservicio puede proveer soluciones especificas dentro de toda la aplicación que se ejecuta en tu proyecto. Como por ejemplo el sistema de autenticación, o la aplicación de generación de un RSS.

Aunque en Django podiamos hablar de apps separadas en un proyecto, estas apps aun tienen una dependencia fuerte del código base de Django. Un microservicio correria en su propia tarea dentro del sistema operativo comunicandose a Django por protocolos como RPC.

Aquí vemos un modelo de arquitectura donde se usa Nameko dentro de una aplicación de microservicios.

Sobre Nameko

Para empezar a usar Nameko, podemos ir a su sitio y documentación donde habla de los pasos de instalación. Ve a Read The Docs para poder leer sobre los pasos de instalación incluyendo su definición y como empezar a hacer el tutorial de Hola Mundo.

Sin embargo si quieres mas lógica te recomiendo este post para ver mas de la filosofía detrás del framework. Un ejemplo es cuando debes correr tareas periodicas utilizando un cronjob.

Nameko distribuye el trabajo el trabajo a travez de procesos vía AMQP, pero no solo eso sino que abstrae esto a un punto que te permite crear tu propio transporte pero manteniendo la compatibilidad de AMQP. Esto parece complejo pero que no te detenga realmente en la implementación se simplifica.

Otros casos de uso puede ser el que puedas mantener una conexión con una base de datos por un tiempo determinado via el uso de propiedades. O el tener un servicio que quiera colaborar con una actividad, como querer responder a los cambios que otro servicio aplicó! Esto se vería de esta forma:

from nameko.events import EventDispatcher, event_handler
from nameko.rpc import rpc

class ServiceA(object):
    name = 'servicea'
    dispatch = EventDispatcher()

    @rpc
    def emit_an_event(self):
        self.dispatch('my_event_type', 'payload')


class ServiceB(object):
    name = 'serviceb'

    @event_handler('servicea', 'my_event_type')
    def handle_an_event(self, payload):
        print 'service b received', payload

El comportamiento normal de una instancia de un servicio recogerá el evento de este servicio. Sin embargo con Nameko podrá enrutar este evento a cada instanacia de cada servicio. Esto es muy útil cuando debas tratar con invalidaciones en el cache.

Comunicación

Nameko usa Werkzeug para producir un puente de comunicación con el mundo exterior. Esto permite aceptar comunicación HTTP y puedes conectar servicios del mundo exterior a tu código. A continuación veras un ejemplo:

import json
from nameko.web.handlers import http
from werkzeug.wrappers import Response

class HttpServiceService(object):
    name = 'helloworld'

    @http('GET', '/get/<int:value>')
    def get_method(self, request, value):
        return Response(json.dumps({'value': value}),
                        mimetype='application/json')

Esto es solo el principio y quizas haga una segunda parte con otros componentes de microservicios como Celery y Kombu, Zato, Evenlet.


JZA

About me:
Steemian, crypto fan, like to listen to 90s hip hop, and loves to chat about Linux Python and Free software. Runs a local Tech club in sunny Cancun, and enjoys hopping on planes and landing somewhere else.

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

Años que no toco Python.



Deberias, Python es la onda.