Fundamentos de calidad del softwarePillars of software quality

Una aplicación correcta en la nube se centrará en estos cinco fundamentos de calidad del software: Escalabilidad, disponibilidad, resistencia, administración y seguridad.A successful cloud application will focus on these five pillars of software quality: Scalability, availability, resiliency, management, and security.

FundamentoPillar DESCRIPCIÓNDescription
EscalabilidadScalability La capacidad de un sistema para controlar el aumento de la carga.The ability of a system to handle increased load.
DisponibilidadAvailability La proporción de tiempo que un sistema es funcional y está en funcionamiento.The proportion of time that a system is functional and working.
ResistenciaResiliency La capacidad de un sistema de recuperarse de los errores y seguir funcionando.The ability of a system to recover from failures and continue to function.
AdministraciónManagement Procesos de operaciones que mantienen un sistema ejecutándose en producción.Operations processes that keep a system running in production.
SeguridadSecurity Protección de las aplicaciones y los datos frente a amenazas.Protecting applications and data from threats.

EscalabilidadScalability

La escalabilidad es la capacidad de un sistema para controlar el aumento de la carga.Scalability is the ability of a system to handle increased load. Una aplicación tiene fundamentalmente dos maneras de escalar.There are two main ways that an application can scale. El escalado vertical implica el aumento de la capacidad de un recurso, por ejemplo mediante el uso de una máquina virtual de mayor tamaño.Vertical scaling (scaling up) means increasing the capacity of a resource, for example by using a larger VM size. El escalado horizontal consiste en agregar nuevas instancias de un recurso, como máquinas virtuales o réplicas de base de datos.Horizontal scaling (scaling out) is adding new instances of a resource, such as VMs or database replicas.

El escalado horizontal aporta ventajas considerables sobre el escalado vertical:Horizontal scaling has significant advantages over vertical scaling:

  • Auténtico escalado en la nube.True cloud scale. Las aplicaciones pueden diseñarse para ejecutarse en cientos o incluso miles de nodos, alcanzando escalados que no son posibles en un único nodo.Applications can be designed to run on hundreds or even thousands of nodes, reaching scales that are not possible on a single node.
  • El escalado horizontal es elástico.Horizontal scale is elastic. Puede agregar más instancias si aumenta la carga, o quitarlas durante períodos más tranquilos.You can add more instances if load increases, or remove them during quieter periods.
  • El escalado horizontal se puede activar automáticamente, según una programación o en respuesta a cambios en la carga.Scaling out can be triggered automatically, either on a schedule or in response to changes in load.
  • El escalado horizontal puede ser más económico que el escalado vertical.Scaling out may be cheaper than scaling up. La ejecución de varias máquinas virtuales pequeñas puede costar menos que una sola máquina virtual grande.Running several small VMs can cost less than a single large VM.
  • El escalado horizontal también puede mejorar la resistencia, ya que agrega redundancia.Horizontal scaling can also improve resiliency, by adding redundancy. Si una instancia se queda inactiva, la aplicación sigue funcionando.If an instance goes down, the application keeps running.

Una ventaja del escalado vertical es que puede llevarlo a cabo sin necesidad de efectuar cambios en la aplicación.An advantage of vertical scaling is that you can do it without making any changes to the application. Sin embargo, en algún momento alcanzará un límite en el que no podrá escalar verticalmente nada más.But at some point you'll hit a limit, where you can't scale any up any more. En ese momento, cualquier escalado habrá de ser horizontal.At that point, any further scaling must be horizontal.

