?

Log in

No account? Create an account
ramcloud - По делам сюда приплыл, а не за этим [entries|archive|friends|userinfo]
Anatoly Vorobey

[ website | Website ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Links
[Links:| English-language weblog ]

ramcloud [ноя. 11, 2018|10:30 am]
Anatoly Vorobey
[Tags|]

(эта запись может быть интересна только программистам)

Наткнулся на любопытный проект: RAMCloud. Это дистрибутивный key-value store, держащий данные в памяти и расширяющийся на сотни/тысяч серверов, т.е. подобен в этом таким проектам, как memcached или redis. Но в отличие от них, претендует на:

- сохранение данных на диске без опасности потери в случае падения сервера;
- очень быстрое восстановление сервера после падения (1-2 сек.)
- исключительно низкое время задержки (latency чтения ~5 МИКРОсекунд, записи ~15 - это примерно в тысячу раз быстрее, чем читать/писать на локальный диск)

Это как бы с одной стороны академический проект, его полностью выполняет группа Джона Устерхута в Стэнфордском университете (Устерхут известен как изобретатель Tcl/Tk помимо других заслуг), и они опубликовали полтора десятка академических статей и диссертаций на его основе. Неплохой обзор всего проекта есть также в блоге The Morning Paper за 2016 год - этот блог даже несколько раз писал о разных статьях этого проекта (кстати, блог один из лучших в мире, если вы не знаете, ознакомьтесь).

Я почитал некоторые из их статей, там довольно интересный подход к работе с памятью, например. Если вы пишете key-value store на основе памяти, одна из основных проблем, которые нужно решить - это фрагментация; из-за бесперспективно использовать просто стандартную кучу с malloc - куча фрагментируется и все становится очень медленным. В memcached например решили эту проблему с помощью slab allocator, специального выделения памяти фиксированными кусками, которое дает стабильность, но платит за это значительной долью памяти. В RAMCloud решили использовать систему, аналогичную log-based filesystems - новые данные пишутся все время в конце постоянно растущего лога, который обрубается каждые 8 мегабайт; параллельно обычной работе происходит периодическая компактификация старых логов. Еще они много работали над снижением задержек, связанных с сетью; скажем, они обходят ядро и напрямую читают данные из сетевой карты.

С другой стороны, это претендует на то, чтобы быть готовым для использования в реальном мире прямо сейчас проектом. Скорость доступа к данным настолько впечатляет (всего на порядок медленнее RAM, в несколько раз быстрее флеша), что по идее должна открывать путь к очень крутым возможностям с точки зрения дизайна веб-приложений, например - с такой скоростью доступа не проблема прочитать тысячу ключей последовательно один за другим во время исполнения веб-запроса, скажем. Но несмотря на то, что проект существует уже лет семь (первые статьи появляются в 2011-м, первая версия публично выпущена в 2014-м), я вообще не могу найти никаких свидетельств того, что где-то это массово используется. Статьи пишутся (некоторые из них получают призы за лучшую статью конференции!), диссертации защищаются, код - вот он лежит готовый, с кучей пояснений и документации, но я на этот проект наткнулся совершенно случайно (по ссылке из этого блогпоста о книге Устерхута по философии дизайна программ) и никто - не могу быть уверен, конечно, но в первом приближании никто - им, кажется, не пользуется. Есть тут определенная загадка:

- то ли амбициозная задача, которую этот проект решает, на самом деле не так уж нужна людям
- то ли он слишком себя перехваливает и в реальном использовании добиться таких чисел тяжело (скажем, задержка в 5/15 микросекунд предполагает использование технологиии Infiniband, а также какой-то способ заставить сервера сбрасывать буферы на диск, даже если выключается питание всего датацентра; такие способы существуют, например, с отдельной backup-батареей для каждого сервера, но отнюдь не являются стандартными). Это объяснение мне кажется наиболее верным.
- то ли реально это сырой проект, полный багов, люди пытаются им пользоваться и быстро бросают
- то ли все отлично и это вообще революционное достижение, но никто не знает. Не очень в это верю.

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

Comments:
[User Picture]From: reader59
2018-11-11 08:57 am
Пара замечаний:
- лезут напрямую к сетевой карте в обход ОС - использование подобного в сколько-нибудь серьезной системе (а для несерьезных все описанное не нужно) заведомо порождает проблем много больше, чем решает;
- "отдельная backup-батарея для каждого сервера" абсолютный стандарт, в частности, хюлеттовские рэйд-контроллеры без этой опции кажется вообще не существуют - да без нее и тяжко, потому что ничто, кроме этой опции, не способно защитить данные от банального выдергивания шнуров питания каким-нибудь идиотом.
Ну и в целом "академический проект" это, как правило, голая реализация алгоритма, а оное - не мне вам объяснять - не более чем от 15 до 50% кода, причем при разработке оставшейся части запросто могут вылезти проблемы вплоть до невозможности применения первоначального алгоритма вообще.
(Ответить) (Thread)
[User Picture]From: avva
2018-11-11 11:38 am
Батарея стандартна на рейд-контроллерах, но тут речь идет об обычных облачных серверах с дисками, без рейда. Если вы делаете дублирование на уровне своего стека - например, этот же RAMCloud копирует каждый ключ в три разные сервера-бэкапа - то рейд для вас только лишние траты.
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: vitus_wagner
2018-11-11 09:13 am
Ну вот Tk Устерхута несмотря на замечательный дизайн проиграл десктоп практически полностью уродским Gtk и Qt. Равно как и Tcl проиграл не то что Python-у- всяческим Lua и Ruby. Основная проблема изделий Устерхута заключается в том, чтобы для того чтобы ими пользоватсья нужно ясно и логически мыслить. Этого подавляющая часть разработчиков не умеет, поэтому эти вещи остаются невостребованными.
(Ответить) (Thread)
[User Picture]From: onodera
2018-11-11 09:31 am
Тикль проиграл из-за элегантной, но бесполезной абстракции "всё строка". Она не дала реальных преимуществ, но зато наивная реализация всего через строки сделала тикль слишком медленным. Нормальный интерпретатор сделали, кажется, только в восьмой версии, когда тикль уже остался далеко позади.
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: alxt
2018-11-11 09:26 am
Вопрос в том, что с этими данными делать.
Ну вот получил ты по запросу стопятьсоттыщ записей с десяти нод и что дальше? Обычно нужна агрегация, а почему бы её не начать сразу?

Более интересны решения типа Apache Ignite / Gridgain, когда на первом этапе алгоритм получает локальные данные и по сети гоняются только агрегаты.

Правда, как и всё от Апача, работает оно криво :)
Ну и самописные аналоги есть- хранить kv на диске не сложно, кластеризация- да, сложнее, но тоже можно сделать.
(Ответить) (Thread)
[User Picture]From: livelight
2018-11-11 05:30 pm
У меня первый вопрос при упоминании чтения стопятьсоттыщ значений одно за другим: а нахрена где взять стопятьсоттыщ ключей? У этой базы индекс есть хотя бы? А с какой скоростью он работает? В мемкеше по сути нет, например.
Ну а следующий вопрос - это уже "нахрена?" Нахрена их читать последовательно? Что мешает организовать балковую загрузку?
(Ответить) (Parent) (Thread)
[User Picture]From: lelia_br
2018-11-11 09:46 am
индустрия не имеет права использовать академические разработки в продуктах за которые платят деньги, т.к. академические исследования часто ведутся за счет гос. денег. это проблема авторских прав, а не качества продукта.

