Tecnologías adoptadas

imagen / Nathan O'Nions
  
4 de Agosto de 2015   3  

¡Hola amigos! ¿Han notado algo diferente en el sitio? Por supuesto! :) y estamos felices de compartirlo con ustedes. Esta nueva versión de Pythonízame se comenzó a construir aproximadamente unos 2 meses atrás en nuestros ratos libres, pensando en generar una mejor experiencia de lectura, al mismo tiempo que garantizamos una plataforma con mayor estabilidad y que nos permita crecer para integrar mejor contenido para todos ustedes.

Es por esta razón que hoy les compartimos este proceso de migración que sufrió Pythonízame.

¿Por qué migrar y no quedarnos con Wordpress?

Sin duda alguna Wordpress fue la mejor opción cuando comencé con la idea de crear este blog, la facilidad de instalación , pocos requisitos para liberar en producción y su administrador de contenido me facilitaron muchas tareas para probar mi idea y lanzarla sin pensarlo mucho.

Pero siempre existen algunos detalles que no pueden ser controlados al 100% cuando utilizas una herramienta que solo se especializa en gestión de contenido (CMS), si deseamos integrar módulos personalizados, tenemos que ir en busca de plugins que lo hagan por nosotros y no siempre nos quedará ajustado a nuestras necesidades.

Por esta razón,  después de un año con el proyecto, se comenzó a gestar la idea de crear un sitio totalmente escrito en Python que nos permita construir todo lo que se nos venía a la mente y que no siempre era posible con Wordpress

¡Bienvenido Python 3!

Hace algunos años salió oficialmente la versión 3 de Python y hoy en día todavía no se ha logrado la adopción total por parte de los programadores, debido a que Python 2.7 tiene muy buen contenido en internet: documentación, foros, tutoriales, librerías, etc., que hacen que sea una buena opción para seguir utilizando.

Nosotros decidimos utilizar Python 3 en lugar de Python 2.7 por varias razones:

1. Promover su uso entre los desarrolladores de la comunidad

2. Varias librerías y frameworks poco a poco dejarán atrás la compatibilidad con Python 2.7.X y se concentrarán en el soporte para Python 3.

3. Python 3 viene con más pilas incluidas.

¡Django al rescate!

Una vez decidido migrarnos a Python, comenzamos la búsqueda de un framework web que nos permita construirlo sin tantas complicaciones y que nos ofrezca grandes posibilidades para escalarlo sin problemas.

De entre todas las opciones disponibles, nos quedamos con 2 al final: Flask y Django, cada una con ventajas y desventajas que hicieron de la decisión algo complicada.

Flask es un micro framework web que tuvimos como primera opción ya que es muy ligero y sus tiempos de respuesta son más veloces si las comparamos con el framework Django. Para el manejo de datos identificamos que sería posible adoptar el ORM Peewee y la extensión Flask-admin para  tener una plataforma en la cual podamos escribir nuestras publicaciones.

Después del análisis de Flask, continué estudiando los casos de uso de ambos frameworks y al final me quedé con Django porque existen varios proyectos en internet (Instagram, Pinterest y Disqus) que usan Django y sin tantas complicaciones han podido escalar para soportar grandes cantidades de volúmenes de datos. Django era la opción ideal!

¿Por qué PostGreSQL y no un sistema NoSQL?

La opción más lógica podríamos pensar que sería utilizar un motor de base de datos no relacional (NoSQL) como MongoDB. Este tipo de bases de datos utilizan el sistema de almacenamiento de documentos que permiten cambiar las estructuras de sus datos de manera flexible y tantas veces el programador desee sin afectar a la totalidad de los registros.

Otra característica muy importante de los sistemas NoSQL es el tiempo de respuesta en lectura y escritura. Si comparamos los tiempos de escritura entre un sistema tradicional de SQL y uno No relacional, nos asombraríamos de la gran diferencia que existe, sin embargo, aún no me convencía utilizar NoSQL.

Analicé varios casos de uso y descubrí algo interesante: grandes compañías como Instagram, aseguran que ellos tienen como sistema de almacenamiento principal a PostGreSQL, preferían tener sus datos importantes en un sistema tradicional para asegurar la integridad de sus datos. Otro caso similar es Pinterest que utiliza MySQL. Estas 2 compañías tienen algo en común:

1. Manejan sistemas SQL para almacenar sus datos principales.

2. Utilizan NoSQL para datos secundarios.

Con este análisis quedé totalmente convencido de utilizar un sistema SQL para garantizar la integridad de los datos de nuestra plataforma y al final elegí PostGreSQL debido a que, en su versión 9.4, integra soporte para almacenar estructuras de datos en Hstore, Json y JsonB, lo que permite utilizar a PostGreSQL con características NoSQL y alcanzar velocidades similares a otros motores como MongoDB sin tanto esfuerzo.

Otras tecnologías utilizadas.

Ahora enlistaremos las tecnologías que nos ayudan a tener este sitio en óptimas condiciones:

Redis. Nos permite almacenar datos en caché y aumentar considerablemente los tiempos de respuesta del sistema y liberar cargas de lectura en la base de datos.

Bootstrap. Este framework frontend nos facilitó en gran medida toda la maquetación del sitio. Sin tanta complicación pudimos obtener una plataforma más limpia y elegante.

Javascript con Jquery. En un sitio web no puede faltar el uso del lenguaje Javascript. Decidimos utilizar Jquery para el consumo de pequeñas webservices y por el tema de optimización de SEO en el sitio.

LESS y CSS. Gaspar Dzul, nuestro front end developer, utiliza Less para el manejo de los estilos y asegura que esto le ha permitido maquetar el sitio con mucho más orden y ahorrando muchísimas líneas de código.

NGINX y Gunicorn. Para liberar nuestra plataforma elegimos estas 2 tecnologías ya que son mucho más ligeras que su competidor directo Apache.

Amazon S3. El almacenamiento de los media files se van directamente a un bucket en Amazon S3 y no son alojados en el disco del servidor. Esto nos permite balancear la carga de nuestro servidor.

sorl-thumbnail. Permite crear thumbnails de cada una de las imágenes que son almacenadas en el sistema. Con esto generamos menos carga de datos en cada una de las peticiones de nuestro blog.

 

Como podrás observar, cada una de las tecnologías elegidas han pasado por un proceso muy difícil de elección. Seguiremos trabajando día a día con el mismo ánimo de siempre para traerte a diario todas las noticias que acontecen en el mundo Python! Gracias.



Alex Dzul

FullStack Python / Django Developer. #jslove

Temas relacionados