El escalado horizontal debe estar diseñado en el sistema.Horizontal scale must be designed into the system. Por ejemplo, puede escalar horizontalmente las máquinas virtuales colocándolas detrás de un equilibrador de carga.For example, you can scale out VMs by placing them behind a load balancer. Sin embargo, cada máquina virtual del grupo debe ser capaz de controlar las solicitudes de cliente, por lo que la aplicación debe ser sin estado o almacenar el estado externamente (por ejemplo, en una memoria caché distribuida).But each VM in the pool must be able to handle any client request, so the application must be stateless or store state externally (say, in a distributed cache). Los servicios PaaS administrados suelen tener el escalado horizontal y el escalado automático integrados.Managed PaaS services often have horizontal scaling and autoscaling built in. La facilidad del escalado en estos servicios es una importante ventaja a la hora de usar los servicios de PaaS.The ease of scaling these services is a major advantage of using PaaS services.

Sin embargo, el mero hecho de agregar más instancias no implicará el escalado de una aplicación.Just adding more instances doesn't mean an application will scale, however. Quizá simplemente traslade el cuello de botella a alguna otra parte.It might simply push the bottleneck somewhere else. Por ejemplo, si escala un front-end web para administrar más solicitudes de cliente, podría desencadenar contenciones de bloqueo en la base de datos.For example, if you scale a web front-end to handle more client requests, that might trigger lock contentions in the database. En este caso, tendría que considerar la posibilidad de tomar medidas adicionales, como la simultaneidad optimista o la partición de datos, para habilitar el mejor rendimiento de la base de datos.You would then need to consider additional measures, such as optimistic concurrency or data partitioning, to enable more throughput to the database.

Realice siempre pruebas de carga y rendimiento para detectar estos posibles cuellos de botella.Always conduct performance and load testing to find these potential bottlenecks. Los elementos con estado de un sistema, como las bases de datos, son la causa más común de los cuellos de botella, y requieren un cuidadoso diseño para su escalado horizontal.The stateful parts of a system, such as databases, are the most common cause of bottlenecks, and require careful design to scale horizontally. La resolución de un cuello de botella puede revelar otros cuellos de botella en otros lugares.Resolving one bottleneck may reveal other bottlenecks elsewhere.

Use la lista de comprobación de escalabilidad para revisar el diseño desde un punto de vista de la escalabilidad.Use the Scalability checklist to review your design from a scalability standpoint.

Guía de escalabilidadScalability guidance

DisponibilidadAvailability

La disponibilidad es la proporción de tiempo que un sistema es funcional y está en funcionamiento.Availability is the proportion of time that the system is functional and working. Normalmente se mide como porcentaje del tiempo de actividad.It is usually measured as a percentage of uptime. Los errores de aplicación, los problemas de infraestructura y la carga del sistema pueden reducir la disponibilidad.Application errors, infrastructure problems, and system load can all reduce availability.

Una aplicación en la nube debe tener un objetivo de nivel de servicio que defina claramente la disponibilidad esperada y la manera de medir la disponibilidad.A cloud application should have a service level objective (SLO) that clearly defines the expected availability, and how the availability is measured. Al definir la disponibilidad, examine la ruta crítica.When defining availability, look at the critical path. El front-end web debería ser capaz de atender las solicitudes de cliente, pero si se produce un error en cada transacción porque no se puede conectar con la base de datos, la aplicación no estará disponible para los usuarios.The web front-end might be able to service client requests, but if every transaction fails because it can't connect to the database, the application is not available to users.

La disponibilidad a menudo se describe en términos de la cantidad de "9"; por ejemplo, "cuatro 9" significa un tiempo de actividad del 99,99 %.Availability is often described in terms of "9s" — for example, "four 9s" means 99.99% uptime. En la tabla siguiente se muestra el tiempo de inactividad acumulativo potencial para varios niveles de disponibilidad.The following table shows the potential cumulative downtime at different availability levels.

% de tiempo de actividad% Uptime Tiempo de inactividad por semanaDowntime per week Tiempo de inactividad por mesDowntime per month Tiempo de inactividad por añoDowntime per year
99%99% 1,68 horas1.68 hours 7,2 horas7.2 hours 3,65 días3.65 days
99.9%99.9% 10 minutos10 minutes 43,2 minutos43.2 minutes 8,76 horas8.76 hours
99,95 %99.95% 5 minutos5 minutes 21,6 minutos21.6 minutes 4,38 horas4.38 hours
99,99%99.99% 1 minuto1 minute 4,32 minutos4.32 minutes 52,56 minutos52.56 minutes
99,999 %99.999% 6 segundos6 seconds 26 segundos26 seconds 5,26 minutos5.26 minutes

