Entradas etiquetadas ‘web

Thumbr.it es sin lugar a dudas uno de los proyectos más interesantes de los que he tenido noticia este último año, lo reune todo (una buena idea y gente con gran talento para darle forma).

Cuando le pedimos que nos defina el proyecto en menos de diez palabras lo tiene claro: “es ImageMagick en la nube”. Con este proyecto pretende darle un vuelco a la forma tradicional de trabajar con las imágenes en la web. Hoy día cualquier proyecto medio / grande que quiere servir fotos divide el trabajo en 3 partes:

1. Recibir la imagen en sí sobre la que trabajaremos, muchas veces subida por usuarios. Esto conlleva almacenar las imágenes, guardar copias de seguridad, etc.

2. Trasformar esta imagen para adaptarla a la web. Como mínimo deberemos redimensionarla y recortarla. Si la web es grande también deberemos asegurarnos de que la imagen no contiene ningún virus, y sobre todo desde el éxito de Instagram podemos querer ajustar los colores, ponerle un marco, …

3. Servir la imagen resultado. Aquí la dificultad reside en hacerlo muy rápido, típicamente usando un CDN que va a cachear nuestras imágenes en servidores de todo el mundo para que un usuario en France pueda descargar la imagen desde un servidor en Francia y uno de Brasil lo haga desde un servidor en Brasil. Servir la imagen desde un servidor demasiado alejado al usuario puede suponerle un retraso de 1 segundo extra por imagen (letal para una página con decenas o cientos de imágenes pequeñitas).

La opción más popular para resolver el problema número 1 es, cuando tu tamaño desborda lo que te cabe en un servidor, guardar las imágenes en Amazon S3. Otra opción también popular para los que tienen menos recursos es montar una pequeña cluster de servidores y correr algunos de los programas Open Source que nos permiten tener algo como Amazon S3 con nuestros servidores. Algunas opciones son MogileFS, Ceph. El inconveniente es que si nuestro centro de datos se viene abajo por cualquier problema técnico (algo que suele pasar cada 2 o 3 años) no tendremos acceso a las imágenes, un supuesto que es mucho más dificil que ocurra con Amazon S3.

Para resolver el problema número 3 podemos contratar un CDN, los más populares (y caros!) son probablemente Akamai y Level3. Hay otros mucho más económicos, como CloudFlare, pero tienen menos nodos de salida. En un punto intermedio se situa Amazon CloudFront.

Sin embargo para el punto 2 de los 3 que he enumerado no había hasta ahora una buena solución. Podíamos, como siempre, hacerlo nosotros a mano, pero implica que tenemos que programar todo el código que manipula una imagen (recortar es fácil, ajustar el contraste, luminosidad, saturación, cambios de colores, etc. es más dificil), tenemos que provisionar un número de servidores para hacer estas operaciones, asegurarnos de no transmitir los virus que pueda existir en la imagen original. Además hay decenas que pequeños errores que solemos cometer que va a hacer que nuestro código falle: gestión de la orientación en las etiquetas EXIF para los JPEG, imágenes con mapas de color raros o directamente rotos, respetar la transparencia de la imagen original, etc.

Thumbr.it viene a cubrir este hueco, y según nos ha contado Joaquín sus planes son extenderlo para cubrir también los otros dos puntos que hemos enumerado, para que los usuarios tengan una solución completa toda en uno. La forma que tiene Thumbr.it de transformar una imagen es bastante ingeniosa, basta con que el administrador de la web cambie los enlaces de las mismas. Suponed que tenéis una imagen en la URL:

http://midominio.com/mifoto.jpg

Y queréis servir esta foto pero con un ancho y un alto máximos de 400, y en formato PNG, basta con que en vuestro HTML pongáis:

http://api.thumbr.it/XXX/YYY/midominio.com/mifoto.jpg/400x400/mithumbnail.png

Las XXX e YYY dependen de vuestro usuario, y es un código que valida quien hace la petición. El resto es fácil de entender, la imagen se va a servir desde el dominio api.thumbr.it, los servidores de Thumbr.it al ver la URL que le pide el usuario se bajarán la imagen que está en la URL http://midominio.com/mifoto.jpg, le cambiarán el tamaño a 400×400 de máximo, y la servirán en formato png. Los servidores de Thumbr.it van a cachear la imagen resultado durante un mes, con lo que en la práctica las imágenes se sirven sin ningún retraso. Solo notaremos un pequeño retraso la primera vez que se genera la imagen, que nosotros hemos medido en unos 200 milisegundos.

