¿Cuáles son los componentes esenciales necesarios para permitir que una aplicación .NET se adapte a millones de usuarios?

Además de seguir los patrones correctos y usar los componentes / abstracciones apropiados dentro de su aplicación, necesita tener la infraestructura adecuada para que su aplicación se adapte a millones de usuarios.

Solicitud

Use las palabras clave async-wait hasta el final de la pila. Obtiene todas las ventajas de la programación asincrónica con una fracción del esfuerzo, y su aplicación escalará mejor. Hoy en día, la mayoría de las abstracciones que realizan operaciones de E / S con uso intensivo de recursos incluyen métodos asincrónicos (por ejemplo, Stream, FileStream y MemoryStream).

Use TPL (Biblioteca de tareas paralelas ) para ejecutar trabajo asincrónico en lugar de crear hilos o usar el grupo de hilos directamente. La Biblioteca paralela de tareas incluye muchas características que permiten que la aplicación se escale mejor. Es compatible con el grupo local de subprocesos de trabajo (para reducir las contiendas en la cola global) con capacidades de robo de trabajo e incluye soporte para el ajuste de niveles de concurrencia (configuración del número de tareas que se pueden ejecutar en paralelo) que le permiten optimizar el rendimiento.

Trate de evitar el uso de cerraduras. Asegurándose de que solo los datos inmutables (que son seguros para subprocesos) se compartan entre los subprocesos, o utilizando sincronización sin bloqueo y primitivas de coordinación (por ejemplo, ConcurrentDictionary) cuando sea posible.

Utilice el almacenamiento NoSQL (docdb, mongodb, etc.) cuando sea posible, ya que simplificará mucho la escala. Use SQL (MySQL, MS-SQL) solo si su aplicación requiere un modelo de consistencia más fuerte o la capacidad de realizar uniones ad-hoc en las tablas.

Infraestructura

Por lo general, desearía crear un front-end ASP.NET MVC sin estado con un buen equilibrador de carga frente a él. Si está utilizando Microsoft Azure (y pronto Microsoft Azure Stack para locales) obtendrá un equilibrio de carga automático dentro del centro de datos, y puede usar Azure Traffic Manager o Akamai para cargar solicitudes de equilibrio en centros de datos (con muy poco esfuerzo) .

Si está creando un servicio con estado (o una combinación de estado y sin estado), puede usar Azure Service Fabric, que le permitirá implementar y administrar cientos o miles de aplicaciones .NET (incluido el sitio oficial de Microsoft ASP.NET) en un clúster de máquinas. Puede ampliar o reducir su clúster fácilmente, sabiendo que las aplicaciones se escalan de acuerdo con los recursos disponibles.

Deberían incluir mejor, pero no están limitados a:

  • Diseño de software de múltiples capas y poco acoplado,
  • Un buen enfoque de equilibrio de carga,
  • Uso de subdominios sin cookies y / o CDN,
  • Buena sesión de gestión,
  • Capa de almacenamiento en caché robusta,
  • Abstracciones
  • La base de datos asíncrona escribe,
  • Registro continuo y análisis,
  • Una comprensión fundamental de “Menos es más”
  • Manejo de excepciones,
  • Recuperación de desastres,
  • Ajax cuando sea necesario.

Lo mismo se aplica a otros idiomas: uso juicioso de bloqueos, evitar el estado mutable compartido, elecciones apropiadas al seleccionar estructuras de datos y algoritmos, gestión de E / S, procesamiento de memoria en fragmentos secuenciales, etc.