• Del autor
  • Principios y algoritmos de concurrencia

Ricardo Galli, de software

~ De software libre, internet, legales

Ricardo Galli, de software

Archivos de etiqueta: menéame

Un apunte personal rápido sobre el canon AEDE

22 martes Jul 2014

Posted by gallir in cultura, internet, legales, menéame

≈ 73 comentarios

Etiquetas

#canonaede, menéame, tasa google

Hoy es un día bastante triste para mí, o quizás debería decir, decepcionante, de esos días que maldices haber montado tu proyecto vital más importante en España y no en el extranjero. Hace años recibimos ofertas millonarias para comprar Menéame, podríamos haber aceptado y hoy tendría varios millones de euros en mi cuenta. Pero no lo hicimos, queríamos mucho al proyecto, considerábamos que estábamos haciendo algo que es útil y que venderlo hubiese significado su muerte (al menos en ese momento). Curiosamente fue el Grupo Planeta el que hizo la oferta más alta, el mismo grupo que hoy apoya medidas como el canon AEDE y leyes Sinde-Wert. Es decir, acertamos en nuestro diagnóstico, y aunque no somos millonarios podemos decir todavía que defendemos unos principios al que fuimos siempre fieles, aún a costa de nuestros propios intereses.

Durante estos casi nueve años tuvimos muchos problemas, acusaciones injustas, difamaciones (hasta me acusaron de pederasta), ataques DDoS, amenazas físicas, acosos,  demandas, juicios, intentos de engañar a los controles antispam en Menéame (incluso de periodistas de los medios que hoy piden canon AEDE, medios de PRISA incluidos), la tan mal redactada LSSI que con la inseguridad jurídica que genera nos deja en posición muy difícil entre defender la libertad de expresión y censurar la opinión de terceros para que no nos consideren corresponsables de ilícitos (ahora mismo estamos acusados en un juicio penal, por un enlace). Es decir, no fue nunca un camino fácil, y por la crisis y la caída de los ingresos de publicidad apenas nos da para mantener y desarrollar lo necesario… y pagar los gastos judiciales y de abogados para defender la libertad de opinar y enlazar.

Una de las cosas que siempre defendimos en Menéame (con mejor o pero criterio, con nuestras dudas y errores humanos) es que son los creadores de contenidos los que deben ser los beneficiados por las visitas. Así tomamos medidas técnicas para favorecer a los enlazados (cabeceras <H1> en el titular con enlace para favorecer su posicionamiento en buscadores), los titulares no enlazan a páginas de Menéame sino siempre al sitio enlazado (los que nos perjudica enormemente en número de páginas impresas, casi expulsamos a los visitantes), penalización y bloqueo de sitios que se dedican al copy&paste o plagio de otros sitios, o que sólo enlazan a material no autorizado, etc.

Pensábamos que en todos estos años hicimos relativamente un buen trabajo en este sentido. De hecho la mayoría de medios incluyeron un botón de enviar a Menéame (hasta lo hace la BBC, o el mismísimo Youtube) y sus propios periodistas hasta hacían trampas para enlazar (supongo que no es para auto castigarse, Menéame genera anualmente unas 300 millones de visitas a sitios externos).

Pero un día el gobierno anuncia que pondrá un canon para sitios como Menéame. La tasa Google le llamaron y pretenden que se siga llamando así, cuando la realidad es que proporcionalmente afecta mucho más a Menéame que a Google. Google News España no genera ingresos, y el volumen total de visitas es proporcionalmente ínfimo para esa empresa. Podrían cerrarlo y ni se darían cuenta.

No quiero repetir lo que se ha escrito ya demasiado (análisis económicos, legales, de competencia, de inseguridad jurídicas, de eliminar el derecho a cita, etc.) que podéis consultar desde la recopilación que hay en el sitio de la Coalición ProInternet, o el posicionamiento y análisis económico que hicimos en Menéame, o mi reflexión sobre el derecho a cita y los medios en El Mundo, pero voy a hacer un resumen de los argumentos de AEDE y el gobierno desde el punto de vista personal y de Menéame.

Los usuarios de Menéame envían enlaces (a cualquier sitio) y le añaden una entradilla explicativa de hasta 500 caracteres. Esta entradilla puede ser redactada por ellos o hacen un copy&paste de alguna frase, i.e. una cita, del sitio enlazado. Antes del boicot de los propios usuarios, Menéame generaba unos 2 millones de visitas mensuales a los medios AEDE, dado que son artículos públicos con publicidad, esas visitas generan ingresos a esos medios (mínimo unas 20 veces superiores a los que genera una página en Menéame). Lo que parece una relación que beneficia a todos (lectores, medios y Menéame) ahora se divulga que en realidad les estamos ocasionando pérdidas. El argumento fundamental de AEDE es que en realidad si no se les enlaza en Menéame habrían recibido más de las 2 millones que les genera. Intuitivamente no tiene ningún sentido, y se explica por el deseo de los medios de aparecer en los agregadores y redes sociales, pero es que además hay estudios que confirman lo contrario, que les está generando beneficios.

Aún así, el gobierno del PP, con el apoyo del PSOE y CiU, siguen adelante con esta propuesta, que además de todas las injusticias (y ventajas a empresas que no están en España) se cargan una limitación fundamental de los derechos de autor, ya enunciada en el Convenio de Berna de Derechos de Autor en su artículo 10, específicamente el 10.1:

Artículo 10
Libre utilización de obras en algunos casos:
1. Citas; 2. Ilustración de la enseñanza; 3. Mención de la fuente y del autor

1) Son lícitas las citas tomadas de una obra que se haya hecho lícitamente accesible al público, a condición de que se hagan conforme a los usos honrados y en la medida justificada por el fin que se persiga, comprendiéndose las citas de artículos periodísticos y colecciones periódicas bajo la forma de revistas de prensa.

Con esta propuesta se cargan este derecho a cita, pero además de forma selectiva: los medios que reclaman podrán seguir disfrutando de ese derecho a cita -de hecho, no podrían hacer nada sin él-, pero se les quita el mismo derecho a otros sitios web. No sólo eso, se les obliga a pagar un canon irrenunciable, aunque no les enlacen.

Un sinsentido desde todos los puntos de vista.

