22 de Noviembre, 2012

Go!

Esta semana he tenido la oportunidad de trabajar en una herramienta interna desarrollada en Go, que hemos publicado con una licencia Open Source: tcp_fallback.

En Memset trabajamos con LVS y estamos muy contentos con los resultados, pero lo cierto es que es bastante complicado, y dada nuestra arquitectura de red no resulta útil para servicios internos en los que solo queremos implementar un failover sencillo (cuando el servicio principal falla temporalmente, usamos una réplica del principal que está esperando en caliente).

El caso es que tenemos varias réplicas de una base de datos MySQL, pero no hemos encontrado una solución que nos permitiera implementar ese failover en espacio de usuario sin complicar el código del cliente (usando Django, aunque existe alguna propuesta).

En realidad no es muy complicado: un servicio que se presente en lugar de MySQL y dirija las peticiones al servidor real, o a la réplica si hay algún problema. Lo ideal sería usar MySQL Proxy, pero trabajar con software así con la etiqueta alpha bien en grande, no es buena idea :S.

Así que aprovechando que parte del equipo ya había trabajado con Go (y alguien pensó que no sería tan complicado :D), en un par de días teníamos un prototipo que ha resultado ser exáctamente lo que estábamos buscando.

Es mi primer contacto serio con Go, aunque algo había mirado por curiosidad y antes de que llegara a la versión 1 (cuando el proyecto evolucionaba a tanta velocidad que tu código dejaba de compilar de una semana para otra), y me ha sorprendido bastante lo fácil que ha sido implementar una solución tan potente.

El lenguaje tiene cosas raras que hacen la sitaxis algo fea y algunos detalles que me dan sensación de poca madurez, pero si tienes soltura con C y programación concurrente, no deberías tener problemas en empezar a manejarte con Go (aunque tener a alguien con experiencia en el proyecto ha sido esencial; no es lo mismo hacer cuatro pruebas que desarrollar algo que vas a usar en producción).

No sé si nosotros seguiremos añadiendo componentes en Go a nuestra infraestructura (la mayoría de nuestro equipo tiene un nivel muy alto con Python, y es el lenguaje que usamos para todo nuestro desarrollo), pero el potencial del lenguaje es enorme para temas de redes y concurrencia, especialmente para tareas de sistemas e infraestructura; lo cual no es una casualidad si pensamos que es uno de los motivos por los cuales Google ha creado el lenguaje.

Anotación por Juan J. Martínez, clasificada en: programming, go.

Hay 2 comentarios

Gravatar

Sería bueno que pudieras publicar o crear un tutorial de Go para los que no conocemos el lenguaje pero que nos interesaría aprenderlo.

Saludos.

por Carlos Aguilar, en 2012-11-26 04:36:58

Gravatar

La documentación oficial del lenguaje está muy bien, de hecho yo solo hice “el tour” y creo que es muy buena idea si ya se controla C/C++/Java/etc:

http://tour.golang.org/

Luego “Effective Go” sería el paso siguiente:

http://golang.org/doc/effective_go.html

por Juanjo, en 2012-11-26 08:14:57

Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.

Algunas anotaciones relacionadas: