Desarrollo backend en términos simples. Parte 2.
Nueva versión de Cassandra = más oportunidades, más desafíos
Artem: Cassandra es nuestra base de datos. Solíamos trabajar con la versión anterior, 2.. Ahora nos hemos movido a 3. : esto fue necesario para proveer la escalabilidad que requiere el sistema Onde.
Igor: Migrar a la nueva versión de Cassandra sin causar problemas fue imposible. La actualización fue larga y dolorosa, el nuevo driver funciona completamente diferente al anterior. Durante esta migración tuvimos cerca de 20 horas de tiempo fuera de servicio. Estuvimos trabajando día y noche para configurar el driver. Realmente fue una prioridad: de lo contrario, si no hubiéramos podido actualizar la versión de Cassandra, hubiéramos llegado a un cuello de botella dramático y habría sido un derroche total de tiempo y dinero en el futuro. Ahora que está hecho no podríamos estar más felices.
Gracias a este proceso doloroso, hemos mejorado enormemente nuestra comprensión de la implementación interna de la base de datos Cassandra y sus riesgos. Nos dimos cuenta de lo que estábamos haciendo mal y empezamos a mejorar algunas de las soluciones. Escribimos un framework para el trabajo flexible y conveniente con Cassandra e implementamos una desnormalización de datos flexible dentro de este framework.
Este enfoque permite a las soluciones en la nube escalar a tamaños muy grandes porque cuando los datos se normalizan, la escala es mucho más complicada y falla con más frecuencia. Ahora trabajamos con NoSQL. La base de datos está diseñada de la forma en que tu deseas leerla, y hay mucho espacio para escalarla. ¡Mágico!
Nuevo hardware, más potencia
Artem: Mejoramos el hardware también. Por ejemplo, implementamos un nuevo clúster de Cassandra en un hardware 2 veces más potente que antes.
El datacenter de Hetzner es muy confiable, pero no es inmune a la fuerza mayor. Por ejemplo, en algún momento del invierno pasado hubo un corte de energía allí, y nuestro servidor tuvo dos horas de tiempo fuera de servicio. No pudimos hacer nada al respecto. Fue muy frustrante. Ahora no ponemos todos nuestros huevos en una canasta. Gracias al nuevo hardware, podemos cambiar de Hetzner a G-Core presionando un solo botón. Esto hace que el sistema Onde sea mucho más sostenible que antes.
Igor: También hemos pasado de HDD a la última generación de SSD. El registro y la lectura de los datos se hicieron 25-100 veces más rápidos. El almacenamiento de datos es ahora a prueba de balas.
ZooKeeper para que el acceso exclusivo sea posible
Igor: ZooKeeper es una tecnología que permite bloquear a los conductores. Es necesario en las operaciones que involucran a los conductores. Controla que las operaciones no se realicen de forma simultánea y todo funcione de manera eficiente. Todos nuestros servidores han "acordado" que cuando acceden a cualquier entidad (un conductor o una billetera, por ejemplo), obtienen acceso exclusivo a ella. Sólo después de que se completa una operación, la liberan. ZooKeeper nos permite hacerlo.
Artem: ZooKeeper es una solución de nube a prueba de fallas. Funciona en tres servidores y, si uno de ellos falla, todos los demás reanudan el proceso automáticamente. ZooKeeper es una solución de Apache, una tecnología probada y muy confiable. Afortunadamente lo hemos aprendido muy rápido. Antes, el sistema era similar pero muy lento, todos los niños orinaban y se vestían por turnos, por así decirlo. Ahora el procesamiento de acceso exclusivo a entidades se acelera seriamente.
Sin embargo, todavía estamos buscando una solución ideal. ZooKeeper tiene sus limitaciones. Por ejemplo, un límite de rendimiento claro, que podría llegar a interponerse en nuestro camino. Necesitaríamos instalar como 100 servidores, y esto no se puede hacer con ZooKeeper. Nuestra prioridad ahora es buscar una mejor opción.
Pulsar: impresionante colaboración con la comunidad de desarrolladores
Apache Pulsar es un sistema de entrega de datos distribuidos que hemos implementado para hacer que nuestra plataforma sea más rápida. Pulsar nos permite entregar datos entre miles de usuarios en tiempo real. Como resultado de la integración, el sistema Onde funciona de 10 a 15 veces más rápido.
Artem: Nuestras aplicaciones y servidores se comunican entre sí mediante el envío de mensajes. Estos mensajes deben permanecer en el sistema porque cada uno de ellos debe llegar al teléfono inteligente del usuario e informarles, por ejemplo, que el conductor ha llegado.
Todos estos mensajes antes eran almacenados en Cassandra. Pero cuanto más crecen nuestros clientes, más mensajes necesitamos almacenar. Almacenarlos en Cassandra se volvió improductivo: el sistema se estaba volviendo voluminoso y se desaceleraba gradualmente. En marzo nos dimos cuenta de que necesitábamos una nueva solución. Era hora de deshacerse de este cuello de botella. Estábamos buscando una pareja ideal. Las opciones fueron Kafka, Pulsar y RabbitMQ. Apache Pulsar se creó originalmente en Yahoo y ahora forma parte de la Apache Software Foundation. Es un producto de código abierto, desarrollado por una comunidad de desarrolladores dedicados. Encaja con nosotros ideológica y arquitectónicamente. Kafka no pudo brindarnos suficiente espacio de crecimiento. Pulsar fue un buen partido, sin embargo, nos llevó cuatro meses traerlo a casa.
Igor: Es una tecnología de vanguardia, pero aún está en desarrollo. Debido a esto, pueden ocurrir errores y pérdidas de memoria. De hecho, dicho servicio se compara con un mensajero independiente como WhatsApp, donde hay millones de usuarios y los mensajes deben enviarse de un usuario arbitrario a otro usuario arbitrario. Es bastante complicado.
Colaboramos muy estrechamente con la comunidad de desarrolladores de Pulsar: les caemos bien, porque la plataforma Onde es un caso de uso emocionante de Pulsar y porque somos inteligentes para encontrar sus errores. Así que les decimos dónde están los errores y ellos hacen soluciones especialmente para nosotros. Oh sí, tenemos una excelente experiencia con desarrolladores remotos que hacen cosas geniales para nosotros de forma gratuita. 😂
Gracias a esta colaboración, a las 3 am UTC del viernes 5 de octubre nos dimos cuenta de que nuestro servidor puede y seguirá funcionando sin reiniciarlo. Todo este trabajo es para que nuestros clientes duerman bien siendo tan temprano en la madrugada.
Todo automatizado
Artem: El trabajo manual siempre resulta en una carga completa de errores y equivocaciones. Por lo tanto, automatizamos. Un ejemplo simple: a veces puedes pasar una hora automatizando un trabajo que te toma un minuto hacer. En dos años, esta automatización te ahorra mil minutos.
Igor: Si hay un procedimiento que se ha realizado dos veces, este proceso debe ser automatizado. Lo llamamos integración continua, despliegue continuo.
Artem: Hacer todo lo relacionado con el lanzamiento de una nueva versión de servidor con solo presionar un botón es hermoso y lo libera de posibles errores. Así que estamos orgullosos de haber automatizado los procesos de lanzamiento de nuevas versiones de servidor, los reinicios de emergencia del servidor y muchas operaciones en Cassandra.
Y muchas cosas más siguen pasando
Igor: El trabajo nunca termina. La principal prioridad ahora es crear e implementar un enfoque para lanzar actualizaciones de servidor sin tiempo fuera de servicio. Cuando encontremos uno, ¡y esperamos que esto sea pronto!, todo saldrá a la perfección.
Artem: Actualmente estamos ocupados con una mayor optimización del trabajo con Cassandra. Buscamos las solicitudes lentas y las hacemos funcionar mejor, optimizamos las solicitudes que pueden ralentizar todo un grupo de bases de datos. Hemos aumentado el número de instancias de servidor que funcionan al mismo tiempo. Desde el principio, esta fue siempre la forma en que se desarrolla el sistema Onde: para que se pueda escalar fácilmente, con belleza y calidad.
Igor: Dejé de fumar. Hace dos años prometí dejarlo en el momento exacto en que nuestro servidor estuviera completamente estable. Pensé que eso sucedería en septiembre de 2017. Bueno, está sucediendo ahora.
Artem: Siempre mantenemos grandes metas y un resplandeciente futuro brillante en mente. ¡Y creemos que el futuro va a ser genial! 😎
PD: ¡No te asustes! 🛸