¿Cuánto dinero piensan ingresar por este concepto? Nadie lo sabe, no dicen lo que piensan, pero hablan de millones de euros al mes. ¿Cómo piensan recaudar, cuáles son las tasas? Tampoco se sabe, eso se debe negociar después de aprobada la ley. Otro absurdo: se hace una ley con objetivos económicos (de subvencionar a unos pocos) pero en ningún sitio aparecen estudios ni cifras aproximadas.

La realidad es otra, casi puedo apostar que Google cerrará Google News España antes que pagar un canon. A Facebook también debería cobrarse, pero les basta con cerrar su oficina en España. Igual para Twitter (porque ¿qué es un texto no significativo?). ¿Qué pasará con Youtube donde los usuarios suben vídeos de noticias sacadas de TV? Nadie lo sabe, más inseguridad jurídica, pero dudo que estén por la labor de pagar. Después de estas empresas, por volumen viene Menéame, que ya hemos comentado que no podemos pagar. Además nos deja en situación de desventaja de otros sitios similares (que incluso usan el software libre de Menéame) localizados fuera de España.

Un argumento es que hay que esperar y ver cómo se cobra, que quizás es una cantidad simbólica. Lo que es otro sinsentido, ¿modificar toda una ley de derechos de autor que se carga selectivamente el derecho a cita para cobrar un canon que es simbólico?  ¿Generar tanta inseguridad jurídica -y que ocasionará que empresas grandes como Google o Facebook inicien interminables procesos judiciales- por una birria de dinero que no soluciona nada?

No hay por donde cogerlo, no tiene justificación, ni ética, ni económica, ni jurídica, y que ni siquiera tiene el apoyo de la mayoría de los medios de noticias.

Si de verdad el problema es que les «ocasionamos pérdidas» al enlazar con una cita, se podría haber negociado y solucionado el problema de forma muy sencilla:

  • No enlazarlos más desde Menéame, o que fuese opt-in, los medios que lo consideren podrían solicitar que se les incluya.
  • Eliminar la entradilla -i.e. dejar sólo el titular- en los enlaces a los periódicos.

Ambas eran muy sencillas y bastaba con un mínimo de intercambio de emails, lo podríamos haber puesto en marcha en una hora. Pero no hubo tal diálogo, desde instancias del gobierno y de AEDE nunca nos llamaron ni preguntaron. Tiene una explicación: es completamente falso que les perjudiquemos. El interés no es el falaz «compensarle las pérdidas», simplemente recaudar dinero de otras empresas que suponen -erróneamente- que ganan fortunas por enlazarlos.

La realidad es más sencilla, querían ir contra Google y redactaron una ley francotirador, pero de forma tan ignorante que les salió una bomba que afecta a todos. Y lo peor, a algunas empresas nos obligarán a emigrar, y otras a no instalarse en España.

Desde el punto de vista económico-social sólo perjudicará a España y no salvará a ninguna prensa o periodismo.

Desde el punto de vista personal es -como decía al principio, muy triste, ya tenemos que sortear muchos problemas (muchos rozando el absurdo) para mantener el sitio en marcha. Ya es muy complicado en España desarrollar proyectos relacionados con noticias, que involucren derechos de autor y libertad de expresión, pero nos siguen poniendo piedras.

Bueno, esto no es una piedra más, es una patada en los genitales, con tanta alevosía como ignorancia.

Señores diputados, ¿sabéis de verdad los efectos de lo que estáis a punto de aprobar? ¿sabéis que estáis siendo engañados?

Y me alejo de internet por unas horas, es todo una locura.

 

Técnicas y trucos para la versión móvil «responsive» del Menéame

18 lunes Nov 2013

Posted by gallir in menéame, programación, trucos

≈ 19 comentarios

Etiquetas

menéame, optimizaciones, responsive, versión móvil

No sé si habréis notado, pero si accedéis a Menéame desde un móvil o tableta, se carga muy rápido y están disponibles prácticamente todas las funcionalidades de la versión «normal» de la web. Aunque en realidad no se tratan de dos versiones diferentes, es la misma pero con cambios muy pequeños en la lógica del servidor, y muy poco de Javascript.

El 30% de los accesos a Menéame son desde móviles, antes teníamos una versión más reducida (sigue disponible en m.meneame.net), pero recibíamos quejas por ser muy limitado en cuanto a funcionalidades. Por otro lado, era demasiado trabajo mantener dos versiones diferentes.

También queríamos adaptar la web para los monitores Retina y de alta definición que tienen la mayoría de teléfonos y tabletas de gama media y alta (su densidad de pixels por pulgada es mayor -hasta dobla- a los típicos 96 px/pulgada de los monitores tradicionales), para ello hay que detectarlos y servir en estos casos una imagen del doble de resolución.

Así, hace unas semanas nos pusimos a tope para lograr una única versión integrada, con pocas diferencias en la lógica del backend, y casi ninguna modificación hecha con Javascript en el lado cliente. Aunque el PageSpeed no es una medida cualitativa absoluta, sí que da bastante idea de velocidad y ligereza:

Image

Como se puede deducir, las mejoras de velocidad de carga para móviles también afectó positivamente a la versión normal del web. A continuación describiré cuáles fueron los trucos y técnicas más importantes.

Sigue leyendo →

«Particionado funcional» económico en Amazon RDS… y cachea todo ¡estúpido!

17 domingo Mar 2013

Posted by gallir in internet, píldoras, pijadas, programación

≈ 6 comentarios

Etiquetas

amazon aws, menéame, optimización, rds

El miércoles pasado di una charla de cómo tenemos Menéame en Amazon AWS. Iba a explicar, al final de la charla, un truco de «particionado» [ver nota al final] económico, pero que no pudo ser: me tocó vivir en directo una saturación de la base de datos, producida por el nombramiento del nuevo Papa. Ahora explico cuál es ese «truco» de «particionado» económico y sencillo que sirve para ahorrar costes en RDS, y luego qué pasó y cómo solucioné la saturación de una de las bases de datos (de allí la frase «cachea todo ¡estúpido!», el estúpido soy yo 😉 ).

