Reducción horizontalmente de Service FabricScaling in Service Fabric

Azure Service Fabric facilita la creación de aplicaciones escalables, al administrar los servicios, particiones y réplicas en los nodos de un clúster.Azure Service Fabric makes it easy to build scalable applications by managing the services, partitions, and replicas on the nodes of a cluster. La ejecución de muchas cargas de trabajo en el mismo hardware permite el uso máximo de recursos, pero también proporciona flexibilidad en cuanto a cómo elegir escalar las cargas de trabajo.Running many workloads on the same hardware enables maximum resource utilization, but also provides flexibility in terms of how you choose to scale your workloads. Este vídeo de Channel 9 describe cómo puede crear aplicaciones de microservicios escalables:This Channel 9 video describes how you can build scalable microservices applications:

El escalado en Service Fabric se realiza de varias maneras diferentes:Scaling in Service Fabric is accomplished several different ways:

  1. Escalado mediante la creación o eliminación de instancias de servicio sin estadoScaling by creating or removing stateless service instances
  2. Escalado mediante la creación o eliminación de nuevos servicios con nombreScaling by creating or removing new named services
  3. Escalado mediante la creación o eliminación de nuevas instancias de aplicaciones con nombreScaling by creating or removing new named application instances
  4. Escalado mediante el uso de servicios particionadosScaling by using partitioned services
  5. Escalado mediante la adición o eliminación de nodos desde el clústerScaling by adding and removing nodes from the cluster
  6. Escalado mediante el uso de métricas de Cluster Resource ManagerScaling by using Cluster Resource Manager metrics

Escalado mediante la creación o eliminación de instancias de servicio sin estadoScaling by creating or removing stateless service instances

Una de las maneras más sencillas de escalar dentro de Service Fabric funciona con los servicios sin estado.One of the simplest ways to scale within Service Fabric works with stateless services. Cuando cree un servicio sin estado, obtendrá una oportunidad para definir un InstanceCount.When you create a stateless service, you get a chance to define an InstanceCount. InstanceCount define cuántas copias en ejecución del código de dicho servicio se crean cuando se inicia el servicio.InstanceCount defines how many running copies of that service's code are created when the service starts up. Supongamos, por ejemplo, que hay 100 nodos del clúster.Let's say, for example, that there are 100 nodes in the cluster. Supongamos también que se crea un servicio con un InstanceCount de 10.Let's also say that a service is created with an InstanceCount of 10. Durante el tiempo de ejecución, las 10 copias de ejecución del código podrían estar demasiado ocupadas (o podrían no estar lo suficientemente ocupadas).During runtime, those 10 running copies of the code could all become too busy (or could be not busy enough). Una forma de escalar esa carga de trabajo es cambiar el número de instancias.One way to scale that workload is to change the number of instances. Por ejemplo, un fragmento de código de supervisión o administración puede cambiar el número de instancias existente a 50, o a 5, dependiendo de si la carga de trabajo se debe reducir horizontalmente o escalarse horizontalmente según la carga.For example, some piece of monitoring or management code can change the existing number of instances to 50, or to 5, depending on whether the workload needs to scale in or out based on the load.

C#:C#:

StatelessServiceUpdateDescription updateDescription = new StatelessServiceUpdateDescription(); 
updateDescription.InstanceCount = 50;
await fabricClient.ServiceManager.UpdateServiceAsync(new Uri("fabric:/app/service"), updateDescription);

Powershell:Powershell:

Update-ServiceFabricService -Stateless -ServiceName $serviceName -InstanceCount 50

Uso de recuento de instancias dinámicasUsing Dynamic Instance Count

Específicamente para los servicios sin estado, Service Fabric ofrece un modo automático para cambiar el recuento de instancias.Specifically for stateless services, Service Fabric offers an automatic way to change the instance count. Esto permite que el servicio se escale dinámicamente con el número de nodos que están disponibles.This allows the service to scale dynamically with the number of nodes that are available. La forma de optar por este comportamiento es establecer el recuento de instancias = -1.The way to opt into this behavior is to set the instance count = -1. InstanceCount = -1 es una instrucción para Service Fabric que indica "Ejecutar este servicio sin estado en todos los nodos".InstanceCount = -1 is an instruction to Service Fabric that says "Run this stateless service on every node." Si cambia el número de nodos, Service Fabric cambia automáticamente el recuento de instancias para que coincida, asegurándose de que el servicio se ejecuta en todos los nodos válidos.If the number of nodes changes, Service Fabric automatically changes the instance count to match, ensuring that the service is running on all valid nodes.

