¿Existen bases de datos distribuidas disponibles gratuitamente que estén diseñadas para escalar a miles de millones de usuarios en tiempo real? Si es así, ¿Que son?

Nota: Estoy ignorando la parte “en tiempo real” del título de la pregunta. Como Stan Hanks dice tan sabiamente, es casi imposible tenerlo en tiempo real y distribuirlo al mismo tiempo porque hay limitaciones en cuanto a la rapidez con que se puede mover la luz y esas cosas. Pero supongo que te refieres a bastante en tiempo real, no en tiempo real. 🙂

Cassandra es el producto “gratuito” más cercano a lo que está buscando.

Pero realmente, no existe una solución de código abierto lista para usar, por razones obvias: casi ninguna aplicación está aún a esa escala, por lo que cualquier solución que se esté haciendo se está haciendo pionera en el campo, y normalmente se está extendiendo. tecnología a sus límites. Facebook (producto) se ejecuta en un extraño dispositivo MySQL para manejar su carga, por ejemplo.

La solución que personalmente considero es que, lamentablemente, esto no es de código abierto: es Google BigTable:

Bigtable aprovisiona y escala a cientos de petabytes automáticamente, y puede manejar sin problemas millones de operaciones por segundo . Los cambios en la configuración de implementación son inmediatos, por lo que no hay tiempo de inactividad durante la reconfiguración.

Apache Cassandra se basa en la investigación de BigTable, y es una base de datos fantástica que utilizamos con gran éxito en Spotify para admitir 75 millones de usuarios activos, pero Cassandra todavía está unos años detrás de BigTable.

Para un futuro en el que miles de millones de usuarios son un poco más comunes que solo unas pocas aplicaciones, es posible que desee mantener pestañas en Spanner (Exclusivo: Inside Google Spanner, la base de datos única más grande en la Tierra), la loca base de datos de Google que se mantiene sincronizada con Relojes atómicos y GPS en cada centro de datos.


Plug descarado: si te gustan mis divagaciones sobre la programación en Quora, puedes disfrutar de mi programa de YouTube: funfunfunction

No.

En 2016, Internet tiene aproximadamente 3 mil millones de usuarios.

Entonces, lo que está preguntando es si tenemos una base de datos en tiempo real que pueda conectar simultáneamente a todos los usuarios de Internet en tiempo real. Claramente ese no es el caso.

Lo más cercano que obtendrá serán cosas de Facebook y Google, que son algunas de las pocas compañías en el planeta con más de 1 billón de usuarios (y mucho menos miles de millones ). Pero estos sistemas tomaron cientos de personas para construir y obviamente son propietarios.

Personas como AWS y Microsoft están construyendo centros de datos que pueden servir algunas cosas de manera confiable a muchos usuarios. Entonces, si está sirviendo archivos fuera de S3 a través de un CDN, puede obtener miles de millones de usuarios. Pero eso no es “en tiempo real” y estará hablando con las ventas y el soporte de AWS mucho antes de llegar a esa escala.

Conectaré un proyecto paralelo divertido con el que trabajo aquí : IPFS es un nuevo protocolo de hipermedia peer-to-peer. Este es un intento de reconstruir la infraestructura central de Internet como “distribuida”. Esto es lo más cercano que he encontrado para poder hacer lo que pides en un código abierto. Obviamente todavía es temprano y no es “en tiempo real”, pero va en la dirección correcta.


actualización : estaba ejecutando los números con un amigo mío de operaciones en Facebook.

  • Si puede obtener 10k conexiones activas de un servidor, ¡1B usuarios concurrentes => 100,000 servidores! Tenga en cuenta que 10k no es algo trivial y requiere algunos ajustes reales a nivel del sistema operativo junto con las herramientas de lenguaje adecuadas (El problema C10K) De repente, su problema de base de datos es en realidad solo mantener servidores de 100k, y mucho menos mover cualquier dato real. Y probablemente quieras que sean redundantes …
  • Algunas personas hablan de C500k y si puede alcanzar ese nivel, ahora su base de datos solo necesita servidores de 10k … lamentablemente eso todavía significa que el mantenimiento es un gran problema. (C500k en acción en el dirigible urbano)
  • La gente está trabajando para impulsar esto aún más con algunos ejemplos de C10M aquí y aquí. Si pudiera lograr 10 millones de conexiones / servidores, podría alojar la base de datos de conexión de Billion en unos cientos de máquinas. Tenga en cuenta que esas máquinas solo tendrían conexiones, por lo que necesitaría otras máquinas para almacenar los datos. Pero en esos niveles es posible que pueda construir una base de datos de código abierto “en tiempo real” que no ocupe todo un DC.

Obviamente, hay otras preocupaciones, como el ancho de banda, el hardware, el reconocimiento de la ubicación, la redundancia, etc. Baste decir que no espero que nadie tenga esto mágicamente de código abierto en el corto plazo. 🙂

Necesita definir “tiempo real”.

