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

Que los desarrolladores de software factorizan una aplicación en sus distintos componentes no es nada nuevo.For software developers, factoring an application into component parts is nothing new. Normalmente, se usa 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 used, 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 developers are building distributed applications for the cloud.

Estas son algunas de las cambiantes necesidades empresariales:Here are some changing business needs:

  • Un servicio que se crea y opera a escala para llegar a clientes en nuevas regiones geográficas.A service that's built and operated at scale to reach customers in new geographic regions.
  • Entrega más rápida de características y funcionalidades para poder responder a las demandas de los clientes de forma ágil.Faster delivery of features and capabilities 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, consulte 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 Azure approach to microservices, see Microservices: An application revolution powered by the cloud.

Enfoque de diseño monolítico frente a microserviciosMonolithic vs. microservices 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 don't evolve and are eventually deprecated. Esta es la pregunta: ¿cuánto sabe acerca de los requisitos actuales y cuáles serán en el futuro?Here's the question: how much do you know about your requirements today and what they'll be in the future? Por ejemplo, supongamos que está creando una aplicación de informes para un departamento de su empresa.For example, let's say you're building a reporting application for a department in your company. Está seguro de que la aplicación solo se aplica al ámbito de la compañía y que los informes no se guardarán mucho tiempo.You're sure the application applies only within the scope of your company and that the reports won't be kept long. El enfoque es diferente al adoptado, por ejemplo, para crear un servicio que entrega contenido de vídeo a decenas de millones de clientes.Your approach will be different from that of, say, building a service that delivers video content to tens of millions of customers.

A veces, terminar un servicio como una prueba de concepto es el factor determinante.Sometimes, getting something out the door as a proof of concept is the driving factor. Sabrá que la aplicación podrá modificarse más adelante.You know 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's little point in over-engineering something that never gets used. Por otra parte, cuando las empresas crean aplicaciones para la nube, lo que espera es crecimiento y uso.On the other hand, when companies build for the cloud, the expectation is growth and usage. El crecimiento y la escala son imprevisibles.Growth and scale are unpredictable. Queremos crear prototipos rápidamente y, al mismo tiempo, saber que vamos por buen camino para tenerlo todo controlado.We want to prototype quickly while also knowing that we're 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 para describir estos enfoques.The term monolithic application has emerged to describe 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 factorizaban 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 executable files and DLLs.

Un enfoque de diseño monolítico tiene varias ventajas.There are benefits to a monolithic design approach. A menudo las aplicaciones monolíticas son más fáciles 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).Monolithic applications are often simpler to design, and calls between components are faster because these calls are often over interprocess communication (IPC). Además, todo el mundo prueba un único producto, lo que tiende a ser un uso más eficaz de los recursos humanos.Also, everyone tests a single product, which tends to be a more efficient use of human resources. 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 can't scale individual components. Si necesita realizar actualizaciones o correcciones, tendrá que esperar hasta que otros usuarios finalicen sus pruebas.If you need to do fixes or upgrades, you have to wait for others to finish their testing. Es más difícil ser ágiles.It's harder to be agile.

Los microservicios solucionan estas desventajas y se adaptan mejor a los anteriores requisitos empresariales.Microservices address these downsides and more closely align with the preceding business requirements. Pero también tienen ventajas y desventajas.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 del 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 microservices approach is that teams are driven more by business scenarios than by technology. Los equipos más pequeños desarrollan un microservicio en función de un escenario del cliente y usan las tecnologías que quieren usar.Smaller teams develop a microservice based on a customer scenario and use any technologies that they want to use.

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 una plataforma de aplicaciones web concretas.In practice, a set of recommended technologies, like 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 implementaciones y controles de versiones más complejos.The downside of microservices is that you have to manage more separate entities and deal with more complex deployments and versioning. Aumentan el tráfico de red entre los microservicios, al igual que las latencias de red correspondientes.Network traffic between the microservices increases, as do the corresponding network latencies. Una gran cantidad de servicios granulares comunicándose entre sí pueden causar una pesadilla de rendimiento.Lots of chatty, granular services can cause a performance nightmare. Sin herramientas que ayuden a ver estas dependencias, es difícil "ver" todo el sistema.Without tools to help you view these dependencies, it's hard to see the whole system.

