Guía básica para que te conviertas en el rey de las nubes, o introducción al cloud computing. 1 de ¿2?

Hoy traemos la introducción básica para hablar de cloud computing: ¡el quien es quien del reino de las nubes! Te dará las bases necesarias para tomar una decisión muy importante de cara a afrontar el desarrollo y evolución de un nuevo proyecto.

Rey nube de https://www.flickr.com/photos/kky

Hoy en día, cuando nos planteamos un nuevo proyecto, o la evolución de un proyecto existente, puede que nos parezca que estemos bajo una tormenta de tantas nubes como hay, así que intentaré ayudarte a que te pongas en situación para poder tomar una elección mejor.

Si te preguntas si se algo de nubes, te diré no sólo que soy de Cantabria (vale, chiste malo), sino que he hecho mis pinitos con unas y otras, y grandes proyectos con alguna. Que a día de hoy además de mi trabajo, hago de consultor/analista/desarrollador freelance para gente con grandes problemas que necesitan abstraer soluciones simples y que puedan ser escalables, y que siempre me han gustado los entornos distribuidos, así que en la medida de lo posible he intentado estar un poco al día (difícil de conseguir al 100%).

Público e intención

Este artículo no es para expertos en cloud: es para ti -programador- que por las circunstancias de la vida has acabado de CTO en una startup y no tienes un conocimiento suficiente como para tomar decisiones; es para ti, CEO sin conocimientos técnicos, que quieres entender un poco de lo que hablan los devs de tu equipo y que quieres analizar las implicaciones no técnicas -que las hay- de una elección de plataforma; es para ti, curioso de la tecnología, que quieres entender lo que pasa en el mundo; pero sobre todo es para ti, quien quiera que seas, que estás metiendo las manos en harina y no sabes por dónde tirar.

Por tanto, intentaré en la medida de lo posible no usar un lenguaje técnico, para que sea asequible a todo el mundo. También intentaré que no “se me vea el plumero”, pues cualquiera que haya visto mi perfil de LinkedIn, sabrá que tengo una cierta tendencia, aunque siempre intento ser objetivo y analizar los pros y los contras de todo -todo tiene su yin y su yang-.

No metas metal en casa

Con “metal” me refiero a máquinas, y con “casa” me refiero a la oficina, un almacén o un CPD si tienes -o tu casa si es tu oficina, ¡qué nos conocemos!-. A poca incertidumbre que tengas en tu camino, es muy difícil valorar cuanto poder computacional, almacenamiento, canal de comunicaciones, etc. vas a necesitar.

Pongamos un ejemplo concreto:

  • Tienes un proyecto muy básico, que se enfoca a un número de clientes muy pequeño (1.000) que te pagarán cantidades desorbitadas de dinero.
  • Para dar servicio a esos clientes (a todos si los consiguieses) sólo necesitarías tener una configuración básica: un servidor web con mucha memoria, un servidor de base de datos con mucho disco duro SSD y un servidor para procesos batch con mucha velocidad de procesador.
  • Supongamos que el gasto que suponen estas máquinas, nos darían para un año y medio de tener la misma configuración en la nube.

Partiendo de este caso concreto, plantéate las siguientes preguntas:

  • ¿Necesitas tener eso montado desde el primer cliente, o incluso antes de tener el primer cliente?
  • ¿Vas a montar lo mismo para el entorno de desarrollo?
  • ¿El servidor de procesos batch lo vas a usar continuamente o sólo un par de horas al día?
  • ¿Está todo tan claro que es seguro que no vas a tener que cambiar nada?
  • ¿Cómo te vas a asegurar de que un corte de luz en tu “casa” no deje sin servicio a tus clientes?
  • ¿Cómo te vas a asegurar de que un incendio en tu “casa” no haga que se pierda toda la información de tu negocio?
  • ¿Estás seguro de que vas a conseguir los clientes y que vivirás el tiempo suficiente para amortizar la inversión realizada?
Por seguro que parezca algo, siempre hay variables que no podemos controlar.

Así, que como decía “no metas metal en casa”, no es una buena opción prácticamente nunca, y si estás leyendo este post para orientarte, es que no tienes las cosas tan claras como para que sea una opción.