C#:C#:

StatelessServiceDescription serviceDescription = new StatelessServiceDescription();
//Set other service properties necessary for creation....
serviceDescription.InstanceCount = -1;
await fc.ServiceManager.CreateServiceAsync(serviceDescription);

Powershell:Powershell:

New-ServiceFabricService -ApplicationName $applicationName -ServiceName $serviceName -ServiceTypeName $serviceTypeName -Stateless -PartitionSchemeSingleton -InstanceCount "-1"

Escalado mediante la creación o eliminación de nuevos servicios con nombreScaling by creating or removing new named services

Una instancia de servicio nombrada es una instancia específica de un tipo de servicio (consulte el Ciclo de vida de aplicaciones de Service Fabric) dentro de alguna instancia de aplicación nombrada en el clúster.A named service instance is a specific instance of a service type (see Service Fabric application life cycle) within some named application instance in the cluster.

Las nuevas instancias de servicio con nombre se pueden crear (o quitar) a medida que los servicios estén más o menos ocupados.New named service instances can be created (or removed) as services become more or less busy. Esto permite que las solicitudes abarquen más instancias de servicio, lo que normalmente permite que la carga en los servicios existentes disminuya.This allows requests to be spread across more service instances, usually allowing load on existing services to decrease. Al crear servicios, Cluster Resource Manager de Service Fabric coloca los servicios en el clúster de manera distribuida.When creating services, the Service Fabric Cluster Resource Manager places the services in the cluster in a distributed fashion. Las decisiones exactas se rigen por la métricas en el clúster y otras reglas de colocación.The exact decisions are governed by the metrics in the cluster and other placement rules. Los servicios se pueden crear de varias maneras diferentes, pero los más comunes son a través de acciones administrativas como alguien que llama a New-ServiceFabricService o mediante una llamada de código CreateServiceAsync.Services can be created several different ways, but the most common are either through administrative actions like someone calling New-ServiceFabricService, or by code calling CreateServiceAsync. CreateServiceAsync puede incluso llamar desde dentro de otros servicios que se ejecutan en el clúster.CreateServiceAsync can even be called from within other services running in the cluster.

La creación de servicios dinámicamente puede usarse en todo tipo de escenarios y es un patrón común.Creating services dynamically can be used in all sorts of scenarios, and is a common pattern. Por ejemplo, considere la posibilidad de un servicio con estado que representa un flujo de trabajo determinado.For example, consider a stateful service that represents a particular workflow. Las llamadas que representan el trabajo van a ir mostrándose a este servicio y este servicio va a ejecutar los pasos necesarios para que el flujo de trabajo y el registro progresen.Calls representing work are going to show up to this service, and this service is going to execute the steps to that workflow and record progress.

¿Cómo realizaría esta escala del servicio determinado?How would you make this particular service scale? El servicio podría ser de alguna forma de tipo multiinquilino y aceptar llamadas e iniciar los pasos para distintas instancias del mismo flujo de trabajo a la vez.The service could be multi-tenant in some form, and accept calls and kick off steps for many different instances of the same workflow all at once. Sin embargo, eso puede hacer que el código sea más complejo, ya que ahora tiene que preocuparse de distintas instancias del mismo flujo de trabajo, todo en distintas fases y de diferentes clientes.However, that can make the code more complex, since now it has to worry about many different instances of the same workflow, all at different stages and from different customers. Además, administrar varios flujos de trabajo al mismo tiempo no soluciona el problema de escala.Also, handling multiple workflows at the same time doesn't solve the scale problem. Esto es porque en algún momento este servicio usará demasiados recursos como para que quepan en una máquina determinada.This is because at some point this service will consume too many resources to fit on a particular machine. En primer lugar, muchos servicios que no se crearon para este patrón también experimentan dificultades debido a algún cuello de botella inherente o a la ralentización del código.Many services not built for this pattern in the first place also experience difficulty due to some inherent bottleneck or slowdown in their code. Estos tipos de problemas provocan que el servicio no funcione bien cuando aumenta el número de flujos de trabajo simultáneos que está realizando el seguimiento.These types of issues cause the service not to work as well when the number of concurrent workflows it is tracking gets larger.

