Javier Fernández Viña

Darku2: Base de datos distribuída

Bases de Datos Distribuidas

Una base de datos distribuida es un tipo de base de datos que no reside en un único punto, sino que esta base de datos se archiva en diferentes puntos, por ejemplo de una red. Este tipo de bases de datos requieren ciertos sistemas de coordinación y actualización que eviten desincronismo entre las bases de datos distribuidas. El sistema que se utiliza para el Darku2 es el de replicado de las bases de datos a todos los nodos de la red desde los Hubs de la red.

Esta base de datos distribuida permite ciertos servicios a nivel de ircd sin necesidad de depender de unos Bots de Servicio centrales. No obstante estos bots serán necesarios para la introducción de valores en la BDD.

El sistema empleado en Darku2 es similar al que se emplea en iRC-Hispano, para los registros de la DB normal y un sistema propio de registros multiples para el protocolo DB2. El protocolo de comunicación entre servidores también ha sido modificado en forma respecto a como funciona en la citada red. El sistema de BDD esta formado por una serie de “tablas”, con estas tablas nos referimos a cada una de las bases de datos que nos servirán para ofrecer un determinado servicio o el almacenaje de unos datos relativos a diferentes temas.

Cada una de estas tablas cuenta con un HASH que se verifica cuando dos nodos hacen un NET.JOIN al producirse esto en caso de ser distinto, los HUBs reenvian la BDD a ese nodo o los valores que no tengan y han cambiado mientras estaba fuera de la red. Cada uno de los registros a su vez es marcado con un numero de serie el cual indica el número de registro, esto nos sirve para una vez identificado un HASH saber que valores han cambiado y no tiene el nuevo nodo y reenviarlo. En cierto modo actua como un sistema de versiones.

Para el paso de una tabla (DB) de un nodo a otro se emplea un comando el DB, este comando esta restringido exclusivamente para servidores y tiene varias opciones como cojer registros, mostrarlos, distribuir un nuevo registro. Los únicos nodos capaces de modificar la BDD son los HUBs, por eso hay que tener cuidado con la configuración de las H-lines.

Si nosotros queremos introducir nuevos registros en la BDD debemos hacerlo con un nodo se servicios de bots que tenga privilegios de HUB (H-line) y emplearemos la siguiente sintaxis:

Protocolo DB: DB [nodo] [numero de serie] [tabla] [valor] :[contenido]
Protocolo DB2: DB [nodo] [numero de serie] [tabla] [valor] [subvalor] :[contenido]

Los valores mencionados anteriormente se corresponden con los siguientes:

[nodo] -> El servidor al que enviarás el nuevo registro. ‘*’ para enviarlo a toda la red.

[nº serie] -> Se corresponde con el siguiente número a introducir en la BDD, podemos verlo en la ‘S=’ del /stats b sumandole 1 a dicho valor.

[tabla] -> Se corresponde con la base de datos en la que introduciremos los nuevos registros.

[valor] -> Se refiere al nick, IP, etc… sobre el que guardaremos información, varia según la finalidad de la tabla.

[sub-valor] -> Se refiere al subvalor en caso de que se trate de una DB2, por ejemplo canales.

[contenido] -> Los datos que asociamos a ese valor.

Tambien tenemos diversos comandos que nos pueden interesas como IRCops o Administradores del DarkU para comprobar y verificar el estado de la Base de datos:

DBQ [nodo] [registro]: Nos muestra en un nodo determinado (’*’ para todos) el valor para un registro dado
STATS B: Nos muestra el número de registros activos en la BDD y el numero de serie (’S=’ sumandole 1 nos dará el siguiente valor que debemos emplear para meter un nuevo registro en la BDD)

Tabla ‘b’ S=000000002 R=000000002
Tabla ‘c’ S=000000000 R=000000000
Tabla ‘f’ S=000000014 R=000000012
Tabla ‘i’ S=000000002 R=000000002
Tabla ‘j’ S=000000003 R=000000003
Tabla ‘l’ S=000000031 R=000000010
Tabla ‘n’ S=000000176 R=000000092
Tabla ‘p’ S=000000009 R=000000003
Tabla ‘r’ S=000000012 R=000000000
Tabla ‘s’ S=000000003 R=000000003
Tabla ‘v’ S=000000018 R=000000012
Tabla ‘w’ S=000000022 R=000000020
Tabla ‘C’ S=000000019 R=000000016

