¿Por qué usar un enfoque de microservicios para crear aplicaciones?Why a microservices approach to building applications?

Los desarrolladores de software pensar en la factorización de una aplicación en partes componentes no es nada nuevo.As software developers, thinking about factoring an application into component parts is nothing new. Normalmente, se emplea un enfoque con niveles con un almacén en el back-end, lógica de negocios en el nivel intermedio y una interfaz de usuario (IU) en el front-end.Typically, a tiered approach is taken with a back-end store, middle-tier business logic, and a front-end user interface (UI). Lo que ha cambiado en los últimos años es que los desarrolladores ahora crean aplicaciones distribuidas para la nube.What has changed over the last few years is that we, as developers, are building distributed applications for the cloud.

Las cambiantes necesidades empresariales son:The changing business needs are:

  • Un servicio que se compila y operar a escala para llegar a clientes en nuevas regiones geográficas.A service that is built and operated at scale to reach customers in new geographical regions.
  • Entrega más rápida de características y funciones para poder responder a las demandas de los clientes de forma ágil.Faster delivery of features and capabilities to be able to respond to customer demands in an agile way.
  • Mejora de la utilización de los recursos para reducir costos.Improved resource utilization to reduce costs.

Todas estas necesidades afectan a la forma en que se crean las aplicaciones.These business needs are affecting how we build applications.

Para más información acerca del enfoque de Azure a los microservicios, lea Microservices: An application revolution powered by the cloud (Microservicios: Una revolución en las aplicaciones con la tecnología de la nube).For more information about the approach of Azure to microservices, read Microservices: An application revolution powered by the cloud.

Enfoque de diseño monolítico en comparación con el de microserviciosMonolithic vs. microservice design approach

Las aplicaciones evolucionan con el tiempo.Applications evolve over time. Las aplicaciones que triunfan evolucionan por ser útiles a sus usuarios.Successful applications evolve by being useful to people. Las que fracasan no evolucionan y terminan por entrar en desuso.Unsuccessful applications do not evolve and eventually are deprecated. La pregunta es: ¿Cuánto sabe acerca de los requisitos actuales y lo que estarán en el futuro?The question is: How much do you know about your requirements today and what they will be in the future? Por ejemplo, supongamos que está creando una aplicación de informes para un departamento.For example, let's say that you are building a reporting application for a department. Está seguro de que la aplicación solo es aplicable al ámbito de la compañía y que los informes son relevantes por un tiempo limitado.You are sure that the application only applies within the scope of your company and that the reports are short-lived. El enfoque elegido es diferente al adoptado para crear un servicio que entrega contenido de vídeo a decenas de millones de clientes.Your choice of approach is different from, say, building a service that delivers video content to tens of millions of customers.

A veces, terminar un servicio como prueba de concepto es el factor determinante, sabiendo que la aplicación podrá modificarse más adelante.Sometimes, getting something out the door as proof of concept is the driving factor, knowing that the application can be redesigned later. No tiene mucho sentido volcarse en la ingeniería de algo que no se va a usar nunca.There is little point in over-engineering something that never gets used. Por otra parte, cuando las empresas hablan sobre la creación de aplicaciones para la nube, lo que esperan es crecimiento y uso.On the other hand, when companies talk about building for the cloud, the expectation is growth and usage. El problema es que el crecimiento y la escala son imprevisibles.The issue is that growth and scale are unpredictable. Nos gustaría poder prototipo rápidamente sabiendo también que se encuentra en una ruta de acceso que puede controlar el éxito en el futuro.We would like to be able to prototype quickly while also knowing that we are on a path that can handle future success. Este es el enfoque Lean Startup: compilar, medir, aprender e iterar.This is the lean startup approach: build, measure, learn, and iterate.

En la época de cliente-servidor, tendíamos a centrarnos en la creación de aplicaciones en capas mediante el uso de tecnologías específicas en cada nivel.During the client-server era, we tended to focus on building tiered applications by using specific technologies in each tier. El término aplicación monolítica ha surgido de estos enfoques.The term monolithic application has emerged for these approaches. Las interfaces tendían a estar entre los niveles y normalmente utilizaban un diseño más estrechamente acoplado entre los componentes de cada nivel.The interfaces tended to be between the tiers, and a more tightly coupled design was used between components within each tier. Los desarrolladores diseñaban y generaban clases compiladas en bibliotecas y las vinculaban entre sí en algunos archivos ejecutables y DLL.Developers designed and factored classes that were compiled into libraries and linked together into a few executables and DLLs.

