[IRC-DEV] Empieza el BrainStorming sobre "chan2"

Jesus Cea Avion jcea at argo.es
Fri Dec 20 18:53:03 CET 2002


Vamos a empezar a dar las primeras pinceladas de requerimientos de CHAN2
y de los cambios en la BDD. Por favor, pensad las cosas un buen rato
antes de enviar nada a la lista. No quiero mensajes chorras; mi tiempo
es lo más valioso del mundo.

Criterios directores:

- Olvidaros de "CHAN" y de cómo funciona. "CHAN2" no tiene por qué
parecérsele en absoluto. Si en algo hay que fijarse es en no cometer sus
mismos errores.

- Los usuarios no tendrán "niveles" en los canales, sino que tendrán
"flags". Pensemos en los "flags" como en los modos de usuario normales,
pero que indican qué operaciones puede hacer en un canal. La lista de
operaciones posibles ya se irán viendo. Un usuario puede tener permiso
para pasar OP a otro usuario, pero no para invitar a alguien, por
ejemplo.

- Las operaciones del "día a día" las deben hacer los propios
servidores. Al igual que ocurre con "nick2", "chan2" sólo debe ser
involucrado cuando haya que hacer cambios en la configuración de un
canal. Lo ideal es que "chan2" se pueda ir de vacaciones un fin de
semana sin que la red sufra por ello más que el no poder dar de alta a
un nuevo usuario, o registrar un nuevo canal.

En una primera hornada (Enero/Febrero):

- Implementar una nueva base de datos distribuída en los servidores,
para mantener el candado de modos (modos obligatorios, y modos no
permitidos) de los canales registrados.

- Un registro con el topic por defecto del canal.

- Un registro con el "welcome" por defecto del canal.

- Un registro con una entrada por cada usuario. Dicha entrada ("flags")
indicará qué acciones se permiten a dicho usuario, así como qué acciones
debe realizarse sobre él en el "join". Por ejemplo, darle OP
automáticamente. 

Para evitar infinidad de bases de datos distintas, mi propuesta es usar
una única tabla. Por ejemplo, la "c" (canales). En dicha tabla los
registros serían algo así:

#canal -> modos obligatorios y no permitidos del canal
#t#canal -> topic por defecto del canal
#w#canal -> mensaje de bienvenida al canal
nick#canal -> "flags" de ese usuario en ese canal.

Es evidente que la estructura de base de datos distribuída actual no
escala bien con tablas de ese estilo, que probablemente tendrían un par
de millones de registros. Hay tres problemas para ello:

a) Ante cualquier corrupción, etc., el servidor borra la base de datos y
   la pide a su HUB. Transferir 2 millones de registros puede llevar un
   buen rato.

   De todas formas esto no me preocupa demasiado, porque en varios años
   usando esta tecnología, se pueden contar con los dedos de una mano
   las ocasiones en las que se borra una BDD local. Es algo a mejorar,
   pero que dista mucho de ser prioritario.

b) Los registros se leen en memoria cuando se arranca el servidor.
   El problema no es la memoria que se usa, que para eso está el SWAP
   };-), sino lo que tardan los servidores en estar disponibles. Estoy
   diseñando dos cosas: por un lado un servidor de base de datos "real"
   y por otro un sistema de memoria "persistente", que recupere el
   estado de la memoria de registros cuando se reinicia el proceso.

c) Sería una base de datos con cambios muy frecuentes, y las
   compactaciones serían muy costosas. Una opción simple es realizar
   las compactaciones en otro "thread" o proceso, para no bloquear la
   red los X segundos (o minutos) que costase realizar la compactación.

En resumidas cuentas, son tres problemas abordables y conocidos ya
cuando diseñé el sistema de BDD, pero que nunca han sido lo bastante
graves como para solucionarlos. Ni siquiera en este momento, con casi
200.000 registros distribuidos en la BDD de todo IRC-Hispano :-).

Pero ha llegado el momento de ir a por ellos, por fin.

-- 
Jesus Cea Avion                         _/_/      _/_/_/        _/_/_/
jcea at argo.es http://www.argo.es/~jcea/ _/_/    _/_/  _/_/    _/_/  _/_/
                                      _/_/    _/_/          _/_/_/_/_/
PGP Key Available at KeyServ   _/_/  _/_/    _/_/          _/_/  _/_/
"Things are not so easy"      _/_/  _/_/    _/_/  _/_/    _/_/  _/_/
"My name is Dump, Core Dump"   _/_/_/        _/_/_/      _/_/  _/_/
"El amor es poner tu felicidad en la felicidad de otro" - Leibniz




More information about the IRC-Dev mailing list