Una solución consiste en crear una instancia de este servicio para cada instancia diferente del flujo de trabajo de la que desea realizar un seguimiento. Esto es un patrón excelente y funciona si el servicio es con estado o sin estado.A solution is to create an instance of this service for every different instance of the workflow you want to track. This is a great pattern and works whether the service is stateless or stateful. Para que este patrón funcione, hay normalmente otro servicio que actúa como un "servicio de administrador de cargas de trabajo".For this pattern to work, there's usually another service that acts as a "Workload Manager Service". El trabajo de este servicio es recibir las solicitudes y enrutarlas a otros servicios.The job of this service is to receive requests and to route those requests to other services. El administrador puede crear dinámicamente una instancia del servicio de carga de trabajo cuando recibe el mensaje y, a continuación, pasar las solicitudes a esos servicios.The manager can dynamically create an instance of the workload service when it receives the message, and then pass on requests to those services. El servicio de administrador también podría recibir devoluciones de llamada cuando un servicio de flujo de trabajo determinado complete su trabajo.The manager service could also receive callbacks when a given workflow service completes its job. Si el administrador recibe estas devoluciones de llamada, podría eliminar esa instancia del servicio de flujo de trabajo o dejarla si se esperan más llamadas.When the manager receives these callbacks it could delete that instance of the workflow service, or leave it if more calls are expected.

Las versiones avanzadas de este tipo de administrador pueden incluso crear grupos de los servicios que administra.Advanced versions of this type of manager can even create pools of the services that it manages. El grupo ayuda a garantizar que, cuando llega una nueva solicitud, no tiene que esperar para que el servicio se ponga en marcha.The pool helps ensure that when a new request comes in it doesn't have to wait for the service to spin up. En su lugar, el administrador puede elegir un servicio de flujo de trabajo que no esté ocupado actualmente desde el grupo o enrutarlo de forma aleatoria.Instead, the manager can just pick a workflow service that is not currently busy from the pool, or route randomly. El mantenimiento de un grupo de servicios disponible hace que la administración de nuevas solicitudes sea más rápida, ya que es menos probable que la solicitud tenga que esperar para que un nuevo servicio se ponga en marcha.Keeping a pool of services available makes handling new requests faster, since it is less likely that the request has to wait for a new service to be spun up. La creación de nuevos servicios es rápida, pero no es libre o instantánea.Creating new services is quick, but not free or instantaneous. El grupo ayuda a minimizar la cantidad de tiempo que la solicitud tiene que esperar antes de recibir servicio.The pool helps minimize the amount of time the request has to wait before being serviced. A menudo verá este administrador y el patrón de grupo cuando los tiempos de respuesta tengan mayor importancia.You'll often see this manager and pool pattern when response times matter the most. Poner el cola la solicitud y crear el servicio en segundo plano y, a continuación, pasarlo también es un patrón de administrador popular, ya que se están creando y eliminando servicios basados en algún seguimiento de la cantidad de trabajo que el servicio tiene actualmente pendiente.Queuing the request and creating the service in the background and then passing it on is also a popular manager pattern, as is creating and deleting services based on some tracking of the amount of work that service currently has pending.

Escalado mediante la creación o eliminación de nuevas instancias de aplicaciones con nombreScaling by creating or removing new named application instances

La creación y eliminación de todas las instancias de aplicaciones es similar al patrón de creación y eliminación de servicios.Creating and deleting whole application instances is similar to the pattern of creating and deleting services. Para este patrón, hay algún servicio de administrador que toma la decisión según las solicitudes que se visualizan y la información que se recibe de otros servicios dentro del clúster.For this pattern, there's some manager service that is making the decision based on the requests that it is seeing and the information it is receiving from the other services inside the cluster.

