LINUX.ORG.RU

Использование Mercurial в Facebook

 ,


0

3

Ребята из FB делятся своим опытом использования и масштабирования Mercurial. В своё время Git был признан инженерами FB непригодным для этого, отчасти в силу своего не особо очевидного кода.

Пишут, что теперь hg у них местами в 5, а то и в 50 раз быстрее, чем git.

По сути, все изменения открыты. Интересно, найдется ли самурай, который отважится так же разогнать git? Неужели официальная система контроля версий ядра линукс действительно не готова для такого?

★★★★★

Последнее исправление: CYB3R (всего исправлений: 2)

Интересно, найдется ли самурай, который отважится так же разогнать git?

дык там сама архитектура кривая и костыльная. Его с нуля переписать надобно.

Неужели официальная система контроля версий ядра линукс действительно не готова для такого?

не. Её закапывать пора. Впрочем, как и ядро. Но проблема в том, что другого ядра у нас нет, и не предвидится, а вот ртуть — уже есть.

emulek
()

По сути, все изменения открыты

По сути, это типичные ынтерпрайзные патчи - нужные конкретному ынтерпрайзу, но мало применимые вне его:

«hgwatchman will disable itself if any of the following extensions are enabled: largefiles, inotify, eol; or if the repository has subrepos»

tailgunner ★★★★★
()
Ответ на: комментарий от emulek

дык там сама архитектура кривая и костыльная. Его с нуля переписать надобно

Пусть и так. Но ведь гит - это major player в мире систем контроля версий, стандарт де-факто, можно сказать. Особенно учитывая многомиллионную аудиторию гитхаба.

В принципе, тому же гитхабу скинуться на пиво Торвальдсу и еще десятке матерых хакеров ничего не стоит, чтобы те сели и за неделю сочинили какой-нибудь там git reloaded с тем же пользовательским интерфейсом, но более прямым дизайном, чисто из спортивного интереса (Олимпиада на носу, как никак). Чувствую я, что в скором времени что-то такое и произойдет.

yoghurt ★★★★★
() автор топика
Ответ на: комментарий от yoghurt

Пусть и так. Но ведь гит - это major player в мире систем контроля версий, стандарт де-факто, можно сказать. Особенно учитывая многомиллионную аудиторию гитхаба.

давай ещё вспомним аудиторию винфака...

Чувствую я, что в скором времени что-то такое и произойдет.

вряд-ли. Некоторые вещи(точнее многие) в mercurial'е если и есть, то только чудовищными костылями (типа удаления из истории). Потому-что они на самом деле не нужны. Но эту ненужность надо было осознать ДО проектирования DVCS. Не осознали... А вот при проектировании ртути это было УЖЕ известно, потому и архитектура получилась более продуманная и совершенная. Да, посмотри на велосипеды из 19го века, они тоже уродские. И тоже несовместимые.

emulek
()

так и запишем: недодевелоперы фейсбука ниасилили гит.

funeralismatic ★★★
()
Ответ на: комментарий от theNamelessOne

Нет необходимости в погружении в удивительную по своей комбайновости вселенную емакса
!

dmitry_malikov ★★
()
Ответ на: комментарий от yoghurt

Но ведь гит - это major player в мире систем контроля версий. Особенно учитывая многомиллионную аудиторию гитхаба.

Мимо. Свн - да. Учитывая то, что битбакет давно уже не гитоспецифичный, рано или поздно гитхабу тоже придётся поддержать что-то кроме гита.

dmitry_malikov ★★
()
Ответ на: комментарий от dmitry_malikov

Учитывая то, что битбакет давно уже не гитоспецифичный,

Что? У тебя как-то всё в обратную сторону работает.

overmind88 ★★★★★
()

Интересно, найдется ли самурай, который отважится так же разогнать git?

Пишут, что теперь hg у них местами в 5, а то и в 50 раз быстрее, чем git.

у них

Возникает вопрос, зачем разгонять гит, чтобы он быстро работал в facebook?

overmind88 ★★★★★
()
Ответ на: комментарий от overmind88

