Un sistema distribuido busca ofrecer a usuarios y programadores una experiencia sin fricciones mediante la ocultación de la separación de componentes y la distribución de recursos. Un aspecto clave es la transparencia, que se manifiesta en varios tipos como replicación, reubicación, acceso, migración, falla y concurrencia, cada uno de los cuales oculta diferentes aspectos del funcionamiento del sistema.