Skip to content

Latest commit

 

History

History
44 lines (27 loc) · 4.33 KB

tasks.md

File metadata and controls

44 lines (27 loc) · 4.33 KB

#Задания

Репликация

Master-slave репликация

Нужно реализовать репликацию данных на slave-ах, используя oplog мастера. Slave должен возвращать 403 на Put.

Изменения нужно будет вносить в ValuesController.cs и в OperationLogSynchronizer.cs (нужно правильно реализовать функцию SynchronizationAction). Выполнение задания проверяют MasterSlaveReplicationTests. Нужно сделать так, чтобы все тесты были зелеными.

Quorum read/write

Нужно реализовать репликацию данных на кворум реплик в кластере. Также, реализовать чтение с quorum реплик и возврат наиболее актуального значения. Если больше половины кластера недоступна, то нужно выкинуть исключение new HttpRequestException("503")

Изменения нужно будет вносить в SimpleStorageClient.cs. Выполнение задания проверяют QuorumReplicationTests. Нужно сделать так, чтобы все тесты были зелеными.

Шардинг

Умный клиент

Нужно реализовать схему шардинга "Умный клиент". В этой схеме распределением данных по шардам занимается клиент, шарды друг о друге ничего не знают.

Изменения нужно будет вносить только в SimpleStorageClient.cs (нужно правильно реализовать функцию GetShardEndpoint(string id)). Выполнение задания проверяют SmartClientShardingTests. Нужно сделать так, чтобы все тесты были зелеными.

Тесты создают SimpleStorageClient с правильной топологией. Топология здесь - массив шард, каждый элемент - массив endpoint-ов (реплик). В этом задании в массивах реплик лежит всегда по одному элементу.

Intra database routing

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

Изменения нужно будет вносить только в ValuesController.cs. Выполнение задания проверяют IntraDatabaseRoutingShardingTests. Нужно сделать так, чтобы все тесты были зелеными.

Текущую топологию можно узнать из параметра SimpleStorageConfiguration configuration (там есть свойство Topology).

Координатор

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

Изменения нужно будет вносить в CoordinatorController.cs. Нужно сделать так, чтобы метод Get возвращал правильный набор реплик, отвечающих за шарду.

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

Текущую топологию можно узнать из параметра SimpleStorageConfiguration configuration (там есть свойство Topology).