Dicho enfoque de diseño monolítico tiene varias ventajas.There are benefits to such a monolithic design approach. A menudo es más fácil de diseñar y las llamadas entre los componentes son más rápidas, ya que generalmente se realizan a través de comunicación entre procesos (IPC).It's often simpler to design, and it has faster calls between components because these calls are often over interprocess communication (IPC). Además, todo el mundo prueba un único producto, lo que tiende a ser más eficiente en la relación entre personas y recursos.Also, everyone tests a single product, which tends to be more people-resource efficient. La desventaja es que se produce un acoplamiento estrecho entre las capas en niveles y no se pueden escalar los componentes individuales.The downside is that there's a tight coupling between tiered layers, and you cannot scale individual components. Si necesita realizar actualizaciones o correcciones, tendrá que esperar hasta que otros usuarios finalicen sus pruebas,If you need to perform fixes or upgrades, you have to wait for others to finish their testing. lo que dificulta la agilidad.It is more difficult to be agile.

Los microservicios solucionan estas desventajas y se adaptan mejor a los anteriores requisitos empresariales, pero también tienen ventajas y desventajas.Microservices address these downsides and more closely align with the preceding business requirements, but they also have both benefits and liabilities. Las ventajas de los microservicios son que cada uno suele encapsular funcionalidades empresariales más simples, las cuales se pueden escalar o reducir verticalmente, probar, implementar y administrar de forma independiente.The benefits of microservices are that each one typically encapsulates simpler business functionality, which you can scale up or down, test, deploy, and manage independently. Una ventaja importante de un enfoque de microservicios es que los equipos están más condicionados por los escenarios empresariales que por la tecnología.One important benefit of a microservice approach is that teams are driven more by business scenarios than by technology. En la práctica, los equipos más pequeños desarrollan un microservicio en función de un escenario del cliente y usan las tecnologías que prefieren.In practice, smaller teams develop a microservice based on a customer scenario and use any technologies they choose.

Es decir, no es necesario que la organización normalice su tecnología para mantener aplicaciones de microservicio.In other words, the organization doesn’t need to standardize tech to maintain microservice applications. Los equipos individuales con servicios propios pueden hacer lo más lógico en función de sus conocimientos o de lo que sea más adecuado para resolver el problema.Individual teams that own services can do what makes sense for them based on team expertise or what’s most appropriate to solve the problem. En la práctica, es preferible tener un conjunto de tecnologías recomendadas, como un almacén NoSQL o un marco de aplicaciones web concretos.In practice, a set of recommended technologies, such as a particular NoSQL store or web application framework, is preferable.

La desventaja de los microservicios surge al tener que administrar un mayor número de entidades independientes y trabajar con la mayor complejidad de las implementaciones y el control de versiones.The downside of microservices comes in managing the increased number of separate entities and dealing with more complex deployments and versioning. Aumentan tanto el tráfico de red entre los microservicios como las latencias de red correspondientes.Network traffic between the microservices increases as well as the corresponding network latencies. Una gran cantidad de servicios granulares comunicándose entre sí no trae nada bueno para el rendimiento.Lots of chatty, granular services are a recipe for a performance nightmare. Sin herramientas que ayuden a ver estas dependencias, es difícil “ver” todo el sistema.Without tools to help view these dependencies, it is hard to “see” the whole system.

Los estándares hacen que el enfoque de microservicios funcione al establecer un acuerdo sobre cómo llevar a cabo la comunicación y tolerar únicamente lo que se necesita de un servicio, en lugar de usar contratos rígidos.Standards make the microservice approach work by agreeing on how to communicate and being tolerant of only the things you need from a service, rather than rigid contracts. Es importante definir estos contratos por adelantado en el diseño, ya que los servicios se actualizan de forma independiente entre sí.It is important to define these contracts up front in the design, because services update independently of each other. Otra descripción acuñada para el diseño con el enfoque de microservicios es "arquitectura orientada a servicios (SOA) específica".Another description coined for designing with a microservices approach is “fine-grained service-oriented architecture (SOA).”

En su forma más simple, el enfoque de diseño de microservicios consiste en una federación desacoplada de servicios, con cambios independientes en cada uno, y estándares acordados para la comunicación.At its simplest, the microservices design approach is about a decoupled federation of services, with independent changes to each, and agreed-upon standards for communication.

A medida que se producen más aplicaciones en la nube, se ha descubierto que la descomposición de la aplicación global en servicios independientes centrados en escenarios es a largo plazo un mejor enfoque.As more cloud apps are produced, people have discovered that this decomposition of the overall app into independent, scenario-focused services is a better long-term approach.

Comparación entre los enfoques de desarrollo de aplicacionesComparison between application development approaches