Una duda que nosotros teníamos es como puede afectar al SEO el transformar la URL de esta forma. Joaquín es conocido por haberle vendido su anterior proyecto (Panoramio) a Google, y como imaginábamos había tenido en cuenta este problema. La extensión del nombre del fichero que le damos a la imagen en Thumbr.it se usa para extraer el formato de salida de la imagen, pero el nombre en sí es completamente libre, con lo que podemos usar un nombre descriptivo para ayudar a los buscadores a indexar esa imagen. El dominio desde el que se sirve la imagen también es personalizable.

Como cereza sobre el pastel, Thumbr.it además de transformar imágenes también acepta documentos Word y PDF. En estos casos la imagen de salida será una reproducción de la primera página del documento. Joaquín nos ha comentado que tiene planeado implementar también HTML como entrada, lo que nos permitiría poner pantallazos de páginas web. Además quiere añadir más opciones, por ejemplo para poder elegir la página que queremos ver dentro de un Word / PDF, lo que sería ideal para crear un visualizador completo de Word y PDF (si añadiese PPT podríamos hacer nuestro propio Slideshare, jeje).

Yo estoy probando Thumbr.it en Resultados de Fútbol y grandes proyectos como Freepik (el mayor y más popular buscador de recursos gratuitos para diseñadores). Hace un par de semanas Thumbr.it estaba sirviendo 2.5 millones de fotos al día, y ahora está ya en más de 3 millones de fotos al día!

A qué esperas para darte de alta y probarlo!

Besoccer es el nombre, en la versión internacional, de resultados-futbol.com, red social de amantes de futbol ya consolidada en España con más de 100.000 usuarios registrados.

Viendo la actual aceptación del sitio en España hemos lanzado las versiones de Besoccer a ingles y brasileño con la idea de abrirse mercado en estos dos importantes mercados.

Besoccer tiene las funcionalidades típicas de una red social como son compartir fotos, videos, pertenecer a grupos, etc, así como acceder a resultados y clasificaciones de las ligas mas importantes del mundo.

[...] contiene más de 600 ligas de distintos paises actualizadas al minuto donde podremos comentar cada uno de os partidos.

También podemos, mediante unos códigos javascripts, publicar los resultados de ligas de todo el mundo en una web o blog.

Las novedades de nuestros equipos favoritos las tendremos gracias a las Noticias que los propios usuarios de la comunidad publican y son votadas por el resto de la comunidad para que promocionen solo las que sean de más interés.

Todos los resultados, datos de jugadores y datos de equipos de esta red social son aportados por los propios usuarios, siendo así un medio rápido y fiable para mantenerte informado de todas las ligas del mundo.

Y para los aficionados al juego, está disponible Desafío Manager, donde tendremos que hacer de manager de un equipo con jugadores reales y llevarlo a lo más alto de la tabla con un presupuesto ajustado compitiendo con el resto de equipos de nuestra liga, La porra, donde podremos competir con nuestros amigos para ver quien se acerca más a los resultados de los partidos de nuestras ligas favoritas en un divertido juego de puntuaciones y otros juegos como el de crear el once ideal o el de diseñar nuestra propia camiseta.

Personalmente creo haber tenido mucha suerte ya que por una cosa o por otra he participado en varios proyectos que manejan grandes bases de datos, actualmente con Resultados de fútbol y BeSoccer trabajo a diario con un gran volumen de datos que me ayuda a ir cogiendo experiencia a la hora de afrontar el planteamiento de nuevas funcionalidades o mejoras para el proyecto.

A mi manera de ver lo más importante es llegar a comprender que el problema al final se reduce en conocer perfectamente la tecnología utilizada y cuáles son sus ventajas y desventajas.

Un ejemplo claro está en el uso de MySQL, seguro que alguna vez has escuchado aquello de que MySQL no es recomendado para ser utilizado con grandes tablas. Pero realmente MySQL no es lento con grandes tablas sino que para conseguir un gran rendimiento con MySQL es necesario diseñar la base de datos siendo consciente de lo que puede y no puede hacer el motor de base de datos, tampoco digo con esto que MySQL es mejor que Oracle o PostgreSQL sino que lo que funciona y es eficaz en una no tiene porque serlo en las otras.

Claves en la escalabilidad de MySQL

Veamos algunas de las posibles claves a la hora de mejorar la escalabilidad de una base de datos MySQL:

1. Motor de base de datos
Acertar en la elección del motor de base de datos (MyISAM ó InnoDB)

Cómo comentamos hace unos días hay que ser conscientes de las ventajas y desventajas de cada uno de ellos.