Tenga en cuenta que un tiempo de actividad del 99 % podría traducirse en una interrupción del servicio de casi 2 horas por semana.Notice that 99% uptime could translate to an almost 2-hour service outage per week. Para muchas aplicaciones, especialmente aquellas orientadas al consumidor, no es un objetivo de nivel de servicio aceptable.For many applications, especially consumer-facing applications, that is not an acceptable SLO. Por otro lado, cinco nueves (99,999%) significa que no hay más de cinco minutos de tiempo de inactividad en un año.On the other hand, five 9s (99.999%) means no more than five minutes of downtime in a year. Resulta difícil simplemente detectar un problema con tanta rapidez, por no hablar de solucionarlo.It's challenging enough just detecting an outage that quickly, let alone resolving the issue. Para obtener una disponibilidad muy alta (99,99 % o superior), la recuperación de un error no puede depender de la intervención manual.To get very high availability (99.99% or higher), you can't rely on manual intervention to recover from failures. La aplicación debe diagnosticarse y recuperarse por sí misma, y es en ese punto en el que la resistencia se convierte en fundamental.The application must be self-diagnosing and self-healing, which is where resiliency becomes crucial.

En Azure, el Acuerdo de Nivel de Servicio (SLA) explica los compromisos de Microsoft en cuanto a tiempo de actividad y conectividad.In Azure, the Service Level Agreement (SLA) describes Microsoft's commitments for uptime and connectivity. Si el Acuerdo de Nivel de Servicio para un servicio determinado es del 99,95 %, significa que debe esperar que el servicio esté disponible un 99,95 % del tiempo.If the SLA for a particular service is 99.95%, it means you should expect the service to be available 99.95% of the time.

Las aplicaciones a menudo dependen de varios servicios.Applications often depend on multiple services. En general, la probabilidad de que cualquier servicio tenga un tiempo de inactividad es independiente.In general, the probability of either service having downtime is independent. Por ejemplo, imagine que la aplicación depende de dos servicios, cada uno con un SLA del 99,9 %.For example, suppose your application depends on two services, each with a 99.9% SLA. El SLA compuesto para ambos servicios es del 99,9 % × 99,9 % ≈ 99,8 %, o ligeramente menor que cada servicio por sí mismo.The composite SLA for both services is 99.9% × 99.9% ≈ 99.8%, or slightly less than each service by itself.

Guía de disponibilidadAvailability guidance

ResistenciaResiliency

La resistencia es la capacidad de un sistema de recuperarse de los errores y seguir funcionando.Resiliency is the ability of the system to recover from failures and continue to function. El objetivo de la resistencia es devolver la aplicación a un estado plenamente operativo después de un error.The goal of resiliency is to return the application to a fully functioning state after a failure occurs. La resistencia está estrechamente relacionada con la disponibilidad.Resiliency is closely related to availability.

En el desarrollo de aplicaciones tradicional, se ha centrado en aumentar el tiempo medio entre errores (MTBF).In traditional application development, there has been a focus on increasing the mean time between failures (MTBF). Se invertían esfuerzos en intentar impedir que se produjeran errores del sistema.Effort was spent trying to prevent the system from failing. En la informática en la nube se requiere una mentalidad distinta como consecuencia de diversos factores:In cloud computing, a different mindset is required, due to several factors:

  • Los sistemas distribuidos son complejos, y un error en un punto puede potencialmente reproducirse en todo el sistema.Distributed systems are complex, and a failure at one point can potentially cascade throughout the system.
  • Los costos de los entornos de nube se mantienen bajos gracias al uso de hardware básico, por lo que deben esperarse errores de hardware ocasionales.Costs for cloud environments are kept low through the use of commodity hardware, so occasional hardware failures must be expected.
  • Las aplicaciones a menudo dependen de servicios externos, que podrían sufrir tiempos de inactividad o limitar a los usuarios de gran volumen.Applications often depend on external services, which may become temporarily unavailable or throttle high-volume users.
  • Los usuarios actuales esperan una aplicación que esté disponible las 24 horas del día, los 7 días de la semana, sin quedarse nunca sin conexión.Today's users expect an application to be available 24/7 without ever going offline.

