<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">

	<channel>
		<title>Magazine - amazon-ec2</title>
		<link>http://www.genbetadev.com</link>
		<description>
Información sobre el sector de los desarrolladores, el desarrollo de aplicaciones, para móviles, desarrollo web, bases de datos, frameworks y lenguajes de programación		</description>
		<pubDate>2013-05-24 18:21:26</pubDate>

		<generator>http://www.genbetadev.com</generator>
                    <item>
      <title><![CDATA[La tecnología que hay detrás de instagram]]></title>
      <link>http://www.genbetadev.com/programacion-en-la-nube/la-tecnologia-que-hay-detras-de-instagram</link>
      <guid>http://www.genbetadev.com/programacion-en-la-nube/la-tecnologia-que-hay-detras-de-instagram</guid>
      <pubDate>Mon, 12 Dec 2011 21:38:40 +0000</pubDate>

      <author>Txema Rodríguez</author>
      <description><![CDATA[
      <p><img id="image78252" src="http://img.genbetadev.com/2011/12/instagram-icono.jpg" class="centro_sinmarco" alt="Instagram api" /></p>

	<p>Lo bueno de que las empresas tecnológicas tengan un blog técnico es que nos cuentan lo que hay detrás de sus productos. Es decir, cómo desarrollan, la infraestructura y cómo tienen todo montado. Un valioso conocimiento compartido que no todo el mundo está dispuesto a compartir.</p>

	<p>En este caso, <strong>Instagram</strong>, que por si alguien no la conoce es la startup que ha revolucionado la forma de compartir fotos por medio de una aplicación para el iPhone, cuenta en su blog la tecnología que hay detrás. Os puedo asegurar que es muy interesante y que más de alguna que otra empresa debería aprender como optimizar recursos.</p>

	<p>En <strong>Instagram</strong> dicen que tienen <strong>un pequeño equipo de ingenieros</strong> pero que han sabido aprovechar al máximo cada recurso para llegar a escalar su infraestructura a más de <strong>14 millones de usuarios en apenas un año</strong>.</p>

	<p><!--more--></p>

	<p>Sus <strong>reglas básicas son</strong>:<br />

<ul>
	<li>Mantenerse simples<br />

</li>
	<li>No reinventar la rueda<br />

</li>
	<li>Usar tecnologías ya probadas siempre que eso sea posible<br />

</li></ul></p>

	<p></p>

<h2>Alojamiento</h2>

	<p>Instagram usa <strong>Ubuntu Linux 11.04</strong> en sus instancias en <strong>Amazon EC2</strong>, las cuales manejan según las necesidades de demanda. De momento, no se plantean utilizar servidores en sus propias instalaciones aunque no lo descartan si el crecimiento se mantiene constante.</p>

<h2>Servidores de aplicaciones</h2>

	<p>Usan <a href="https://www.djangoproject.com/">Django</a> en <em>Amazon High-<span class="caps">CPU</span> Extra Large</em> pasando de tan sólo unas maquinas a alcanzar ya más de 25. Aunque ese no es ningún problema ya que son capaces de escalar horizontalmente al poder trabajar independientemente unas de otras. </p>

	<p>Usan como servidor <span class="caps">WSGI</span> a <a href="http://gunicorn.org/">Gunicorn</a>, en lugar de <a href="http://code.google.com/p/modwsgi/">mod_wsgi</a> y <a href="http://httpd.apache.org/">Apache</a>, al ser <strong>Gunicorn</strong> más fácil de configurar, y menos intensivo con la <span class="caps">CPU</span>. Y para la ejecución de comandos en varias instancias en paralelo se usan <a href="http://fabric.readthedocs.org/en/1.3.3/index.html">Fabric</a> que es capaz de desplegar en cuestión de segundos cual ejecución.</p>

<h2>Almacenamiento de datos</h2>

	<p>Uno de los pilares de Instagram son los datos de las fotografias y los usuarios. La base de datos que se usa es <a href="http://www.postgresql.org/">PostgreSQL</a>. Afirman que tiene 12 cluster de instancias de memoria <em>Quadruple Extra-Large</em> y sus 12 replicas en distintos lugares.</p>

	<p>Nos aconsejan el uso de <a href="http://hoytech.com/vmtouch/">vmtouch</a> para la gestión de datos de memoria, sobre todo cuando se produce un error en la conmutación de una máquina a otra. Todas las maquinas que se usan están configurada en maestro-replica. Para la gestión de la replicación se usa <a href="http://repmgr.org/">repmgr</a>.</p>

	<p>Para realizar las <strong>conexiones a la base de datos con PostgreSQL</strong>, principalmente desde Django se usa <a href="http://pgfoundry.org/projects/pgbouncer">Pgbouncer</a>.</p>

	<p>Como no podía ser de otra forma, para todo los que es <strong>contenido principal del feed de actividad y las notificaciones de Instagram</strong> se usa <a href="http://redis.io/">Redis</a>. Aunque como todo tiene que caber en memoria se usa de nuevo otras instancias Quadruple Extra-Large en configuración maestro-replica. </p>

	<p>Para el uso de la <strong><span class="caps">API</span> de geo-búsqueda</strong> se usa <a href="http://lucene.apache.org/solr/">Apache Solr</a> que permite el consumo de datos por medio de <span class="caps">JSON</span>, lo que facilita el acceso a los datos cuando las aplicaciones lo necesitan. Tampoco se olvidan del uso de memcached para la caché utilizando pylibmc y ibmemcached.</p>

<h2>Tareas de notificación y push</h2>

	<p>Para estos casos en los que se tiene que <strong>notificar a un usuario en tempo real</strong> de una nueva foto publicada se usa <a href="http://gearman.org/">Gearman</a>, un sistema de cola de tareas escrita originalmente en <a href="http://danga.com/">Danga</a>. Colas asíncronas para distribuir el trabajo pesado en segundo plano y que las tareas más ligeras se realicen rápido.  </p>

	<p>Para realizar las notificaciones push usan <a href="https://github.com/samuraisam/pyapns">pyapns</a> y aseguran que les ha ido bastante bien manejando más de mil millones de notificaciones. Habrá que echarle un vistazo.</p>

<h2>Monitorización</h2>

	<p>Con más de cien instancias distribuidas en los distintos procesos que hemos descrito, en Instragram usan <a href="http://munin-monitoring.org/">Munin</a> para revisar todos los parámetros gráficos de los sistemas. Además de haber escrito varios plugin basado en Python. También se usa <a href="http://www.pingdom.com/">Pingdom</a> para la supervisión externa del servicio y <a href="http://www.pagerduty.com/">PagerDuty</a> para las incidencias y las notificaciones.</p>

	<p>Y para el informe de errores usan <a href="https://github.com/dcramer/django-sentry">Sentry</a>, escrita usando Django por la gente de Disquis. </p>

<h2>Conclusiones</h2>

	<p>Muy interesante la configuración de Instagram y comprobar el uso intensivo que hacen de Python y las instancias de Amazon. Un conjunto de herramientas que habrá que echar un vistazo más en detalle pero que ha logrado que esta Startup pueda escalar un tremendo tráfico en poco más de un año. Como ellos dicen: reutilizando al máximo y, como hemos comprobado, sin reinventar la rueda ni embarcarse en complejas infraestructuras.</p>

	<p>Más información | <a href="http://instagram.com/developer/">Instagram Developer</a><br />

Vía | <a href="http://instagram-engineering.tumblr.com/post/13649370142/what-powers-instagram-hundreds-of-instances-dozens-of">Instagram engineering</a></p>      ]]></description>
      </item>
                    <item>
      <title><![CDATA[Desarrollo de aplicaciones Android con Amazon Web Services SDK]]></title>
      <link>http://www.genbetadev.com/desarrollo-aplicaciones-moviles/desarrollo-de-aplicaciones-android-con-amazon-web-services-sdk</link>
      <guid>http://www.genbetadev.com/desarrollo-aplicaciones-moviles/desarrollo-de-aplicaciones-android-con-amazon-web-services-sdk</guid>
      <pubDate>Sun, 11 Sep 2011 12:30:01 +0000</pubDate>

      <author>Txema Rodríguez</author>
      <description><![CDATA[
      <p><img id="image77554" src="http://img.genbetadev.com/2011/09/android-con-amazon-ec2.png" class="centro_sinmarco" alt="android con amazon sdk" /></p>

	<p>Al desarrollar una aplicación <strong>Android</strong> es tan importante la implementación de la aplicación como la de la parte  servidor que usaremos para diferentes tareas como la autenticación de usuarios, servir contenido como imágenes o datos, usar una base de datos centralizada, etc.. Para ello, seguramente, si usamos algún <strong>servicio en la nube como Amazon</strong> quizás nos interese usar el <strong>SDK</strong> de <strong>Amazon Web Service para Android</strong>. </p>

	<p>El <strong><span class="caps">SDK</span> de Amazon Web Service para Android</strong> provee un conjunto de librerías, ejemplos y documentación para que los desarrolladores puedan construir aplicaciones móviles que usen los servicios en la nube de Amazon como Amazon S3, Amazon EC2,  Amazon SimpleDB, CloudFront, Amazon <span class="caps">RDS</span>, Amazon <span class="caps">SQS</span> o Amazon <span class="caps">SNS</span>.</p>

	<p><!--more--></p>

	<p>Normalmente, cuando queremos usar servicios en la nube debemos <strong>implementar nuestras propias librerías que manejen las peticiones HTTP</strong>, abran y cierren las conexiones y empaquetar cada uno de los parámetros necesarios. <span class="caps">AWS</span> <span class="caps">SDK</span> nos permite utilizar distintos servicios en la nube desde la misma aplicación cuando lo necesitemos<br />
<ul></p>

	<p>	<li><strong>Almacenamiento</strong>: usando Amazon S3 para los datos, tanto para servir contenido  o almacenar datos enviados desde la aplicación móvil.</li></p>

	<p>	<li><strong>Bases de datos</strong>: con SimpleDB disponemos de una base de datos clave-valor escalable para almacenar todos los datos que queramos desde la aplicación.</li></p>

	<p>	<li><strong>Computación</strong> en la nube: podemos lanzar y manejar instancias de Amazon EC2.</li></p>

	<p>	<li><strong>Mensajería</strong>: podemos usar Amazon <span class="caps">SQS</span> y Amazon <span class="caps">SNS</span> para integrar un sistema de comunicación móvil para nuestra aplicación y enviar mensajes broadcast.</li></p>

	<p></ul></p>

	<p><iframe width="640" height="510" src="http://www.youtube.com/embed/kJap3OTbFuY?hd=1" frameborder="0" allowfullscreen></iframe></p>

	<p>Así, ya estemos desarrollando una aplicación multimedia que necesite fotos usando Amazon S3, un juego online que interactue con distintas bases de datos escalable o un sistema de mensajería entre aplicaciones podemos usar el <strong>Amazon Webservices <span class="caps">SDK</span> para Android</strong> para interactuar con los servicios en la nube fácilmente.</p>

	<p>Descarga y documentación | <a href="http://aws.amazon.com/es/sdkforandroid/"><span class="caps">SDK</span> Amazon Web Services para Android </a><br />
Más información | <a href="http://aws.amazon.com/es/Android-development-with-AWS/">Develop Android Apps with Amazon Web Services</a></p>      ]]></description>
      </item>
                    <item>
      <title><![CDATA[Caída de Amazon EC2 provoca la interrupción de numerosos servicios web basados en la nube]]></title>
      <link>http://www.genbetadev.com/programacion-en-la-nube/caida-de-amazon-ec2-provoca-la-interrupcion-de-numerosos-servicios-web-basados-en-la-nube</link>
      <guid>http://www.genbetadev.com/programacion-en-la-nube/caida-de-amazon-ec2-provoca-la-interrupcion-de-numerosos-servicios-web-basados-en-la-nube</guid>
      <pubDate>Fri, 22 Apr 2011 13:14:24 +0000</pubDate>

      <author>Txema Rodríguez</author>
      <description><![CDATA[
      <p><img id="image76332" src="http://img.genbetadev.com/2011/04/amazon-ec2_650.png" class="centro" alt="amazon ec2" /></p>

	<p>Los servicios de Amazon en la nube son fiables, es posible asegurar un 99% de uptime (aunque asumimos casi tres días de caída). Muchas veces esas caídas son algún fallo ocasional que no dura más de unos minutos seguidos, pero ayer <strong>Amazon EC2 experimentó la mayor caída del servicio al producirse graves problemas en los servidores</strong> basados en el Norte de Virginia. No se cayó el servicio a nivel mundial, pero la <strong>repercusión fue importante al afectar a numerosos proyectos de empresas de internet</strong>, desde startup a algunas que ya no lo son tanto como Foursquare, Quora, Reddit o Hootsuite, incluso servicios como Heroku que actúan de servidores en la nube a otros. El listado completo se puede ver en una web creada a tal efecto, <a href="http://www.ec2disabled.com/">#ec2disabled</a>.</p>

<blockquote>El compromiso del contrato a nivel de servicio de <a href="http://aws.amazon.com/es/ec2/">Amazon EC2 </a>es de una disponibilidad del 99,95% en cada Región de Amazon EC2.</blockquote>

	<p><!--more--></p>

	<p>Cuando cedemos nuestra infraestructura de servidores a una empresa externa, sea la nube, un hosting o lo que sea, asumimos este tipo de fallos. Los críticos a los servicios a la nube pueden aprovechar este incidente para reclamar que aunque ahorremos dinero, tiempo, esfuerzo y ganemos escalabilidad no estamos a salvo de fallos inesperados. Ni mucho menos evitar preguntarnos cuando se restablecerá el servicio. <strong>Empresas que tienen miles de maquinas alojadas en EC2 pueden experimentar momentos de pánico</strong> al no saber que pasa con sus servicios. Si normalmente al detectar un pico de tráfico somos capaces de enviar con rapidez y anticipación nuevas instancia, aquí es complicado responder a tiempo.</p>

	<p><strong>Desde hace un tiempo Amazon EC2 está experimentando fallos en sus servidores</strong> como podemos contemplar en los paneles de status, el dashboard de Amazon Web Services. Errores sobre todo en Elastic Beanstalk, y la base de datos relacional, Cloudwatch entre otros. Problemas de conectividad entre instancias que no gustan nada a los desarrolladores, menos cuando nos estamos acostumbrando a desplegar y punto, olvidándonos de configurar maquinas.</p>

	<p>Cuando hay nubes, a veces llueve. Por eso a raíz de las recientes interrupciones de servicio estaría bien seguir una serie de <a href="http://backdrift.org/coping-with-cloud-downtime">ideas para mantener los servicios hospedados disponibles</a> durante las caídas masivas de los servidores alojados en la nube.</p>

	<p><ul></ul></p>

	<p>	<li>Las copias de seguridad fuera de la nube. Los backups y las instantáneas de las que depende la recuperación no deben alojarse en el mismo proveedor en la nube. Lo mejor es tener una copia de todo eso en nuestras infraestructuras físicas.</li></p>

	<p>	<li>Administrar sus sistemas desde el exterior de la nube. La gestión de nuestra infraestructura, monitorización y gestión de la configuración no se debe hacer desde un panel alojado también en la nube, ya que nos veremos presos para actuar y cambiar nuestras instancias. </li></p>

	<p>	<li>Optimizar la configuración de DNS: <span class="caps">TTL</span> bajos y usar varios servidores <span class="caps">DNS</span>. Si las cosas van muy mal tener la capacidad de actualizar tus <span class="caps">DNS</span> y que se propaguen rápidamente nos ayudará a montar una maquina de mantenimiento. </li></p>

	<p>	<li>Tener a una mano un respaldo para nuestra maquina de correo. Establecer un servidor MX temporal hasta que el servicio principal se pueda restablecer.</li></p>

	<p></p>

	<p>¿Tenéis alguna alternativa más en caso de caída masiva de nuestros servicios en la nube?</p>

	<p>Vía | <a href="http://newenterprise.allthingsd.com/20110421/amazons-cloud-crashed-overnight-and-brought-several-other-companies-down-too/">All Things Digital</a><br />

Más información | <a href="http://status.aws.amazon.com/">Status Dashboard Amazon Web Services</a>, <a href="http://www.ec2disabled.com/">EC2Disabled</a></p>      ]]></description>
      </item>
        	  <atom:link href="http://www.genbetadev.com/tag/amazon-ec2/rss2.xml" rel="self" type="application/rss+xml" />
	</channel>

</rss>