2. Buffers
Cuando no hay memoria suficiente para el manejo de la base de datos notaremos un descenso gradual del rendimiento, la solución sería asegurarnos que tenemos memoria suficiente para el volumen de datos que estamos utilizando.

3. Índices
Es muy sencillo comprender la importancia de los índices, sin un índice, MySql tiene que iniciar una búsqueda por el primer registro y leer toda la tabla para encontrar los registros relevantes.

4. Consultas lentas
Si los anteriores puntos no nos dan la solución probablemente nos tengamos que centrar en la optimización de las consultas, una tarea complicada con la que podemos ahorrar mucho tiempo si conseguimos desde el principio detectar las consultas lentas (slow queries).

Si ninguno de estos puntos soluciona nuestro problema de escalabilidad tendremos que intentarlo con alguno de las siguientes soluciones que son algo más complicadas.

Llegado a este punto en el que necesitamos escalar nuestra base de datos y ninguna de las anteriores soluciones ya nos sirven tendremos que decidir entre:

Escalar verticalmente

Añadir más recursos a un nodo del sistema para mejorar el rendimiento de la base de datos, se trataría de hacer una inversión en hardware.

Pros:
Casi todos los sistemas escalan bien verticalmente.
Fácil de implementar
Fácil de administrar

Contras:
Alto coste del hardware

Escalar horizontalmente

Agregar más nodos al sistema. Se puede escalar horizontalmente con mejoras de hardware (agregar nuevas computadoras al sistema) ó con mejoras de software (Replicación de datos ó “Sharding” por ejemplo)

Pros:
Coste lineal

Contras:
Difícil de implementar
Difícil de administrar

Escalar horizontalmente y verticalmente

Se puede optar por está opción, habitualmente se escala de manera verticalmente mientras el presupuesto lo permita y cuando ya aumentan excesivamente los costos se escala horizontalmente.

Conclusiones

Es relativamente difícil llegar a tener problemas con la base de datos y si lo llegamos a tener será una buena noticia porque significa que nuestro proyecto es lo suficientemente grande como para comenzar a buscar solución a unos problemas que de ser solucionados nos van a permitir seguir creciendo.

Escalar verticalmente es relativamente fácil ya que mientras haya dinero para soportar el coste de hardware no tendremos problemas de escalabilidad, el verdadero reto es conseguir escalar de manera horizontal manteniendo controlado el coste de desarrollo, es realmente complicado porque si llegamos a este punto seguramente careceremos de ejemplos prácticos de cómo hacerlo ya que las estructuras de bases de datos pueden ser muy dispares, por ello no hay ningún método infalible.

TweetNginx es un servidor web de alto rendimiento escrito por Igor Sysoev, desarollado para una de las web más visitadas de Rusia (Rambler), además se trata de una de las mejores alternativas a Apache, líder indiscutible del mercado. Actualmente se calcula que el 7% de páginas web corren bajo Nginx. Algunas de esas páginas son [...]

Es una pregunta que muchas personas se hacen, hay que comprender que el imperio de Google y la gran mayoría de sus ingresos provienen de AdSense y Adwords o lo que es lo mismo de la publicidad.

Adwords es el sistema con el que los anunciantes dicen dónde y cómo quieren mostrar sus anuncios y AdSense es el sistema con el que los administradores de las páginas administran como se deben mostrar los anuncios, todo esto genera grandes beneficios a Google.

¿Por qué ofrece Google servicios gratuitos?

Pues no es de manera altruista pueden estar seguros, sino que todo se conecta a la publicidad.

Por ejemplo, GMail es gratuito, pero a cambio Google coloca anuncios en diferentes partes de la navegación. En esencia no es que GMail sea gratuito, sino que Google ha hecho un negocio en donde ellos te ofrecen un servicio de correo gratuito.

Este sistema lo podemos aplicar a la gran mayoría de servicios: google.com, Google Maps, Google News, etc.

Resumiendo. Todo lo que Google ofrece “gratis” está en realidad bastante bien justificado comercialmente, ya que Google vive de “Servicios” y no de “Productos”.

Todos lo hemos visto, Google ha cambiado un poco la apariencia del buscador y suavizado el diseño del logo y de algunos elementos del formulario de búsqueda más utilizado del mundo.

Aparentemente el aspecto ha mejorado es una apariencia más limpia y moderna. Este cambio ha traido modificaciones en el sprite de la portada de Google sin duda alguna ese sprite es la imagen con más peticiones de Internet ya que todo el que visita Google tiene que de una manera u otra descargarse la imagen a su navegador aunque no nos demos cuenta.

Cambios en el Sprite de Google