FoundationDB, уровень: размещен ли он на клиентском приложении или на узлах сервера?
Недавно я читал о концепции слоев в FoundationDB. Мне нравится их идея, разложение хранилища с одной стороны и доступ к нему с другой.
Есть некоторые неясные моменты относительно реализации слоев. Особенно как они общаются с хранилищем. Возможны два ответа: они являются частями серверных узлов и связываются с хранилищем с помощью быстрых собственных вызовов API (например, в виде связанных модулей, размещенных в серверном процессе) - или размещаются внутри клиентского приложения и обмениваются данными по сетевому протоколу. Например, уровень SQL многих СУБД размещается на сервере. А как дела с FoundationDB?
PS: эти два случая отличаются от представления о производительности, особенно когда связь между сервером и клиентом имеет высокую задержку.
2 ответа
Слои находятся над библиотекой на стороне клиента. Цитируется по http://community.foundationdb.com/questions/153/what-layers-do-you-want-to-see-first
Это хороший вопрос. Одна из причин, по которой не всегда имеет смысл запускать слои на сервере, заключается в том, что в распределенной базе данных эти данные разбросаны - сами серверы являются сетевым переходом от случайного фрагмента данных, как и клиент.
Конечно, для чего-то вроде уровня аналитики, который знает, какие данные содержит каждый сервер, имеет смысл запустить распределенную версию, расположенную совместно с каждой из машин в кластере FDB.
Чтобы расширить то, что сказал Эонил: ответ опирается на различие между двумя различными понятиями "клиент" и "сервер".
Слои не запускаются внутри процессов сервера базы данных. Они используют клиентский API FDB для выполнения запросов к базе данных и не могут (за одним исключением *) пробить абстракцию значения ключа транзакции.
Однако ничто не мешает запускать слои на тех же физических (или виртуальных) серверах, что и процессы сервера базы данных. И, как упоминается в этом сообщении с сайта сообщества, есть случаи, когда вы можете очень захотеть сделать это, чтобы минимизировать задержки.
* Исключением является Locality API, который в основном полезен именно в тех случаях, когда вы хотите совмещать клиентские слои с данными, с которыми они работают.