Todos estos factores implican que las aplicaciones en la nube deben diseñarse para esperar errores ocasionales y recuperarse de ellos.All of these factors mean that cloud applications must be designed to expect occasional failures and recover from them. Azure cuenta con muchas características de resistencia ya integradas en la plataforma.Azure has many resiliency features already built into the platform. Por ejemplo:For example:

  • Azure Storage, SQL Database y Cosmos DB proporcionan replicación de datos integrada, tanto dentro de una región como entre regiones.Azure Storage, SQL Database, and Cosmos DB all provide built-in data replication, both within a region and across regions.
  • Los discos administrados de Azure se colocan automáticamente en diferentes unidades de escalado de almacenamiento para limitar los efectos de los errores de hardware.Azure managed disks are automatically placed in different storage scale units to limit the effects of hardware failures.
  • Las máquinas virtuales en un conjunto de disponibilidad están repartidas entre varios dominios de error.VMs in an availability set are spread across several fault domains. Un dominio de error es un grupo de máquinas virtuales que comparten una fuente de alimentación común y un conmutador de red.A fault domain is a group of VMs that share a common power source and network switch. El hecho de repartir las máquinas virtuales entre dominios de error limita el impacto de errores de hardware físico, interrupciones de red o cortes de alimentación eléctrica.Spreading VMs across fault domains limits the impact of physical hardware failures, network outages, or power interruptions.

Dicho esto, aún necesita trabajar en la resistencia de su aplicación.That said, you still need to build resiliency into your application. Las estrategias de resistencia pueden aplicarse a todos los niveles de la arquitectura.Resiliency strategies can be applied at all levels of the architecture. Algunas de las mitigaciones son de naturaleza más táctica; por ejemplo, volver a intentar una llamada remota después de un error transitorio de la red.Some mitigations are more tactical in nature — for example, retrying a remote call after a transient network failure. Otras mitigaciones son más estratégicas, como la conmutación por error de toda una aplicación en una región secundaria.Other mitigations are more strategic, such as failing over the entire application to a secondary region. Las mitigaciones tácticas pueden hacer una gran diferencia.Tactical mitigations can make a big difference. Aunque es poco frecuente que toda una región experimente una interrupción, los problemas transitorios, como la congestión de la red, son más frecuentes, así que céntrese en estos primero.While it's rare for an entire region to experience a disruption, transient problems such as network congestion are more common — so target these first. También es importante contar con una supervisión y un diagnóstico adecuados para detectar los errores en el momento en que se producen, así como para encontrar las causas principales.Having the right monitoring and diagnostics is also important, both to detect failures when they happen, and to find the root causes.

Cuando se diseña una aplicación para que sea resistente, se deben comprender los requisitos de disponibilidad.When designing an application to be resilient, you must understand your availability requirements. ¿Cuánto tiempo de inactividad es aceptable?How much downtime is acceptable? Depende en parte del costo.This is partly a function of cost. ¿Cuánto le costará el tiempo de inactividad potencial a su negocio?How much will potential downtime cost your business? ¿Cuánto debe invertir para que la aplicación tenga alta disponibilidad?How much should you invest in making the application highly available?

Guía de resistenciaResiliency guidance

DevOps y administraciónManagement and DevOps

Este fundamento abarca los procesos de las operaciones que mantienen a una aplicación ejecutándose en producción.This pillar covers the operations processes that keep an application running in production.

