Uno de los retos principales en la arquitectura de software es diseñar software y hardware que pueda funcionar en sistemas distribuidos, resolviendo los problemas que se pudieran presentar en el manejo de estos sistemas. Es importante comprender las ventajas y desventajas que ofrecen las diferentes arquitecturas de sistemas distribuidos para que sean consideradas al momento de realizar el diseño. Dentro de la arquitectura de sistemas distribuidos se pueden mencionar:
Arquitectura cliente-servidor: En este caso el sistema puede ser visto como un conjunto de servicios que se proporcionan a los clientes que hacen uso de dichos servicios. Los servidores y los clientes se tratan de forma diferente en estos sistemas.
Arquitecturas de objetos distribuidos: Para esta arquitectura no hay distinción entre servidores y clientes, y el sistema puede ser visto como un conjunto de objetos que interaccionan cuya localización es irrelevante. No hay distinción entre un proveedor de servicios y el usuario de estos servicios.
Existen dos modelos de dominio específico:
- Modelos genéricos que son abstracciones de varios sistemas reales.
- Modelos de referencia que son modelos abstractos y describen a una clase mayor de sistemas.