Возникает вопрос, зачем разгонять гит, чтобы он быстро работал в facebook?

Зачем facebook. Одноклассники же!

yoghurt ★★★★★
() автор топика
Ответ на: комментарий от dmitry_malikov

Свн - да

Свн своё уже отработал. Может у него и до сих пор весомая доля, но пользуются им в основном по инерции. Прошлый век, в современных реалиях не оч.

yoghurt ★★★★★
() автор топика
Ответ на: комментарий от yoghurt

Но ведь гит - это major player в мире систем контроля версий, стандарт де-факто, можно сказать. Особенно учитывая многомиллионную аудиторию гитхаба.

В СПО только. Проблема FB это типичная проблема жирных контор, которые много лет сидят на VCS типа subversion и perfroce используя один реп как файловую помойку сразу для всех своих проектов практически без веток и всё делая в trunk'е. Они тупо не думают о проблеме масштабирования в ширь и, переходя на другие VCS, переносят с собой паттерн использования репа как файловой помойки. В мире СПО это антипаттерн и такого просто нигде нет.

В принципе, тому же гитхабу скинуться на пиво Торвальдсу и еще десятке матерых хакеров ничего не стоит, чтобы те сели и за неделю сочинили какой-нибудь там git reloaded с тем же пользовательским интерфейсом,

Матёрым хакерам нужен стимул поболее бутылки пива. Спасение утопающих в мире СПО обычно проблема самих утопающих. Нужно - бери и делай сам или готовь заманчивые $.

с тем же пользовательским интерфейсом, но более прямым дизайном,

С дизайном всё нормально. Проблема в оптимизации под большие деревья, трудно придумать общее решение. Некоторые реализации клиента git придумывают свои костыли, когда-нибудь мб сделают похожие костылики для стандартного клиента.

mashina ★★★★★
()
Ответ на: комментарий от fenris

Шах и мат, гитомакаки.

Только в фантазиях рутефанов.

andreyu ★★★★★
()
Ответ на: комментарий от mashina

Проблема FB это типичная проблема жирных контор, которые много лет сидят на VCS типа subversion и perfroce используя один реп как файловую помойку сразу для всех своих проектов практически без веток и всё делая в trunk'е. Они тупо не думают о проблеме масштабирования в ширь и, переходя на другие VCS, переносят с собой паттерн использования репа как файловой помойки.

Оне просто лохе!

tailgunner ★★★★★
()

After a couple months of monitoring and fixing discrepancies in usage, we got the rate low enough that we were comfortable enabling Watchman by default for our engineers.

rate low enough

Ню-ню.

baverman ★★★
()
Ответ на: комментарий от mashina

используя один реп как файловую помойку сразу для всех своих проектов практически без веток и всё делая в trunk'е

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

dmitry_malikov ★★
()
Ответ на: комментарий от baverman

Достаточно для того, чтобы считать проведённое за этими занятиями время не бесполезно потраченым.

dmitry_malikov ★★
()

А разве недавно не было новости, что в том же пейсбуке используют гит (или даже перешли на него) и как-то нереально его ускорили и меркуриал сильно соснул? Или у них там социалистическое соревнование? :3

Deleted
()
Ответ на: комментарий от Deleted

А разве недавно не было новости, что в том же пейсбуке используют гит (или даже перешли на него)

Как говориться, ссылку или GTFO. Насколько я могу судить по mercurial-devel@, Facebook довольно давно использует именно Mercurial, дает работу некоторым разработчикам, и хостит спринты.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)

Как такое може быть!!! Гит благодатен!!! Луниус угнети их!!! Все самые четки поцыки и тяночки пользуют гит остальные лалки азазазазаза!!!!!

kot_otbelivatel
()
Ответ на: комментарий от fenris

Шах и мат, гитомакаки.

ты зачем сбрил усы дурик?

quest ★★★★
()
Ответ на: комментарий от Deleted

А разве недавно не было новости, что в том же пейсбуке используют гит (или даже перешли на него) и как-то нереально его ускорили и меркуриал сильно соснул?

около года назад что-то подобное было

quest ★★★★
()
Ответ на: комментарий от dmitry_malikov