Un glosario básico

  • IaaS: (Infraestructura como servicio) En nuestro particular lenguaje, lo podríamos llamar MaaS (metal como servicio). Se trata de poder arrendar ordenadores, sistemas de almacenamiento o de comunicación en función del uso que vamos a hacer. De este modo podemos encender un ordenador durante 5 horas a la semana y pagar sólo por esas horas, o tener una base de datos de 50 MB y pagar sólo por ese espacio a pesar de que podríamos llegar a usar 50GB sin problemas ni preocupaciones -más allá de los económicos-.
  • PaaS: (Plataforma como servicio) Este es el siguiente paso de las nubes. Yo, al primero que se lo vi fue a Google, aunque a lo mejor alguno antes que él tuvo la idea, pero la aplicó mal o antes de tiempo. Básicamente, de lo que se trata es de que si el usuario final de la nube va a ser un desarrollador, que aunque tenga unos conocimientos básicos de sistemas, es muy posible que no tenga unos conocimientos suficientemente avanzados como para montar unos óptimos sistemas de balanceo, de copia de seguridad, de paso de mensajes, etc. De este modo en los PaaS, tú lo que indicas es que quieres tener este programa que has desarrollado funcionando, que es un proceso web y tendrá que aceptar llamadas desde Internet. La plataforma se encarga del resto, crea las máquinas, instala el sistema operativo, el servicio de Internet, un balanceador de carga y copias de seguridad por si las máquinas fallaran. Si ves que empiezas a tener éxito y la web empieza a ir lenta te vas a la plataforma y dónde antes le habías dicho que hubiese 2 de ese proceso, le dices que quieres 3 ó 4 (¡ó 50! da igual) y ella se encarga de replicar los procesos, de avisar al balanceador de carga, etcétera, etcétera, etcétera.
  • SaaS: (Software como servicio) esto es un poco complejo de definir, ya que hay quien llama así a cualquier aplicación web pero esto no es cierto. Incluso si nos ponemos filosóficos, podría existir SaaS que no se conectase a Internet. Básicamente es usar el mismo modelo de pago de la nube (de los IaaS y los PaaS) en el software. En muchos de estos sistemas se paga por número de usuarios o por volumen de uso. Seguro que conocéis Google Apps (Gmail, Google Drive, etc.) es una forma de SaaS: tu como usuario (o tu empresa) lo puedes usar, pero si quieres más almacenamiento del que dan gratuitamente, acoquinas (en el caso de las empresas también se paga sólo por tenerlo y por número de usuarios). También conocerás otros servicios como GitHub, o Salesforce, todos ellos son SaaS.

Para interiorizarlo todo bien pongamos un ejemplo que nos queda a todos más a mano. Imaginaros que sois los propietarios del bar Tapita, que está situado en un barrio en el que no hay ningún otro bar, y no hay estancos, así que todos los días entre 10 y 30 personas te piden tabaco. Como eres un empresario con mucha visión, echas tus cuentas para poner una máquina de tabaco, y ves que tienes las siguientes opciones:

  • Tienes pasta, así que podrías comprarte una máquina propia, pero como cambien la ley el año que viene otra vez, estás jodido. Esto sería meter el metal en casa.
  • Otra cosa que podrías hacer es alquilarle la máquina a un estanco, pagándole mes a mes no corres los mismos riesgos ante el cambio de la ley. Esto sería IaaS.
  • Ya que estás trabajando con ellos -y la estanquera es tan guapa como la Verdú y te gustaría verla más-, les comentas que no te quieres tener que preocupar del mantenimiento de la máquina, ni de llenarla de tabaco ni nada, ¡que lo hagan ellos! aunque te cobren cada vez que les llames. Esto sería PaaS.
  • El último ejemplo es el más difícil de ver, y por eso los modelos de SaaS no siempre son tan claros. Sería el caso en el que hablas con el estanquero y le dices que puedes vender cajetillas de tabaco y llegáis a un acuerdo en el que le pagarás 12 céntimos por cada cajetilla que se venda en tu bar, y que de todo se encargue él, que tu no quieres ni contar el dinero. Eso sería SaaS.

Los principales actores

Amazon Web Services, el rey del mambo

Amazon fue el primero, no se si el primero en llegar, pero sí el primero en triunfar. Amazon, que siempre se ha dedicado a la venta por Internet y principalmente es un negocio de logística, se dio cuenta de que para que sus sistemas estuvieran siempre online tenía que tener una gran infraestructura, pero esa gran infraestructura quedaba infrautilizada, ya que la mayor parte del tiempo no tenían una carga total, pero tenían que estar preparados para tenerla. Vamos, como aquel que tiene un prao y no tiene suficientes vacas para que coman el verde.

Amazon comenzó ofreciendo básicamente infraestructura. Tu contratabas máquinas, almacenamiento,… esas cosas, y luego te preocupabas de instalar sistemas operativos, de vincular el almacenamiento para que las máquinas lo pudiesen usar, etc. Es algo muy versátil porque te deja hacer todo lo que quieras, pero es un poco “coñazo”, ya que tienes que tener muchos conocimientos y no te deja centrarte en lo realmente importante.

“Recientemente” han pasado a ofrecer servicios de PaaS, completando su oferta, entiendo que al ver el mercado que estaban ganando sus competidores más directos que empezaron por el PaaS.

En las consideraciones no técnicas, hay que tener en cuenta que Amazon te ofrece el uso de algunos de sus recursos de manera gratuita e incluso tiene un programa para start-ups llamado Activate, en el que ofrecen hasta 15.000 euros. Suena muy suculento, pero viendo las cifras (luego entenderéis) queda patente que Amazon está muy cómodo en su posición de “rey del mambo”, de dominador del mercado y tal vez su competencia (que pisa fuerte) acabe arrollándolo. Difícil, pero posible.