Desarrollo de aplicaciones de la plataforma Service Fabric

  1. Las aplicaciones monolíticas contienen funciones específicas del dominio y normalmente se dividen en capas funcionales, como Web, negocios y datos.A monolithic app contains domain-specific functionality and is normally divided by functional layers such as web, business, and data.

  2. Para escalar aplicaciones monolíticas, es preciso clonarlas en varios servidores, máquinas virtuales o contenedores.You scale a monolithic app by cloning it on multiple servers/virtual machines/containers.

  3. Las aplicaciones de microservicios separan las funciones en servicios más pequeños independientes.A microservice application separates functionality into separate smaller services.

  4. Este enfoque de microservicios se escala horizontalmente mediante la implementación de cada servicio de manera independiente, con la creación de instancias de estos servicios en servidores, máquinas virtuales y contenedores.The microservices approach scales out by deploying each service independently, creating instances of these services across servers/virtual machines/containers.

La realización del diseño con un enfoque de microservicios no es la panacea para todos los proyectos, pero se adapta mejor a los objetivos de negocio descritos.Designing with a microservice approach is not a panacea for all projects, but it does align more closely with the business objectives described earlier. Comenzar con un enfoque monolítico sería aceptable si se sabe que después no habrá oportunidad de reprocesar el código en un diseño con microservicios.Starting with a monolithic approach might be acceptable if you know that you will have the opportunity to rework the code later into a microservices design. Es más frecuente comenzar con una aplicación monolítica y, poco a poco, dividirla en fases, empezando por las áreas funcionales que deban ser más escalables o ágiles.More commonly, you begin with a monolithic application and slowly break it up in stages, starting with the functional areas that need to be more scalable or agile.

El enfoque de microservicios consiste en componer la aplicación de muchos servicios pequeños.The microservice approach means that you compose your application of many small services. Estos servicios se ejecutan en contenedores que se implementan en un clúster de máquinas.These services run in containers that are deployed across a cluster of machines. Los equipos más pequeños desarrollan un servicio que se centra en un escenario y, de forma independiente, prueban, controlan versiones, implementan y escalan cada servicio para que toda la aplicación pueda evolucionar.Smaller teams develop a service that focuses on a scenario and independently test, version, deploy, and scale each service so that the entire application can evolve.

¿Qué es un microservicio?What is a microservice?

Hay distintas definiciones de microservicios.There are different definitions of microservices. Sin embargo, la mayoría de las siguientes características de microservicios ampliamente aceptada:However, most of the following characteristics of microservices are widely accepted:

  • Encapsulan un escenario de cliente o negocio.Encapsulate a customer or business scenario. ¿Cuál es el problema que va a solucionar?What is the problem you are solving?
  • Desarrollados por un pequeño equipo de ingenieros.Developed by a small engineering team.
  • Escritos en cualquier lenguaje de programación y usando cualquier marco.Written in any programming language and use any framework.
  • Constan de código y, opcionalmente, de un estado, ambos de los cuales se controlan para versiones, implementan y escalan de forma independiente.Consist of code and (optionally) state, both of which are independently versioned, deployed, and scaled.
  • Interactúan con otros microservicios a través de protocolos e interfaces bien definidos.Interact with other microservices over well-defined interfaces and protocols.
  • Tienen nombres únicos (direcciones URL) que se usan para resolver su ubicación.Have unique names (URLs) used to resolve their location.
  • Siguen siendo coherentes y estando disponibles en caso de errores.Remain consistent and available in the presence of failures.

En resumen:In summary:

Las aplicaciones de microservicios se componen de servicios pequeños centrados en el cliente, escalables y con control de versiones independiente que se comunican entre sí mediante protocolos estándar con interfaces bien definidas.Microservice applications are composed of small, independently versioned, and scalable customer-focused services that communicate with each other over standard protocols with well-defined interfaces.

Escritos en cualquier lenguaje de programación y usando cualquier marcoWritten in any programming language and use any framework

Como desarrolladores, deberíamos disponer de la libertad de elegir un lenguaje o marco que queramos según nuestras habilidades o las necesidades del servicio.As developers, we want to be free to choose a language or framework that we want, depending on our skills or the needs of the service. En algunos servicios, podría valorar las ventajas de rendimiento que C++ aporta por encima de todo.In some services, you might value the performance benefits of C++ above all else. En otros servicios, la facilidad del desarrollo administrado en C# o Java podría ser lo más importante.In other services, the ease of managed development in C# or Java might be most important. En algunos casos, es posible que se tenga que usar una biblioteca de un asociado, una tecnología de almacenamiento de datos o medios para exponer el servicio a los clientes.In some cases, you may need to use a specific partner library, data storage technology, or means of exposing the service to clients.