Las implementaciones deben ser confiables y predecibles.Deployments must be reliable and predictable. Se deben automatizar para reducir la posibilidad de que ocurran errores humanos.They should be automated to reduce the chance of human error. Deben ser un proceso rápido y rutinario, de manera que no ralenticen la publicación de nuevas características o correcciones de errores.They should be a fast and routine process, so they don't slow down the release of new features or bug fixes. Igualmente importante, debe ser capaz de revertir o poner al día la aplicación rápidamente en caso de que tenga problemas.Equally important, you must be able to quickly roll back or roll forward if an update has problems.

La supervisión y el diagnóstico son fundamentales.Monitoring and diagnostics are crucial. Las aplicaciones en la nube se ejecutan en un centro de datos remoto en el que no tiene un control completo de la infraestructura ni, en algunos casos, del sistema operativo.Cloud applications run in a remote datacenter where you do not have full control of the infrastructure or, in some cases, the operating system. En una aplicación de gran tamaño, no resulta práctico volver a iniciar sesión en las máquinas virtuales para solucionar un problema o para examinar archivos de registro.In a large application, it's not practical to log into VMs to troubleshoot an issue or sift through log files. Con los servicios de PaaS, puede incluso que no exista una máquina virtual dedicada en la que iniciar sesión.With PaaS services, there may not even be a dedicated VM to log into. La supervisión y el diagnóstico proporcionan una visión general del sistema, para que sepa cuándo y dónde se producen errores.Monitoring and diagnostics give insight into the system, so that you know when and where failures occur. Todos los sistemas deben ser observables.All systems must be observable. Utilice un esquema de registro común y coherente que le permita correlacionar eventos en todos los sistemas.Use a common and consistent logging schema that lets you correlate events across systems.

El proceso de supervisión y diagnóstico consta de varias fases distintas:The monitoring and diagnostics process has several distinct phases:

  • Instrumentación.Instrumentation. Generación de los datos sin procesar, desde registros de aplicaciones, registros de servidor web, diagnósticos integrados en la plataforma de Azure, y otro orígenes.Generating the raw data, from application logs, web server logs, diagnostics built into the Azure platform, and other sources.
  • Recopilación y almacenamiento.Collection and storage. Consolidar los datos en un solo lugar.Consolidating the data into one place.
  • Análisis y diagnóstico.Analysis and diagnosis. Para solucionar problemas y ver el estado general.To troubleshoot issues and see the overall health.
  • Visualización y alertas.Visualization and alerts. Usar datos de telemetría para detectar tendencias o alertar al equipo de operaciones.Using telemetry data to spot trends or alert the operations team.

Use la lista de comprobación de DevOps para revisar el diseño desde un punto de vista de administración y de DevOps.Use the DevOps checklist to review your design from a management and DevOps standpoint.

Guía de DevOps y administraciónManagement and DevOps guidance

SeguridadSecurity

Debe pensar en la seguridad a lo largo de todo el ciclo de vida de una aplicación, desde el diseño y la implementación a la aplicación y las operaciones.You must think about security throughout the entire lifecycle of an application, from design and implementation to deployment and operations. La plataforma Azure proporciona protección contra diversas amenazas, como la intrusión de red y los ataques de DDoS.The Azure platform provides protections against a variety of threats, such as network intrusion and DDoS attacks. Sin embargo, aún tendrá que trabajar en la seguridad de la aplicación y los procesos de DevOps.But you still need to build security into your application and into your DevOps processes.

Estas son algunas áreas de seguridad generales que debe tener en cuenta.Here are some broad security areas to consider.

Administración de identidadesIdentity management

