Coda — это распределенная файловая система, разработанная в качестве исследовательского проекта в Университете Карнеги-Меллона с 1987 года под руководством Махадева Сатьянараянана . Она произошла непосредственно от более старой версии Andrew File System (AFS-2) и предлагает много похожих функций. Файловая система InterMezzo была вдохновлена Coda.
Coda обладает множеством функций, полезных для сетевых файловых систем, а также несколькими функциями, которых нет больше нигде.
Coda использует локальный кэш для предоставления доступа к данным сервера при потере сетевого соединения. Во время нормальной работы пользователь читает и записывает в файловую систему обычным образом, в то время как клиент извлекает или «накапливает» все данные, которые пользователь указал как важные на случай отключения сети. Если сетевое соединение потеряно, локальный кэш клиента Coda обслуживает данные из этого кэша и регистрирует все обновления. Это рабочее состояние называется отключенной работой. После повторного подключения к сети клиент переходит в состояние реинтеграции; он отправляет зарегистрированные обновления на серверы. Затем он возвращается к нормальной работе в подключенном режиме.
Также от AFS отличается метод репликации данных Coda. AFS использует пессимистическую стратегию репликации со своими файлами, позволяя только одному серверу чтения/записи получать обновления, а все остальные серверы действуют как реплики только для чтения. Coda позволяет всем серверам получать обновления, обеспечивая большую доступность данных сервера в случае разделения сети, с которым AFS не может справиться.
Эти уникальные функции вводят возможность семантически расходящихся копий одних и тех же файлов или каталогов, известных как «конфликты». Локальные обновления отключенной операции могут потенциально конфликтовать с обновлениями других подключенных пользователей на тех же объектах, предотвращая реинтеграцию. Оптимистическая репликация может потенциально вызывать параллельные обновления на разных серверах на одном и том же объекте, предотвращая репликацию. Первый случай называется «локальным/глобальным» конфликтом, а второй случай — конфликтом «сервер/сервер». Coda имеет обширные инструменты исправления, как ручные, так и автоматизированные, для обработки и исправления обоих типов конфликтов.
Coda была разработана на Linux , и ее поддержка появилась в серии ядер Linux 2.1. [3] Она также была портирована на FreeBSD . Впоследствии, поскольку там она устарела, предпринимаются попытки вернуть ее. [4] Были предприняты попытки портировать Coda на Microsoft Windows , с эпохи Windows 95 / Windows 98 , Windows NT [5] на Windows XP [6] с помощью проектов с открытым исходным кодом, таких как DJGCC DOS C Compiler и Cygwin . [5]