¿Cuándo se debe crear una nueva instancia de aplicación con nombre en lugar de crear nuevas instancias de servicio con nombre en alguna aplicación ya existente?When should creating a new named application instance be used instead of creating a new named service instances in some already existing application? Hay algunos casos:There's a few cases:

  • La nueva instancia de aplicación es para un cliente cuyo código debe ejecutarse en alguna identidad determinada o una configuración de seguridad.The new application instance is for a customer whose code needs to run under some particular identity or security settings.
    • Service Fabric permite definir paquetes de código diferentes que se ejecuten bajo identidades determinadas.Service Fabric allows defining different code packages to run under particular identities. Para iniciar el mismo paquete de código con identidades diferentes, las activaciones tienen que producirse en instancias de aplicación diferentes.In order to launch the same code package under different identities, the activations need to occur in different application instances. Considere la posibilidad de un caso en el que tenga cargas de trabajo implementadas de un cliente existente.Consider a case where you have an existing customer's workloads deployed. Se pueden ejecutar bajo una identidad concreta para poder supervisar y controlar su acceso a otros recursos, como bases de datos remotas u otros sistemas.These may be running under a particular identity so you can monitor and control their access to other resources, such as remote databases or other systems. En este caso, cuando un nuevo cliente se registra, probablemente no desea activar su código en el mismo contexto (espacio de proceso).In this case, when a new customer signs up, you probably don't want to activate their code in the same context (process space). Mientras pueda, resulta más difícil para el código de servicio actuar dentro del contexto de una identidad concreta.While you could, this makes it harder for your service code to act within the context of a particular identity. Por lo general, debe tener más código de administración de identidad, aislamiento y seguridad.You typically must have more security, isolation, and identity management code. En lugar de usar diferentes instancias de servicio con nombre dentro de la misma instancia de aplicación y, por lo tanto, el mismo espacio de proceso, puede usar distintas instancias de Service Fabric Application con nombre.Instead of using different named service instances within the same application instance and hence the same process space, you can use different named Service Fabric Application instances. Esto facilita la definición de diferentes contextos de identidad.This makes it easier to define different identity contexts.
  • La nueva instancia de aplicación también actúa como un medio de configuraciónThe new application instance also serves as a means of configuration
    • De forma predeterminada, todas las instancias de servicio con nombre de un tipo de servicio determinado dentro de una instancia de aplicación se ejecutarán en el mismo proceso en un nodo determinado.By default, all of the named service instances of a particular service type within an application instance will run in the same process on a given node. Esto significa que aunque puede configurar cada instancia de servicio de forma diferente, hacerlo es complicado.What this means is that while you can configure each service instance differently, doing so is complicated. Los servicios deben tener algunos token que se usan para buscar su configuración dentro de un paquete de configuración.Services must have some token they use to look up their config within a configuration package. Normalmente es simplemente el nombre del servicio.Usually this is just the service's name. Esto funciona correctamente, pero asocia la configuración a los nombres de las instancias de servicio con nombre individuales dentro de esa instancia de aplicación.This works fine, but it couples the configuration to the names of the individual named service instances within that application instance. Esto puede ser confuso y difícil de administrar, ya que la configuración es normalmente un artefacto de tiempo de diseño con valores específicos de la instancia de aplicación.This can be confusing and hard to manage since configuration is normally a design time artifact with application instance specific values. La creación de más servicios siempre implica más actualizaciones de aplicaciones para cambiar la información dentro de los paquetes de configuración o implementar otras nuevas para que los nuevos servicios puedan buscar su información específica.Creating more services always means more application upgrades to change the information within the config packages or to deploy new ones so that the new services can look up their specific information. A menudo resulta más fácil crear una nueva instancia de aplicación con nombre.It's often easier to create a whole new named application instance. A continuación, puede usar los parámetros de aplicación para establecer la configuración necesaria para los servicios.Then you can use the application parameters to set whatever configuration is necessary for the services. De este modo, todos los servicios que se crean dentro de esa instancia de aplicación con nombre pueden heredar valores de configuración determinados.This way all of the services that are created within that named application instance can inherit particular configuration settings. Por ejemplo, en lugar de tener un único archivo de configuración con la configuración y las personalizaciones de todos los clientes, como secretos o según los límites de recursos del cliente, en su lugar tendría una instancia de aplicación diferente para cada cliente con esta configuración invalidada.For example, instead of having a single configuration file with the settings and customizations for every customer, such as secrets or per customer resource limits, you'd instead have a different application instance for each customer with these settings overridden.
  • La nueva aplicación actúa como un límite de actualizaciónThe new application serves as an upgrade boundary
    • Dentro de Service Fabric, las instancias de aplicación con nombre diferentes actúan como límites para la actualización.Within Service Fabric, different named application instances serve as boundaries for upgrade. Una actualización de una instancia de aplicación con nombre no afectará al código que está ejecutando otra instancia de aplicación con nombre.An upgrade of one named application instance will not impact the code that another named application instance is running. Las diferentes aplicaciones terminarán ejecutando versiones distintas del mismo código en los mismos nodos.The different applications will end up running different versions of the same code on the same nodes. Esto puede ser un factor cuando se necesita tomar una decisión de escalado porque puede elegir si el nuevo código debe seguir las mismas actualizaciones que otro servicio o no.This can be a factor when you need to make a scaling decision because you can choose whether the new code should follow the same upgrades as another service or not. Por ejemplo, supongamos que se recibe una llamada en el servicio de administrador que se encarga de la escala de cargas de trabajo de un cliente determinado mediante la creación y eliminación de los servicios de forma dinámica.For example, say that a call arrives at the manager service that is responsible for scaling a particular customer's workloads by creating and deleting services dynamically. Sin embargo, en este caso, la llamada es para una carga de trabajo asociada a un nuevo cliente.In this case however, the call is for a workload associated with a new customer. La mayoría de los clientes prefieren estar aislados de los demás no solo por los motivos de seguridad y configuración mencionados anteriormente, sino también porque ofrece mayor flexibilidad en cuanto a la ejecución de versiones específicas del software y a la elección de cuándo llevar a cabo la actualización.Most customers like being isolated from each other not just for the security and configuration reasons listed previously, but because it provides more flexibility in terms of running specific versions of the software and choosing when they get upgraded. También puede crear una nueva instancia de aplicación y establecer ahí el servicio simplemente para realizar más particiones de la cantidad de servicios que tocará cada actualización.You may also create a new application instance and create the service there simply to further partition the amount of your services that any one upgrade will touch. Las instancias de aplicaciones independientes proporcionan mayor granularidad al realizar las actualizaciones de aplicación y también permiten las pruebas A/B y las implementaciones Azul/Verde.Separate application instances provide greater granularity when doing application upgrades, and also enable A/B testing and Blue/Green deployments.
  • La instancia de aplicación existente está llenaThe existing application instance is full
    • En Service Fabric, la capacidad de la aplicación es un concepto que puede usar para controlar la cantidad de recursos disponibles para instancias de aplicación determinadas.In Service Fabric, application capacity is a concept that you can use to control the amount of resources available for particular application instances. Por ejemplo, puede decidir que un servicio determinado necesita tener otra instancia creada para realizar la escalación.For example, you may decide that a given service needs to have another instance created in order to scale. Sin embargo, esta instancia de aplicación está fuera de su capacidad para una métrica determinada.However, this application instance is out of capacity for a certain metric. Si a este cliente o carga de trabajo determinados se les debe seguir concediendo más recursos, podría aumentar la capacidad existente para esa aplicación o crear una nueva.If this particular customer or workload should still be granted more resources, then you could either increase the existing capacity for that application or create a new application.