Cuando queremos borrar un registro de una tabla debemos introducir un nuevo registro para esa taba pero sin ningún valor. Esto hará que haya un nuevo registro nulo distribuyendose por toda la red y evitando que ese registro tenga valor alguno.

Las tablas de la BDD

Tabla ‘b’ ([NickServ/ChanServ] :[Nick])

Establece el nick que el ircd utiliza para las notificaciones relativas a nicks y canales por pseudobots.

Tabla ‘f’ ([nick] :[privilegios])

Esta tabla nos permite poner “BDD flags” a un usuario. Estos flags permitirán al usuario posteriormente la fijación de determinados modos especiales con sus consiguientes privilegios en la red. Estos flags son en formato numérico y para otorgarle diferentes privilegios a un usuario hay que hacer una suma de los privilegios que se le desean otorgar.

La lista de privilegios es la siguiente:

flag ’64’ -> Administrador de Red.
flag ‘512’ -> Bot oficial de la Red.
flag ‘256’ -> Bot NO oficial de la Red.
flag ’32’ -> Co-Administrador de Red.
flag ‘8’ -> Operador de Red.
flag ‘4’ -> Pre-Operador de Red.
flag ‘2’ -> Poder usar el modo k.
flag ‘1’ -> Poder usar el modo X.

Tabla ‘i’ ([IP/Máscara] :[Número de clones])

Es la tabla encargada de regular los clones de la red para permitir excepciones según desde donde se acceda.

Tabla ‘j’ ([#canal] :[flags de acceso])

Especifica los flags que debe tener un usuario en la tabla ‘f’ para poder acceder a un canal. Estos canales quedan totalmente restringidos de acceso incluso empleado las claves genéricas por parte de opers e iRCops.

Tabla ‘l’ ([key] :[flags de acceso])

Especifica el flag de una key o clave de acceso a la red para el protocolo propio DK. La clave debe coincidir con la introducida en la negociación del protocolo y según el flag indicado permitirá el acceso al usuario, o mostrará un mensaje de error diferente.

Tabla ‘n’ ([nick] :[clave])

Nos permite registrar un nick. Al registrar un nick solo el propietario podrá ponerselo y así disfrutar de modo +r y todas las ventajas que esto conlleva. La clave del nick debe de ir encriptada con el algoritmo TEA.

Nicks Suspendidos -> Cuando añadimos un nick y al final de su clave introducimos un ‘+’, ese nick se considera suspendido, no gozará de +r y será marcado con el modo +S (Suspend) y mostrado en su whois.

Nicks Prohibidos -> Esta tabla tambien permite el registro de nicks prohibidos (Forbidden), estos nicks no los podrá utilizar nadie en la red. Para prohibir un nick en el campo de la clave debe introducirse solamente un ‘*’

Tabla ‘p’ ([nick regex] :[flag])

Permite prohibir nicks para su uso en el IRC. Se utiliza un patrón de nicks y se indica el flag 1 para prohibir el uso de dicho nick en toda la red de chat.

Tabla ‘r’ ([nick] :[mensaje whois])

Especifica una línea adicional en el whois de un usuario para mostrar un estado especial. Ese mensaje es una línea adicional sin privilegios adicionales ni más que la información estética.

Tabla ‘s’ ([palabra] :[flags])

Establece una palabra que será considerada SPAM en la red. A través de los flags se configura donde se deberá realizar el seguimiento de la palabra en cuestión deacuerdo con la siguiente tabla:

Tabla ‘v’ ([nick] :[IP virtual])

Establece una Máscara personalizada totalmente para un nick registrado en la tabla n. Cuando un nick tiene una máscara asignada en la tabla v toda su IP real sera substituida por esta de cara a la red.

Tabla ‘w’ ([nick] :[IP virtual])

Establece una máscara personalizada para un nick registrado en la tabla n. Al final del valor de la máscara personalizada añadirá ‘.vip’.