La base de datos principal de Menéame está en MySQL sobre Amazon RDS, con Multi AZ, lo que significa que tenemos failback y failover over automático y desantendido si el master falla. Da mucha comodidad, pero también tiene su coste: se paga el doble (el tamaño que tenemos es el large).

Sigue leyendo →

Seis años de Menéame

07 miércoles Dic 2011

Posted by gallir in menéame, personal

≈ 68 comentarios

Etiquetas

aniversario, menéame

En 3 horas se cumplirán 6 años de Menéame (el primer anuncio público, en la lista de Bulma). Estoy muy cansado para escribir mucho más, pero en mi desvelo de la noche pasada conté algunas anécdotas por Twitter:

  1. En 27 horas Menéame cumple 6 años desde que salió al aire. Incosciencia de juventud 😉
  2. Cuando comenzamos Menéame pensé que sabía bastante de bases de datos. Hoy sé que no tenía ni puta idea, y todavía me falta.
  3. Cuando comenzamos Menéame pensé que luego de un par de meses de estabilización sería relajado, qué iluso.
  4. Queda poco código de hace 6 años, pero cuando lo veo me quiero dar hostias, por capullo.
  5. Me llevo bien con el PHP, HTML, Python, Javascript, SQL y Perl de Menéame. Pero el CSS me sigue frustrando, mucho.
  6. Hace 6 años pensaba que el Javascript era una chapuza de lenguaje, hoy sé que es muy bueno.
  7. En 6 años recibimos miles de críticas, sólo un premio: PC Actual al mejor proyecto 2.0, en 2008. Gracias 😉
  8. Lo peor del desarrollo de Menéame fue dar soporte a IE6. Además ni tenía un Windows en casa, era a ojo, y pidiendo que otros prueben
  9. ¿Qué técnica nos ahorró miles de líneas de código y tiempo? Las expresiones regulares, imprescindibles para desarrollo web.
  10. Lo peor de Menéame, las llamadas telefónicas con amenazas, emails con amenazas de muerte, y los pesados de burofaxes de abogados 😉
  11. Al principio me angustiaban los burofaxes y cartas certificadas, hoy ya nos descojonamos.
  12. Lo mejor de Menéame, las quedadas con mucha bebida por toda España (y hasta una en Argentina, y una boda). Habrá que recuperarlas.
  13. También hubo una quedada en Amsterdam, pero ni @benjami ni yo pudimos ir, creo.
  14. Un sábado el CEO de Digg y K. Rose nos piden reunión en Nueva York el martes, dijimos podríamos el miércoles, ellos no. Nunca se hizo.

Una de las cosas más importantes es la cantidad de lo que aprendí en programación, bases de datos, administración de sistemas y desarrollo de proyecto webs. Estoy escribiendo un libro para escribir para contarlo, especialmente orientado a programadores sin mucha experiencia en desarrollo para web (en realidad llevo muchos meses dándole vueltas, pero el índice de capítulos y temas -lo más duro de hacer- va convergiendo). Me voy a centrar en las técnicas fundamentales que se deben dominar en este tipo de proyecto. Desde mi humilde y honesta opinión, por supuesto.

Diseñar y administrar un sistema requiere mucho de sentido común, aunque no lo creas

12 viernes Ago 2011

Posted by gallir in desarrollo, menéame

≈ 46 comentarios

Etiquetas

amazon, aws, crisis, menéame

En mi apunte sobre los que nos pasó con Amazon AWS dejaron todo tipo de comentarios, la mayoría razonable, pero otros simplemente comentan de oídas, sin conocer las características, precios, limitaciones de la arquitectura de AWS… e incluso temas básicos de costes. El siguiente comentario es un estereotipo del que repite blablás con mucha autoridad sin conocer a fondo el problema de lo que ocurrió, por lo que aprovecharé para contestar:

Sigue leyendo →

La crisis con Amazon AWS

10 miércoles Ago 2011

Posted by gallir in personal

≈ 88 comentarios

Etiquetas

amazon aws, crisis, ebs, menéame

El viernes 5 de agosto  me voy con toda la familia a un pueblo de Extremadura cerca de la frontera con Portugal (Valencia de Alcántara) a visitar a unos amigos. Regresábamos el martes 9 a la tarde, ¿qué podía pasar en Menéame que no se pudiese solucionar con una navegador y la consola web de AWS si nunca habíamos tenido problemas graves? Si necesitaba algo más, podía instalar las herramientas de AWS en otro ordenador y solucionarlo en pocos minutos. Así que por primera vez viajo sin mi portátil, sólo mi tablet Android con conexión 3G Vodafone (además de mi teléfono también con 3G).

Pues ocurrió el desastre en Amazon, les falló todo lo que podía fallar, todos nuestros planes de contingencia no podía aplicarse (salvo el «rehacer desde cero» con los bakups) y yo sin mi portátil y con el 3G completamente inestable, prácticamente como si no tuviese conexión. Si no hubiese sido así Menéame no habría estado «off line» tanto tiempo, quizás sólo unas pocas horas. Fue una pesadilla.

Amazon tuvo varios fallos: primero el corte completo de la conectividad a todas las instancias, luego la desincronización del API de gestión, luego los EBS que quedaron totalmente inaccesibles y bloqueando la gestión de las instancias que los usaban, y para rematar un fallo en el software de creación de los «snapshots» (backups por bloques en S3) que borraba datos de algunos bloques (lo descubrieron durante la crisis, y nos afectó a nosotros).

Nota: es un relato rápido, ya corregiré erratas, ahora me voy a duchar, que la última vez fue en Valencia de Alcántara 😉

Sigue leyendo →

Haanga: plantillas «Django» para PHP, über eficiente

11 miércoles Ago 2010

Posted by gallir in desarrollo, menéame, software libre

≈ 15 comentarios

Etiquetas

haanga, menéame, PHP template, plantilla PHP

A mediados de mayo fui a Japón, la empresa de internet más grande de ese país estaba interesado en montar un Menéame en japonés. En junio las conversaciones estaban más o menos avanzadas y tenía la sensación que algo iba a salir. Sabía que si íbamos a mantener la versión sincronizada con la nuestra, íbamos a tener complicaciones. Así que empecé a pensar seriamente en que debíamos desarrollar o migrar a un sistema de plantillas.