Después de haya seleccionado la tecnología, pasamos a la administración operativa o ciclo de vida y escalado del servicio.After you have chosen a technology, you come to the operational or life cycle management and scaling of the service.

Permite que el control de versiones, la implementación y el escalado del código y del estado se realicen de forma independienteAllows code and state to be independently versioned, deployed, and scaled

Independientemente de cómo decida escribir los microservicios, el código y, opcionalmente, el estado, debería independientemente implementar, actualizar y escalar.No matter how you choose to write your microservices, the code, and optionally the state, should independently deploy, upgrade, and scale. Este problema es uno de los más difíciles de resolver, ya que depende de la tecnología que se elija.This is one of the harder problems to solve because it comes down to your choice of technologies. Para el escalado, comprender cómo particionar tanto el código como el estado presenta dificultades.For scaling, understanding how to partition (or shard) both the code and state is challenging. Si el código y el estado usan tecnologías independientes (algo que hoy es bastante habitual), es preciso que los scripts de implementación del microservicio puedan escalar ambos.When the code and state use separate technologies, which is common today, the deployment scripts for your microservice need to be able to scale them both. También tienen relevancia la agilidad y la flexibilidad, por lo que puede actualizar algunos de los microservicios sin que sea preciso de actualizar todos a la vez.This is also about agility and flexibility, so you can upgrade some of the microservices without having to upgrade all of them at once.

Si volvemos un momento a la comparación entre el enfoque monolítico y el de microservicios, el diagrama siguiente muestra las diferencias en lo que respecta al almacenamiento del estado.Returning to the monolithic versus microservice approach for a moment, the following diagram shows the differences in the approach to storing state.

Almacenamiento de estado en los distintos estilos de aplicaciónState storage between application styles

Almacenamiento de estados de la plataforma Service Fabric

El enfoque monolítico de la izquierda tiene una base de datos única y niveles de tecnologías específicas.The monolithic approach on the left has a single database and tiers of specific technologies.

El enfoque de microservicios de la derecha tiene un gráfico de microservicios interconectados donde el estado normalmente tiene como ámbito el microservicio y se usan diversas tecnologías.The microservices approach on the right has a graph of interconnected microservices where state is typically scoped to the microservice and various technologies are used.

En un enfoque monolítico, normalmente la aplicación usa una base de datos única.In a monolithic approach, the application typically uses a single database. La ventaja es que está en una única ubicación, lo que facilita la implementación.The advantage is that it is a single location, which makes it easy to deploy. Cada componente puede tener una única tabla para almacenar su estado.Each component can have a single table to store its state. Los equipos tienen que separar el estado estrictamente, lo cual supone un reto.Teams need to strictly separate state, which is a challenge. Inevitablemente, existe la tentación de agregar una nueva columna a una tabla de clientes existente, realizar una combinación entre tablas y crear dependencias en la capa de almacenamiento.Inevitably there are temptations to add a new column to an existing customer table, do a join between tables, and create dependencies at the storage layer. Tras esto, no es posible escalar los componentes individuales.After this happens, you can't scale individual components.

En el enfoque de microservicios, cada servicio administra y almacena su propio estado.In the microservices approach, each service manages and stores its own state. Cada servicio se encarga de escalar el código y el estado juntos para satisfacer las demandas del servicio.Each service is responsible for scaling both code and state together to meet the demands of the service. La desventaja es que, cuando sea necesario crear vistas o consultas de los datos de la aplicación, tendrá que consultar diversos almacenes de estado.A downside is that when there is a need to create views, or queries, of your application’s data, you need to query across multiple state stores. Por lo general, esto se resuelve teniendo un microservicio independiente que genera una vista de una colección de microservicios.Typically, this is solved by having a separate microservice that builds a view across a collection of microservices. Si necesita realizar varias consultas espontáneas en los datos, cada microservicio debería considerar la posibilidad escribir sus datos en un servicio de almacenamiento de datos para poder realizar análisis sin conexión.If you need to perform multiple impromptu queries on the data, each microservice should consider writing its data to a data warehousing service for offline analytics.

