Server Documentation En este documento presentaremos la infraestructura para los servidores del proyecto Biinmo. Esta infraestructura esta pensada para poder sostener un flujo de 1200 concurrencias por segundo y poder ser auto escalable de ser necesario, incluiremos un sistema de monitoreo y mantenimiento, un backend, 6 servidores de Frontend, un balanceador y un sistema de automatización para servidores.
Empezaremos por mostrar el esquema de servidores.
En el esquema se puede ver la arquitectura completa especificada, todo esta basado en Amazon Web Services y Cloudmine.
Monitoreo El monitoreo de los servidores estará basado en Zabbix, este sistema es OpenSource, y es uno de los mejores para poder monitorear servidores, tiene una gran cantidad de plugins y se implementa al 100% con los servidores montados en Amazon, este sistema estará montado en un servidor Linux (Debian) en conjunto con Ansible (sistema de automatización). El sistema podrá monitorear, una variedad de información, como por ejemplo: 1. CPU de cada uno de los servidores Frontend 2. RAM de cada uno de los servidores Frontend 3. conexiones concurrente de Nginx
4. carga y pool de PHP-FPM 5. estado de los servidores Frontend 6. estado y concurrencias en el balanceador de Amazon 7. estado del servidor Backend
Automatización El sistema de automatización estará basado en Ansible (Ansible es uno de los mejores sistemas de automatización de servidores, soporta una gran cantidad de acciones y mantenimientos). Ansible estará conectado directamente con Zabbix y ejecutara acciones de mantenimiento y de crecimiento a medida que el sistema lo necesite, ejemplo: En el caso de que el sistema tenga mas concurrencias de las que pueda abarcar, entonces Zabbix emitirá una alarma, en base a esta alarma Ansible ejecutara un script el cual se conectara con Amazon, comprar automáticamente un Frontend, lo iniciara, le instalara los requerimientos, le instalara el código, y lo dejara 100% funcional, una ves terminado este proceso, se conectara con el balanceador de Amazon y lo incluirá. El resultado de este script sera un incremento de 300 concurrencias mas para el sistema, y el sistema no se caerá, ni se pondrá lento. Todo esto pasara sin que el cliente se de cuenta, tendríamos un sistema inteligente, con planes de contingencia específicos, y con mantenimiento automático (aunque el sistema es prácticamente automático, siempre es necesaria la supervisión de estos elementos por un técnico).
Backend El backend es un servidor web en el cual se podrá manejar la aplicación tanto web como mobile, en esta estará instalado un CMS basado en Cakephp y tendrá acceso total a la información especificada en la documentación del proyecto.
Balanceador El balanceador es un servicio entregado por Amazon, el cual se encarga de balancear la carga de conexiones concurrentes entre los servidores Frontend. Este servicio abarca una gran cantidad de concurrencias pero ciempre estara limitado a la cantidad de concurrencias maxima por cada uno de los servidores Frontend.
Frontend Los servidores de Frontend son los servidores donde se alojara el código de la web, estos servidores pueden contener una carga máxima de 300 concurrencias, esto significa que puede aguantar 300 personas haciendo una llamada a el servidor en el mismo segundo. Si este numero se sobrepasa, entonces el PHP-FPM pondrá las llamadas en una lista de esperas, pero solo puede soportar no mas de 15 segundos en espera. Estos números en segundos son para condiciones óptimas.
Conclusión Con la arquitectura planteada, podremos soportar una carga de 1800 concurrencias sin problemas, tendremos planes de contingencia seguros y podremos monitorear y saber lo que pasa en el sistema completo en vivo, esto sin embargo tiene que ser monitoreado por un técnico, y a medida que el sistema va creciendo, se tienen que ir agregando mas planes de contingencia e ir desarrollando nuevas tecnologías para poder ir creciendo armónicamente tanto con las plataformas (Cloudmine, Amazon Web Services) , como con los dispositivos mobiles y web.