Git Product home page Git Product logo

naiveview's Introduction

NaiveView

Naive View es un proyecto que implementa una arquitectura con un servidor centralizado, donde los clientes se conectan al iniciar, estableciendo una comunicación cliente-servidor mediante Sockets.

Esta implementación sigue el concepto del 'Two Phase Commit' con un servidor central. Por lo tanto, nos ahorramos la trama del Done, ya que no es necesario notificar a todos los componentes de la red, solo al servidor central, ya que este es el 'bloqueador' de la actualización de los datos.

El funcionamiento inicia cuando el cliente desea enviar una trama de Read al servidor, que simplemente le devuelve el valor entero almacenado (siempre correcto).

En cambio, en la trama de Update, el cliente envía previamente una trama de 'Solicitud de Update'. El servidor es capaz de gestionar esta solicitud y devuelve un OK al cliente si los datos no están bloqueados por otra solicitud en ese momento; de lo contrario, devuelve un KO.

Cuando el cliente recibe un KO, intenta reenviar esta solicitud hasta que recibe un OK. Al recibir un OK, implica que el servidor ya ha bloqueado esa variable, y luego el cliente realiza primero la lectura de los datos y luego puede realizar la actualización del valor (commit).

Finalmente, el servidor, al recibir el valor, actualiza su variable y la desbloquea, esperando nuevas solicitudes.

Limitaciones:

Robustesa:

La implementación centralizada presenta una limitación en la robustez debido al SPOF (Single Point of Failure) que implica el servidor central. Si el servidor experimenta problemas, todo el sistema se ve afectado. La replicación limitada de la variable en un solo punto también afecta la integridad.

Limitación Económica:

La centralización del sistema implica costos económicos, ya que se requiere mantener en funcionamiento una máquina dedicada como servidor. Aunque esto podría mitigarse reduciendo el volumen de la red utilizada en la comunicación.

Número de Clientes:

El número de clientes que pueden conectarse a un servidor puede verse limitado físicamente por el número de puertos disponibles. Sin embargo, esta limitación podría superarse implementando las comunicaciones mediante solicitudes HTTP en lugar de sockets.

Orden de Atención a Clientes:

No se puede garantizar un orden de atención a los clientes basado en el principio de "First Come, First Serve", lo que implica que un cliente podría sufrir de "starvation".

Cuello de Botella:

Existe la posibilidad de un cuello de botella, especialmente si algún cliente tarda mucho en enviar datos y el servidor está esperando con la variable bloqueada. Esta limitación podría abordarse parcialmente mediante el uso de timeouts.

  • @author: Oscar Julian - Bernat Segura
  • @date: October 2022

naiveview's People

Contributors

oscarjuly23 avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.