Los microservicios tienen varias versiones y es posible que distintas versiones de un microservicio se estén ejecutando en paralelo.Microservices are versioned and it is possible that different versions of a microservice may be running side-by-side. Una versión más reciente de un microservicio puede producir un error durante una actualización y necesitar revertirse a una versión anterior.A newer version of a microservice may fail during upgrade and need to be rolled back to an earlier version. El control de versiones también es útil para la realización de pruebas de estilo A/B, en las que distintos usuarios experimentan versiones diferentes del servicio.Versioning is also helpful for A/B-style testing, where different users experience different versions of the service. Por ejemplo, es común actualizar un microservicio para que un conjunto específico de clientes prueben probar nuevas funcionalidades, antes de distribuirlas más ampliamente.For example, it is common to upgrade a microservice for a specific set of customers to test new functionality before rolling it out more widely.

Interactúan con otros microservicios por medio de protocolos e interfaces bien definidos.Interacts with other microservices over well-defined interfaces and protocols

En los últimos diez años se ha publicado amplia documentación sobre la arquitectura orientada a servicios en la que se describen los patrones de comunicación.Extensive literature about service-oriented architecture has been published over the past 10 years describing communication patterns. Por lo general, la comunicación en los servicios usa un enfoque de REST con los protocolos HTTP y TCP, y XML o JSON como formato de serialización.Generally, service communication uses a REST approach with HTTP and TCP protocols, and XML or JSON as the serialization format. Desde la perspectiva de la interfaz, esto supone adoptar el enfoque de diseño web.From an interface perspective, it is about embracing the web design approach. No obstante, no hay nada que le impida usar protocolos binarios o sus propios formatos de datos.But nothing stops you from using binary protocols or your own data formats. Tenga en cuenta que la gente puede tener problemas para usar sus microservicios si estos protocolos y formatos no están disponibles públicamente.Be prepared for people to have a harder time using your microservices if these protocols and formats are not openly available.

Tiene un nombre único (dirección URL) que se usa para resolver su ubicaciónHas a unique name (URL) used to resolve its location

El microservicio debe ser direccionable, independientemente de dónde se ejecute.Your microservice needs to be addressable wherever it is running. Si piensa en las máquinas y en cuál de ellas se ejecuta un microservicio concreto, las cosas empeoran rápidamente.If you are thinking about machines and which one is running a particular microservice, things go bad quickly.

De la misma manera que DNS resuelve una dirección URL determinada en una máquina concreta, su microservicio necesita un nombre único para que la ubicación actual sea detectable.In the same way that DNS resolves a particular URL to a particular machine, your microservice needs a unique name so that its current location is discoverable. Los microservicios necesitan nombres direccionables que sean independientes de la infraestructura en la que se ejecutan.Microservices need addressable names that are independent of the infrastructure they are running on. Esto implica que existe una interacción entre la forma en que se implementa el servicio y cómo se detecta, ya que debe haber un Registro del servicio.This implies that there is an interaction between how your service is deployed and how it is discovered, because there needs to be a service registry. Cuando se produce un error en una máquina, el servicio de Registro debe indicar a dónde se ha trasladado el servicio.When a machine fails, the registry service must tell you where the service was moved to.

Siguen siendo coherentes y estando disponibles en el caso de errores.Remains consistent and available in the presence of failures

Enfrentarse a errores inesperados es uno de los problemas más difíciles de resolver, sobre todo en un sistema distribuido.Dealing with unexpected failures is one of the hardest problems to solve, especially in a distributed system. Una gran parte del código que escribimos los desarrolladores sirve para administrar las excepciones y en las pruebas, dedicamos gran parte de nuestro tiempo a esta tarea.Much of the code that we write as developers is handling exceptions, and this is also where the most time is spent in testing. No obstante, el problema requiere algo más que escribir código para controlar los errores.The problem is more involved than writing code to handle failures. ¿Qué ocurre cuando se produce un error en la máquina en que se ejecuta el microservicio?What happens when the machine where the microservice is running fails? No solo es preciso detectar el error (un problema difícil en sí), sino que también es necesario reiniciar el microservicio.Not only do you need to detect the failure (a hard problem on its own), but you also need to restart your microservice.

Por motivos de disponibilidad, es necesario que el microservicio sea resistente a los errores y pueda reiniciarse en otra máquina.For availability reasons, a microservice needs to be resilient to failures and able to restart on another machine. Además de la resistencia del código en ejecución, no debería producirse ninguna pérdida de datos y los datos deben mantener su coherencia.In addition to the running code being resilient, there shouldn't be any data loss and the data needs to remain consistent.

