Skip to content
nmenshov edited this page Feb 20, 2015 · 2 revisions

Система состоит из четырёх компонент: Proxy, Distributor, Writer и Collector.

  • Writer - компонент конечного хранения данного в системе. Его основной особенностью является независимость от типа конечного хранилища. Можно создать реализацию под MsSql, Postgre или Redis и MemCache. Меняя backend, можно сильно поменять поведение и свойства системы. Например, если создать inmemory backend, то система покажет более высокую производительность, но меньшую отказоустойчивость и емкость. При реализации sql backend система будет медленные (из-за сопутствующего overhead), но при отказе сервера данные не потеряются. Изменяя backend, меняется и механизм поиска. Например, при sql данные хранятся структурировано (в виде одной или нескольких таблиц), а при inmemory - в виде key-value. Writer необходимо настраивать под требования конкретной задачи.

  • Distributor - компонент, отвечающий за транзакционную запись и чтение данных в системе. На вход компонента приходят запросы от пользователя, на выходе - результат запроса или код ошибки. Рассмотрим запись в систему. По хешу и DHT определяется Writer, на котором будет хранится данное. Затем на N различных доступных серверов, которые последовательно идут по хеш кольцу, записывается данное, где N - количество реплик в системе. При чтении происходит тоже самое, только чтение происходит с одного сервера, если в системе не было отказов(все данные всегда записывались правильно). Если отказ был, то данное читается со всех серверов, а затем среди всех копий данного выбирается актуальное.

  • Proxy - компонент, который пользователь использует в своей программе, чтобы получить доступ к системе. Задача Proxy - выбрать Distributor и отправить ему данные. При получении данного вернуть их пользователю или, если данных нет, то по таймеру вернуть ошибку.

  • Collector - компонент для осуществления сложного поиска по системе. Поскольку от типа запроса зависит механизм агрегации данных, в данный момент реализован только упорядоченный поиск по системе. Данные постранично запрашиваются с каждого Writer и агрегируются для отправки пользователю.

Clone this wiki locally