Los estándares hacen que el enfoque de microservicios funcione al especificar 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 microservices approach work by specifying how to communicate and tolerating 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's 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 applications are produced, people have discovered that this decomposition of the overall application 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 application contains domain-specific functionality and is normally divided into functional layers like 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 application 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 apropiado para todos los proyectos, pero se adapta mejor a los objetivos de negocio descritos.Designing with a microservices approach isn't appropriate for all projects, but it does align more closely with the business objectives described earlier. Comenzar con un enfoque monolítico puede tener sentido 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 make sense if you know you'll 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.

Cuando se usa un enfoque de microservicios, la aplicación se compone de muchos servicios pequeños.When you use a microservices approach, you compose your application of many small services. Estos servicios se ejecutan en contenedores implementados 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 the entire application can evolve.

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

Hay distintas definiciones de microservicios.There are different definitions of microservices. No obstante, se suelen aceptar la mayoría de estas características de microservicios:But most of these characteristics of microservices are widely accepted:

  • Encapsulan un escenario de cliente o negocio.Encapsulate a customer or business scenario. Qué problema está resolviendoWhat problem are you 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 plataforma.Written in any programming language, using 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) that are used to resolve their location.
  • Siguen siendo coherentes y estando disponibles en caso de errores.Remain consistent and available in the presence of failures.

Para resumirlo:To sum that up:

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 plataforma.Written in any programming language, using any framework

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

