<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>microservicios &#8211; Oscar Blancarte &#8211; Software Architecture</title>
	<atom:link href="https://www.oscarblancarteblog.com/tag/microservicios/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.oscarblancarteblog.com</link>
	<description>Software Architect &#38; FullStack developer</description>
	<lastBuildDate>Fri, 03 Jul 2020 00:53:43 +0000</lastBuildDate>
	<language>es-MX</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.5.17</generator>

<image>
	<url>https://www.oscarblancarteblog.com/wp-content/uploads/2019/03/cropped-ob-32x32.png</url>
	<title>microservicios &#8211; Oscar Blancarte &#8211; Software Architecture</title>
	<link>https://www.oscarblancarteblog.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">89905023</site>	<item>
		<title>Crea tu primer API REST con Spring Boot</title>
		<link>https://www.oscarblancarteblog.com/2019/08/28/crea-tu-primer-api-rest-con-spring-boot/</link>
					<comments>https://www.oscarblancarteblog.com/2019/08/28/crea-tu-primer-api-rest-con-spring-boot/#comments</comments>
		
		<dc:creator><![CDATA[oblancarte]]></dc:creator>
		<pubDate>Wed, 28 Aug 2019 03:33:09 +0000</pubDate>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Sin categoría]]></category>
		<category><![CDATA[microservicios]]></category>
		<category><![CDATA[spring boot]]></category>
		<guid isPermaLink="false">https://www.oscarblancarteblog.com/?p=2854</guid>

					<description><![CDATA[<p>Spring boot se ha convertido en una de las tecnologías más importantes del desarrollo de Microservicios en Java, pues permite crear aplicaciones de forma muy rápida y con una auto configuración sorprendente. En el siguiente video aprenderás como crear tu primer API REST utilizando JPA para el mapeo Objeto relacional y Swagger para auto documentar [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://www.oscarblancarteblog.com/2019/08/28/crea-tu-primer-api-rest-con-spring-boot/">Crea tu primer API REST con Spring Boot</a> appeared first on <a rel="nofollow" href="https://www.oscarblancarteblog.com">Oscar Blancarte - Software Architecture</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image"><img loading="lazy" width="800" height="450" src="https://www.oscarblancarteblog.com/wp-content/uploads/2019/08/banner-lg.jpg" alt="" class="wp-image-3146" srcset="https://www.oscarblancarteblog.com/wp-content/uploads/2019/08/banner-lg.jpg 800w, https://www.oscarblancarteblog.com/wp-content/uploads/2019/08/banner-lg-300x169.jpg 300w, https://www.oscarblancarteblog.com/wp-content/uploads/2019/08/banner-lg-768x432.jpg 768w" sizes="(max-width: 800px) 100vw, 800px" /></figure>



<p>Spring boot se ha convertido en una de las tecnologías más importantes del desarrollo de Microservicios en Java, pues permite crear aplicaciones de forma muy rápida y con una auto configuración sorprendente. </p>



<span id="more-2854"></span>



<hr class="wp-block-separator"/>



<p>En el siguiente video aprenderás como crear tu primer API REST utilizando JPA para el mapeo Objeto relacional y Swagger para auto documentar el API, te invito a que veas este video que hice como invitado a Init, pero tambien te invito a que te suscribas a nuestro <a rel="noreferrer noopener" aria-label=" (opens in a new tab)" href="https://www.youtube.com/channel/UCaDtXOU301UgSghUuHwkelw?sub_confirmation=1" target="_blank">Canal de Youtube</a> y visitar nuestra página oficial <a rel="noreferrer noopener" aria-label=" (opens in a new tab)" href="https://codmind.com/" target="_blank">Codmind</a> para ver más cursos.</p>



<p>También puedes ver nuestro curso completo de <a href="https://codmind.com/courses/api-rest-con-spring-boot">Mastering API REST con Spring Boot</a></p>



<figure class="wp-block-embed-youtube wp-block-embed is-type-video is-provider-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe class='youtube-player' width='648' height='365' src='https://www.youtube.com/embed/K-KUfg-Cuc8?version=3&#038;rel=1&#038;fs=1&#038;autohide=2&#038;showsearch=0&#038;showinfo=1&#038;iv_load_policy=1&#038;wmode=transparent' allowfullscreen='true' style='border:0;'></iframe>
</div></figure>
<p>The post <a rel="nofollow" href="https://www.oscarblancarteblog.com/2019/08/28/crea-tu-primer-api-rest-con-spring-boot/">Crea tu primer API REST con Spring Boot</a> appeared first on <a rel="nofollow" href="https://www.oscarblancarteblog.com">Oscar Blancarte - Software Architecture</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.oscarblancarteblog.com/2019/08/28/crea-tu-primer-api-rest-con-spring-boot/feed/</wfw:commentRss>
			<slash:comments>40</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2854</post-id>	</item>
		<item>
		<title>Circuit Breaker pattern</title>
		<link>https://www.oscarblancarteblog.com/2018/12/04/circuit-breaker-pattern/</link>
					<comments>https://www.oscarblancarteblog.com/2018/12/04/circuit-breaker-pattern/#comments</comments>
		
		<dc:creator><![CDATA[oblancarte]]></dc:creator>
		<pubDate>Tue, 04 Dec 2018 16:00:44 +0000</pubDate>
				<category><![CDATA[EAI]]></category>
		<category><![CDATA[Patrones de Diseño]]></category>
		<category><![CDATA[arquitectura]]></category>
		<category><![CDATA[microservicios]]></category>
		<guid isPermaLink="false">https://www.oscarblancarteblog.com/?p=2436</guid>

					<description><![CDATA[<p>La llegada de nuevas arquitecturas como SOA o Microservicios han traído grandes ventajas, pero con ello, han surgido nuevas problemáticas que pocas veces se sabe cómo resolver con precisión, uno de estos casos, es identificar cuando un servicio ha dejado de funcionar para dejarle de enviar peticiones, pero por otro lado, identificar el fallo, reportarlo [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://www.oscarblancarteblog.com/2018/12/04/circuit-breaker-pattern/">Circuit Breaker pattern</a> appeared first on <a rel="nofollow" href="https://www.oscarblancarteblog.com">Oscar Blancarte - Software Architecture</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>				<img loading="lazy" class="aligncenter size-large wp-image-2437" src="https://www.oscarblancarteblog.com/wp-content/uploads/2018/12/circuite-breaker.-1024x574.jpg" alt="" width="648" height="363" />La llegada de nuevas arquitecturas como SOA o Microservicios han traído grandes ventajas, pero con ello, han surgido nuevas problemáticas que pocas veces se sabe cómo resolver con precisión, uno de estos casos, es identificar cuando un servicio ha dejado de funcionar para dejarle de enviar peticiones, pero por otro lado, identificar el fallo, reportarlo y hacer algo en consecuencia, por suerte, la patrón Circuit Breaker (Corto circuito) permite cerrar la comunicación con un determinado servicio cuando se ha detectado que está fallado.<span id="more-2436"></span></p>
<p>&nbsp;</p>
<p>El patrón Circuit Breaker es muy parecido a un fusible, el cual se funde para evitar que una descarga eléctrica afecte al circuito, con la única diferencia de que el software, este fusible se puede restaurar cuando el problema allá pasado. Esto puede resultar un poco confuso, pero analicemos cómo funciona el patrón con el siguiente diagrama:</p>
<p><img loading="lazy" class="aligncenter size-large wp-image-2438" src="https://www.oscarblancarteblog.com/wp-content/uploads/2018/12/circuit-breaker-diagram-of-sequence-1024x590.png" alt="Circuit Breaker pattern diagrama de sequencia" width="648" height="373" /></p>
<p>&nbsp;</p>
<p>Antes de explicar cómo funciona el diagrama, debemos de comprender que son y el rol que tiene cada uno de los componentes involucrados:</p>
<ul>
<li><strong>Client</strong>: representa al cliente que intenta consumir los servicios del Supplier, sin embargo, este lo hace por medio del Circuit Breaker.</li>
<li><strong>Circuit Breaker</strong>: es el componente que se encarga de la comunicación con el Supplier, el cual, mantiene un registro del estado de salud del servicio que usará para abrir el circuito cuando detecte que el Supplier está fallando.</li>
<li><strong>Supplier</strong>: representa el servicio de negocio remoto, el cual expone una serie de funcionalidad para ser consumida por el Client.</li>
</ul>
<p>Una vez que entendemos esto, pasemos a explicar cómo funciona el patrón Circuit Breaker:</p>
<ol>
<li>El Client realiza una primera llamada al Supplier por medio del Circuit Breaker.
<ol>
<li>El Circuit Breaker determina que el servicio está operando correctamente el Supplier y redirecciona la petición al Supplier.</li>
<li>El Supplier responde correctamente y envía la respuesta al Circuit Breaker para que sea este quien finalmente reenvíe la respuesta al Client.</li>
</ol>
</li>
<li>El Client envía nuevamente una petición al Supplier por medio del Circuit Breaker
<ol>
<li>El Circuit Breaker redirecciona la petición al Supplier</li>
<li>En esta ocasión el Supplier responde con error o lanza un Timeout</li>
<li>El Circuit Breaker recibe la respuesta de error y toma nota del error, el cual tiene un contado que determina cuantas veces ha fallado el Supplier de forma simultánea. En este caso, el contado de errores se establece en 1.</li>
<li>El Circuit Breaker redirecciona el error al Client.</li>
</ol>
</li>
<li>Seguido de un tiempo, el Client envía nuevamente una petición al Supplier por medio el Circuit Breaker.
<ol>
<li>El Circuit Breaker redirecciona la petición al Supplier</li>
<li>El Supplier nuevamente responde con error o Timeout</li>
<li>El Circuit Breaker recibe la respuesta de error e incrementa el contado de errores en 2.
<ol>
<li>Dada una configuración, el Circuit Breaker puede determinar que 2 es el número máximo de errores simultáneos que puede tolerar antes de realiza el corto circuito y abre el circuito con el Supplier.</li>
<li>Un paso opcional pero muy deseable es tener algún componente de monitoreo que permite notificar a los administradores en tiempo real sobre los errores para poder tomar cartas en el asunto.</li>
</ol>
</li>
<li>El Circuit Breaker redirecciona el error al Client.</li>
</ol>
</li>
<li>El Client nuevamente envía una nueva petición al Supplier por medio del Circuit Breaker.
<ol>
<li>El Circuit Breaker determina el servicio no está respondiendo debido a los dos errores anteriores, por lo que retorna un error al Client indicándole que el Supplier está fuera de servicio.</li>
</ol>
</li>
</ol>
<p>&nbsp;</p>
<p>Como podemos observar en la explicación anterior, el Circuit Breaker puede determinar que un determinado servicio (Supplier) está fuera de servicio al detectar que ha respondido con error de forma consecutiva un número determinado de veces.</p>
<p>&nbsp;</p>
<blockquote><p>NOTA: es común confundirse con el termino abierto y cerrado, pues podemos pensar que el estado abierto es cuando el servicio está disponible, sin embargo, como estamos utilizando la nomenclatura de los circuitos eléctricos, por lo que un circuito cerrado es cuando la electricidad flujo, por lo tanto, en este patrón, cerrado significa que existe comunicación con el Supplier.</p></blockquote>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>Abriendo el circuito</h2>
<p>En este punto te estarás preguntando, bien, ya he abierto el circuito, pero no me puedo quedar todo el tiempo así, necesito cerrarlo nuevamente una vez que el problema se ha resuelto. Pues bien, para eso, tenemos una funcionalidad adicional, en la cual configuramos cuanto tiempo debe esperar el Circuit Breaker antes de mandar una solicitud al Supplier. En este caso, por ejemplo, podríamos esperar una hora desde que se cerró el circuito para enviar una nueva petición, si esta petición retorna exitosamente, el Circuit Breaker cerrará nuevamente el circuito con el Supplier, pero, por el contrario, si este nuevamente retorna con error o Timeout, entonces el tiempo de espera se reiniciará y esperará otra hora antes de mandar una nueva petición para comprobar su disponibilidad.</p>
<p><img loading="lazy" class="aligncenter size-large wp-image-2439" src="https://www.oscarblancarteblog.com/wp-content/uploads/2018/12/circuit-breaker-diagram-of-sequence-open-1024x590.png" alt="Circuit Breaker pattern Diagrama de secuencia abierto" width="648" height="373" /></p>
<p>&nbsp;</p>
<p>Dicho lo anterior, veamos cómo quedaría el diagrama de secuencia para la reapertura del circuito:</p>
<ol>
<li>En la parte superior partimos del escenario donde hemos abierto el circuito, lo cual explicamos anteriormente, por lo que nos saltaremos esta explicación. Solo asumamos que, en este punto, el circuito se encuentra abierto.</li>
<li>Una hora después de que el circuito se abrió, el Circuit Breaker redirecciona la siguiente petición al Supplier que estaba fallando para comprobar si ya se encuentra en funcionamiento.
<ol>
<li>Tras redireccionar la petición al Supplier, este falla nuevamente y redirecciona el error al Circuit Breaker.</li>
<li>El Circuit Breaker al darse cuenta que sigue fallando, reinicia el contador para esperar otra hora antes de volver a intentar consumir los servicios del Supplier.</li>
</ol>
</li>
<li>Tras una hora desde el paso anterior, el Circuit Breaker redirecciona una nueva petición al Supplier para comprobar si ya se encuentra en funcionamiento.
<ol>
<li>En este caso, el Supplier ya se encuentra operando correctamente, por lo que recibe la petición, la procesa y retornar exitosamente.</li>
<li>El Circuit Breaker detecta la respuesta exitosa del Supplier y cierra nuevamente el circuito.</li>
</ol>
</li>
</ol>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>Circuit Breaker y los microservicios</h2>
<p>En este punto ya hemos aprendido como es que el patrón Circuit Breaker abre el circuito ante una serie de errores consecutivos y como el circuito se cierra cuando el error es resuelto, pero hay algo de lo que no hemos hablado. ¿Te has preguntado que va a pasar con la aplicación si se abre el circuito? Es decir, una hora sin poder lanzar peticiones al Supplier podría causar un caos en nuestra aplicación, pues no podremos hacer nada hasta que el circuito sea restaurado.</p>
<p>Pues bien, te tengo buenas noticias, este patrón no fue diseñado para aplicaciones Standalone, si no que fue diseñado para arquitecturas cloud, donde tenemos alta disponibilidad y escalamiento, lo que quiere decir que debemos de tener múltiples instancias del Supplier, para asegurarnos de seguir operando ante la falla de una o múltiples instancias del mismo Supplier:</p>
<p><img loading="lazy" class="aligncenter size-large wp-image-2440" src="https://www.oscarblancarteblog.com/wp-content/uploads/2018/12/circuit-breaker-diagram-of-sequence-microservices-1024x646.png" alt="Circuit Breaker pattern arquitectura" width="648" height="409" /></p>
<p>&nbsp;</p>
<p>En la imagen anterior ya podemos observar cómo es que existe una serie de instancias de un mismo Supplier, por lo que en caso de que alguno falle, el Circuit Breaker deberá ser lo suficientemente inteligente para redireccionar la petición a otro Supplier en caso de que el primero falle, de esta forma, no retornamos el error al cliente, si no que reintentamos la ejecución en el siguiente Supplier disponible.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>Ciclo de vida del Circuit Breaker</h2>
<p>El Circuit Breaker se puede implementar como máquina de estados, la cual puede pasar por 3 estados diferentes, y cada estado afectará la forma en que funciona, los estados son:</p>
<ul>
<li><strong>Closed</strong>: Este estado indica que el servicio destino está respondiendo correctamente. En caso de alcanzar un umbral de errores, pasará al estado Open.</li>
<li><strong>Open</strong>: Este estado indica que el servicio destino está fallando, por lo que toda invocación regresara un error de inmediato. Tras un tiempo de espera, pasará a estado Half-Open.</li>
<li><strong>Half-Open</strong> (medio abierto): Tras un tiempo en estado Open, el componente pase a Half-Open, lo que indica que puede recibir una pequeña cantidad de solicitudes para validar si el servicio está nuevamente activo. Si las solicitudes pasan exitosamente, el componente pasa a Closed, en otro caso, regresa a Open.</li>
</ul>
<p><img loading="lazy" class="aligncenter size-large wp-image-2441" src="https://www.oscarblancarteblog.com/wp-content/uploads/2018/12/circuit-breaker-lifecycle-1024x597.png" alt="Circuit Breaker pattern life cycle" width="648" height="378" /></p>
<p>&nbsp;</p>
<h2>Entornos Asíncronos</h2>
<p>Hasta este punto hemos analizado como es que este patrón se utiliza para servicios donde las invocaciones son síncronas, pero ¿qué pasaría si pasamos a un entorno donde los servicios a consumir se ejecutan de forma asíncrona? Por suerte, este patrón también se puede utilizar bajo estas circunstancias, aun que debemos de cambiar un poco la lógica, aunque el principio es el mismo.</p>
<p>En entornos síncronos, no tendremos respuestas con error ni timeout, por lo que las métricas que utilizábamos anteriormente no aplican, es por ello que podemos utilizar Colas (Queues):</p>
<p><img loading="lazy" class="aligncenter size-large wp-image-2442" src="https://www.oscarblancarteblog.com/wp-content/uploads/2018/12/circuit-breaker-queue-1024x574.png" alt="Circuit Breaker pattern life cycle asincrono" width="648" height="363" /></p>
<p>&nbsp;</p>
<p>En este caso, el Circuit Breaker en lugar de ejecutar directamente el servicio, tendrá que depositarlo en una Queue, de tal forma que el Supplier los podrá ir tomando a como pueda, lo que impide que lo saturemos de peticiones y lo hagamos colapsar, por otro lado, el Circuit Breaker podrá determinar el número de mensajes que tiene la Queue, y si este alcanza un umbral determinado, podríamos determinar que está fallando o que está procesando los mensajes demasiado lento, por lo que abrimos el circuito para impedir que se sature.</p>
<p>Como vemos, el funcionamiento es el mismo, lo que cambia es la forma de medir si un servicio está fallando o tarda mucho tiempo en procesar los mensajes.</p>
<p>&nbsp;</p>
<p><figure id="attachment_2333" aria-describedby="caption-attachment-2333" style="width: 648px" class="wp-caption aligncenter"><a href="https://reactiveprogramming.io/books/design-patterns/es" target="_blank" rel="noopener"><img loading="lazy" class="wp-image-2333 size-large" src="https://www.oscarblancarteblog.com/wp-content/uploads/2018/09/patrones-diseño-banner-1024x392.jpg" alt="" width="648" height="248" /></a><figcaption id="caption-attachment-2333" class="wp-caption-text">¿Te gustaría aprender más patrones como este? te invito a que veas mi libro &#8220;Introducción a los patrones de diseño&#8221; el único libro que te enseña los principales patrones de diseño utilizando ejemplos del mundo real. Olvídate de aprender con los ejemplos típicos de internet como, crear una pizza, animales que ladren o figuras geométricas.</figcaption></figure></p>
<p>&nbsp;</p>
<h2>Ventajas de implementar Circuit Breaker</h2>
<p>Adicional a las ventajas obvias que podemos ver, como la tolerancia a fallas y el envío de solicitudes a servicios que sabemos que van a fallar, existen otros tipos de ventajas:</p>
<p>&nbsp;</p>
<h3>Monitoreo:</h3>
<p>Dado que tenemos un componente que su única funcionalidad es sondear el estado de vida de los servicios, es posible tener un monitoreo en tiempo real, que nos indique los tiempos de respuesta promedio, frecuencia de falla, estado actual del servicio y, sobre todo, notificaciones en tiempo real si algún servicio comienza a fallar.</p>
<p>&nbsp;</p>
<h3>Sobrecarga:</h3>
<p>La capacidad de abrir el circuito ante un error o Timeout que sabemos que va a pasar, nos ahorra el hecho de tener muchos hilos esperando a que el servicio responda, y más aún, si tenemos miles de usuarios, es probable tener muchísimos hilos detenidos, lo que provocaría que nuestro sistema se sobre cargue, incluso, puede provocar una bola de nieve que comience a afectar a otros componentes.</p>
<p>&nbsp;</p>
<h3>Tolerancia a fallas</h3>
<p>Como ya lo dijimos, el Circuit Breaker puede redireccionar la petición al siguiente Supplier en caso de que alguno falle, evitando tener que enviarle el error al cliente.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>Conclusiones</h2>
<p>Como hemos analizado a lo largo de este artículo, utilizar el patrón Circuit Breaker permite que inundemos nuestra aplicación con una gran cantidad de solicitudes que sabemos de antemano que van a fallar, por lo que, en lugar de eso, re direccionamos las peticiones a una instancia del servicio que está operativo.</p>
<p>Este patrón de diseño es altamente utilizado en entornos distribuidos y con arquitecturas de microservicios, por lo que no es para nada recomendable utilizarlo para operaciones en memoria o servicios albergados de forma local. Recordemos que este patrón está diseñado para recursos remotos.</p>
<p>&nbsp;		</p>
<p>The post <a rel="nofollow" href="https://www.oscarblancarteblog.com/2018/12/04/circuit-breaker-pattern/">Circuit Breaker pattern</a> appeared first on <a rel="nofollow" href="https://www.oscarblancarteblog.com">Oscar Blancarte - Software Architecture</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.oscarblancarteblog.com/2018/12/04/circuit-breaker-pattern/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2436</post-id>	</item>
		<item>
		<title>Que es Spring Boot y su relación con los microservicios</title>
		<link>https://www.oscarblancarteblog.com/2018/07/17/spring-boot-relacion-los-microservicios/</link>
					<comments>https://www.oscarblancarteblog.com/2018/07/17/spring-boot-relacion-los-microservicios/#comments</comments>
		
		<dc:creator><![CDATA[oblancarte]]></dc:creator>
		<pubDate>Tue, 17 Jul 2018 09:00:21 +0000</pubDate>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[microservicios]]></category>
		<category><![CDATA[spring boot]]></category>
		<guid isPermaLink="false">https://www.oscarblancarteblog.com/?p=2125</guid>

					<description><![CDATA[<p>Dada la creciente tendencia de migrar nuestras aplicaciones a una arquitectura de microservicios, es cada vez más importante contar con tecnologías que nos ayuden a agilizar el desarrollo, pero sobre todo, que nos permita crear aplicaciones muy ligeras que consuman el menor número de recursos y es justo allí cuando entra Spring Boot. Es posible [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://www.oscarblancarteblog.com/2018/07/17/spring-boot-relacion-los-microservicios/">Que es Spring Boot y su relación con los microservicios</a> appeared first on <a rel="nofollow" href="https://www.oscarblancarteblog.com">Oscar Blancarte - Software Architecture</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-image"><figure class="aligncenter"><img src="https://www.oscarblancarteblog.com/wp-content/uploads/2018/07/banner-1-1024x573.png" alt="" class="wp-image-2134"/></figure></div>



<p>Dada la creciente tendencia de migrar nuestras aplicaciones a una arquitectura de microservicios, es cada vez más importante contar con tecnologías que nos ayuden a agilizar el desarrollo, pero sobre todo, que nos permita crear aplicaciones muy ligeras que consuman el menor número de recursos y es justo allí cuando entra Spring Boot.</p>



<span id="more-2125"></span>



<p>Es posible que te pueda interesa mi artículo “<a href="https://www.oscarblancarteblog.com/2018/05/22/que-son-los-microservicios/">Que son los microservicios</a>”, donde explico los explico a detalle.</p>



<h2>Que es Spring Boot:</h2>



<p>Para los que no están familiarizados con esta tecnología, podríamos decir que Spring Boot es una herramienta que nace con la finalidad de simplificar aun más el desarrollo de aplicaciones basadas en el ya popular framework Spring Core. Spring Boot busca que el desarrollador solo si centre en el desarrollo de la solución, olvidándose por completo de la compleja configuración que actualmente tiene Spring Core para poder funcionar.</p>



<p>Spring Boot centra su éxito en las siguientes características que lo hacen extremadamente fácil de utilizar:</p>



<ul><li><strong>Configuración:</strong> Spring Boot cuenta con un complejo módulo que autoconfigura todos los aspectos de nuestra aplicación para poder simplemente ejecutar la aplicación, sin tener que definir absolutamente nada.</li><li><strong>Resolución de dependencias:</strong> Con Spring Boot solo hay que determinar que tipo de proyecto estaremos utilizando y el se encarga de resolver todas las librerías/dependencias para que la aplicación funcione.</li><li><strong>Despliegue:</strong> Spring Boot se puede ejecutar como una aplicación Stand-alone, pero también es posible ejecutar aplicaciones web, ya que es posible desplegar las aplicaciones mediante un servidor web integrado, como es el caso de Tomcat, Jetty o Undertow.</li><li><strong>Métricas:</strong> Por defecto, Spring Boot cuenta con servicios que permite consultar el estado de salud de la aplicación, permitiendo saber si la aplicación está prendida o apagada, memoria utilizada y disponible, número y detalle de los Bean’s creado por la aplicación, controles para el prendido y apagado, etc.</li><li><strong>Extensible:</strong> Spring Boot permite la creación de complementos, los cuales ayudan a que la comunidad de Software Libre cree nuevos módulos que faciliten aún más el desarrollo.</li></ul>



<h2>Como funciona Spring Boot:</h2>



<p>La mejor forma de entender cómo funciona Spring Boot es con un poco de código, por lo que veremos como es que se crea una aplicación. Básicamente existe dos formas de crear una aplicación, mediante ayuda del IDE o con ayuda de la página de Spring Boot:</p>



<h3>Spring Start:</h3>



<p>Spring Start es una página web que provee Spring para crear un proyecto por nosotros, para lo cual, nos solicitará los datos básicos del proyecto:</p>



<div class="wp-block-image"><figure class="aligncenter"><img src="https://www.oscarblancarteblog.com/wp-content/uploads/2018/07/10-Spring-boot-start-1024x571.png" alt="" class="wp-image-2126"/></figure></div>



<p>Como podremos observar, es posible crear un proyecto basado en Maven o en Gradle, también podemos definir si el lenguaje será Java, Kotlin o Grovy, también nos pedirá la versión de Spring Boot y el grupo (namespace) y nombre del artefacto (nombre del proyecto), finalmente nos pedirá las que selecciones las dependencias, en nuestro caso, solo seleccionaremos Web.</p>



<p>Si desconoces los módulos disponibles, puedes presionar el texto que dice “ Switch to the full versión.” Que se encuentra justo de bajo del botón para generar el proyecto (“Generate Project“), para que desplegará todos los módulos disponibles, los cuales son muchísimos para mostrarlos en una imagen.</p>



<p>Una vez configurado el proyecto, solo nos resta presionar el botón “Generate Project” e iniciará la descarga del proyecto preconfigurado, el cual podrás importar en cualquier IDE que soporte Maven o Gladle.</p>



<h3>Spring Boot Suite:</h3>



<p>La segunda y más recomendable opción es utilizar Spring Boot Suite, el IDE por excelencia para el desarrollo de aplicaciones basadas en cualquier producto de Spring, el cual ellos mismo desarrollan y lo puedes descargar desde <a href="https://spring.io/tools/sts">aquí</a>.</p>



<p>Spring Boot Suite es un IDE basado en Eclipse, por lo que no tendrás problemas en utilizarlos rápidamente. Para crear un proyecto tan solo es necesario dirigirse al menú principal y dar click en File =&gt; New =&gt; Spring Starter Project, el cual desplegará la siguiente pantalla:</p>



<div class="wp-block-image"><figure class="aligncenter"><img src="https://www.oscarblancarteblog.com/wp-content/uploads/2018/07/20-Spring-started-project.png" alt="" class="wp-image-2127"/></figure></div>



<p>Como podemos ver, nos pedirá los mismos datos que la página web, como grupo, nombre, type de proyecto (Maven Gladle), etc. Presionamos Next para continuar:</p>



<div class="wp-block-image"><figure class="aligncenter"><img src="https://www.oscarblancarteblog.com/wp-content/uploads/2018/07/30-Spring-started-project-2.png" alt="" class="wp-image-2128"/></figure></div>



<p>En esta nueva pantalla nos pedirá que selecciones las dependencias, en nuestro caso, solo seleccionaremos el módulo Web y damos en finalizar.</p>



<p>Con este último paso tendremos el proyecto creado y nos creará la clase HelloWorldApplication, la cual es lo único necesario para ejecutar nuestra aplicación:</p>



<pre class="wp-block-code"><code lang="java" class="language-java line-numbers">package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class HelloWorldApplication {
	public static void main(String[] args) {
		SpringApplication.run(HelloWorldApplication.class, args);
	}
}</code></pre>



<p>En este momento podríamos ejecutar nuestra aplicación Web, pero no tendría mucho sentido, pues no hemos desarrollado nada, por ese motivo, vamos a crear un servicio REST para poder probarlo desde el navegador. Para ello, crearemos una nueva clase llamada HelloRest en el mismo paquete que la clase anterior:</p>



<pre class="wp-block-code"><code lang="java" class="language-java line-numbers">package com.example.demo;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloRest {
	@RequestMapping("/hello")
	public String helloWorld() {
		return "Hello World";
	}
}</code></pre>



<p>Una vez creada, ejecutamos la aplicación dando click derecho sobre el proyecto y seleccionando Run As =&gt; Spring Boot App, lo que iniciará el despliegue de la aplicación sobre un Tomcat embebido:</p>



<div class="wp-block-image"><figure class="aligncenter"><img src="https://www.oscarblancarteblog.com/wp-content/uploads/2018/07/40-Run-As.png" alt="" class="wp-image-2129"/></figure></div>



<p>Lo siguiente será ir al navegador y entrar a la URL <a href="http://localhost:8080/hello">http://localhost:8080/hello</a> para ver lo siguiente:</p>



<div class="wp-block-image"><figure class="aligncenter"><img src="https://www.oscarblancarteblog.com/wp-content/uploads/2018/07/50-hello-rest.png" alt="" class="wp-image-2130"/><figcaption><br></figcaption></figure></div>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://codmind.com/courses/api-rest-con-spring-boot" target="_blank" rel="noreferrer noopener"><img loading="lazy" width="800" height="450" src="https://www.oscarblancarteblog.com/wp-content/uploads/2019/08/banner-lg.jpg" alt="" class="wp-image-3146" srcset="https://www.oscarblancarteblog.com/wp-content/uploads/2019/08/banner-lg.jpg 800w, https://www.oscarblancarteblog.com/wp-content/uploads/2019/08/banner-lg-300x169.jpg 300w, https://www.oscarblancarteblog.com/wp-content/uploads/2019/08/banner-lg-768x432.jpg 768w" sizes="(max-width: 800px) 100vw, 800px" /></a><figcaption> <br>Te invito a ver mi curso Mastering API REST con Spring Boot </figcaption></figure></div>



<h2>Conclusiones</h2>



<p>Como hemos podido observar, mediante Spring Boot es posible crear aplicaciones completas que se ejecuten en un entorno reducido, pues no es necesario tener un servidor de aplicaciones completo que nos consumirá una gran cantidad de recursos, además, Spring boot tiene complementos muy interesantes como Spring Cloud, el cual nos permite crear aplicaciones “Cloud Native”, es decir, aplicaciones diseñadas desde el inicio para ser ejecutadas en la nube.</p>



<p>Todas estas ventajas que hemos analizado son clave para crear microservicios, pues ya no es necesario instalar servidores de aplicaciones o tener configuraciones muy complejas para poder</p>
<p>The post <a rel="nofollow" href="https://www.oscarblancarteblog.com/2018/07/17/spring-boot-relacion-los-microservicios/">Que es Spring Boot y su relación con los microservicios</a> appeared first on <a rel="nofollow" href="https://www.oscarblancarteblog.com">Oscar Blancarte - Software Architecture</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.oscarblancarteblog.com/2018/07/17/spring-boot-relacion-los-microservicios/feed/</wfw:commentRss>
			<slash:comments>24</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2125</post-id>	</item>
		<item>
		<title>¿Que son los microservicios?</title>
		<link>https://www.oscarblancarteblog.com/2018/05/22/que-son-los-microservicios/</link>
					<comments>https://www.oscarblancarteblog.com/2018/05/22/que-son-los-microservicios/#comments</comments>
		
		<dc:creator><![CDATA[oblancarte]]></dc:creator>
		<pubDate>Tue, 22 May 2018 15:08:43 +0000</pubDate>
				<category><![CDATA[EAI]]></category>
		<category><![CDATA[microservicios]]></category>
		<guid isPermaLink="false">https://www.oscarblancarteblog.com/?p=2058</guid>

					<description><![CDATA[<p>Justo cuando nos estábamos empezando a acostumbrar a SOA, llegan los microservicios para confundirnos más, y es que SOA y microservicios tiene un gran parecido, tanto que para los que no están al tanto, puede resultar lo mismo, sin embargo, SOA y microservicios tienen sus diferencias y es justo de lo que hablaremos en este [&#8230;]</p>
<p>The post <a rel="nofollow" href="https://www.oscarblancarteblog.com/2018/05/22/que-son-los-microservicios/">¿Que son los microservicios?</a> appeared first on <a rel="nofollow" href="https://www.oscarblancarteblog.com">Oscar Blancarte - Software Architecture</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>				<img loading="lazy" class="aligncenter wp-image-2059" src="https://www.oscarblancarteblog.com/wp-content/uploads/2018/05/banner-1024x572.jpg" alt="Que son los microservicios" width="800" height="447" /></p>
<p>Justo cuando nos estábamos empezando a acostumbrar a SOA, llegan los microservicios para confundirnos más, y es que SOA y microservicios tiene un gran parecido, tanto que para los que no están al tanto, puede resultar lo mismo, sin embargo, SOA y microservicios tienen sus diferencias y es justo de lo que hablaremos en este artículo.<span id="more-2058"></span></p>
<p>&nbsp;</p>
<p>Antes de empezar a leer este artículo te puede resultar interesante leer mi artículo “<a href="https://www.oscarblancarteblog.com/2014/07/23/que-es-service-oriented-architecture-soa/">Que es service-oriented Architecture (SOA)</a>” y “<a href="https://www.oscarblancarteblog.com/2017/03/06/soap-vs-rest-2/">SOAP vs REST</a>” pues pueden resultar de mucha ayuda para tener un contexto más amplio de lo que hablaremos en este artículo.</p>
<p>&nbsp;</p>
<p>Primero que nada, es importante entender que los microservicios son un “<em><strong>tipo de arquitectura de software</strong></em>” y no un API o tecnología, la cual podemos instalar y utilizar, sin embargo, sí que existen frameworks que implementan esta arquitectura para facilitarnos la vida, como es el caso de Spring Boot en Java o Express para NodeJS.</p>
<p>Las arquitecturas de software son totalmente ajenas a los lenguajes de programación, pues solo establecen la forma en la que las tecnologías deberían de funcionar y no como fueron implementadas, es por eso que tenemos una gran variedad de frameworks que nos ayudan a implementar microservicios, se podría programar de formas diferentes, pero son profundamente parecidas en la forma en que trabajan.</p>
<p>&nbsp;</p>
<h2>¿SOA y microservicios son lo mismo?</h2>
<p>&nbsp;</p>
<p>Para comprender que son los microservicios es fundamental entender que son los servicios (SOA), pues es la base en la que se sustentan los microservicios. Tanto SOA como Microservicios son “tipos de arquitectura de software” que se basan en servicios, sin embargo, SOA es una arquitectura de más alto nivel, pues nos invita a construir aplicaciones basada en servicios, donde un servicios es la unidad más pequeña de un software, por otro lado, los microservicios también nos invita a crear servicios, la diferencia radica en que los microservicios están diseñados en la construcción de pequeños servicios o incluso programas  que cumplan una funcionalidad muy precisa y muy pequeña, la cual pueda ser desacoplada del resto de aplicaciones y funcionar de una forma totalmente autónomos del resto de aplicaciones.</p>
<p>&nbsp;</p>
<h2>Cómo funcionan los servicios SOA</h2>
<p>&nbsp;</p>
<p>Por otro lado, en SOA podemos tener aplicaciones monolíticas que expongan servicios, como son los clásicos ERP o CRM, las cuales son aplicaciones gigantes que exponen una gran cantidad de servicios, y que es imposible separar alguna funcionalidad para instalar por separado.</p>
<p><img loading="lazy" class="aligncenter wp-image-2060" src="https://www.oscarblancarteblog.com/wp-content/uploads/2018/05/SOA-Services.png" alt="Servicios SOA" width="718" height="381" /></p>
<p>Como se puede apreciar en la imagen anterior, un ERP es una aplicación muy grande, que podríamos llamar monolítica, la cual implementa una arquitectura SOA para exponer los servicios, sin embargo, es imposible separar alguna funcionalidad de instalarla por separado, incluso, apagar cierta funcionalidad que no sea necesaria, en este esquema tenemos todo o no tenemos nada.</p>
<p>&nbsp;</p>
<h2>Cómo funcionan los microservicios</h2>
<p>&nbsp;</p>
<p>En el caso de la arquitectura de microservicios, la idea se centra en separar la funcionalidad en pequeñas aplicaciones independientes que puedan operar con completa autonomía, las cuales expongan su funcionalidad como servicios, con la idea de que sean reutilizables. En esta arquitectura tenemos varias aplicaciones desplegadas en lugar de una sola:</p>
<p><img loading="lazy" class="aligncenter wp-image-2061" src="https://www.oscarblancarteblog.com/wp-content/uploads/2018/05/microservices.png" alt="Microservicios" width="757" height="410" /></p>
<p>En la imagen anterior podemos ver como una serie de servicios pueden ser desplegados de forma independiente, de tal forma que cada uno funciona de forma autónoma y sin importar si los demás servicios están operando o no.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>Microservicios y el escalamiento</h2>
<p>&nbsp;</p>
<p>Sin duda, una de las grandes ventajas que ofrecen los microservicios contra las arquitecturas monolíticas, es la posibilidad de un escalamiento más controlado, pues una arquitectura monolítica escala de una forma monolítica, es decir, que, si necesitamos clusterizar una app, es necesario escalar toda la app sin importar que existan módulos con poca demanda que no requieren ser escalados, en cambio, con los microservicios, es posible escalar únicamente los módulos de alta demanda aprovechando al máximo nuestro hardware.</p>
<p><img loading="lazy" class="aligncenter wp-image-2066" src="https://www.oscarblancarteblog.com/wp-content/uploads/2018/05/1.4.png" alt="Arquitectura de microservicios" width="748" height="474" /></p>
<p>&nbsp;</p>
<p>En la imagen anterior podemos ver la diferencia que existe entre escalar una app monolítica vs una con microservicios. Lo primero que podemos observar, es que la aplicación monolítica se ha replicado exactamente igual en los cuatro contenedores, es decir, que los módulos A, B, C y D están presentes en todos los contenedores, sin importar si son realmente requeridos o no. Por otro lado (derecha), tenemos escalamiento con microservicios, lo primero que podemos observar, es que cada contenedor tiene una combinación diferente de componentes desplegados, pues algunos módulos son más críticos que otros, como es el caso del módulo B, el cual está presente en todos los contendedores, incluso, se encuentra más de una vez algunos contenedores. Por otro lado, tenemos el módulo D el cual solo se encuentra en un solo contenedor, debido a que no es un proceso crítico, como podría ser el módulo de envío de Emails.</p>
<p>&nbsp;</p>
<h2>Conclusiones:</h2>
<p>&nbsp;</p>
<p>Como podemos observar, los microservicios son en realidad una evolución de la arquitectura SOA, la cual nos invita a crear aplicaciones más modulares, capaces de funcionar de una forma autónoma y que puedan ser reutilizadas de una forma más eficaz, de la misma forma, optimizamos la utilización de nuestro hardware, pues solo desplegamos lo que es realmente necesario, en lugar de desplegar aplicaciones monolíticas completas.		</p>
<p>The post <a rel="nofollow" href="https://www.oscarblancarteblog.com/2018/05/22/que-son-los-microservicios/">¿Que son los microservicios?</a> appeared first on <a rel="nofollow" href="https://www.oscarblancarteblog.com">Oscar Blancarte - Software Architecture</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.oscarblancarteblog.com/2018/05/22/que-son-los-microservicios/feed/</wfw:commentRss>
			<slash:comments>18</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2058</post-id>	</item>
	</channel>
</rss>
