#Задания
Нужно реализовать репликацию данных на slave-ах, используя oplog мастера. Slave должен возвращать 403 на Put.
Изменения нужно будет вносить в ValuesController.cs
и в OperationLogSynchronizer.cs
(нужно правильно реализовать функцию SynchronizationAction
).
Выполнение задания проверяют MasterSlaveReplicationTests
. Нужно сделать так, чтобы все тесты были зелеными.
Нужно реализовать репликацию данных на кворум реплик в кластере. Также, реализовать чтение с quorum реплик и возврат наиболее актуального значения.
Если больше половины кластера недоступна, то нужно выкинуть исключение new HttpRequestException("503")
Изменения нужно будет вносить в SimpleStorageClient.cs
.
Выполнение задания проверяют QuorumReplicationTests
. Нужно сделать так, чтобы все тесты были зелеными.
Нужно реализовать схему шардинга "Умный клиент". В этой схеме распределением данных по шардам занимается клиент, шарды друг о друге ничего не знают.
Изменения нужно будет вносить только в SimpleStorageClient.cs
(нужно правильно реализовать функцию GetShardEndpoint(string id)
).
Выполнение задания проверяют SmartClientShardingTests
. Нужно сделать так, чтобы все тесты были зелеными.
Тесты создают SimpleStorageClient
с правильной топологией. Топология здесь - массив шард, каждый элемент - массив endpoint-ов (реплик).
В этом задании в массивах реплик лежит всегда по одному элементу.
Нужно реализовать схему шардинга с роутингом внутри базы данных. В этой схеме клиент не знает состояния всего кластера (кластер может быть большой). Он обращается к какому-то узлу кластера. Если этот узел не отвечает за нужную шарду, он должен перенаправить запрос куда следует. И только после этого вернуть ответ клиенту.
Изменения нужно будет вносить только в ValuesController.cs
. Выполнение задания проверяют IntraDatabaseRoutingShardingTests
. Нужно сделать так, чтобы все тесты были зелеными.
Текущую топологию можно узнать из параметра SimpleStorageConfiguration configuration
(там есть свойство Topology
).
Нужно реализовать схему "Координатор". В этой схеме о топологии знает отдельная очень простая сущность - координатор. Она умеет быстро отвечать на вопрос “куда мне идти с таким ключом".
Изменения нужно будет вносить в CoordinatorController.cs
. Нужно сделать так, чтобы метод Get
возвращал правильный набор реплик, отвечающих за шарду.
Выполнение задания проверяют CoordinatorShardingTests
. Нужно сделать так, чтобы все тесты были зелеными.
Текущую топологию можно узнать из параметра SimpleStorageConfiguration configuration
(там есть свойство Topology
).