Para desarrollar un servicio similar a Google Docs o hackpad, ¿qué tecnologías son necesarias / útiles?

Realicé una pasantía en un equipo de Google Docs, pero esta respuesta es mi opinión personal y no representa las opiniones de Google. Esta respuesta solo contiene información disponible públicamente.

Dustin Carlino probablemente podría responder mejor esta pregunta. (Si no recuerdo mal, trabajó en un equipo más relevante).

Los principales desafíos en la creación de editores colaborativos en tiempo real están relacionados con la latencia de la red, el consenso y la coherencia, por lo que el conocimiento de las redes y los sistemas distribuidos sería más útil. No se necesita tecnología mágica para implementar un RTCE.

Hay un montón de código fuente de muestra en https://github.com/search?q=rtce para comenzar.

El artículo de Wikipedia para el editor colaborativo en tiempo real (RTCE) también contiene información útil sobre los principales desafíos técnicos, soluciones existentes e ideas de alto nivel de RTCE:

La complejidad de las soluciones de edición colaborativa en tiempo real proviene de la latencia de la comunicación. En teoría, si la comunicación fuera instantánea, crear un editor colaborativo en tiempo real no sería más difícil que crear un editor de usuario único, porque un documento podría editarse usando un algoritmo similar al siguiente:

  1. Solicite un token ‘editar documento’ del servidor
  2. Espere hasta que el servidor diga que es nuestro turno de editar el documento.
  3. Dígale al servidor cómo editar el documento.
  4. Libere el token ‘editar documento’

Sin embargo, la velocidad de comunicación está limitada por la latencia de la red. Esto crea un dilema fundamental: los usuarios necesitan sus propias ediciones incorporadas al documento al instante, pero si se incorporan al instante, entonces debido a la latencia de la comunicación, sus ediciones necesariamente deben insertarse en diferentes versiones del documento.

Un ejemplo ilustra este problema. Supongamos que Bob y Alice comienzan con un documento que contiene la palabra Mary . Bob elimina ‘M’, luego inserta ‘H’, para cambiar la palabra a Hary . Alice, antes de recibir cualquiera de las ediciones de Bob, elimina ‘r’, luego elimina ‘a’, para cambiarla a My . Tanto Bob como Alice recibirán ediciones que se aplicaron a las versiones del documento que nunca existieron en sus propias máquinas.

Por lo tanto, el desafío de la edición colaborativa en tiempo real es descubrir exactamente cómo aplicar las ediciones de usuarios remotos, que se crearon originalmente en versiones del documento que nunca existieron localmente, y que pueden entrar en conflicto con las propias ediciones locales del usuario. [8 ]

Las soluciones más sofisticadas resuelven este problema de una manera que no requiere un servidor, no utiliza bloqueo (todos los usuarios pueden editar libremente todas las partes de un documento al mismo tiempo) y admite cualquier número de usuarios (limitado solo por los recursos de las computadoras) .UNA y SubEthaEdit son ejemplos de dos programas que toman este enfoque.

Si bien estos enfoques sofisticados permiten la mejor experiencia de usuario, también se puede crear un editor colaborativo básico en un modelo cliente-servidor. En un escenario cliente-servidor, a una de las instancias del editor se le asigna el rol de servidor de colaboración cuando se abre el documento. Este servidor garantiza que otros editores se mantengan sincronizados determinando la latencia de la red y actuando como un servidor de sincronización de tiempo. El servidor recibe notificaciones con marca de tiempo de los cambios realizados en el documento por otros usuarios. Determina cómo esos cambios deberían afectar su copia local y difunde sus cambios al grupo de colaboración. En algunos modelos, los cambios no se reflejan en un cliente hasta que se devuelve una respuesta oficial del servidor, incluso si esos cambios se realizaron localmente.

Este enfoque, aunque significativamente menos potente, permite una colaboración básica a un costo relativamente bajo. Esto lo hace preferible en situaciones donde los recursos de procesamiento son limitados, como en la plataforma iPhone de Apple. NetSketch es un ejemplo de un programa que usa este modelo.
En el pasado, Microsoft e IBM han trabajado para agregar instalaciones de colaboración a sus arquitecturas existentes. [9] Aunque se comercializan como colaboración en tiempo real, estos enfoques de ‘espacio de trabajo’ requieren bloqueo de documentos (por lo que solo una persona puede editarlo a la vez) o ‘reconciliación’ de cambios conflictivos, que generalmente los usuarios consideran insatisfactorio.