|
| LAMP viene siendo desde un tiempo a esta parte la tecnología web por excelencia, combinando 4 de las grandes tecnologías disponibles para dicho entorno: Linux, Apache, MySQL y PHP. Sin embargo, a día de hoy existen otras tecnologías que, sin ser tan conocidas o divulgadas, podrían interesarte si estás pensando en iniciar un proyecto web. |
Si hacemos de LAMP algo más abstracto, nos damos cuenta de que combinamos:
- Sistema operativo
- Servidor web
- Base de datos
- Lenguaje de programación de servidor.
Sistema operativo
Si el blog se llama Usemos Linux, por algo será... En este caso no lo modificaría, ya que GNU/Linux desde siempre se ha adaptado a la perfección a un entrono de aplicaciones web. Aun así, dependiendo del caso, podría interesar usar otro. No afectaría, ya que las otras tecnologías que voy a exponer son multiplataforma.Al menos sí sé que escogería una solución de software libre, y nunca pondría un servidor Windows. He trabajado con este tipo de servidores y no me hace ninguna gracia tener que reiniciarlo, parando en consecuencia a todo un grupo empresarial, porque un programa para leer PDFs instalado en el mismo servidor haya recibido una actualización...
Lenguaje de programación de servidor
Python 3, sin lugar a dudas. Es un lenguaje que combina todas las filosofías que me encantan a la hora de programar, y que se centra en hacerle la vida más fácil al programador. Tanto es así que se ha acuñado el término pythónico (pythonic, en inglés) para referirse a ese estilo de programación que fomenta.Sumamente fácil de usar y de aprender, razonablemente rápido (para los casos en que necesites más velocidad, puedes extenderlo fácilmente con C++, por ejemplo), y, salvo muy contadas excepciones, cualquier programa que hagas con Python automáticamente será multiplataforma.
El único problema grave que plantea es la falta de retrocompatibilidad con las versiones 2.x de Python, pero por suerte las principales bibliotecas están migrando ya, así que no deberíamos echar de menos demasiadas cosas.
Otra de sus cosas buenas es que, aunque por su naturaleza flexible otorga mucha libertad, también intenta estandarizar muchas cosas a través de sus famosos PEPs. Por ejemplo, en el caso que nos ocupa, nos interesan especialmente los PEPs 249 y 3333, que estandarizan las llamadas a bases de datos por su DB-API v2.0, o el uso de la potente interfaz WSGI para aplicaciones web.
Servidor web
El tradicional cuello de botella de llevar a Python a la web ha sido el tener que ejecutar el intérprete. Para solventar esto, la forma más fácil es tener la aplicación WSGI corriendo constantemente, lo cual implicaría instalar mod_python o, preferiblemente, mod_wsgi en un servidor Apache. Quien quiera más información sobre esto, puede ver una interesante presentación sobre cómo evitar cuellos de botella en aplicaciones CGI con Python.Toda esta complicación nos la ahorramos con CherryPy, que a partir de su versión 3.2 incluye soporte para Python 3.
Se trata de una biblioteca muy ligera (y, sobre todo, muy pythónica) cuyo objetivo es permitirte diseñar aplicaciones web dinámicas en Python. Incluye muchas utilidades, siendo una de ellas precisamente un servidor HTTP de aplicaciones WSGI. De este modo tienes el servidor y tu aplicación corriendo bajo la misma instancia de Python, ahorrando recursos y calentamientos de cabeza.
Si lo que te preocupa es la velocidad, échale un ojo al test de velocidad. Comprobarás que no está nada mal. De hecho, el servidor web es una parte de la biblioteca que puede instalarse por separado, y hay quien dice que es el más rápido que hay ahora mismo.
Además, cualquier aplicación construida sobre CherryPy automáticamente se convierte en una aplicación WSGI, o sea que puedes combinarla fácilmente con otros programas y servidores WSGI.
Es muy configurable, algo interesante para los acostumbrados a configurar Apache, y es condenadamente fácil programar con él.
Base de datos
Desde luego, aquí sí que haría un cambio drástico. MySQL ha dejado de tener el soporte y desarrollo que tenía antes de que Oracle comprara Sun, algo lamentable pero lógico, teniendo en cuenta el modelo de negocio que está desarrollando Oracle respecto al software libre.Sin embargo, por suerte para todos, contamos con otras dos bases de datos que son mejores que MySQL en diferentes sentidos.
Para los que quieran un servidor de bases de datos (tal como lo es MySQL), recomiendo PostgreSQL, que a parte tiene muchas ventajas sobre MySQL. Por numerar algunas:
- Enteramente desarrollado por la comunidad, una comunidad muy activa.
- Licencia BSD, más permisiva.
- Permite que ciertos roles de usuarios hereden los permisos de otros.
- Mucho más control sobre los triggers:
- Permite escribirlos en distintos lenguajes (uno de ellos, mi querido Python 3).
- A parte de triggers por registro, como MySQL, también permite realizar triggers por sentencia y por columna.
- Permite triggers recursivos.
- Puedes poner puntos de guardado en medio de una transacción, y regresar a ellos en cualquier momento.
- Esquemas y bases de datos no son lo mismo.
- Permite restricciones (constraints) avanzadas.
- Puedes definir fácilmente nuevos tipos de datos.
- Permite tratar matrices de datos.
- Completas funciones con RegExps (expresiones regulares).
- Permite manejo de excepciones.
- Etc.
Tan solo son unas cuantas de las ventajas que tiene, pero ya veis que no son moco de pavo. La carencia de muchas de ellas en proyectos grandes me ha llevado muchas veces a tener que pelearme con las manías de MySQL como si de un vulgar M$ Access se tratase.
Ahora bien, ¿y si tu proyecto es más pequeño y no necesitas tantas características avanzadas? Tal vez tan solo necesitas almacenar ciertas configuraciones y te sería más cómodo usar una base de datos que, por ejemplo, un XML.
En ese caso, mi recomendación es SQLite, que últimamente está ganando mucho auge. En este caso, no hace falta ningún servidor. SQLite es una biblioteca que se encarga de crear y gestionar un fichero base-de-datos.db, en el cual se encuentra la base de datos íntegramente.
Varios programas y varias conexiones pueden acceder al mismo, ya se encarga SQLite de repartir la información y los accesos a cada uno. Respecto a los permisos, es sencillo: tienes los mismos permisos que tengas respecto al fichero. No necesitas más que chown y chmod para gestionarlos.
Tiene muchas menos funciones, y es bastante flexible en el tratamiento de los datos.
Para los que estén acostumbrados al genial phpMyAdmin, están sus correspondientes variantes phpPgAdmin y phpSQLiteAdmin.
Ya que aquí hablamos de integrarlo con Python 3, os interesará saber que disponemos de la biblioteca py-postgresql, y que SQLite 3 viene integrado en la biblioteca estándar. Ambos conectores siguen la DB-API v2.0.
Pero aún queda un largo camino...
Hay que tener en cuenta que una de las cosas que han hecho que LAMP sea tan extendido es la cantidad de hostings que lo ofrecen de forma muy barata o incluso gratuita. De aquí a que lleguemos a la misma situación en estas tecnologías que he expuesto todavía falta bastante tiempo. Supongo que el día que Debian Wheezy sea estable todo esto se facilitará bastante, pero habrá que tener paciencia... o un servidor propio, claro.Por cierto, que conste que esto no es más que mi selección personal. No quiere decir para nada que sea la única posible, ni la mejor. Ni siquiera que LAMP sea malo. De hecho... ¿tenéis alguna sugerencia mejor?


Comments: 1