Ajuste de escala en el nivel de particiónScaling at the partition level

Service Fabric es compatible con la creación de particiones.Service Fabric supports partitioning. La partición divide un servicio en varias secciones lógicas y físicas, cada una de las cuales actúa independientemente.Partitioning splits a service into several logical and physical sections, each of which operates independently. Esto resulta útil con los servicios con estado, ya que ningún otro conjunto de réplicas tiene que administrar todas las llamadas y manipular todo el estado al mismo tiempo.This is useful with stateful services, since no one set of replicas has to handle all the calls and manipulate all of the state at once. En la Información general de la creación de particiones se ofrece información sobre los tipos de esquemas de particiones que se admiten.The partitioning overview provides information on the types of partitioning schemes that are supported. Las réplicas de cada partición se reparten entre los nodos en un clúster, distribuyendo la carga de dicho servicio y garantizando que ni el servicio como un todo o cualquier partición tiene un único punto de error.The replicas of each partition are spread across the nodes in a cluster, distributing that service's load and ensuring that neither the service as a whole or any partition has a single point of failure.

Considere la posibilidad de que un servicio que usa un esquema de particiones de intervalo con una clave baja de 0, una clave alta de 99 y un recuento de 4 particiones.Consider a service that uses a ranged partitioning scheme with a low key of 0, a high key of 99, and a partition count of 4. En un clúster de 3 nodos, el servicio podría estar dispuesto con cuatro réplicas que comparten los recursos en cada nodo, como se muestra aquí.In a three-node cluster, the service might be laid out with four replicas that share the resources on each node as shown here:

Diseño de partición con tres nodos

![Partition layout with three nodes](./media/service-fabric-concepts-scalability/layout-three-nodes.png)

Si aumenta el número de nodos, Service Fabric moverá algunas de las réplicas existentes allí.If you increase the number of nodes, Service Fabric will move some of the existing replicas there. Por ejemplo, digamos que el número de nodos aumenta a cuatro y las réplicas se redistribuyen.For example, let's say the number of nodes increases to four and the replicas get redistributed. Ahora el servicio tiene tres réplicas que se ejecutan en cada nodo y cada uno de ellos pertenece a distintas particiones.Now the service now has three replicas running on each node, each belonging to different partitions. Esto permite una mejor utilización de recursos, puesto que el nuevo nodo no está inactivo.This allows better resource utilization since the new node isn't cold. Normalmente, también mejora el rendimiento, ya que cada servicio tiene más recursos a su disposición.Typically, it also improves performance as each service has more resources available to it.

Diseño de partición con cuatro nodos

![Partition layout with four nodes](./media/service-fabric-concepts-scalability/layout-four-nodes.png)

Escalado mediante el uso de Cluster Resource Manager de Service Fabric y métricasScaling by using the Service Fabric Cluster Resource Manager and metrics

Las métricas son cómo los servicios expresan su consumo de recursos a Service Fabric.Metrics are how services express their resource consumption to Service Fabric. El uso de métricas proporciona a Cluster Resource Manager una oportunidad para reorganizar y optimizar el diseño del clúster.Using metrics gives the Cluster Resource Manager an opportunity to reorganize and optimize the layout of the cluster. Por ejemplo, puede haber una gran cantidad de recursos en el clúster, pero puede que no se asignen a los servicios que están realizando el trabajo actualmente.For example, there may be plenty of resources in the cluster, but they might not be allocated to the services that are currently doing work. Usar las métricas permite que Cluster Resource Manager reorganice el clúster para asegurarse de que los servicios tienen acceso a los recursos disponibles.Using metrics allows the Cluster Resource Manager to reorganize the cluster to ensure that services have access to the available resources.

Escalado mediante la adición o eliminación de nodos desde el clústerScaling by adding and removing nodes from the cluster

Otra opción para el escalado con Service Fabric es cambiar el tamaño del clúster.Another option for scaling with Service Fabric is to change the size of the cluster. Cambiar el tamaño del clúster significa agregar o quitar nodos en uno o varios de los tipos de nodos del clúster.Changing the size of the cluster means adding or removing nodes for one or more of the node types in the cluster. Por ejemplo, considere un caso en el que todos los nodos del clúster estén activos.For example, consider a case where all of the nodes in the cluster are hot. Esto significa que se han consumido casi todos los recursos del clúster.This means that the cluster's resources are almost all consumed. En este caso, agregar más nodos al clúster es la mejor forma de escalar.In this case, adding more nodes to the cluster is the best way to scale. Una vez que los nuevos nodos se unan al clúster, Cluster Resource Manager de Service Fabric mueve servicios a ellos, lo que genera una carga total inferior en los nodos existentes.Once the new nodes join the cluster the Service Fabric Cluster Resource Manager moves services to them, resulting in less total load on the existing nodes. Para servicios sin estado con un recuento de instancias = -1, se crean automáticamente más instancias de servicio.For stateless services with instance count = -1, more service instances are automatically created. Esto permite que algunas llamadas se muevan de los nodos existentes a los nuevos.This allows some calls to move from the existing nodes to the new nodes.