Cuando empecé a desarrollar Menéame en noviembre de 2005 la única alternativa madura que había era Smarty. No me gustó nada, su lenguaje de macros era bastante complicado, además era muy ineficiente. Así, decidí hacerlo sólo en PHP y separar la generación de código en funciones específicas, de forma muy similar a como hace o hacía WordPress.

Mientras no teníamos que responsabilizarnos nosotros de mantener versiones sincronizadas iba muy bien. Como estaba separado por «módulos de interfaz» (cabecera, cajas, pie de página) y orientado a objetos (cada clase como Link, Comment, Post tiene su método print_summary() ) los cambios lo hacíamos rápido y sin complicaciones. Pero ya era hora de mejorarlo y modernizarlo.

Hace meses empecé a mirar si podía reusar el sistema de plantillas de Synfony, CodeIgniter, H2O. El que más se acercaba era H2O, pero no terminaba de convencerme, le faltaban características que necesitamos para Menéame,  su rendimiento tampoco es tan bueno.

Primero pensé que sería mejor hacerlo con el API C de PHP, y así en junio tiré un globo sonda a César Rodas, un chaval de Asunción (Paraguay) que es un puto crack de PHP (desaprovechado, y se dedica a empezar decenas de proyectos al mismo tiempo 🙂 ).

El globo sonda dio resultado, a los pocos días me dijo que lo estudiaría. Me propuso la alternativa, interpretar las plantillas con PHP, pero como resultado se generaría una función PHP que además se cachearía por el xcache (que es el que usamos en los servidores www de MnM) por lo que sería muy eficiente.

César lo siguió desarrollando, a finales de julio ya tenía una versión bastante madura, le llamó Haanga (en guaraní significa dibujo o figura). Después de una hora de conversación telefónica nos pusimos de acuerdo en qué es lo que faltaba programar, cuál era el fast path, cómo debería implementarlo, y cómo haríamos las pruebas con Menéame (también hablamos de dinero, pero esto no interesa a nadie 😉 ).

Las pruebas consistieron en instalarlo primero en sus servidores e implementar las plantillas para reemplazar el código HTML de print_summary() de las clases Post (las notas) y Comment (los comentarios). Una vez me confirmo funcionaban en su servidor, el viernes 6 de agosto (hace cinco días) lo instalamos en los servidores de Menéame para hacer las primeras pruebas con datos reales. Fueron sorprendentes.

A parti de ese momento se aceleró y en menos de dos días corregimos bugs, lo optimizamos aún más y en la madrugada del domingo al lunes creamos la versión 4 de menéame en el svn y migramos  el servidor en «porducción» al sistema de plantillas. Por ahora sólo con esos dos templates, pero poco a poco vamos migrando a nuevos templates (ya tenemos seis).

Vale, vale ¿pero qué es el Haanga?

Un sistema de plantillas, software libre, con la conocida sintaxis de Django o I2O, con algunas extensiones necesarias para Menéame (como tratar uniformemente objetos y diccionarios, facilitar la traducción con el GNU gettext, ejecutar funciones de forma controlada, pre definir variables globales, eliminar los espacios de sangrados en la plantilla…). Está desarrollado por César Rodas a pedido nuestro para cubrir nuestras necesidades, pero se hizo de tal forma que pueda ser fácilmente integrado en cualquier proyecto PHP de la misma forma en que se integró en Menéame.

Por ese interés de que sea de uso genérico, se mantendrá como proyecto independiente, liderado por César y en su propio repositorio GIT.

Su funcionamiento es simple:

  • Se llama a una función para inicializar variables básicas, como el directorio donde almacenará los ficheros PHP. Por ejemplo en Menéame:
    /* Load template engine here */
    $config = array(
    	'template_dir' => mnmpath.'/'.$globals['haanga_templates'],
    	'cache_dir' =>  $globals['haanga_cache'] .'/Haanga/'.$_SERVER['HTTP_HOST'],
    	'autoload' => FALSE, /* Don't use Haanga's autoloader */
    	'bootstrap' => 'haanga_bootstrap',
    	'compiler' => array( /* opts for the tpl compiler */
    		'if_empty' => FALSE,
    		'autoescape' => FALSE,
    		'strip_whitespace' => TRUE,
    		'allow_exec'  => TRUE,
    		'global' => array('globals', 'current_user'),
    	),
    	'use_hash_filename' => FALSE, /* don't use hash filename for generated php */
    );
    
    require mnminclude.'Haanga.php';
    Haanga::configure($config);
    
  • Se llama a la función para generar la salida en HTML:
        $vars = compact('title', 'greeting', 'id');
        return Haanga::Load('header.html', $vars);
    
  • Haanga::Load verifica si existe el fichero de caché PHP y si es más nuevo que la plantilla. Si no se así, carga el compilador, genera el PHP, lo almacena y lo evalúa.

El código generado es muy eficiente, elimina los espacios innecesarios, no hace cambios de contexto, usa el echo –es construcción del lenguaje–, no usa comillas dobles para los strings. El template más complicado y largo que tenemos por ahora es el header.html, genera las cabeceras XHML y el HTML de los menús superiores. Este es el código generado en PHP, se puede ver que es prácticamente imposible hacerlo más eficiente (diría que imposible, pero seguro se nos escapan algunos trucos que no conocemos).

Actualizado: la plantilla de «links» es la más complicada por ahora, el código generado.

Desde que está funcionando en Menéame no hemos notado variación considerable (es muy difícil medir con precisión tan fina) con el sistema sin plantillas. Hay un pequeño overhead en la verficación de fechas de los ficheros originales y el cache compilado, pero muchas veces se ve compensado porque el código generado es más óptimo que el original programado manualmente a base de echo.

¿Qué falta?

Faltan implementar algunos detalles que queremos para Menéame, como el include condicional de otra plantilla (será la etiqueta try_include), como no usamos en Menéame el sistema de herencia/bloques (para reducir latencias y consumo de memoria, eso da para otro apunte) no lo tenemos probados en «caso real», pero están implementados y superan los unit tests.

Lo que sí falta es documentarlo y traducir esta documentación al inglés. Lo que queráis colaborar o probar, poneros en contacto con César: crodas en php.net.

