-
Notifications
You must be signed in to change notification settings - Fork 0
Home
La red social Roar está compuesta por los siguientes tipos de servidores:
- Servidor Backend: Este tipo de servidor se encarga del almacenamiento de la información en Roar.
- Servidor API: Ese tipo de servidor implementa la lógica del negocio de la aplicación. Conecta el frontend de la red social con el backend de la misma
- Sevidor Frontend: Implementa la interfaz visual.
El protocolo utilizado para la implementación de este proyecto es una adaptación del protocolo ActivityPub que es un protocolo de red social descentralizado basado en el formato de datos [ ActivityStreams ] 2.0. Proporciona una API de cliente a servidor para crear, actualizar y eliminar contenido, así como una API federada de servidor a servidor para enviar notificaciones y contenido.
ActivityPub proporciona dos capas:
- Un protocolo de federación de servidor a servidor (para que los sitios web descentralizados puedan compartir información)
- Un protocolo de cliente a servidor (para que los usuarios, incluidos los usuarios del mundo real, los bots y otros procesos automatizados, puedan comunicarse con ActivityPub usando sus cuentas en servidores, desde un teléfono, escritorio, aplicación web o lo que sea)
Cada objeto en Roar es una instancia de la clase RObject, la cual tiene dos atributos: id y tipo, ambas cadenas de caracteres. El id es un identificador único para cada objeto y el tipo se referiere al tipo del objeto.
Una colección es un RObject que permite guardar otros RObjects de forma distrbuida entre los diferentes servidores backend. Los objetos de este tipo cuentan con métodos para agregar y remover objetos.
Una de las colecciones implementadas fue un DHT (un diccionario distribuido). Esta estructura fue implementada según la bibliografia suministrada por los profesores.
Cada nodo de esta estructura tiene un diccionario en el cual se guardan sus elementos, ademas de otro diccionario en el que guarda los elementos de su predecesor. Además contiene los id de su predecesor, sucesor y su segundo sucesor. Cuando un nodo no puede acceder a su sucesor tratara de contactar con su segundo sucesor. En caso de tampoco ser posible comenzará a iterar por su tabla de fingers tratando de conectarse a uno de esos nodos. Si el nodo pudo hacer contacto con su sucesor entonces se actualiza su segundo sucesor (pues este podría haber cambiado). El resto del funcionamiento de esta estructura, es fundamentalmente similar a como se describe en la bibliografía.
La lista distribuida es una variante de lista la cual distribuye sus elementos por los servidores disponibles en el sistema. Esta se utiliza para la bandeja de entrada y la bandeja de salida. La bandeja de salida contiene todas las actividades que ha realizado un usuario en el sistema y la bandeja de entrada contiene las actividades que le han llegado al usuario por parte de los usuarios a los que sigue.
La idea de tener una lista es para conservar el orden en que las actividades se iban realizando y se decidió que fuera distribuida pues la información a guardar podía ser demasiado grande.
La estructura consiste en una lista circular doblemente enlazada que mantiene el funcionamiento de una linked list. Para esto se guardan referencias al primer y último nodo de la lista y estos a su ves guardan referencia de su antecesor y sucesor (de esta forma para cada nodo). Y cada nodo guarda los datos de su predecesor además de los suyos.
Los nodos tienen una capacidad limitada que puede aumentar con el tiempo. Para almacenar información existe una propiedad current que hace referencia al nodo que se está llenando actualmente. Cuando el nodo alcance su máximo de capacidad se pasa al siguiente. En caso de que todos estén llenos se procede a ampliar la capacidad de cada nodo y se irán corriendo los elementos hacia los primeros nodos de la lista.
En caso de desconexión de un nodo se tomará el último nodo y si está vacío este ocupará su lugar copiando los datos del nodo caído desde el sucesor del nodo caído. Si el último nodo tiene datos se amplia la capacidad de todos los nodos y se distribuyen los datos como se explicó anteriormente.
Esta clase describe a los usuarios en la red, que son quienes interactuan entre sí en la misma. Cada actor tiene:
-
id: Alias del usuario. Este debe ser único dentro de toda la red. -
inbox: Lista distribuida que contiene losactividadesque han creado o compartido los usuarios que este usuario sigue. -
outbox: Lista distribuida que contiene lasactividadesque ha realizado el usuario. -
following: Conjunto de todos los usuarios seguidos por el usuario. -
followers: Conjunto de todos los usuarios que siguen al usuario. -
user_name: Nombre de usuario -
hashed_password: Hash de la contraseña -
a1: Hash de la respuesta a la pregunta de seguridad 1 -
a2: Hash de la respuesta a la pregunta de seguridad 1 -
preferences: Categorías que prefiere el usuario
Esta clase describe las publicaciones de un usuario. Cada post tiene:
-
id: Identificador delpost -
author: Usuario que creó elpost -
content: Texto delpost -
published: Momento en que fue publicado -
reply: En caso de ser respuesta a algúnpost, elidde estepost -
likes: Conjunto de alias de los usuarios que han dado like alpost -
shared: Conjunto de alias de los usuarios que han compartido elpost -
replies: Conjunto deidde los post que respondan a estepost -
cat_label: Categoría con la que se clasifica estepostmediante machine learning (Ver Clasificador de Textos) por defecto tiene valor -1 que significa que no tiene clasificación (o que no se ajusta a las etiquetas que se usan para clasificar).
Consiste en las actividades que puede realizar un usuario en la aplicación
Consiste en la actividad de crear. En este caso un crear o responder un post. Esta consta de:
-
actor: Actor que creo la actividad. -
obj:postque se crea. -
published: Momento de publicación. -
to: A quién va dirigido elpost. -
replay: En caso de ser respuesta de algúnpost, se guarda este. -
replies:postsque responden a estepost.
Consiste en la actividad de eliminar. En este caso un eliminar un post. Esta consta de:
-
obj: Elpostque se elimina.
Consiste en la actividad de seguir a un usuario. Esta consta de:
-
actor: Usuario que se sigue.
Consiste en la actividad dejar de seguir a un usuario. Esta consta de:
-
actor: Usuario que se deja de seguir.
Consiste en la actividad dar like a un post. Esta consta de:
-
obj:postal que se le da like. -
actor: Usuario que da like.
Consiste en la actividad quitar like a un post. Esta consta de:
-
obj:postal que se le quita el like. -
actor: Usuario que realiza la acción.
Consiste en la actividad dar compartir a un post. Esta consta de:
-
obj_share:postque se comparte.