Para más información, consulte el artículo sobre el escalado de clústeres.For more information, see cluster scaling.

Elección de una plataformaChoosing a platform

Debido a las diferencias de implementación entre los sistemas operativos, elegir si usar Service Fabric con Windows o Linux puede ser una parte fundamental del escalado de la aplicación.Due to implementation differences between operating systems, choosing to use Service Fabric with Windows or Linux can be a vital part of scaling your application. Una posible barrera es cómo se realiza el registro de almacenamiento provisional.One potential barrier is how staged logging is performed. Service Fabric en Windows usa un controlador de kernel para un registro individual por máquina, compartido entre réplicas de servicio con estado.Service Fabric on Windows uses a kernel driver for a one-per-machine log, shared between stateful service replicas. Este registro tiene un tamaño de unos 8 GB.This log weighs in at about 8 GB. Por su parte, Linux usa un registro de almacenamiento provisional de 256 MB para cada réplica, lo que lo hace menos idóneo para aplicaciones que desean maximizar el número de réplicas de servicio ligero que se ejecutan en un nodo determinado.Linux, on the other hand, uses a 256 MB staging log for each replica, making it less ideal for applications that want to maximize the number of lightweight service replicas running on a given node. Estas diferencias en los requisitos de almacenamiento temporal podrían ayudar a decidir cuál es la plataforma deseada para la implementación de un clúster de Service Fabric.These differences in temporary storage requirements could potentially inform the desired platform for Service Fabric cluster deployment.

ResumenPutting it all together

Tomemos todas las ideas que analizamos aquí y hablemos sobre un ejemplo.Let's take all the ideas that we've discussed here and talk through an example. Considere el servicio siguiente: intenta crear un servicio que actúe como libreta de direcciones con nombres e información de contacto.Consider the following service: you are trying to build a service that acts as an address book, holding on to names and contact information.

En principio, tiene una serie de preguntas relacionadas con la escala: ¿Cuántos usuarios tendrá?Right up front you have a bunch of questions related to scale: How many users are you going to have? ¿Cuántos contactos almacenará cada usuario?How many contacts will each user store? Tratar de saber esta información cuando está configurado el servicio por primera vez es complicado.Trying to figure this all out when you are standing up your service for the first time is difficult. Supongamos que va a utilizar un servicio estático único con un número de particiones específico.Let's say you were going to go with a single static service with a specific partition count. Las consecuencias de elegir un recuento de particiones incorrecto podrían significar que tenga que escalar problemas más adelante.The consequences of picking the wrong partition count could cause you to have scale issues later. De forma similar, incluso si elige el número correcto, es posible que no disponga de toda la información que necesita.Similarly, even if you pick the right count you might not have all the information you need. Por ejemplo, también tiene que decidir el tamaño del clúster previamente, en relación con el número de nodos y sus tamaños.For example, you also have to decide the size of the cluster up front, both in terms of the number of nodes and their sizes. Normalmente es difícil predecir la cantidad de recursos que va a consumir un servicio durante su vigencia.It's usually hard to predict how many resources a service is going to consume over its lifetime. También puede ser difícil saber de antemano el patrón de tráfico que ve realmente el servicio.It can also be hard to know ahead of time the traffic pattern that the service actually sees. Por ejemplo, puede que haya personas que lo primero que haga en la mañana sea agregar y quitar sus contactos o puede que distribuya esta tarea de forma equitativa durante el transcurso del día.For example, maybe people add and remove their contacts only first thing in the morning, or maybe it's distributed evenly over the course of the day. Según esta información, puede que necesite escalar o reducir horizontalmente.Based on this you might need to scale out and in dynamically. Quizá que puede aprender a predecir cuándo se va a necesitar realizar una escalación horizontal, pero, probablemente, en cualquier caso va a necesitar reaccionar ante el cambiante consumo de recursos del servicio.Maybe you can learn to predict when you're going to need to scale out and in, but either way you're probably going to need to react to changing resource consumption by your service. Esto puede implicar el cambio del tamaño del clúster con el fin de proporcionar más recursos cuando la reorganización del uso de los recursos existentes no sea suficiente.This can involve changing the size of the cluster in order to provide more resources when reorganizing use of existing resources isn't enough.

