Si quiere tener un Sistema distribuido (esa consistencia eventual) necesita personas, construir, mantener y operarlo.
He encontrado que hay tres clases de personas que tienen problemas muy pequeños con "La consistencia eventual":
- Las personas con una sólida formación en sistemas distribuidos. Han aprendido sobre Eventual Consistency Byzantine Failures y cosas por el estilo. Si comprende que Paxos no se trata de vacaciones, probablemente sea una de ellas.
- Personas con experiencia en programación de redes. Pueden pasar por alto los antecedentes teóricos, pero tienen una comprensión intuitiva de la asincronía y el paradigma "no global clock & counters". Si posee al menos 8 libros por Richard Stevens, probablemente sea uno de ellos.
- Codificadores muy experimentados que tenían poca exposición a RDBMS. Me vienen a la mente chicos de Kernel, personas de informática científica y la industria del juego.
En general, estas personas son muy buscadas en el mercado de trabajo. Por ejemplo, aproximadamente el 75% de los académicos en sistemas distribuidos se van para las instituciones que ejecutan sistemas distribuidos grandes, de diseño propio, p. las bolsas de valores.
Todo se volvió algo más simple con ofertas como Hardoop, SimpleDB y CouchDB, pero sigue siendo un gran desafío crear algo sobre tecnología de sistemas distribuidos.
Por otro lado RDBMS son una muy buena pieza de ingeniería. Son bien entendidos y la experiencia en ellos está disponible en el mercado de trabajo. Hay muchas herramientas decentes, oportunidades de educación y muchos expertos altamente calificados están disponibles para alquilar por hora. Así que piense dos veces que no puede seguir con un enfoque de RDBMS, quizás junto con algún engaño inteligente. Usualmente señalo a los estudiantes al Lifejournal architecture.
Para bases de datos distribuidas hay mucha menos experiencia. Esa es exactamente la razón por la que has encontrado tan pocos consejos hasta ahora.
Si está decidido a usar "Consistencia eventual", creo que además de las herramientas inmaduras, el principal desafío es la mentalidad de todos los involucrados. ¿Sus usuarios de API (codificadores) y usuarios de aplicaciones (sus empleados y sus clientes) están dispuestos y son capaces de aceptar la incoherencia? ¿Puedes esconderlo de ciertas clases de usuarios? No estamos acostumbrados a esa mentalidad de que las computadoras son inconsistentes. Algo está en stock o no. "Quizás" no es una respuesta que esperan los usuarios.
También tenga en cuenta que "eventual" puede significar un tiempo muy largo para los diseñadores de algoritmos. ¿Por cuánto tiempo puede aceptar la inconsistencia?
Para una aplicación de carrito de la compra es posible que desee distribuir verdaderamente: utilice el navegador de clientes como almacén de datos. Al finalizar la compra, puede enviar el carro al sistema de procesamiento por lotes del lado del servidor. Esto significa que para el catálogo necesita leer solo alta disponibilidad (más fácil) y la presentación del carro es una interfaz muy estrecha sin necesidad de transacciones. Más tarde, el procesamiento de la orden no tiene requisitos de tiempo real (Blandos) y, por lo tanto, es más fácil.
BTW: La última vez que revisé la arquitectura de E-Bay, tenían un gran tamaño en RDBMS, pero puede haber cambiado desde entonces. (Edit: sí cambio - ver comentarios)
Y esto fue votado negativamente, ¿por qué? –