La resistencia es difícil de conseguir cuando se producen errores durante la actualización de la aplicación.Resiliency is hard to achieve when failures happen during an application upgrade. El microservicio, si funciona con el sistema de implementación, no necesita recuperarse.The microservice, working with the deployment system, doesn't need to recover. Es preciso decidir si puede pasar a la versión más reciente o si es necesario revertirlo a una versión anterior para mantener la coherencia del estado.It needs to decide whether it can continue to move forward to the newer version or instead roll back to a previous version in order to maintain a consistent state. Se deben tener en cuenta cuestiones tales como si hay máquinas suficientes como para pasar a la versión más reciente y cómo recuperar las versiones anteriores del microservicio.Questions such as whether enough machines are available to keep moving forward and how to recover previous versions of the microservice need to be considered. Para esto, se requiere que el microservicio emita información de estado que permita tomar estas decisiones.This requires the microservice to emit health information to make these decisions.

Notifica el estado y diagnósticosReports health and diagnostics

Aunque pueda parecer obvio y a menudo se pase por alto, un microservicio debe informar sobre su mantenimiento y diagnóstico.It may seem obvious, and it is often overlooked, but a microservice must report its health and diagnostics. De lo contrario, se dispondrá de poca información sobre su mantenimiento desde la perspectiva de las operaciones.Otherwise, there is little insight into its health from an operations perspective. Correlacionar eventos de diagnóstico en un conjunto de servicios independientes y enfrentarse a sesgos del reloj de las máquinas para entender el orden de eventos presenta dificultades.Correlating diagnostic events across a set of independent services, and dealing with machine clock skews to make sense of the event order, is challenging. De la misma manera que se interactúa con un microservicio por medio de protocolos y formatos de datos acordados, es necesario normalizar la forma en que se registran los eventos de mantenimiento y diagnóstico que, en último término, terminarán en un almacén de eventos donde se pueden consultar y ver.In the same way that you interact with a microservice over agreed-upon protocols and data formats, you need to standardize how to log health and diagnostic events that will ultimately end up in an event store for querying and viewing. En un enfoque de microservicios, es fundamental que los diferentes equipos acuerden un único formato de registro.In a microservices approach, it's key that different teams agree on a single logging format. Debe haber un enfoque coherente para poder ver los eventos de diagnóstico en la aplicación como un todo.There needs to be a consistent approach to viewing diagnostic events in the application as a whole.

El estado es diferente de los diagnósticos.Health is different from diagnostics. El mantenimiento hace referencia a que el microservicio notifica su estado actual para que se puedan llevar a cabo las acciones adecuadas.Health is about the microservice reporting its current state to take appropriate actions. Un buen ejemplo es colaborar con los mecanismos de actualización e implementación para mantener la disponibilidad.A good example is working with upgrade and deployment mechanisms to maintain availability. Aunque un servicio puede tener un estado incorrecto debido a un bloqueo de un proceso o al reinicio de la máquina, puede seguir operativo.Although a service may be currently unhealthy due to a process crash or machine reboot, the service might still be operational. En este caso, lo menos recomendables es realizar una actualización.The last thing you need is to make this worse by performing an upgrade. El mejor enfoque es investigar primero, o bien dejar tiempo para que el microservicio se recupere.The best approach is to do an investigation first or allow time for the microservice to recover. Los eventos de mantenimiento de un microservicio permiten tomar decisiones fundamentadas y, de hecho, ayudan a crear servicios de recuperación automática.Health events from a microservice help us make informed decisions and, in effect, help create self-healing services.

Guía de diseño de Microservicios en AzureMicroservices design guidance on Azure

Visite el centro de arquitectura de Azure para obtener instrucciones de diseño en crear microservicios en AzureVisit the Azure architecture center for design guidance on building microservices on Azure

Service Fabric como plataforma de microserviciosService Fabric as a microservices platform

Azure Service Fabric surgió cuando Microsoft pasó de ofrecer productos embalados, cuyo estilo era habitualmente monolítico, a ofrecer servicios.Azure Service Fabric emerged when Microsoft transitioned from delivering boxed products, which were typically monolithic in style, to delivering services. La experiencia de crear y operar servicios grandes, como Azure SQL Database y Azure Cosmos DB, dio forma a Service Fabric.The experience of building and operating large services, such as Azure SQL Database and Azure Cosmos DB, shaped Service Fabric. La plataforma evolucionó con el tiempo a medida que la fueron adoptando cada vez más servicios.The platform evolved over time as more and more services adopted it. Service Fabric tenía que ejecutarse no solo en Azure, sino también en implementaciones independientes de Windows Server.Service Fabric had to run not only in Azure but also in standalone Windows Server deployments.

El objetivo de Service Fabric es resolver las complicaciones que conlleva crear y ejecutar un servicio y usar de forma eficiente los recursos de infraestructura para que los equipos puedan resolver problemas de negocios con un enfoque de microservicios.The aim of Service Fabric is to solve the hard problems of building and running a service and utilize infrastructure resources efficiently, so that teams can solve business problems using a microservices approach.