грезить о боеспособности сабмодулей

че? оно просто работает

quest ★★★★
()

Watchman exists to watch files and record when they actually change. It can also trigger actions (such as rebuilding assets) when matching files change.

AnDoR ★★★★★
()
Ответ на: комментарий от dmitry_malikov

битбакет давно уже не гитоспецифичный

есличо, битбакет изначально только hg и умел. Поддержка git была добавлена позже.

anonymous
()
Ответ на: комментарий от dmitry_malikov

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

Ты, видимо, не видел, во что оборачивается один жирный репозитарий со всем кодом в компании размером в тысячи человеков: в итоге приходится заводить отдельных чуваков только для того, чтобы поддерживать всю эту хренотень, дабы та не падала и не тормозила. Что, собственно, и доказано чуваками из FB на примере Mercurial.

anonymous
()
Ответ на: комментарий от anonymous

И старая русская забава «никто не коммитит в транк, я сейчас мёржить буду»

dmitry_malikov ★★
()
Последнее исправление: dmitry_malikov (всего исправлений: 1)
Ответ на: комментарий от anonymous

Ты, видимо, не видел, во что оборачивается один жирный репозитарий со всем кодом в компании размером в тысячи человеков: в итоге приходится заводить отдельных чуваков только для того, чтобы поддерживать всю эту хренотень

Ну и что? 3-4 человека в команде из тысяч, занимающиеся допиливанием VCS. Big fucking deal.

tailgunner ★★★★★
()

Ну идеи у них весьма очевидные - ничего нового они на самом деле не придумали:

  • Мониторить файловую систему чтобы знать что изменилось в рабочей копии без её полного сканирования
  • sparse апдейты, при которых выкачиваются только метаданные (в терминоголии git commit и tree объекты, но не blob'ы)

Прежде всего надо сказать что необходимость в этом возникает только по причине кривой организации работы: svn-like «одна большая помойка», в то время как проект должен быть разбит на отдельные небольшие репы. Звиняйте, но если всё валится в одну большую кучу, рано или поздно потребуются какие-то костыли чтобы это поддерживать.

Первая идея в общем здравая, однако не надо забывать что status на всё дерево - довольно глупая операция, а status на ту часть с которой вы работаете выполняется быстро. В git это «git status» vs. «git status .» (или поддиректория), не знаю умеет ли hg аналог второго. Во-вторых, файловая система с вменяемой политикой кэширования метаданных убирает необходимость в этой фиче (ZFS ARC, например, замечательно справляется). Ну если вдруг трындец надо на холодном кэше сделать status на всё дерево - то вопросов нет, фейсбуковская поделка отдаст состояние мгновенно.

А вот вторая идея кроме того что в голос орёт о необходимости нормально организовать репозиторий, мало применима в реальных условиях, ибо во-первых требует неслабой инфраструктуры для поддержки (модифицированный сервер + мемкэши), во-вторых, делает из dvcs по сути централизованную систему с единой точкой отказа и невозможностью работать offline. Глупо говорить о 10x увеличении скорости pull, когда log --patch превращается в тыкву.

Итого, тех же феноменальных ускорений на больших деревьях можно добиться

  • запуская долгие команды только на том поддереве, на котором они реально нужны
  • и добавив git fetch в cron чтобы не ждать скачки обновлений (тогда pull станет ещё на несколько порядков быстрее фейсбуковского поскольку почти не будет требовать сетевого общения, с сохранением полной возможности работы offline)

Ну и, ещё раз, нормальная огранизация репозитория - наше всё.

slovazap ★★★★★
()
Ответ на: комментарий от quest

Не могу представить себе столь грандиозный проект, как 5...10 млн. мелких файлов, да ещё по ~10 тыс. в каталоге.

У NetBeans число файлов .java в текущей ревизии:

% find ./netbeans/main -type f -name "*.java" | wc -l
   44205

Размер локального Mercurial-репозитория NetBeans:

% du -d0 -h ./netbeans/main/
3,5G	./netbeans/main/

iZEN ★★★★★
()
Последнее исправление: iZEN (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.