Aquí le mostramos cómo hacer que su infraestructura de nube sea estable, segura y escalable.

Startup DevOps es difícil

Hay muchas cosas de las que preocuparse como startup. Marketing, desarrollo de productos, mantener a su equipo unido. Todo tiende a adoptar el patrón "Mínimo viable" de aumentar el mínimo para que no se bloquee ni se queme.

Como arquitecto de nube empresarial, sé de primera mano cuánto trabajo se puede hacer en el campo de DevOps. Como fundador de startups, también sé el poco tiempo que tiene que dedicar a las cosas; es más como si tuviera que dedicar tiempo a todas las cosas a la vez.

Desafortunadamente, la Infraestructura de la nube también tiende a seguir esta regla, y todas las "mejores prácticas" en el campo tienden a seguir patrones que requieren una gran cantidad de tiempo de inversión, algo que las startups definitivamente no tienen.

Con esta guía, espero darle una visión general de cómo puede ser una "infraestructura de nube mínima viable", con un enfoque en la estabilidad, la seguridad y la escalabilidad.

Estabilidad

Al observar la estabilidad de su infraestructura en la nube, hay algunos puntos clave en los que centrarse al desarrollar una infraestructura en la nube mínima viable. Restauración de una falla catastrófica, reinicio automático y asegurarse de que haya suficientes recursos disponibles. Si te enfocas en estas tres cosas, deberías estar en un lugar bastante bueno en términos de tu tiempo de actividad.

Restauración de una falla catastrófica (copias de seguridad automáticas)

Conoces el peor de los casos: bloqueaste tu servidor y tu disco. La solución mínima viable para esto es tener copias de seguridad programadas y automatizadas para evitar la pérdida de datos.

Dependiendo de su proveedor de la nube, hay algunas opciones diferentes que puede tomar. Los discos de instantáneas son generalmente la forma más simple de hacer un proceso de copia de seguridad mínimo viable, pero los métodos más avanzados (y más estables) incluyen copias de seguridad específicas de la base de datos (descarga de la base de datos) y sistemas distribuidos.

  • AWS
    Si está utilizando Amazon, recomendaría usar CloudWatch. Le permite crear trabajos programados (como instantáneas automáticas): consulte esta guía
  • GCP
    Google también le permite programar instantáneas: consulte esta guía
  • Agnóstico de la nube
    ¿No desea bloquear su proceso de respaldo a su proveedor de la nube? Sus datos más importantes serán la base de datos y cualquier carga que pueda proporcionarse. Sin embargo, para una base de datos, debe buscar escribir un script que descargue periódicamente la base de datos y envíe los datos a una ubicación segura (bucket privado s3, sistema de archivos distribuido, etc.) Sin embargo, esto será más propenso a errores que un método específico de la plataforma. , así que ten cuidado.

Asegúrese de probar su método de restauración de copia de seguridad o arriesgue lo que le sucedió a GitLab, donde fallaron los 5 métodos de copia de seguridad porque nunca probaron la restauración.

Reinicio automático del servicio en caso de reinicio del servidor

Hay dos partes para el reinicio automático. Uno, cuando su aplicación falla, ¿se inicia de nuevo? Y dos, cuando su servidor se reinicia, ¿su aplicación se inicia automáticamente?

Crontab: Crontab es una herramienta útil que le permite programar trabajos fácilmente. Quizás el enfoque más simple para iniciar automáticamente su pila es crear un trabajo crontab que se ejecute al reiniciar. Consulte esta guía sobre cómo hacerlo.

/etc/init.d: ​​la mayoría de los sistemas admiten scripts init.d. Con init.d puede definir scripts que pueden iniciarse en el arranque y también admitir comandos de parada, inicio y estado (por ejemplo, service start myscript) para darle más control sobre sus aplicaciones. Es un poco más complejo que un crontab, pero le ofrece más funciones. Consulte esta publicación para configurar un script init.d.

Si está interesado en las diferencias entre estos métodos, consulte Esta publicación de intercambio de pila.

Reinicio automático del servicio en caso de bloqueo de la aplicación.

Las aplicaciones no siempre son estables y pueden ser propensas a fallar en momentos difíciles. Una buena manera de mantener la estabilidad es tener una herramienta que pueda reiniciarse automáticamente.

  • NodeJS - Forever o PM2
  • General: consulte esta publicación sobre cómo reiniciar los procesos utilizando scripts bash

Asegúrese siempre de que haya suficientes recursos disponibles

Una de las razones más comunes para el tiempo de inactividad del servidor es que los servidores se están quedando sin recursos. He hecho que los servidores SQL mueran por quedarse sin espacio en disco y las aplicaciones de producción mueren por quedarse sin memoria. Configurar el monitoreo de los recursos es una buena manera de mitigar este riesgo.

  • AWS: CloudWatch es una buena herramienta para el monitoreo. Puede configurar alertas por correo electrónico sobre eventos específicos.
  • GCP: la supervisión de Stackdriver proporciona una funcionalidad similar y también se integra con sistemas de mensajería como Slack.
  • Cloud Agnostic: Crontab es bueno nuevamente para este tipo de tarea, pero deberá escribir un script que verifique los recursos del sistema y envíe correos electrónicos cuando alcancen su límite.