Service Fabric ayuda a crear aplicaciones que usan un enfoque de microservicios al ofrecer:Service Fabric helps you build applications that use a microservices approach by providing:

  • Una plataforma que proporciona servicios del sistema para implementar, actualizar, detectar y reiniciar servicios con errores, detectar servicios, enrutar mensajes, administrar el estado y supervisar el mantenimiento.A platform that provides system services to deploy, upgrade, detect, and restart failed services, discover services, route messages, manage state, and monitor health.
  • La posibilidad de implementar aplicaciones que se ejecuten en contenedores o como procesos.Ability to deploy applications either running in containers or as processes. Service Fabric es un organizador de contenedores y proceso.Service Fabric is a container and process orchestrator.
  • API de programación productivas que le ayudan a crear aplicaciones como microservicios: ASP.NET Core, Reliable Actors y Reliable Services.Productive programming APIs, to help you build applications as microservices: ASP.NET Core, Reliable Actors, and Reliable Services. Por ejemplo, es posible obtener información de estado y de diagnóstico, o se puede aprovechar la alta disponibilidad integrada.For example, you can get health and diagnostics information, or you can take advantage of built-in high availability.

Service Fabric es independiente de la forma en que cree el servicio y permite usar cualquier tecnología. Sin embargo, proporciona API de programación integradas que facilitan la compilación de microservicios.Service Fabric is agnostic on how you build your service, and you can use any technology. However, it does provide built-in programming APIs that make it easier to build microservices.

Migración de aplicaciones existentes a Service FabricMigrating existing applications to Service Fabric

Service Fabric permite reutilizar código existente, que luego puede modernizarse con nuevos microservicios.Service Fabric allows you to reuse existing code, which can then be modernized with new microservices. Hay cinco fases para la modernización de aplicaciones. Puede empezar y detenerse en cualquiera de ellas.There are five stages to application modernization, and you can start and stop at any of the stages. Estos son:These are:

  1. Empiece con una aplicación monolítica tradicional.Start with a traditional monolithic application.
  2. Levantamiento y movimiento: use contenedores o ejecutables invitados para hospedar código existente en Service Fabric.Lift and Shift - Use containers or guest executables to host existing code in Service Fabric.
  3. Modernización: se agregan nuevos microservicios con código existente en contenedores.Modernization - New microservices added alongside existing containerized code.
  4. Innovación: divida la aplicación monolítica en microservicios únicamente en función de las necesidades.Innovate - Break the monolithic into microservices purely based on need.
  5. Transformación en microservicios: transforme aplicaciones monolíticas existentes o cree aplicaciones "vírgenes".Transformed into microservices - the transformation of existing monolithic applications or building new greenfield applications.

Migración a microservicios

Es importante destacar de nuevo que se puede comenzar y detenerse en cualquiera de estas fases.It is important to emphasize again that you can start and stop at any of these stages. No nos vemos obligados a avanzar a la siguiente fase.You are not compelled to progress to the next stage. Veamos ahora ejemplos de cada una de las fases.Let's now look at examples for each of these stages.

Lift-and-shiftLift and Shift
Gran cantidad de empresas están migrando mediante lift-and-shift las aplicaciones monolíticas existentes a contenedores por dos motivos:Large numbers of companies are lifting and shifting existing monolithic applications into containers for two reasons:

  • Reducción de costos debidos a la consolidación y eliminación de hardware existente o a la ejecución de aplicaciones de mayor densidad.Cost reduction either due to consolidation and removal of existing hardware or running applications at higher density.
  • Contrato de implementación coherente entre el desarrollo y las operaciones.Consistent deployment contract between development and operations.

La reducción de costos es comprensible. Además, en Microsoft, se están usando contenedores en una gran cantidad de aplicaciones existentes con el único fin de ahorrar millones de dólares.Cost reductions are understandable, and within Microsoft, large numbers of existing applications are being containerized simply to save millions of dollars. La implementación coherente es difícil de evaluar, pero también es muy importante.Consistent deployment is harder to evaluate, but equally as important. Esto significa que los desarrolladores tienen libertad para elegir la tecnología que mejor se ajuste a sus necesidades, pero las operaciones solo aceptarán una única forma de implementar y administrar esas aplicaciones.It means that developers can still be free to choose the technology that suits them, however the operations will only accept a single way to deploy and manage these applications. Evita que las operaciones se vean afectadas por la complejidad de muchas tecnologías diferentes o que obliguen a los desarrolladores a elegir solo algunas.It alleviates the operations from having to deal with the complexity of many different technologies or forcing developers to only choose certain ones. Básicamente, cada aplicación se convierte en un contenedor de imágenes de implementación independientes.Essentially every application is containerized into self-contained deployment images.