Considere el uso de Azure Active Directory (Azure AD) para autenticar y autorizar a los usuarios.Consider using Azure Active Directory (Azure AD) to authenticate and authorize users. Azure AD es un servicio de administración de identidades y acceso completamente administrado.Azure AD is a fully managed identity and access management service. Puede usarlo para crear dominios que existen exclusivamente en Azure o integrarlo con las identidades de Active Directory locales.You can use it to create domains that exist purely on Azure, or integrate with your on-premises Active Directory identities. Azure AD también se integra con Office 365, Dynamics CRM Online y muchas aplicaciones de SaaS de terceros.Azure AD also integrates with Office365, Dynamics CRM Online, and many third-party SaaS applications. En el caso de las aplicaciones orientadas al consumidor, Azure Active Directory B2C permite a los usuarios autenticarse con sus cuentas sociales existentes (como Facebook, Google o LinkedIn) o crear una nueva cuenta de usuario que se administra mediante Azure AD.For consumer-facing applications, Azure Active Directory B2C lets users authenticate with their existing social accounts (such as Facebook, Google, or LinkedIn), or create a new user account that is managed by Azure AD.

Si desea integrar un entorno de Active Directory local con una red de Azure, tiene a su disposición varios enfoques en función de los requisitos.If you want to integrate an on-premises Active Directory environment with an Azure network, several approaches are possible, depending on your requirements. Para obtener más información, consulte nuestras arquitecturas de referencia de Administración de identidades.For more information, see our Identity Management reference architectures.

Protección de su infraestructuraProtecting your infrastructure

Controle el acceso a los recursos de Azure que implemente.Control access to the Azure resources that you deploy. Cada suscripción de Azure tiene una relación de confianza con un inquilino de Azure ad.Every Azure subscription has a trust relationship with an Azure AD tenant. Use el control de acceso basado en rol (RBAC) para conceder a los usuarios de su organización los permisos correctos para los recursos de Azure.Use role-based access control (RBAC) to grant users within your organization the correct permissions to Azure resources. Conceda el acceso mediante la asignación de un rol de RBAC a usuarios o grupos en un ámbito determinado.Grant access by assigning RBAC role to users or groups at a certain scope. El ámbito puede ser una suscripción, un grupo de recursos o incluso un solo recurso.The scope can be a subscription, a resource group, or a single resource. Auditar todos los cambios en la infraestructura.Audit all changes to infrastructure.

Seguridad de las aplicacionesApplication security

En general, los procedimientos recomendados de seguridad para el desarrollo de aplicaciones todavía se aplican en la nube.In general, the security best practices for application development still apply in the cloud. Estos incluyen elementos como el uso de SSL en todas partes, la protección contra ataques CSRF y XSS, la prevención de ataques por inyección de código SQL, etc.These include things like using SSL everywhere, protecting against CSRF and XSS attacks, preventing SQL injection attacks, and so on.

Las aplicaciones en la nube suelen utilizar servicios administrados que tienen claves de acceso.Cloud applications often use managed services that have access keys. No las inserte nunca en el control de código fuente.Never check these into source control. Considere la posibilidad de almacenar los secretos de la aplicación en Azure Key Vault.Consider storing application secrets in Azure Key Vault.

Cifrado y soberanía de datosData sovereignty and encryption

Asegúrese de que los datos permanecen en la zona geopolítica correcta al utilizar la alta disponibilidad de Azure.Make sure that your data remains in the correct geopolitical zone when using Azure's highly available. El almacenamiento con replicación geográfica de Azure usa el concepto de una región emparejada en la misma región geopolítica.Azure's geo-replicated storage uses the concept of a paired region in the same geopolitical region.

Use Key Vault para proteger los secretos y las claves criptográficas.Use Key Vault to safeguard cryptographic keys and secrets. Al usar Key Vault, podrá cifrar claves y secretos mediante el uso de claves que están protegidas por los módulos de seguridad de hardware (HSM).By using Key Vault, you can encrypt keys and secrets by using keys that are protected by hardware security modules (HSMs). Muchos servicios de Azure Storage y DB admiten el cifrado de datos en reposo, como Azure Storage, Azure SQL Database, Azure SQL Data Warehousey Cosmos dB.Many Azure storage and DB services support data encryption at rest, including Azure Storage, Azure SQL Database, Azure SQL Data Warehouse, and Cosmos DB.

Recursos de seguridadSecurity resources