Azure, mi niña bonita

He de confesarlo: Azure me enamoró según apareció.

Yo era un amante de Linux, he incluso tengo algún logro que hace que se me hinche el pecho cuando lo comento (por eso casi nunca lo hago), pero mi carrera profesional calló en las manos de Microsoft y no me disgustó nada lo que encontré. Se que pueden resultar palabras polémicas -y casi me cuestan la expulsión del campus de Google en Palo Alto, jeje- pero:

Microsoft cuida a los desarrolladores

les da herramientas inmejorables, les marca caminos fáciles de seguir, y hace que la curva de aprendizaje de pasar de un sitio a otro sea mínima.

Teniendo esta cariño en mente, al llegar Azure, y teniendo en cuenta que siempre me han encantado los entornos distribuidos, la computación paralela, etc. ¡me enamoré! (de hecho, como amor verdadero, me tuvo el primer mes sin dormir por las noches, lo que me vino muy bien para sacarme la certificación en tiempo record xD).

Azure empezó como un PaaS, no tenías que preocuparte por máquinas, ni sistemas operativos, ni conexiones de red, ni bus de datos ¡ni nada! Solo programabas algo nuevo y te centrabas en hacer un buen producto. Sí que es cierto, que si no quieres que se te disparen los gastos, si el producto triunfa tendrás que optimizar el uso de los recursos, pero deja que eso sea un problema del tú del futuro.

Posteriormente introdujeron cosas de IaaS, y ahora tienen un ecosistema bastante completo, con el que puedes hacer todo lo que se te ocurra.

En cuanto a las cosas no técnicas a plantearse, Microsoft ofrece 150 euritos para que pruebes, pero para start-ups y empresas no tan start-up tiene el programa Bizspark en el que te dan 5 cuentas MSDN (Microsoft Developer Network) con 115€ al mes de gasto en Azure (cada una), además de otros beneficios como licencias de todo el software de Microsoft para que te lo puedas instalar, hacer pruebas, o lo que veas. Además es el primer paso para introducir tu empresa en el ecosistema Microsoft, que tiene en mente posteriores pasos como el programa Bizspark Plus con el que te dan durante un primer año $60.000 y el segundo $40.000 (edito: esto ya no es así, el segundo año ya no existe) de crédito en Azure. Luego hay más cosas a las que yo no he llegado, pero si eres emprendedor seguro que te suena bien el nombre de “Microsoft Ventures”. Yo te puedo contar muchas cosas de Azure, pero si quieres información de primera mano, deberías de hablar con Sonia Marzo, que es la persona de Microsoft que se encarga de cuidar a las start-ups.

Google Cloud Platform, el Tesla de las nubes

Que conste en acta que me gusta mucho Google, en general me encantan sus productos, y creo que tiene unas de las mentes más brillantes del mundo ahí dentro, sin embargo no todo lo hace bien.

Google es un innovador tremendo (como Tesla) que resulta muchas veces un adelantado y un incomprendido (como Tesla), ya que a veces se le olvida que hay que comunicar y vender.

Cuando Amazon empezó con su infraestructura sacó un PaaS llamado Google App Engine. En él (si no recuerdo mal) inicialmente sólo podías programar en Python (yo al menos tengo recuerdo de haber programado algún servicio en Python ¿o era en Ruby?) y posteriormente en Java, y la documentación… pues como pasa a veces con cosas de Google, era escasa y mala.

Google ha reformado su oferta y la verdad que ofrece unos productos flipantes (si no habéis probado BigQuery ya estáis tardando), ahora bien: creo que les falta algo para llegar a apoderarse del mercado, ya que no siempre teniendo un gran producto se triunfa.

En Google lo del SaaS ya lo tenían muy interiorizado desde hace tiempo, y no sólo puedes usar varias de sus APIs de manera gratuita millones de veces al día (como la de Maps, o la de Drive), sino que además te ofrecen $300 para que pruebes, y si hablas con Andrés (que es el homólogo de Sonia en Google), estoy seguro de que podrá darte más.

Google tiene en marcha el programa Startup Launch, en el que entre otras cosas tienes acceso a Cloud Patform for Startups en el que te dan $100.000 para que te gastes en su nube en un año. Como veis, Google también está apostando muy fuerte por incorporar empresas a su ecosistema, que también es muy interesante.


El post iba a continuar, pensaba hablaros de los segundones (ya que alguno tal vez no lo sea tanto), iba a hablaros también de otras herramientas relacionadas (con las que tal vez no tengáis que elegir), pero eso casi mejor lo dejamos para la siguiente semana, que no quiero que os agotéis y hay mucha información que interiorizar.

Como nota al pie, os diré que tanto Google como Microsoft tienen programas para estudiantes y para desarrolladores en general, sin que sean una startup, por lo que si tenéis interés investigad un poco que seguro que algo encontráis. It’s free!