Pero ¿por qué debería intentar incluso elegir un esquema de una partición para todos los usuarios?But why even try to pick a single partition scheme out for all users? ¿Por qué limitarse a un servicio y a un clúster estático?Why limit yourself to one service and one static cluster? La situación real es normalmente más dinámica.The real situation is usually more dynamic.

Al realizar la compilación para la escala, considere el siguiente patrón dinámico.When building for scale, consider the following dynamic pattern. Es posible que tenga que adaptarlo a su situación:You may need to adapt it to your situation:

  1. En lugar de intentar elegir un esquema de partición para todos por adelantado, cree un "servicio de administrador".Instead of trying to pick a partitioning scheme for everyone up front, build a "manager service".
  2. El trabajo del servicio de administrador es observar la información del cliente cuando se registra en el servicio.The job of the manager service is to look at customer information when they sign up for your service. Luego, en función de esa información, el servicio de administrador crea una instancia del servicio de almacenamiento de contactos real solo para ese cliente.Then depending on that information the manager service creates an instance of your actual contact-storage service just for that customer. Si requieren una configuración específica, aislamiento o actualizaciones, también puede decidir poner en marcha una instancia de aplicación para este cliente.If they require particular configuration, isolation, or upgrades, you can also decide to spin up an Application instance for this customer.

Este patrón dinámico de creación implica muchas ventajas:This dynamic creation pattern many benefits:

  • No intenta adivinar el número de particiones correcto para todos los usuarios por adelantado ni crea un servicio único que sea infinitamente escalable por sí mismo.You're not trying to guess the correct partition count for all users up front or build a single service that is infinitely scalable all on its own.
  • Los distintos usuarios no tiene que tener el mismo número de particiones, número de réplicas, restricciones de colocación, métricas, cargas predeterminadas, nombres de servicio, configuración DNS o cualquier otra propiedad especificada en el servicio o nivel de aplicación.Different users don't have to have the same partition count, replica count, placement constraints, metrics, default loads, service names, dns settings, or any of the other properties specified at the service or application level.
  • Obtiene una segmentación de datos adicional.You gain additional data segmentation. Cada cliente tiene su propia copia del servicioEach customer has their own copy of the service
    • El servicio de cada cliente se puede configurar de forma distinta y se le puede conceder más o menos recursos, con más o menos particiones o réplicas según sea necesario en función de la escala esperada.Each customer service can be configured differently and granted more or fewer resources, with more or fewer partitions or replicas as necessary based on their expected scale.
      • Por ejemplo, digamos que el cliente ha pagado por el nivel "Oro". Podría obtener un número de particiones mayor o más réplicas, y posiblemente recursos dedicados a sus servicios a través de métricas y capacidades de aplicación.For example, say the customer paid for the "Gold" tier - they could get more replicas or greater partition count, and potentially resources dedicated to their services via metrics and application capacities.
      • O supongamos que proporcionó información que indicaba que el número de contactos que necesitaba era "pequeño". En este caso, solo recibiría unas pocas particiones o podría incluso colocarse en un grupo de servicios compartido con otros clientes.Or say they provided information indicating the number of contacts they needed was "Small" - they would get only a few partitions, or could even be put into a shared service pool with other customers.
  • No está ejecutando un grupo de instancias de servicio o réplicas mientras espera que aparezcan los clientesYou're not running a bunch of service instances or replicas while you're waiting for customers to show up
  • Si se va algún cliente, quitar su información del servicio es tan simple como que el administrador elimine el servicio o aplicación que se creó.If a customer ever leaves, then removing their information from your service is as simple as having the manager delete that service or application that it created.

Pasos siguientesNext steps

Para más información sobre los conceptos de Service Fabric, consulte los siguientes artículos:For more information on Service Fabric concepts, see the following articles: