<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">El 27 de abril de 2017, 9:20, Yamila Moreno Suárez <span dir="ltr"><<a href="mailto:yamila.ms@gmail.com" target="_blank">yamila.ms@gmail.com</a>></span> escribió:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><div><div><div><div><div><div><div>Buenas!<br><br></div>Yo desconozco si existe un framework para lo que necesitas, aunque me sorprendería por la naturaleza de la arquitectura que planteas. En todo caso, he hecho aplicaciones similares y nuestra solución ha sido:<br><br></div>1 aplicación de API. Esta API la puedes hacer con Flask (tiene bibliotecas para levantar APIs), con Django (usando Django Rest Framework) o "a pelo", es decir, usas un micro-framework que resuelve el enrutamiento y poco más, y el resto (validaciones, conexión, sesiones, clases de bbdd, mapeos, servicios, etc) lo haces a mano siguiendo una arquitectura bastante estricta y controlada. Hay opciones en muchísimos lenguajes, si el que más conoces es python, vas a poder elegir cómodamente.<br><br></div>1 aplicación de backend. Al igual que el API tienes muchas opciones basadas en python, o en otros lenguajes.<br><br></div>Con esto, puedes:<br></div></div>- crear una imagen del back y levantar tantos contenedores como necesites<br></div>- crear una imagen del api y levantar tantos contenedores como necesites<br></div><div>- No comentas nada de bbdd, entiendo que está resuelta por otro sistema y que tú vas a conectarte a ella como sea.<br></div></div></blockquote><div><br></div><div style="background-color:transparent">Buenas tardes Yamila (a los que leen y quisieran responder también), antes que nada, gracias por tu tiempo en contestar. Si no fui claro u omití algo es porque todavía no tengo en claro todo. <br><br></div><div>En mi caso cuento con la experiencia de haber hecho un API REST como frontend utilizando Flask y en la universidad me pidieron que implemente oauth2 sin la librería oauth, es decir yo mismo crear el token y refresh token y con esto, comunicarme con otro servicio (sería un backend), utilizando formato REST y un token válido para recuperar datos de ese backend (o actualizar).<br><br></div><div>Con esto me refiero a que ese backend es una "aplicacion.py" código spaguetti o "chorizo" de más de mil lineas que se me hizo complicado de seguir y de defender ante el profesor (con el agregado que estoy cursando en una universidad de Moscú y el idioma es complicado).<br><br></div><div>Para dar una idea del proyecto, hice una traducción [1] del ruso al español y por lo que entiendo, debo poder instanciar ese backend. Si en mi código spaguetti anterior tenía en la base "sqlite.db" las tablas "Usuario", "Habitación" y "Reserva", teniendo esta última, claves que hacían referencia a las dos primeras. Imagino que en una topología de servicios, ahora tendría (cada una corriendo en un puerto diferente):<br><br></div><div style="background-color:transparent">1) "ServicioUsuarios.py" que brinda información de usuarios (y actualiza).<br></div><div style="background-color:transparent">2) "ServicioHabitaciones.py" que brinda información de habitaciones.<br>3) "ServicioReservas.py" que informa sobre reservas (siempre con token válido: listado completo, pasando un ID de usuario dice que reserva tiene, o poder reservar una habitación, etc.<br><br>Imagino que cada servicio tiene sus tablas pero por ejemplo el "ServicioReservas" no tiene información de usuarios, sólo una tabla de reservas que lista o actualiza según se requiera. Es decir ya no tengo la estructura de BD completa como tenía en la versión monolítica.<br><br></div><div style="background-color:transparent">No tengo en claro si para estos tres servicios necesito en el backend otro servicio que los administre o el frontend "va derecho".<br></div><div style="background-color:transparent"><br>También se me ocurre que la tabla usuarios estará primero en el Frontend y que luego, cuando el usuario se interese por hacer uso de servicios de determinado "Hotel" (backend específico), actualizaría la tabla de Usuarios de ese servicio a través de su "ServicioUsuarios.py".<br><br></div><div style="background-color:transparent">No sé si hice un embrollo, esto es bastante nuevo para mí y no sé bien cómo dividir las tablas y qué replicar.<br></div><div><br>[1] <a href="https://drive.google.com/file/d/0B_2ALCPIGxPxblRqUFRFMERQcDQ/view">https://drive.google.com/file/d/0B_2ALCPIGxPxblRqUFRFMERQcDQ/view</a><br><br></div><div> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div></div><div><br></div><div>Si levantas varios apis y backs (y quieres que respondan en la misma URL) tienes que añadir una capa por delante que se encargue de distribuir la carga y de mantener el estado de tu servicio. Esta capa ahora mismo se está resolviendo con orquestadores.<br></div></div></blockquote><div><br></div><div>Creo que por el momento el api/frontend es único, pero hay más de un backend. <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><br></div><div>Si eres nuevo en docker, te paso un tuto que hice, con el que aproveché para aprender; es muy sencillo pero te enseña las bases: <a href="http://moduslaborandi.net/2016/02/docker-101-hello-world/" target="_blank">http://moduslaborandi.net/2016<wbr>/02/docker-101-hello-world/</a> (y los 3 siguientes).<br><br></div><div>Lo que planteas en tu email es un sistema complejo y sofisticado; es improbable que exista una única herramienta que te lo resuelva, así que mi recomendación en todo caso es que vayas resolviendo trozos pequeños, asegurándote de usar buenas prácticas, de forma que después vaya a ser más sencillo unirlos. Por ejemplo, es muy importante no acoplar componentes de tu aplicación.<br></div></div></blockquote><div><br></div><div>En otro documento que me pasaron el la universidad, sugería el tema de la geolocalización a través de un CDN, pero creo que eso sería un agregado posterior, lo voy a obviar por el momento. Esto de los microservicios se presenta muy interesante por las ventajas y quiero empezar de a poco.<br></div><div><br></div><div>Cualquier comentario será muy bien recibido, yo leo varias veces las respuestas.<br><br></div><div>Luciano<br></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><br></div><div>Suerte!<br></div><div>Yamila<br><br></div><div><br></div><div><br></div><div><br><br><br></div><div><br><div><div><br><div><div><div><br><div><br><br></div></div></div></div></div></div></div></div><div class="gmail_extra"><br><div class="gmail_quote"><div><div class="gmail-h5">2017-04-26 21:24 GMT+02:00 Luciano Andino <span dir="ltr"><<a href="mailto:lucianoandino.ar@gmail.com" target="_blank">lucianoandino.ar@gmail.com</a>></span>:<br></div></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div class="gmail-h5"><div dir="ltr"><div><div style="background-color:transparent"><div><div><div style="background-color:transparent"><div><div style="background-color:transparent">Buenas, este es mi primer email a la lista. Les consulto: Tengo que desarrollar una
 aplicación del tipo "Hotel" (clientes, habitaciones, reservas, etc) pero utilizando microservicios. A detallar:<br></div><br>*
 Un frontend del tipo API REST oauth2 (logueandose con la cuanta de 
gmail por ejemplo), que interactue con el backend de hotel (utilizando 
microservicios).<br><br></div>* El backend estará encapsulado en docker, 
porque a efectos de geolocalización del usuario web, el frontend se 
comunicará con el backend más cercano a través del UUID. Con esto quiero decir que habría más de un backend. (Sistema distribuido)<br><br></div>* Debo ser capaz desde un perfil de administrador, podér agregar instancias backend, dar de baja, etc.<br><br></div>Cuando digo
 "tipo Hotel", es porque tomé una variante similar, en mi caso sería 
"alquiler de bicicletas de persona a persona", el usuario puede reservar
 bicicletas (hacer uso) de otro usuario registrado en el sitio.<br><br></div>Cuento 
con conocimientos (no tantos) de Flask y como aplicación monolítica me 
queda claro cómo hacerla, pero llevándola a microservicios, el tema de 
la comunicación entre los servicios y cómo dividir la base de datos, me 
está dando problemas de sólo pensar. Docker también es nuevo para mí.<br><br></div>Existe un framework para este tipo de desarrollo o bien un ejemplo? Es para la Universidad.<br><br></div>Muchas gracias,<span class="gmail-m_-3797715399702397813HOEnZb"><font color="#888888"><br clear="all"><div><br>-- <br><div class="gmail-m_-3797715399702397813m_7699121869332996630gmail_signature"><div dir="ltr"><div><div dir="ltr"><div>Luciano Andino<br>Ing. en Sistemas de Información<br></div><div>UTN FRSF<br>BMSTU<br><br></div><br></div></div></div></div>
</div></font></span></div>
<br></div></div>______________________________<wbr>_________________<br>
Python-es mailing list<br>
<a href="mailto:Python-es@python.org" target="_blank">Python-es@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/python-es" rel="noreferrer" target="_blank">https://mail.python.org/mailma<wbr>n/listinfo/python-es</a><br>
<br></blockquote></div><span class="gmail-HOEnZb"><font color="#888888"><br><br clear="all"><br>-- <br><div class="gmail-m_-3797715399702397813gmail_signature"><div dir="ltr">Yamila  Moreno Suárez<br><a href="http://dendarii.es" target="_blank">http://dendarii.es</a><div><a href="http://moduslaborandi.net" target="_blank">http://moduslaborandi.net</a></div></div></div>
</font></span></div>
<br>______________________________<wbr>_________________<br>
Python-es mailing list<br>
<a href="mailto:Python-es@python.org">Python-es@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/python-es" rel="noreferrer" target="_blank">https://mail.python.org/<wbr>mailman/listinfo/python-es</a><br>
<br></blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div>Luciano Andino<br>Ing. en Sistemas de Información<br></div><div>UTN FRSF<br>BMSTU<br><br></div><br></div></div></div></div>
</div></div>