Edited at 2018-11-11 09:47 (UTC)
(Ответить) (Thread)
[User Picture]From: gnuzzz
2018-11-11 10:28 am
если академические разработки это open source с внятной лицензией - то имеет
тут скорее дело в наличии/отсутствии поддержки - индустрия не любит продукты без поддержки
(Ответить) (Parent) (Thread) (Развернуть)
From: oldkettle
2018-11-11 10:00 am
Off-topic: долью (памяти) -> долей
(Ответить) (Thread)
[User Picture]From: gnuzzz
2018-11-11 10:31 am
Но в отличие от них, претендует на:

- сохранение данных на диске без опасности потери в случае падения сервера;

Редис кстати тоже претендует.
(Ответить) (Thread)
[User Picture]From: avva
2018-11-11 01:30 pm
Да, но обычная конфигурация записи на диск в нем предполагает потерю последних минут/секунд в случае падения. Можно сконфигурировать fsync на каждую запись, но и задержка тогда существенно вырастет, я не думаю, что многие так redit запускают.
(Ответить) (Parent) (Thread)
[User Picture]From: gholam
2018-11-11 11:55 am
например - с такой скоростью доступа не проблема прочитать тысячу ключей последовательно один за другим во время исполнения веб-запроса, скажем

Хахаха, типичный вебкодер считает что и сотню тысяч прочитать последовательно - не проблема, ведь у него на локальной станции с парой сотен всё работает, а если в продашне тормозит - так это пусть у сисадмина голова болит.
(Ответить) (Thread)
[User Picture]From: occuserpens
2018-11-11 12:40 pm
[RAMCloud is a software package that runs on commodity Intel servers with the Linux operating system. RAMCloud is available freely in open source form.]

Купил на Амазоне 100 commodity Intel servers и сходу запустил RAMCloud? Не верится.

Распределенный РАМ для сотен и тысяч серверов с задержкой 5-10 мксек - это, я так понимаю, нечто суперкомпьютерное с неким специфическим железом. Откуда взяться микросекундам без спецжелеза?

Edited at 2018-11-11 12:51 (UTC)
(Ответить) (Thread)
[User Picture]From: avva
2018-11-11 01:29 pm
Да, 5 мксек предполагают Infiniband, которого нет в стандартных облаках (кроме Azure, но и там как-то мутно). RAMCloud будет работать и через обычную сетку, но уже не с такой задержкой, а существенно большей - а сколько, они не говорят.
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: webface
2018-11-11 07:37 pm
А зачем такому проекту обязательно применяться в реальных условиях? На то ведь он и академический. Никто не мешает стороннему коммерческому проекту взять их код и допилить его до рабочего состояния, либо просто взять какие то базовые идеи и внедрить их в существующую систему кэширования.
(Ответить) (Thread)
[User Picture]From: occuserpens
2018-11-11 09:57 pm
Так в том-то и дело, что, судя по всему, их код - вишенка на железном торте, причем IB - далеко не все, что у них есть. Потому что он хоть и дорогой, но для суперкомпьютерщиков достаточно обычный

Edited at 2018-11-11 22:00 (UTC)
(Ответить) (Parent) (Thread)
[User Picture]From: prol_prolych
2018-11-12 01:27 pm
"Придумаю свой язык программирования и назову его Pomidor. Буду Senior Pomidor Developer."
(Ответить) (Thread)
[User Picture]From: migmit.dreamwidth.org
2018-11-12 03:51 pm
> RAMCloud runs only on Linux.

До свидания.

Нет, на серверах у нас линух. Но вот девелоперские машины — в основном, Маки.
(Ответить) (Thread)
[User Picture]From: gnuzzz
2018-11-12 06:14 pm
на маке в докере запускать
завернуть всю инфраструктуру в контейнеры и вперед
(Ответить) (Parent) (Thread) (Развернуть)
[User Picture]From: tyomitch
2018-11-12 06:16 pm
John Ousterhout = Джон Оустерхаут
(Ответить) (Thread)