Опыт работы с CVS в кластерной файловой системе

Я был бы заинтересован в любом опыте использования CVS в кластерной файловой системе с несколькими серверами, обращающимися к ней. Я думаю, это похоже на то, что делают провайдеры, такие как SourceForge.

В настоящее время мы используем сервер CVS на основе RHEL с файловой системой репозитория ext3 в сети SAN.

Идея состоит в том, чтобы использовать несколько машин для обработки соединений CVS от клиентов, работающих в одной файловой системе в быстром SAN. Эта избыточность может использоваться как для балансировки нагрузки, так и для восстановления после отказа (например, с использованием циклического DNS, который можно перенастроить в случае сбоя одного из серверов).

SVN не является альтернативой по разным причинам, пожалуйста, не начинайте обсуждение CVS/SVN.

3 ответа

Решение

Лучший ответ на ваши проблемы с масштабированием VCS - тот, который вы дали в своем вопросе. Не используйте CVS. Я согласен с вами, хотя SVN - это решение ни для кого не проблем. Существует множество хорошо масштабируемых систем контроля версий (например, Perforce, Rational).

В целом, я думаю, что вы обнаружите, что кластерные файловые системы не обеспечивают требуемой производительности, их основными целями являются доступность. Если вам нужно выбрать любую кластеризованную ФС, то я думаю, что вам нужно рассмотреть что-то вроде http://oss.oracle.com/projects/ocfs/ которая создана для высокопроизводительной кластеризации баз данных. Высокопроизводительные базы данных, тем не менее, не полагаются на flock или подобные механизмы блокировки файлов, как это делает CVS, они просто не масштабируются. Вам нужно было бы добавить какой-нибудь менеджер транзакционных распределенных блокировок. CVS и высокая производительность просто не вписываются в один и тот же этап.

Однако у меня есть ощущение, что вы не пытаетесь масштабировать свою систему контроля версий и пытаетесь использовать CVS для чего-то конкретного приложения. В этом случае я бы предложил написать код непосредственно в RCS и запустить собственный менеджер блокировок. Я бы избежал сложных и дорогостоящих распределенных или кластерных файловых систем и сосредоточился бы на создании более умного приложения, используя какой-то подход распределенного хэш-сегмента.

Между вашим сан и машинами, на которых работает CVS, вам понадобится какая-то сетевая файловая система (по крайней мере, я не могу представить себе файловую систему, которая бы справлялась с одновременным доступом к одному и тому же устройству, и я предполагаю, что с помощью SAN Вы имеете в виду хранилище, представленное серверу / ОС как устройство хранения). Несколько лет назад было обсуждение CVS поверх NFS, и вы потенциально можете столкнуться с такими же / похожими проблемами с любыми сетевыми файловыми системами.

  • Вы хотите сетевую файловую систему, которая хорошо обрабатывает блокировки
  • В идеале вам также нужна сетевая файловая система, которая управляет согласованностью кэша файловой системы между вашими внешними интерфейсами CVS.

Теперь я не знаю точно, как sourceforge структурирован для CVS, однако, я думаю, что-то вроде:

  • Небольшое количество блоков, позволяющих коммиты CVS, возможно, разбито таким образом, что один проект связан с одной коробкой / файловой системой, где они выполняют свои коммиты.
  • Состояние из блоков фиксации CVS затем реплицируется на большое количество блоков / файловых систем, которые они балансируют нагрузкой и обрабатывают аварийные переключения для анонимного чтения CVS, просмотра CVS->html и т. Д.

(Мои предположения основаны на том, что анонимный CVS иногда обслуживал состояние CVS, которое было несколько часов назад, и у меня есть смутные воспоминания о том, что я иногда медленно ползу к блокам фиксации sf CVS).

У меня действительно нет ответа, но ради продолжения обсуждения...

Я предполагаю, что CVS использует какую-то транзакционную базу данных в качестве резервного хранилища (я знаю, что это делает SVN). Если это так, мне кажется, что несколько авторов этих файловых структур не будут в безопасности. Разве не лучше подходить к созданию уровня абстракции в интерфейсе базы данных? Например, используйте службу SQL вместо локальной BDB/LDBM или чего-либо еще (предполагая, что CVS поддерживает такую ​​вещь).

Другие вопросы по тегам