Si tenéis sitios PHP con mucho tráfico/carga y probáis el Haanga, seguro que quedaréis muy contentos. En Menéame nos está cambiando la vida… bueno, es una exageración, pero nos divierte mogollón.

Cuando el problema del hardware se convierte en sólo de software

12 miércoles May 2010

Posted by gallir in desarrollo, internet, menéame

≈ 23 comentarios

Etiquetas

amazon, aws, ec2, menéame

Disclaimer: No pensaba escribir este apunte porque me parece que es publicidad gratuita a Amazon (y sus servicios AWS), que ya es una empresa de las gordas y dominantes en el mercado… y no me regalaron, ni me regalarán, ni una triste pegatina. Pero lo escribo para compartir experiencia, y que conste en acta que no recibiremos ni unas gracias por este apunte.

Hace un tiempo escribí cómo montamos Menéame a Amazon AWS, y cómo decidimos cambiar de Apache+lighttpd a NGinx, ahora llevamos casi cinco meses de funcionamiento en Amazon AWS y la experiencia no podría haber sido más satisfactoria (aunque con pequeños problemas, relatados al final).

Ejemplos de cambios en servidores

Creo que lo últimos cambios que hicimos son ejemplos claros de las ventajas de no tener que lidiar con hardware y limitarnos a solucionar problemas de software (que siempre tiene solución, si sabes programar).

Nuestra intención era migrar los servidores a Ubuntu Lucid en cuando esta saliese por tres razones fundamentales: es LTS (soporte a largo plazo), el PHP 5.3 que trae soporta conexiones persistentes a MySQL usando las nuevas librerías mysqli (que son las que usamos, más eficientes y elegantes que la anterior) y el arranque es mucho más rápido (importante para las instancias web que se crean dinámicamente según la carga –con el AutoScaler–).

El primer paso fue migrar las instancias webs, para ello tuve que arrancar un instancia con la nueva imagen (AMI) oficial de Ubuntu Lucid para Amazon, instalar los paquetes necesarios (básicamente NGInx y php5), configurarlas (fundamentalmente el NFS y el servicio SMTP), generar una nueva AMI y cambiar la configuración del AutroScaler (dos líneas de comandos). Todo eso me llevó unos dos horas de trabajo y ya teníamos la Lucid con 0 segundos de interrupción (diría que con 0 conexiones fallidas)… a un coste de 0.18€ por las dos horas de instancia adicionales.

El segundo paso fue más gordo, migrar el servidor secundario (aws1) que hace de slave del MySQL (para backups e indexación del Sphinx), de buscador (el Sphynx), DNS secundario y backups diarios a S3. Esta instancia estaba antes como «normal», es decir sin almacenamiento persistente (EBS, o Elastic Block Storage), la idea era ponerla con EBS dado la complejidad de los servicios que presta. Pues la sorpresa fue que Canonical ya genera imágenes oficiales de Ubuntu preparadas para EBS (antes era un proceso manual un poco tedioso, es espectacular el servicio de Canonical sobre Amazon EC2 y la smejoras que introducen).

Este cambio también llevó poco tiempo, menos de dos horas para preparar todo (lo que más tiempo llevó fue la preparación del slave de MySql) y un par de horas más de pruebas. Cuando estuvo preparada lo único que hubo que hacer fue cambiar la IP fija (Elastic IP) para la nueva instancia, et voilà. Cero segundos de interrupción, a un coste de unos 0.36€.

Hace sólo uno días me decidí a optimizar la gestión de cache de imágenes (miniaturas y avatares). Estas se guardan en S3, pero como el coste de conexión es demasiado elevado para ficheros pequeños no tiene sentido –y es extremadamente caro– servirlas desde S3, así que se guarda una copia cache (que se genera/regenera automáticamente a partir de los originales en S3) en un disco montado por NFS. El servidor de NFS lo hacía la misma instancia que el servidor central de base de datos (aws0), la idea era moverlo a aws1 y así descargar el tráfico de red para ganar unos microsegundos con las conexiones de mysql y distribuir mejor el NFS del código fuente PHP (que sigue en aws0) con las imágenes estáticas (que además pueden tener más tiempo de cache NFS, configurable con los parámetros acregmin, aregmax, acdirmin, acdirmax o actimeo).

Lo único que hubo que hacer es generar una nueva AMI para las instancias web con el nuevo punto de montaje (es menor de media hora de trabajo, a 0.09€ la hora o fracción), forzar al arranque con las nuevas instancias y cuando todas ya eran la nueva cambiar un enlace simbólico en aws0 para apuntar el cache al nuevo directorio. Et voilà. Funciona así ahora, ganamos unos pocos microsegundos, con cero segundos de interrupción.

Situación general

Aquí tenéis la carga de aws0 (servidor de base de datos). Veréis que la carga es baja, muy estable y predecible.

Carga 24hs de aws0

Esta es la carga de aws1, los picos son de la indexación del Sphinx para las búsquedas (casi 7 millones de comentarios, casi 1 millón de enlaces y más de 100.000 notas):

Carga aws1

Carga 24hs de aws1

El siguiente es el estado de las instancias a estas horas (0 hs del miércoles). Se puede ver las dos instancias EBS (aws0 la large, aws1 la small) y las cuatro instancias de servidores web en marcha.

Instancias EC2

Y este es el gráfico de carga de un día de una instancia web.

Carga 24hs de una instancia web

Nota: me hice un pequeño script para poder monitorizar al minuto el estado de las instancias webs desde mi teléfono, es públicamente accesible: m.meneame.net/ec2.php

Rendimiento general

Una de las grandes dudas (y pegas) que teníamos para migrar a Amazon es que al estar situado en Dublin aumenta la ditancia, el número de saltos por routers y quizás las latencias introducidas por las redes virtuales, firewalls y balanceadores de carga. De hecho sólo el ping hacia una instancia casi triplica lo que teníamos en España (Ferca, luego Acens), pasó de 20 y pico milisegundos a unos 60 a EC2 Dublin.

Sin embargo creo que nadie se quejará de la velocidad de acceso y visualización de Menéame.