Muchas organizaciones se detienen aquí.Many organizations stop here. Ya tienen las ventajas de los contenedores y Service Fabric ofrece la experiencia de administración completa de implementación, actualizaciones, control de versiones, reversiones, supervisión de estado, etc.They already have the benefits of containers and Service Fabric provides the complete management experience from deployment, upgrades, versioning, rollbacks, health monitoring etc.

ModernizaciónModernization
Incorporación de nuevos servicios junto a código existente en contenedores.The addition of new services alongside existing containerized code. Si va a escribir otro código, lo mejor es optar por dar pequeños pasos en la ruta a los microservicios.If you are going to write new code, it is best to decide to take small steps down the microservices path. Esto podría ser agregar un nuevo punto de conexión de la API de REST o una nueva lógica de negocios.This could be adding a new REST API endpoint, or new business logic. De ese modo, inicia el camino de creación de microservicios y practica su desarrollo e implementación.This way, you start on the journey of building new microservices and practice developing and deploying them.

InnovaciónInnovate
Un enfoque de microservicios se adapta a las cambiantes necesidades empresariales.A microservices approach accommodates changing business needs. En esta fase, lo que hay que preguntarse es si es necesario empezar a dividir la aplicación monolítica en servicios o innovar.At this stage the decision is whether you need to start splitting the monolithic app into services, or innovating. Un ejemplo clásico aquí es cuando una base de datos que se va a usar como una cola de flujo de trabajo se convierte en un cuello de botella de procesamiento.A classic example here is when a database being used as a workflow queue becomes a processing bottleneck. A medida que las solicitudes de flujo de trabajo aumentan, es necesario distribuir el trabajo a escala.As the number of workflow requests increases, the work needs to be distributed for scale. Para esa parte concreta de la aplicación que no se escala o que hay que actualizar con más frecuencia, divídala en un microservicio e innove.For that particular piece of the application that is not scaling, or that needs to be updated more frequently, split this out into a microservice and innovate.

Transformación en microserviciosTransformed into microservices
Esto es donde la aplicación es totalmente formada (o dividir en) microservicios.This is where your application is fully composed of (or split into) microservices. Para llegar aquí, ha hecho el camino de los microservicios.To reach here, you have made the microservices journey. Puede empezar aquí, pero hacerlo sin una plataforma de microservicios que le ayude resulta una importante inversión.You can start here, but to do this without a microservices platform to help you is a significant investment.

¿Son los microservicios adecuados para mi aplicación?Are microservices right for my application?

Es posible.Maybe. En nuestra experiencia, a medida que más y más equipos de Microsoft empezaron a crear para la nube por razones empresariales, muchos de ellos constataron las ventajas de adoptar el enfoque de microservicios.What we experienced was that as more and more teams in Microsoft began to build for the cloud for business reasons, many of them realized the benefits of taking a microservice-like approach. Por ejemplo, Bing lleva años desarrollando mediante microservicios.Bing, for example, has been developing using microservices for years. Para otros equipos, el enfoque de microservicios era nuevo.For other teams, the microservices approach was new. Estos equipos descubrieron que se planteaban problemas difíciles de resolver fuera de sus principales campos de especialización.Teams found that there were hard problems to solve outside of their core areas of strength. Por esta razón, Service Fabric ganó popularidad como tecnología preferida para la creación de servicios.This is why Service Fabric gained traction as the technology of choice for building services.

El objetivo de Service Fabric es reducir las complejidades que conlleva crear aplicaciones de microservicios, con el fin de que no haya que realizar muchos cambios costosos de diseño.The objective of Service Fabric is to reduce the complexities of building microservice applications so that you do not have to go through as many costly redesigns. Comience poco a poco, escale cuando sea necesario, deje de usar algunos servicios, agregue otros nuevos y evolucione con el uso del cliente.Start small, scale when needed, deprecate services, add new ones, and evolve with customer usage. También sabemos que hay muchos otros problemas que aún deben resolverse para que los microservicios sean más accesibles para la mayoría de los desarrolladores.We also know that there are many other problems yet to be solved to make microservices more approachable for most developers. Los contenedores y el modelo de programación de actor son ejemplos de pasos pequeños tomados en esa dirección y estamos seguros de que surgirán más innovaciones para facilitar esta tarea.Containers and the actor programming model are examples of small steps in that direction, and we are sure that more innovations will emerge to make this easier.

Pasos siguientesNext steps