¿Qué consideraciones estratégicas de negocio se deben tener en cuenta a la hora de crear una arquitectura de alta concurrencia?
Esto depende mucho del tipo del negocio y del tipo de la aplicación. Sin embargo, en la gran mayoría de los casos, los más recomendable es comenzar con un monolito. Aunque parezca una mala idea, en realidad no tiene sentido comenzar a separar nuestra aplicación en microservicios desde el principio. Una vez creado el monolito, si el equipo crece y la empresa va triunfando, es aquí el momento ideal para comenzar a separar las funciones.
En el monolito se pueden utilizar tecnologías para alta concurrencia (CDNs, contenedores, orquestadores, etc.), en donde los CDNs nos pueden ayudar a cachear elementos estáticos y en la parte de seguridad; también se puede utilizar caché de diferentes formas (para uso de sesiones, para autenticación, etc.), y si se quiere utilizar alguna función serverless, se puede implementar para realizar tareas asíncronas.
Supongamos que empezamos un negocio. Lo primero, sería crear un monolito que sería el centro de nuestra aplicación. Adelante de este monolito, ubicaríamos un CDN que se encargaría de la seguridad, del cacheo de archivos estáticos y de la terminación SSL. El CDN enviaría el tráfico a nuestro proxy que tendrá la primera capa de nuestra aplicación; este proxy se va a encargar de la autenticación; las sesiones y todos esos valores van a estar almacenados en nuestro caché (podríamos utilizar Redis para este punto). Finalmente, nuestro monolito se va a conectar a una base de datos. Luego podríamos agregar funciones serverless para funciones asíncronas como procesamiento de videos, por ejemplo; de esta forma, la función sólo estará corriendo cuando tenga trabajo por hacer, y nos ahorraríamos dinero al no tener todo el tiempo corriendo un servicio que no siempre estamos utilizando.
Lo más recomendable a la hora de crear un monolito, es utilizar contenedores y orquestarlo con alguna tecnología.