Tiene mucho que ver las optimizaciones que hemos hecho, como la separación de imágenes estáticas en dominio independiente, mejoras en el código, en las consultas a la base de datos, ajuste del NGInx, php-fastcgi, compresión del HTML, y cache de PHP (XCache). Pero también ayuda a que los balanceadores de carga (usan varios para cada «dominio») de Amazon funcionan muy bien, tienen conexiones persistentes y unos firewall muy bien configurados que no sólo lo hacen ir rápido, sino que es de un rendimiento predecible que evita que haya conexiones más lentas que son las que más dan la impresión de «lentitud».

En este sentido estamos también muy satisfechos. Sí, tienes que ir con cuidado porque no tiene sentido sobredimensionar el «hardware virtual» –además creo que no se ganaría casi nada– para solventar los problemas del software o mal diseño de base de datos, pero una vez hallados y solucionados los pocos cuellos de botella, funciona todo como una seda.

Servicios y costes

Cuando estábamos en Ferca/Acens teníamos dos servidores, uno muy potente (2 Quad Core) y otro menos (Duo). Teníamos un muy buen precio, unos 700€/mes todo incluido. Pero teníamos problemas muy difíciles de solucionar:

  • Aunque íbamos muy sobrados, en horas picos o eventos excepcionales el Apache nos saturaba ambas máquinas, como en las finales de la Copa de Europa de fútbol que tuvimos que alquilar temporalmente servidores en Amazon EC2, aunque con latencias muy altas a la base de datos –estaba replicada en Amazon, pero las actualziaciones iban al central en Ferca/Acens–.
  • No teníamos servicio de «backups externos» y cifrados.
  • Poner un balanceador de carga dedicado nos hubiese costado mucho dinero.
  • Teníamos problemas en poner más servidores conectados a la misma red privada (por que no había espacio en el rack, porque había que ir y poner un switch específico, porque obligaba a paradas… etc.).
  • Cada vez que necesitábamos algo puntual era un largo proceso de conversaciones y negociaciones, a tal punto que muchas de las cosas eran imposibles de contratar porque se escapaba a lo que considerábamos un presupuesto razonable.
  • Problemas constantes de «mala configuración» del firewall del CPD que nos bloqueaba conexiones (suponemos porque el número de conexiones era más elevada que la media considerada «normal», aunque nunca lo supimos bien del todo).

Al momento que migramos a Amazon todos esos problemas se solucionaron:

  • Tenemos S3 para copias, backups y almacenamiento permanente.
  • Tenemos balanceador de carga de muy buena calidad, incluso configurable con «session stickiness».
  • Podemos habilitar un CDN con los mismos costes que las conexiones S3 (no la usamos).
  • Podemos escalar automáticamente para dar buen servicio sin malgastar el dinero.
  • Disponemos de los servidores que nos hacen falta en no más de un par de minutos, a muy bajo coste.
  • Sistemas de discos (EBS) de muy alta fiabilidad.
  • Control de las IPs (Elastic IPs) y a qué servidor le asignas, puedes cambiarla en cualquier momento, e incluso puedes solicitar la resolución DNS inversa para cada una de ellas.
  • Sistema de seguridad/firewall muy potente, seguro y casi transparente de usar (por ejemplo, las instancias que están en un mismo grupo automáticamente tienen conectividad entre ellas). Al mismo tiempo todas tus instancias están aisladas del resto de instancias.
  • Absolutamente todo es controlable con software (la consola web para la mayoría, para cosas muy específicas las líneas de comandos, el API disponible en varios lenguajes para los scripts de monitorización y control).
  • No tenemos que negociar nada con nadie, todos los servicios –para todo el mundo– están bien claros y especificados, y los precios no son negociables, por nadie.
  • En todo este tiempo no tuvimos ninguna incidencia (salvo problemas de conectividad Internet esporádicos con algunas regiones o ISPs, pero esto pasa con cualquier hosting).

Todos estos servicios disponibles, con la flexibilidad de usarlos como mejor te parezca nos permitió implementar nuevas funcionalidades en Menéame que antes se nos hacían cuesta arriba por la necesidad de tener más hardware [infrautilizado]:

  1. Buscador extendido a comentarios y notas (algo que hace tiempo pedían los usuarios).
  2. Almacenamiento de imágenes y avatares en S3 que generación automática de cache en nuestros discos, los que nos hizo olvidar del problema de almacenar y hacer backups de ficheros.
  3. Cambios en la infraestructura (como de Apache a lighttpd, luego a NGInx con fastcgi, versiones de Ubuntu, etc.) y programas o configuración sin tener que interrumpir el servicio: se hace de forma paralela y luego se hace el switch.
  4. Compramos tranquilidad: duermo mucho más tranquilo, y aunque España llegue a la final del mundial no tendré que preocuparme de buscar estresado y bajo presión una solución a la sobrecarga de la hora posterior del partido.

Todo el que llegó hasta aquí seguramente se pregunta, ¿cuánto nos cuesta todo este tinglado adicional? Aquí tenéis la «factura» del mes de abril, en dólares, haced la conversión a euros 🙂 [1]

Pagos Amazon abril 2010

Por eso suelo decir, ¿qué hacéis todavía lidiando con hardware y negociando interminablemente para tener un servicio de backup o de balanceo de carga?

Nota: Esto funciona porque Amazon AWS está muy bien diseñado y su servicio es de calidad constante y predecible. Sé que hay varios más, pero no conozco cómo funcionan.

Los problemas

