#Задания
Нужно реализовать репликацию данных на 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).