Después de elegir la tecnología, se puede considerar a la administración operativa o del ciclo de vida y el escalado del servicio.After you choose a technology, you need to consider 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 la forma en que escribe los microservicios, el código y, opcionalmente, el estado se deben implementar, actualizar y escalar de forma independiente.No matter how you write your microservices, the code, and optionally the state, should independently deploy, upgrade, and scale. Este problema es difícil de resolver, ya que depende de la tecnología que se elija.This problem is hard 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 the state is challenging. Si el código y el estado usan tecnologías diferentes (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 different technologies, which is common today, the deployment scripts for your microservice need to be able to scale them both. Esta separación también trata de la agilidad y flexibilidad, por lo que puede actualizar algunos de los microservicios sin que sea preciso de actualizar todos a la vez.This separation is also about agility and flexibility, so you can upgrade some of the microservices without having to upgrade all of them at once.

Volvamos por un momento a nuestra comparación de los enfoques monolíticos y de microservicios.Let's return to our comparison of the monolithic and microservices approaches for a moment. Este diagrama muestra las diferencias en los enfoques para almacenar el estado:This diagram shows the differences in the approaches to storing state:

Almacenamiento de estado para los dos enfoquesState storage for the two approaches

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 de usar una base de datos es que está en una única ubicación, lo que facilita la implementación.The advantage to using one database is that it's in 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 columna a una tabla de clientes existente, realizar una combinación entre tablas y crear dependencias en la capa de almacenamiento.Inevitably, someone will be tempted to add a 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 you need to create views, or queries, of your application’s data, you need to query across multiple state stores. Por lo general, este problema se resuelve con un microservicio independiente que genera una vista de una colección de microservicios.This problem is typically solved by a separate microservice that builds a view across a collection of microservices. Si necesita ejecutar varias consultas espontáneas en los datos, debería considerar la posibilidad de escribir los datos en cada microservicio en un servicio de almacenamiento de datos para poder realizar análisis sin conexión.If you need to run multiple impromptu queries on the data, you should consider writing each microservice’s data to a data warehousing service for offline analytics.

Los microservicios tienen versiones.Microservices are versioned. Es posible que diferentes versiones de un microservicio se ejecuten en paralelo.It's possible for different versions of a microservice to run 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 could fail during an 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 A/B, en las que distintos usuarios experimentan versiones diferentes del servicio.Versioning is also helpful for A/B 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's 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 que describe los patrones de comunicación en las arquitecturas orientadas a servicios.Over the past 10 years, extensive information has been published describing communication patterns in service-oriented architectures. 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's about taking a web design approach. No obstante, no hay nada que le impida usar protocolos binarios o sus propios formatos de datos.But nothing should stop you from using binary protocols or your own data formats. Solo tenga en cuenta que la gente puede tener problemas para usar sus microservicios si estos protocolos y formatos no están disponibles públicamente.Just be aware that people will have a harder time using your microservices if these protocols and formats aren't 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's 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're thinking about machines and which one is running a particular microservice, things can 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're 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's an interaction between how your service is deployed and how it's 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 needs to 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. Gran parte del código que escribimos como desarrolladores es para controlar las excepciones.Much of the code that we write as developers is for handling exceptions. Durante las pruebas, también dedicamos más tiempo en el control de excepciones.During testing, we also spend the most time on exception handling. El proceso requiere algo más que escribir código para controlar los errores.The process is more involved than writing code to handle failures. ¿Qué ocurre cuando se produce un error en la máquina en la que se ejecuta el microservicio?What happens when the machine on which the microservice is running fails? Es necesario detectar el error, que es un problema difícil por sí solo.You need to detect the failure, which is a hard problem on its own. Pero también necesita reiniciar el microservicio.But you also need to restart your microservice.

Por disponibilidad, es necesario que el microservicio sea resistente a los errores y pueda reiniciarse en otra máquina.For availability, a microservice needs to be resilient to failures and able to restart on another machine. Además de estos requisitos de resistencia, los datos no deben perderse y deben ser coherentes.In addition to these resiliency requirements, data shouldn't be lost, and 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 determinar 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 determine whether it can continue to move forward to the newer version or roll back to a previous version to maintain a consistent state. Debe considerar algunas cuestiones, 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.You need to consider a few questions, like whether enough machines are available to keep moving forward and how to recover previous versions of the microservice. Para tomar estas decisiones, se requiere que el microservicio emita información de estado.To make these decisions, you need the microservice to emit health information.

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 might seem obvious, and it's often overlooked, but a microservice needs to report its health and diagnostics. De lo contrario, se dispondrá de poca información sobre su mantenimiento desde la perspectiva de las operaciones.Otherwise, you have 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. Con un enfoque de microservicios, es fundamental que los diferentes equipos acuerden un único formato de registro.With a microservices approach, different teams need to 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.Though a service might be currently unhealthy because of a process crash or machine reboot, the service might still be operational. En este caso, lo menos recomendable es iniciar una actualización.The last thing you need is to make the situation worse by starting an upgrade. El mejor enfoque es investigar primero, o bien dejar tiempo para que el microservicio se recupere.The best approach is to investigate 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 para el diseño de microservicios en AzureGuidance for designing microservices on Azure

Visite el Centro de arquitectura de Azure para una guía sobre el diseño y creación de microservicios en Azure.Visit the Azure architecture center for guidance on designing and 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, que eran habitualmente monolíticos, a ofrecer servicios.Azure Service Fabric emerged when Microsoft transitioned from delivering boxed products, which were typically monolithic, 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, like Azure SQL Database and Azure Cosmos DB, shaped Service Fabric. La plataforma evolucionó con el tiempo a medida que la fueron adoptando más servicios.The platform evolved over time as 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 to use infrastructure resources efficiently, so teams can solve business problems by 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.The 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 creación de microservicios.Service Fabric is agnostic about how you build your service, and you can use any technology. But 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 y modernizarse con nuevos microservicios.Service Fabric allows you to reuse existing code and modernize it with new microservices. Hay cinco fases para la modernización de aplicaciones y puede empezar y detenerse en cualquiera de ellas.There are five stages to application modernization, and you can start and stop at any stage. Las fases son:The stages are:

  1. Empiece con una aplicación monolítica tradicional.Start with a traditional monolithic application.
  2. Migración:Migrate. use contenedores o ejecutables invitados para hospedar código existente en Service Fabric.Use containers or guest executables to host existing code in Service Fabric.
  3. Modernización:Modernize. se agregan nuevos microservicios con código existente en contenedores.Add new microservices alongside existing containerized code.
  4. Innovación:Innovate. Descomponga la aplicación monolítica en microservicios según sus necesidades.Break the monolithic application into microservices based on need.
  5. Transformación de las aplicaciones en microservicios:Transform applications into microservices. transforme las aplicaciones monolíticas existentes o cree nuevas aplicaciones.Transform existing monolithic applications or build new greenfield applications.

Migración a microservicios

Recuerde que puede iniciar y detenerse en cualquiera de estas fases.Remember, you can start and stop at any of these stages. No tiene que avanzar a la siguiente fase.You don't have to progress to the next stage.

Veamos ejemplos de cada una de las fases.Let's look at examples for each of these stages.

MigrarMigrate
Por las dos razones siguientes, muchas compañías migran las aplicaciones monolíticas existentes a contenedores:For two reasons, many companies are migrating existing monolithic applications into containers:

  • 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 due to running applications at higher density.
  • Un contrato de implementación coherente entre el desarrollo y las operaciones.A consistent deployment contract between development and operations.

Las reducciones de costos son sencillas.Cost reductions are straightforward. En Microsoft, muchas de las aplicaciones existentes se están creando en contenedores, lo que supone un ahorro de millones de dólares.At Microsoft, many existing applications are being containerized, leading to millions of dollars in savings. La implementación coherente es difícil de evaluar, pero también es muy importante.Consistent deployment is harder to evaluate but equally important. Esto significa que los desarrolladores pueden elegir las tecnologías que más les convengan, pero las operaciones solo aceptarán un único método para implementar y administrar las aplicaciones.It means that developers can choose the technologies that suit them, but operations will accept only a single method for deploying and managing the applications. Evita que las operaciones se vean afectadas por la complejidad de muchas tecnologías diferentes auxiliares o que obliguen a los desarrolladores a elegir solo algunas.It alleviates operations from having to deal with the complexity of supporting different technologies without forcing developers to choose only 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 experiencia, incluida implementación, actualizaciones, control de versiones, reversiones y supervisión de estado.They already have the benefits of containers, and Service Fabric provides the complete management experience, including deployment, upgrades, versioning, rollbacks, and health monitoring.

ModernizaciónModernize
La modernización es la incorporación de nuevos servicios junto a código existente en contenedores.Modernization is 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're going to write new code, it's best to take small steps down the microservices path. Esto podría significar la adición de un nuevo punto de conexión de la API REST o una nueva lógica de negocios.This could mean adding a new REST API endpoint or new business logic. De ese modo, se inicia el proceso de creación de microservicios y se pone en práctica su desarrollo e implementación.In this way, you start the process 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, hay que decidir si es necesario empezar a dividir la aplicación monolítica en servicios o innovar.At this stage, you need to decide whether to start splitting the monolithic application into services, or innovating. Un ejemplo clásico sería una base de datos que se usa como cola de flujo de trabajo y que se convierte en un cuello de botella de procesamiento.A classic example here is when a database that you're using 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. Tome esa parte particular de la aplicación que no se escala, o que necesita actualizarse con más frecuencia, divídala como un microservicio e innove.Take that particular piece of the application that's not scaling, or that needs to be updated more frequently, and split it out as a microservice and innovate.

Transformación de las aplicaciones en microserviciosTransform applications into microservices
En esta fase es dónde la aplicación se compone de (o divide en) microservicios.At this stage, your application is fully composed of (or split into) microservices. Para llegar a este punto, ha hecho el viaje de los microservicios.To reach this point, you've made the microservices journey. Puede empezar aquí, pero hacerlo sin una plataforma de microservicios que le ayude requiere una importante inversión.You can start here, but to do so without a microservices platform to help you requires a significant investment.

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

Es posible.Maybe. En Microsoft, a medida que más y más equipos empezaron a crear para la nube por razones empresariales, muchos de ellos constataron las ventajas de adoptar el enfoque de microservicios.At Microsoft, as more teams 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 usando microservicios.Bing, for example, has been 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 la tecnología para la creación de servicios.This is why Service Fabric gained traction as the technology 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 don't 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 actores son ejemplos de pequeños pasos en esa dirección.Containers and the actor programming model are examples of small steps in that direction. Estamos seguros de que surgirán más innovaciones para facilitar un enfoque de microservicios.We're sure more innovations will emerge to make a microservices approach easier.

Pasos siguientesNext steps