Por supuesto no todos fueron ventajas, tuvimos algunos problemas:

  1. La infraestructura del balanceador de carga es sofisticada, no es sólo un «cacharro» con una IP, son balanceadores distribuidos y se selecciona el mejor dependiendo desde la zona de conexión y el estado de la infraestructura de Amazon. Eso hace que cuando asignas un balanceador no te dan una dirección IP, sino un hostname que debes usarlo como CNAME. Eso impide que puedas usar una zona de primer nivel –el estándar de DNS no lo admite–por ello tuvimos que migrar el web de meneame.net a http://www.meneame.net (con la consiguiente penalización que sufrimos de Google, una caída de visitas –menos del 10% de visitas vienen de Google por búsquedas que no sean «meneame»–, hasta en el PageRank –creo que bajó hasta 6, no sé cómo está ahora–, supongo que con el tiempo y las redirecciones permanentes se recuperará, afortunadamente no nos afectó tanto ya que creo nunca superamos el 12-15% de visitas desde Google).
  2. Como Amazon sufrió abusos de spammers que alquilaban instancias sólo para envíos masivos de emails. La misma Amazon dió de alta todas sus direcciones IP en las organizaciones de listas negras e impedía enviar más de unos pocos correos desde sus instancias. Aunque puedes solicitar la apertura, seguían apareciendo las IPs en Spamhaus, lo que nos impidió enviar correos directamente. Ahora creo que ya lo han cambiado [2] (incluso ya resuelven la inversa de Elastic IP al dominio quele indiques, porbado por ejemplo la inversa de 79.125.22.108). Nosotros hemos tenido que hacerlo vía SMTPAuth.com que funciona muy bien, por lo que todavía no hemos pensado en hacerlo desde nuestros servidores (también tenemos cuenta en SendGrid.com, hablan muy bien de ellos y ofrecen hasta gráficas y estadísticas de quiénes leen los correos o los clics de los receptores).
  3. Desde el servidor web detrás del balanceador no son visibles directamente las IP de los navegadores (es crítico para el control de abusos del Menéame), sino a través de la cabecera HTTP X-Forwarded-For. Afortunadamente en Menéame ya hacíamos control de proxies para permitir votos desde ordenadores detrás de los proxies transparentes de Telefónica y de los teléfonos con conexión IP que salen por proxies (como todos los de Vodafone). Así que sólo usamos la misma función, pero simplificada para que sea más rápida:
  4. function check_ip_behind_load_balancer() {
        // It's similar to behind_proxy but faster and only takes in account
        // the last IP in the list.
        // Used to get the real IP behind a load balancer like Amazon ELB
        // WARN: does not check for valid IP, it must be a trusted proxy/load balancer
        if ($_SERVER["HTTP_X_FORWARDED_FOR"]) {
            $ips = preg_split('/[, ]/', $_SERVER["HTTP_X_FORWARDED_FOR"],
                                             -1, PREG_SPLIT_NO_EMPTY);
            $ip = array_pop($ips);
            if ($ip) return $ip;
        }
        return $_SERVER["REMOTE_ADDR"];
    }
    
  5. En el caso de servidores web seguros (SSL) el problema anterior es más difícil de solucionar. Como la conexión es cifrada el balanceador no puede agregar cabeceras HTTP, por lo que es imposible averiguar la IP desde el servidor. Aquí hay tres opciones: 1) no preocuparte de la IP, 2) dejar el servidor seguro fuera del balanceador, 3) buscar otro método. Como en Menéame se necesita la IP para control y soy un purista de arquitecturas –todos o ninguno– me decidí por la tercera. Cuando se necesita pasar por conexión segura se hace un formulario desde el servidor normal donde se incluye la IP de origen más un hash para controlar que no se manipula. Así el servidor seguro siempre recibe la IP –verificable– como un campo oculto del formulario (y esta es la razón que no se «salta» directamente al servidor seguro sino desde el «action» en un formulario).
  6. Los umbrales y reglas del AutoScaler funcionan bien, salvo para el escalado hacia abajo. Las reglas se definen con un umbral bajo y uno alto. Si la carga seleccionada (en nuestro caso uso de CPU) supera el umbral alto, cre nuevas instancias, si es inferior al bajo mata instancias. El problema es el siguiente, en nuestro caso el bajo es 30% y el alto 75%. Supongamos que hay cuatro instancias al 40% (carga total = 160%), el autoescalador no decrementará hasta llegar al 30% aunque si quita una queda muy por debajo del 75% (con tres quedaría en 53% cada una). Así no se optimiza muy bien el uso de recursos, ni los costes. Amazon dice que introducirá «reglas de usuarios», mientras tanto yo lo solucioné con un script bastante simple que hace esos cálculos. Si la carga total con una instancia menos es inferior a un «umbral intermedio» (60% en nuestro caso) y hay más de dos instancias en marcha, entonces ordena al AutoScaler que baje termine una instancia. Estos cálculos son visibles en m.meneame.net/ec2.php, esos valores son generados por este script adicional de control de escalado.
  7. No dan factura oficial, hasta ahora no hemos tenido problemas con ellas, al menos Benjamí, nuestras contables ni Hacienda no se quejaron todavía, creo 😉

Esos son los seis problemas fundamentales que hemos tenido, salvo el sexto, los demás son todos solucionables con un poco de programación.

[1] Tenemos tres instancias «reservadas», es decir se paga una cantidad por adelantado (uno o tres años) y se obtienen muchos mejores precios. El ahorro anual es exactamente el 30% sobre el precio de lista.

[2] Acabo de confirmarlo (12/mayo), ya no aparecen nuestras IPs en las listas de Spamhaus.

El karma y la Ley de Benford

25 domingo Abr 2010

Posted by gallir in ciencia, menéame, pijadas

≈ 16 comentarios

Etiquetas

ley de benford, menéame

Hoy acabé de leer The Drunkard’s Walk: How Randomness Rules Our Lives (libro duro en algunas partes, pero muy bueno), uno de los temas que toca el libro es la Ley de Benford. Ésta aparece en determinadas series resultado de operaciones acumulativas (especialmente los datos financieros), los primeros dígitos de los números resultates no siguen una distribución uniforme.

La distribución es aproximadamente la siguiente para números de base 10:

d p
1 30.10%
2 17.60%
3 12.50%
4 9.70%
5 7.90%
6 6.70%
7 5.80%
8 5.10%
9 4.60%

La gráfica (de la Wikipedia) queda:

Lo interesante de esta ley es que se usa para auditorías financieras e incluso es admisible como prueba en casis criminales en EEUU. Se basa en que los «balances» financieros (o evolución de precios de la bolsa, subastas en eBay, incluso número de enlaces en Delicious) deben seguir esta ley, pero cuando se estafa manipulando los resultados se tiende a poner números aleatorios. Un ejemplo muy mencionado es que se usó para detectar el fraude de un emprendedor, Kevin Lawrence, que se gastó fraudulentamente 91 millones de dólares de sus inversores, también se la mencionó como evidencia de fraude es las lecciones de Irán en 2009, y la usaron para analizar las declaraciones de renta de Clinton (que las pasó correctamente).