La construcción de un sistema de control central para un conmutador telefónico que se esperaba que manejara 500k llamadas simultáneas significaba que necesitaba una base de datos en tiempo real que literalmente pudiera manejar aproximadamente 15 elementos de registro para cada una de esas llamadas, sincrónicamente , mientras ocurrían.

Eso es “tiempo real”. Eso también es MALDITO .

Mi solución eventual fue utilizar un código altamente optimizado a mano derivado de ndbm, e igualmente controladores de almacenamiento altamente optimizados para SSD que explotaron las características de “No soy realmente un disco después de todo” para ellos. Además, un barrido gigante en el back-end que migró los datos a una base de datos MySQL en tiempo no real, y liberó espacio en los SSD, por lo que las cosas no se desbordaron.

Nunca pensé en escalar esto en la web, porque ya estaba a escala industrial.

Tan pronto como diga “distribuido”, pierde “tiempo real” y pasa a “eventualmente consistente”.

Lo que va a buscar es eventualmente consistente, con marca de tiempo de llegada, que es lo suficientemente rápido como para cumplir con su flujo de entrada sin explotar.

Es … factible. Sería interesante. Pero no será algo que encuentres en SourceForge o GitHub esperando para recoger.

La mejor de las suertes.

Puede considerar cualquiera de estas populares bases de datos en memoria: Redis, CouchBase, Aerospike. Además, eche un vistazo a nuestra base de datos de código abierto local Tarantool, que es tan rápida como cualquiera de la lista anterior, pero que es una base de datos transaccional real con tablas, índices secundarios, procedimientos almacenados.

Las bases de datos en memoria normalmente procesan el 99% de las solicitudes en menos de 1 ms, que puede nombrar en tiempo real. Son capaces de manejar más de 1 millón de consultas / transacciones por segundo por cada servidor físico y se pueden escalar fácilmente horizontalmente si esto no es suficiente.

Puede escalar la versión gratuita de MapR a los niveles de los que está hablando. Hay clientes con> 1 billón de filas en tablas individuales en MapR DB.

La edición gratuita está limitada en relación con la versión de pago, ya que no se obtienen instantáneas atómicas, espejos o replicación asincrónica global en tiempo real.

Es posible que haya querido decir de código abierto cuando dijo “disponible gratuitamente”. Si bien la mayor parte de la solución MapR (95 +% de los paquetes) es de código abierto, la capa de almacenamiento no lo es. Dependiendo de lo que significa libre en su pregunta, esta podría o no ser su respuesta.

Por supuesto, el hardware, el ancho de banda de la red y la mayoría de las otras cosas que necesita para atender a mil millones de usuarios no serán gratuitos.

A todas estas personas les encanta decirte “no” … las personas de la base de datos de código abierto para la web en tiempo real afirman haberlo hecho.

Se distribuye y se fragmenta automáticamente para usted, de inmediato. Lo he comparado (y no lo he publicado) haciendo uniones distribuidas en decenas de cientos de registros en 100-150 ms. No sé si alguien lo ha puesto en producción con tanta carga, pero sería interesante trabajar con ellos para hacerlo.

Una solución para escalar en tiempo real a miles de millones con una fuerte consistencia y sin tiempo de inactividad frente a los desastres no solo es difícil, es imposible. ¿Qué tal si establece sus casos de uso y compensaciones, porque el teorema de Cap, el resultado de FLP y otros muestran que no podemos lograrlo todo? Por ejemplo, en tiempo real, iría con una consistencia causal o menor.

More Interesting

Cómo codificar este programa en python

¿Node.js sería un marco bueno o mejor para crear una aplicación que transmita videos?

¿Cómo se puede construir un sistema de navegación con AngularJS para una aplicación web?

Si fuera la persona de SEO para un sitio web de tecnología, ¿qué haría para crear vínculos de retroceso para él?

¿Qué algoritmos / herramientas de programación se utilizan para aplicaciones web basadas en análisis de texto como 'I Write Like' o '750Words'?

¿Cuánto tiempo me tomará aprender AngularJS?

¿Por qué el navegador agrega o reemplaza el juego de caracteres de tipo Contenido con UTF-8 al realizar una solicitud XMLHttpRequest?

¿Cuál es la mejor manera de aprender programación web con Python para un novato con un poco de experiencia en este lenguaje?

¿Cuáles son algunas plataformas de alojamiento para la aplicación web Django?

¿La región de Oregon de Amazon EC2 tiene un mejor rendimiento que su región del norte de California?

¿Por qué funciona Quora tan bien?

¿Qué aplicación me recomiendan para una investigación en línea?

¿Qué implica típicamente el mantenimiento de aplicaciones web?

¿De qué manera fallan Evernote y Springpad? ¿Cómo puede una nueva startup competir en el campo?

¿Existe una aplicación web que le permita administrar sus cuentas en varios sitios? Tengo varias cuentas de Twitter y Facebook para diferentes propósitos. ¿Existe una aplicación que me permita hacer un seguimiento de ellos?