¿Qué es una arquitectura de nada compartido y una arquitectura de todo compartido? ¿Cuál es la diferencia entre ellos y cuáles son sus usos?

Con el advenimiento de Internet, ahora las empresas podrían llegar a cientos de millones de usuarios en todo el mundo. Para aplicaciones realmente populares, esto significaba que en algún momento millones de usuarios podrían estar activos en su aplicación web. Con este tipo de tráfico, un solo servidor, no importa cuán poderoso sea, no podrá servir a todos los usuarios activos. Entonces, los arquitectos de software trataron de manejar este problema al agrupar servidores de aplicaciones web detrás de equilibradores de carga.

Nada compartido Arquitectura

Es una arquitectura de computación distribuida en la que cada nodo es autosuficiente e independiente y tampoco hay punto de contención en todo el sistema. En otras palabras, los nodos no comparten memoria ni almacenamiento en disco.

Arquitectura de todo compartido

En una arquitectura de todo compartido, todos los servidores acceden a la misma tienda compartida, y cada carga de trabajo puede acceder a la tienda. Las cargas de trabajo también pueden acceder a los recursos informáticos de los servidores presentes en la red.

Diferencia

La arquitectura de todo compartido se centra en maximizar la utilización de los recursos, mientras que nada compartido se centra en el rendimiento

Una arquitectura de todo compartido significa que cualquier servicio lo sabe todo y fallará si no lo hace. Si tiene una base de datos central (u otro servicio similar), entonces es probable que tenga una arquitectura de todo compartido.

Shared-nothing significa que no se comparte ningún estado entre todos los demás servicios. Si un servicio falla, no pasa nada a los otros servicios.

La mayoría de las aplicaciones generalmente comienzan como una arquitectura de todo compartido, pero no tienen que hacerlo, esa ha sido mi experiencia. Cuando llegue a la escala global, querrá poder fallar los servicios aleatorios, y por qué la aplicación puede ejecutarse en un estado degradado hasta que el servicio fallido regrese, el resto de la aplicación continuará ejecutándose.

La arquitectura de nada compartido es resistente cuando se hace correctamente. Todo lo que necesita saber desde fuera del servicio se envía al servicio en su “solicitud de trabajo”, que probablemente esté firmada o encriptada con una clave confiable.

Por ejemplo, si un usuario solicita un recurso del servicio de recursos. El servicio de recursos tendrá su propia base de datos sobre qué usuarios pueden solicitar ese recurso específico, o la solicitud incluirá un token encriptado que proporciona al servicio autenticación y / o autorización. El servicio de recursos no tiene que llamar a un recurso de autorización (o buscar en una base de datos compartida) y preguntar si el usuario puede acceder al recurso. Esto significa que, si el servicio de autenticación estuviera inactivo y el usuario tuviera un token válido (desde antes de que el servicio de autenticación cayera) que todavía fuera válido, el usuario podría recuperar el recurso hasta que el token expire.

¿Cuándo usarlos?

Use la arquitectura de todo compartido cuando necesite ser altamente consistente a costa de la resiliencia. En el ejemplo que mencioné anteriormente, si el servicio de autenticación decidió que el token era incorrecto y lo revocó, el servicio de recursos no podría saberlo antes de ser informado por el servicio de autenticación. En ese período de tiempo, el usuario podría haber recuperado el recurso “ilegalmente”. Esto es similar a solicitar varios préstamos antes de que tengan la oportunidad de aparecer en su informe crediticio y afectar su capacidad de obtener un préstamo.

No use nada compartido cuando la resistencia sea más importante que la consistencia, si puede garantizar algún tipo de consistencia eventual, entonces esta podría ser la solución más escalable.

More Interesting

¿Cuáles son los temas de investigación más importantes en la gestión de proyectos de software o en las pruebas de software?

¿Cómo hace Google las pruebas de integración?

Durante la ingeniería, ¿qué se debe hacer para ser contratado en Amazon?

¿Cuál es la razón detrás de 'las grandes empresas de software que no abren sus sucursales en Coimbatore'?

¿Cómo puedo obtener proyectos de software tercerizados de los clientes de la competencia?

¿Por qué no puedo aprender tecnologías de software?

Como ingeniero senior sin una educación CS o SE significativa, ¿cómo puede dar forma a su camino profesional para seguir subiendo la cuesta de grandes y desafiantes problemas técnicos?

¿Qué herramientas / gadgets utilizas para ser un ingeniero de software productivo?

¿Cómo es su experiencia al pasar de Linux a OSX como desarrollador de software?

¿Cuáles son las mejores empresas de outsourcing de desarrollo en la República Checa?

¿Qué softwares usan los diseñadores industriales / arquitectos de interiores hoy en día?

¿Cuáles son algunas de las razones por las que el código de prueba de software pasa de forma aislada pero falla cuando se ejecutan varias pruebas?

¿Por qué ArrayList implica Lista mientras se extiende AbstractList?

¿Por qué no estamos aprendiendo el desarrollo de software de la escuela primaria y la arquitectura del software ya que todo eso depende de la lógica y la mayoría de nosotros nacemos con ella?

¿Cuáles son las mejores conferencias para ingenieros de software?