Como me llamó la atención, me pregunté si el karma del Menéame seguiría la Ley de Benford. Si fuese así la usaría como evidencia que no hay fraude (y si no me callaría la boca :roll:).

Claramente no podía usar el karma de las noticias publicadas, ya que el karma de publicación es aproximadamente el mismo para todas (más o menos 500-550 de media) y éste se deja de incrementar una vez se publicó. Así que lo hice con todas las noticias que quedaron en pendientes.

La tabla resultante es la siguiente (nota: hay algunos ceros, en los primeros meses no se insertaba el voto del autor automáticamente, y otras que con la suma de positivos y negativos quedan en cero):

d Total p
0 4070 0.7
1 178254 32
2 95631 17.2
3 60085 10.8
4 47170 8.5
5 40710 7.3
6 38589 6.9
7 34191 6.1
8 30738 5.5
9 27251 4.9

Cumple casi a la perfección con la Ley de Benford ideal:

Los presuntos emails en nombre de Ramoncín®

13 miércoles Ene 2010

Posted by gallir in internet, legales, menéame

≈ 44 comentarios

Etiquetas

amenazas, menéame, ramoncín


El lunes pasado, entre las 14:01h y las 16:56h del lunes 11 de enero recibí en mi dirección personal 29 correos electrónicos enviados por Jonathan P. exigiendo que eliminemos comentarios que nos dejaban en «situación de ilegalidad» [sic].

Aquí la copia literal (sólo se eliminó un nombre de personal) de todos los correos que recibí (en el blog de Menéame se hizo un breve comunicado para aclarar la situación según las recomendaciones de los abogados).

Esto es lo que exigían:

[…]

1.-  Les requerimos fehacientemente para que en un plazo no superior a 24 horas procedan a la eliminación total de los mencionados comentarios, pues en caso contrario nos veríamos obligados a ejercitar en nombre de nuestro cliente, cuantas acciones en derecho nos asistan en defensa de sus intereses, dada la grave vulneración del honor de mi representado que supone dicho contenido, pudiendo hallarnos frente a un posible delito de injurias e incluso de calumnias (Artículo: 208 C.P.),    con agravante de medio y publicidad (Art 209 C.P),  del cual serían Ustedes completamente co-responsables al reproducirlos en su medio Web, en caso de no retirarlos tras el presente requerimiento.

Tras lo detallado, les solicitamos las siguientes acciones:

– Eliminación de todos aquellos comentarios escritos bajo artículos que alberga su dominio o espacio web sobre nuestro cliente o marca que supongan una vulneración del honor de mi representado y su control posterior.

– Eliminación de metadatos y tags con referencia a los comentarios sobre mi representado que pudieran ayudar a la indexación de las páginas en los buscadores, en particular aquellos comentarios que supongan una vulneración del honor de mi representado.

– Todas aquellas acciones que de buena fe tenga a bien realizar para normalizar la situación de ilegalidad en la que Uds. están incurriendo.

– Así mismo le solicito que extienda este requerimiento en todos y cada uno de los espacios web donde Uds. estén incurriendo en actos similares en contra de nuestro cliente o marca .

Esperando que su buen juicio haga innecesaria cualquier otra acción, y esperando que entienda los motivos que le han llevado a nuestro cliente y titular de marca a solicitar la eliminación de dichos comentarios, aprovechamos la ocasión para saludarles.

[…]

Además, aunque hacen copy&paste de contenido externo, esto es lo que se atribuyen:

ATENCIÓN / Les comunicamos que la redacción del presente requerimiento tiene en si mismo propiedad Intelectual que nos corresponde en exclusiva;  y por tanto no les autorizamos  a su reproducción, distribución, comunicación pública ni transformación bajo ningún medio sin autorización previa.

Los correos fueron envíados desde una dirección 212.145.169.xxx localizada en Vigo, diferente a la ciudad del bufete (usaron sistemas de SalesForce.com para el envío masivo de los emails). El dominio de la dirección de correo del que enviaba era de redpoints.es.

← Entradas anteriores

Comprar el libro

Principios y algoritmos de concurrencia

gallir@twitter

  • RT @eduardosuarez: Está bien recordar (una vez más) la podredumbre moral de Evo Morales, capaz de llamar hermano al carnicero de Mariúpol y… 1 day ago
  • A diferencia de miembros del gobierno que... Oh, caramba. elconfidencial.com/tecnologia/202… 1 day ago
  • RT @KanekoaTheGreat: Bill Gates has donated more than $319 million to media organizations. How does this affect the news? https://t.co/eqVM… 1 day ago
  • RT @MiguelGTormo: Alaska es lo mejor del panorama cultureta de España, ella y Antonio Banderas, están muy muy muy por encima de la inmensa… 1 day ago
Follow @gallir

RSS Notas recientes

  • Se ha producido un error; es probable que la fuente esté fuera de servicio. Vuelve a intentarlo más tarde.

Archivos

Comentarios recientes

PM en Cuidado con las «clever soluti…
Me matan si no traba… en Cuando el periodismo cede el c…
surco en Cuando el periodismo cede el c…
pancho pérez (@lonch… en Cuando el periodismo cede el c…
Fernando en Cuando el periodismo cede el c…
@beoxman en Cuando el periodismo cede el c…
gallir en Cuando el periodismo cede el c…
Jan Smite en Cuando el periodismo cede el c…
Alejandro en Cuando el periodismo cede el c…
Galletor en Cuando el periodismo cede el c…

Meta

  • Registro
  • Acceder
  • Feed de entradas
  • Feed de comentarios
  • WordPress.com

Licencia

Creative Commons License
Esta obra está bajo una licencia de Creative Commons.

Blog de WordPress.com.

  • Seguir Siguiendo
    • Ricardo Galli, de software
    • Únete a 667 seguidores más
    • ¿Ya tienes una cuenta de WordPress.com? Accede ahora.
    • Ricardo Galli, de software
    • Personalizar
    • Seguir Siguiendo
    • Regístrate
    • Acceder
    • Denunciar este contenido
    • Ver sitio web en el Lector
    • Gestionar las suscripciones
    • Contraer esta barra
 

Cargando comentarios...