Asegúrese de documentar su método de inicio automático y las secuencias de comandos de arranque. Mantenga el código en el control de versiones o se arriesgará a problemas cuando se trata de escalar debido al código misterioso que olvidó.

Seguridad

Desafortunadamente, la seguridad se pasa por alto cuando se trata de la filosofía MVP. La gente simplemente no ve el valor ganado por la inversión de tiempo necesaria. Esta es una forma de juego peligroso, ya que una violación de seguridad podría causar una pérdida severa de datos, confianza del cliente y tiempo. Aquí hay algunas cosas básicas que puede hacer para comenzar con una mentalidad de seguridad.

SSL

Hoy en día, SSL es básicamente un requisito para una aplicación SaaS moderna con muchos usuarios que se niegan a usar aplicaciones sin soporte https. Herramientas como Let’s Encrypt hacen que obtener certificados sea fácil y gratuito.

Seguridad del servidor

Una de las cosas más importantes cuando se trata de seguridad es administrar los servidores correctamente. Aquí hay un par de consejos básicos que debes tener en cuenta.

  • Las bases de datos no deben ser accesibles a internet abierto.
  • Mantenga las aplicaciones y el sistema operativo actualizados. A menudo hay actualizaciones de seguridad que protegen su servidor de nuevas vulnerabilidades.
  • Cierre todos los puertos excepto aquellos que sean absolutamente necesarios.
  • No use nombre de usuario / contraseñas: usar claves es mucho más seguro.
  • No le dé a las personas la clave raíz cuando necesiten acceso a su servidor. Cree nuevas cuentas y pídales que le den su clave pública.

Manejo secreto

Las claves API, las credenciales, las configuraciones y todos los datos confidenciales deben administrarse. Siempre dudo cuando coloco este tipo de datos en la nube, no solo porque no sé qué puede ver el proveedor de la nube, sino también porque si obtienen mi cuenta, todos mis secretos quedarán expuestos.

  • Mantenga tantos secretos locales como sea posible.
  • No codifique secretos en su aplicación: cree archivos de configuración que pueda almacenar fuera del código de la aplicación.
  • No almacene secretos en un repositorio público de Github (tenga cuidado con la nube en general).
  • Evite el texto sin formato cuando almacene contraseñas de usuario y sus propios secretos.

Escalabilidad

"En la mayoría de los casos, cuando se trata de escalabilidad, no la necesitarás (al comenzar)".

Si tiene el tiempo, la voluntad y las habilidades (o dinero), poner un poco de esfuerzo en la escalabilidad podría brindarle beneficios futuros. De lo contrario, recomendaría ignorarlo y centrarme en los dos puntos anteriores.

Concéntrese en entregar su producto a sus primeros 5 clientes, no a sus primeros 1,000. Lo mejor que puede hacer cuando se trata de construir una infraestructura escalable es pensar en los principios de diseño mientras construye su aplicación, por lo que no será demasiado trabajo comenzar cuando finalmente sea el momento de escalar. Debería saberlo: he caído en la trampa de la sobre ingeniería muchas, muchas veces.

Contenedorización

Herramientas como Docker y Kubernetes son excelentes para escalar

Una victoria fácil cuando se trata de escalar es contener su aplicación en contenedores. Echa un vistazo a Docker para una buena guía. Aquí hay algunos consejos:

  • Permita la configuración de su aplicación a través de variables de entorno. Cosas como la información de la base de datos y el nombre de usuario / contraseña de administrador inicial serán de gran ayuda cuando se trata de construir una canalización de CI / CD y automatizar la implementación de su aplicación.
  • Mantenga la mayor cantidad de estado fuera de su contenedor como sea posible. Esto permitirá implementaciones sin estado a través de herramientas como Kubernetes.
  • Instale sus módulos como parte del proceso de construcción para reducir las dependencias y el tamaño de la imagen.

Mantenga las configuraciones de sus servidores bien documentadas

Almacene todo en el control de versiones: configuraciones, scripts y procedimientos para preparar servidores. Esto te ahorrará cuando se trata de escalar. He tenido que lidiar con aplicaciones de escalado que requieren servidores configurados de una manera muy particular, y si falta la documentación, pasarás un tiempo increíble.

Conclusión

Hay mucho trabajo involucrado en el mantenimiento y mantenimiento de la infraestructura de la nube. Las startups lo tienen más difícil porque no tienen tiempo y, a menudo, su conjunto de habilidades es escaso cuando se trata de DevOps. Lo que puedes hacer es concentrarte en lo esencial. Seguridad, estabilidad y, si tiene tiempo, escalabilidad.

ServiceBot lo ayuda a escalar su SaaS al automatizar las implementaciones (CI / CD), administrar sus suscripciones y eliminar puntos comunes de fricción entre usted y sus clientes. Echale un vistazo