¿Debo usar Heroku o AWS?

¿Y qué hay de alojar sus propias máquinas?

Todos los que ejecutan proyectos web, sin importar si se trata de una API pura o una aplicación web completa, llegarán al punto de tener que alojar su servicio. Después de (cuidadosamente) seleccionar su pila de software (Ruby on Rails vs. Node.js vs. Django vs. etc.) necesita hacer que su aplicación bellamente diseñada esté disponible para el mundo. Hay múltiples opciones disponibles hoy, y aunque esta descripción general no está completa, espero que te dé una primera idea sobre algunas de las opciones.

Proporcionaré una breve descripción general de Heroku , que ofrece Plataforma como servicio, AWS de Amazon, que ofrece infraestructura como servicio y aloja sus propias máquinas. Esta lista no está completa, ni representa una recomendación específica de una sobre la otra, considérela como una opinión personal basada en mi propia experiencia.

IaaS vs. PaaS

Antes de que nadie salte diciendo, que esto es comparar manzanas con naranjas, sí, tienes razón. La infraestructura como servicio, IaaS para abreviar, es un tipo de computación en la nube, donde el proveedor ( AWS en este caso) ofrece recursos informáticos (virtualizados) a través de Internet. Piense en ello como alquilar una máquina en algún lugar, sin ocuparse de los cables, la electricidad, el hardware, etc.

La plataforma como servicio, PaaS proporcionada por ejemplo por heroku, también maneja las operaciones de infraestructura por usted. Por lo tanto, no necesita preocuparse por los diferentes componentes para construir su infraestructura (equilibradores de carga, máquinas, etc.), sino que en general puede implementar toda su aplicación con un simple empujón git.

Amazon AWS contra Heroku

Entonces, si está dispuesto a subcontratar parte de la infraestructura de su servidor a otra empresa, siga leyendo. Si no, salte hasta el final, para verificar mis recomendaciones si ejecuta sus propios servidores.

AWS

Como se mencionó anteriormente, AWS requiere que se encargue de configurar su (s) equilibrador (es) de carga, instalar la pila de software correcta en sus instancias EC2, configurar sus bases de datos, etc. También debe implementar y configurar su proceso de implementación, por ejemplo, usando algo como capistrano .

Para mantener el software en sus instancias, le recomiendo que no instale el software manualmente en sus instancias, lo que puede llevar a configuraciones diferentes en diferentes máquinas, etc. Mi recomendación es usar una cadena de herramientas de aprovisionamiento adecuada, como Puppet , Chef o Urknall de el gran equipo de dynport en Hamburgo. Urknall es una herramienta de aprovisionamiento "Opinionated" basada en Go para desarrolladores inteligentes. Además (y recomendado por los arquitectos en la nube de AWS), debe considerar seriamente AWS Cloudformation . Cloudformation le permite escribir plantillas para describir su infraestructura en AWS. Por lo tanto, con Cloudformation puede proporcionar una documentación adecuada de su infraestrcutura en el código, y asegurarse de que puede abrirla con exactamente la misma configuración que inicialmente.

El costo de ejecutar AWS es menor que en heroku, ya que 'solo' está pagando por la infraestructura. Dependiendo del tipo de instancia, los precios comienzan desde $ 0.014 por hora para una instancia de t2.micro o $ 0.056 por hora para la instancia t2.medium preparada para producción.

Heroku

Heroku le quita todo el dolor de instalar software, mantenerlo, monitorear el software para las actualizaciones requeridas, configurar sus despliegues, etc. ¿Suena como magia? Se siente un poco como cuando lo usas por primera vez. No es de extrañar que heroku se sugiera en muchos tutoriales. También lo recomiendo en mis conferencias sobre el desarrollo de aplicaciones web. Simplemente funciona y le permite obtener rápidamente su aplicación web en línea para que el mundo la vea y juegue con ella. Y también ofrecen un nivel gratuito, por lo que es genial probar tu aplicación.

¿Necesita más rendimiento? ¿Necesita una base de datos Postgres más grande? ¿Quieres agregar Redis a tu pila? La mayoría del software que requiere la configuración de una nueva instancia, aprovisionamiento, configuración, etc. en AWS se puede agregar en heroku con un clic o mediante la línea de comando. Ampliar su rendimiento es solo cuestión de agregar más de los denominados dynos.

¿Entonces por qué no todos usan heroku? Como siempre, hay varias razones. Uno es el costo. A medida que obtiene toda la plataforma y el software como un servicio, también paga por eso. Por lo tanto, debe calcular el costo adicional en caso de que su infraestructura crezca y compararlo con el costo de configurar su infraestructura AWS.

Además, algunas personas pueden sentirse incómodas al dar su código a heroku y compartirlo con otros en la misma instancia (aislado con el aislamiento de dínamo de heroku).

Ejecutando el tuyo?

No todas las aplicaciones son adecuadas para ejecutarse en un proveedor de la nube. A veces puede haber preocupaciones legales o requisitos que lo obliguen a ejecutar sus propios centros de datos, alojar sus propios servidores, etc. También puede parecer más económico a primera vista, pero debe considerar el esfuerzo adicional para la administración de las máquinas. ¿Ese disco duro de 2 años deja de funcionar un domingo por la mañana? Usted es responsable de poner en funcionamiento el sistema y, con suerte, puede encontrar un disco de reemplazo que luego puede integrar en el RAID, etc. Con AWS o heroku, estas cosas están completamente ocultas y puede disfrutar su desayuno con su familia en ese el mismo domingo por la mañana.

¿Y qué?

Usa heroku:

  • para pequeños proyectos personales que quieras mostrar al mundo
  • como profesional independiente para mostrar su cartera como aplicaciones de trabajo (la mayoría de las veces el plan de tiro libre es suficiente)
  • si es una agencia, debe enfocarse en entregar una aplicación (web), y prometerle al cliente que se hará cargo de las operaciones y que no contará con un especialista a bordo.
  • si necesita comenzar muy rápido y no quiere tener la sobrecarga de administrar los sistemas y no necesita la total libertad para hacerlo
  • si eres un estudiante / aprendes un nuevo marco y solo quieres jugar

Use AWS:

  • si usted es una agencia y puede darse el lujo de tener un experto en devops
  • para carga de producción con SLA
  • si necesita control adicional sobre su infraestructura, como versiones de software, parches específicos, etc.
  • si puedes permitirte pasar un tiempo en devops

Ambos, Amazon AWS y Heroku, han firmado el acuerdo Safe Harbor entre Estados Unidos y la UE sobre privacidad de datos. Aquí encontrará la declaración de privacidad de Amazon y aquí está la declaración de privacidad de Heroku .

Use servidores alojados o su propia infraestructura:

  • si puede permitirse una buena cantidad de tiempo en devops y administración
  • si está legalmente obligado a hacerlo
  • si necesita obtener el último rendimiento del hardware
  • si quieres sentarte en una sala de servidores, rasgarte el pelo un domingo por la mañana

Nota: esta publicación se editó el 3 de febrero de 2015 para reflejar los comentarios de los lectores Dan Peterson y Christian Weyer . ¡Gracias por tu contribución!

Otras lecturas:

https://stackoverflow.com/questions/9802259/why-do-people-use-heroku-when-aws-is-present-whats-distinguishing-about-heroku