<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wikicshse.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9D%D0%98%D0%A1_%D0%A0%D0%B0%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%283_%D0%BA%D1%83%D1%80%D1%81%2C_2017%29</id>
	<title>НИС Распределенные системы (3 курс, 2017) - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://wikicshse.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9D%D0%98%D0%A1_%D0%A0%D0%B0%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_%283_%D0%BA%D1%83%D1%80%D1%81%2C_2017%29"/>
	<link rel="alternate" type="text/html" href="https://wikicshse.ru/index.php?title=%D0%9D%D0%98%D0%A1_%D0%A0%D0%B0%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_(3_%D0%BA%D1%83%D1%80%D1%81,_2017)&amp;action=history"/>
	<updated>2026-06-06T16:01:39Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://wikicshse.ru/index.php?title=%D0%9D%D0%98%D0%A1_%D0%A0%D0%B0%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_(3_%D0%BA%D1%83%D1%80%D1%81,_2017)&amp;diff=1065&amp;oldid=prev</id>
		<title>imported&gt;Sandello: Migrated current public revision from wiki.cs.hse.ru</title>
		<link rel="alternate" type="text/html" href="https://wikicshse.ru/index.php?title=%D0%9D%D0%98%D0%A1_%D0%A0%D0%B0%D1%81%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_(3_%D0%BA%D1%83%D1%80%D1%81,_2017)&amp;diff=1065&amp;oldid=prev"/>
		<updated>2018-06-15T19:49:03Z</updated>

		<summary type="html">&lt;p&gt;Migrated current public revision from wiki.cs.hse.ru&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Информация про семинар ==&lt;br /&gt;
В рамках научно-исследовательского семинара по распределенным системам изучаются основные понятия, принципы и результаты предметной области. &lt;br /&gt;
&lt;br /&gt;
Контакты: [mailto:sandello@gmail.com Пузыревский Иван Витальевич]&lt;br /&gt;
&lt;br /&gt;
Список тем курсовых работ: http://wiki.cs.hse.ru/Темы_для_курсовых_работ_2017_(РС)&lt;br /&gt;
&lt;br /&gt;
=== Оценка ===&lt;br /&gt;
&lt;br /&gt;
* Проверочная работа 1 &amp;lt;= 4 баллов&lt;br /&gt;
* Задание 1 &amp;lt;= 3 баллов&lt;br /&gt;
* Задание 4 &amp;lt;= 4 баллов&lt;br /&gt;
* Рецензирование статьи &amp;lt;= 3 баллов&lt;br /&gt;
&lt;br /&gt;
Текущая таблица с оценками и ведомостью: https://docs.google.com/spreadsheets/d/16Z74fhT_TnNscsVviU9KU2mVlaMrmX3weQ6ku5jGGbk/edit?usp=sharing&lt;br /&gt;
&lt;br /&gt;
== Занятия ==&lt;br /&gt;
&lt;br /&gt;
=== 1 модуль ===&lt;br /&gt;
&lt;br /&gt;
* Модель распределенных вычислений.&lt;br /&gt;
* Объекты-регистры, типы регистров (bool/int; safe/regular/atomic; single/multi-reader; single/multi-writer).&lt;br /&gt;
* Эквивалентность вычислительной силы SRSW Bool Safe &amp;amp; MRMW Int Atomic.&lt;br /&gt;
* Блокировки (locks). Понятия живости (liveness) и безопасности (safety). Мьютекс Лампорта.&lt;br /&gt;
&lt;br /&gt;
Литература: Herlihy, Shavit -- The Art of Multiprocessor Programming (https://www.dropbox.com/s/s8sssgp95hq5f6q/aompp.pdf?dl=0). Главы 2-4.&lt;br /&gt;
&lt;br /&gt;
=== 2 модуль ===&lt;br /&gt;
&lt;br /&gt;
* Lock-free &amp;amp; wait-free исполнения.&lt;br /&gt;
* Примитив консенсуса. Число консенсуса как характеристика примитивов синхронизации.&lt;br /&gt;
* Универальность консенсуса.&lt;br /&gt;
&lt;br /&gt;
Литература: Herlihy, Shavit -- The Art of Multiprocessor Programming (https://www.dropbox.com/s/s8sssgp95hq5f6q/aompp.pdf?dl=0). Главы 5-6.&lt;br /&gt;
&lt;br /&gt;
Работа над ошибками (всем): задачи 11-19, все; &amp;#039;&amp;#039;&amp;#039;deadline: НИС неделе 15.01-21.01&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
=== 3 модуль ===&lt;br /&gt;
&lt;br /&gt;
Распределенные алгоритмы. Время, часы, порядок на событиях.&lt;br /&gt;
&lt;br /&gt;
Назначенные статьи для разбора на занятии:&lt;br /&gt;
* на 29.01; Богданова: &amp;#039;&amp;#039;Lamport&amp;#039;&amp;#039; -- Time, clocks and the ordering of events in a distributed system ([https://yadi.sk/i/0cE6EdG5vN5mr pdf])&lt;br /&gt;
* на 29.01; Божко: &amp;#039;&amp;#039;Fidge&amp;#039;&amp;#039; -- Timestamps in message-passing systems that preserve the partial ordering ([https://yadi.sk/i/LyhtLfOMvN64M pdf])&lt;br /&gt;
* на 05.02; Когтенков: &amp;#039;&amp;#039;Mills&amp;#039;&amp;#039; -- Internet time synchronization: the network time protocol ([https://yadi.sk/i/PdXX6TO2vN6Bw pdf])&lt;br /&gt;
&lt;br /&gt;
Литература: Garg -- Elements Of Distributed Computing.&lt;br /&gt;
&lt;br /&gt;
=== 4 модуль ===&lt;br /&gt;
&lt;br /&gt;
Назначенные статьи для разбора на занятии:&lt;br /&gt;
* на 25.05; Кутенин: &amp;#039;&amp;#039;Liskov, Cowling&amp;#039;&amp;#039; -- Viewstamped replication revisited ([https://yadi.sk/i/EO37MNowy6Cwv pdf]) + &amp;#039;&amp;#039;Oki, Liskov&amp;#039;&amp;#039; -- Viewstamped replication: a new primary copy method to support highly available distributed systems ([https://yadi.sk/i/5pVDiF7Qy6D3D pdf])&lt;br /&gt;
* на 08.06; Ренева: &amp;#039;&amp;#039;Ongaro, Ousterhout&amp;#039;&amp;#039; -- In search of understandable consensus algorithm ([https://yadi.sk/i/K5gdY2X2y6EE4 pdf]) + &amp;#039;&amp;#039;Ousterhout&amp;#039;&amp;#039; -- Raft lecture ([https://www.youtube.com/watch?v=YbZ3zDzDnrw video]; 1.0ч)&lt;br /&gt;
&lt;br /&gt;
== Задание 1 ==&lt;br /&gt;
&lt;br /&gt;
Заготовка: https://github.com/sandello/hse-queue-assignment&lt;br /&gt;
&lt;br /&gt;
Дедлайн: 23 апреля 08:00.&lt;br /&gt;
&lt;br /&gt;
Вам необходимо создать файл solution_xxx.cpp (&amp;quot;xxx&amp;quot; замените на вашу фамилию), содержащий реализацию lock-free многопоточной очереди с интерфейсом IQueue; в конце файла определить тип TheQueue. Далее, скомпилировать ваше решение можно с помощью скрипта compile.sh. Решение считается корректным, если скомпилированная программа корректно, без ошибок отрабатывает при запуске с флагом --gtest_repeat=100.&lt;br /&gt;
&lt;br /&gt;
В качестве решения можно реализовать Michael-Scott Queue или очередь с использованием универсальной конструкции из второго модуля.&lt;br /&gt;
&lt;br /&gt;
Ваше решение -- cpp-файл -- присылайте на почту sandello@gmail.com или присылайте ссылку на GH.&lt;br /&gt;
&lt;br /&gt;
== Задание 2 ==&lt;br /&gt;
&lt;br /&gt;
Заготовка: https://github.com/sandello/hse-paxos-assignment&lt;br /&gt;
&lt;br /&gt;
Дедлайн: 9 июня 08:00.&lt;br /&gt;
&lt;br /&gt;
Вам необходимо создать файл solution_xxx.py (&amp;quot;xxx&amp;quot; замените на вашу фамилию), содержащий реализацию процесса распределенного отказоустойчивого write-once key-value хранилища. Write-once значит, что каждый ключ можно записать не более, чем один раз (попытки перезаписи не приводят к изменению значения). Key-value store значит, что хранилище адресует пользовательские строковые данные по пользовательскому строковому ключу. Работа с данными по фиксированному ключу имеет семантику регулярного регистра. Распределенность и отказоустойчивость значат, что операции чтения и записи может обрабатывать любая реплика (экземпляр процесса), и остановка меньшей части реплик не останавливает процесс операций.&lt;br /&gt;
&lt;br /&gt;
В задании предполагается следующая модель разработки: ваш процесс должен наследоваться от класса Process, определенном в файле public.py. Класс Process обладает тремя абстрактными методами: setup, on_tick, on_receive. Метод setup вызывается при инициализации теста и используется для передачи вашему процессу информации об окружении: в частности, о количестве процессов. Метод on_tick вызывается, когда конкретно данному процессу дается квант времени для внутренней работы. Метод on_receive вызывается при доставке данному конкретному процессу сообщения (в качестве сообщения можно использовать любой сериализуемый в json объект). В методы on_tick и on_receive передается контекст (ctx); объект контекста реализует интерфейс Context; контекст можно использовать для получения текущего (логического) времени и для отправки сообщения какому-либо другому процессу. Контекст нельзя сохранять и переиспользовать между разными вызовами on_tick и on_receive.&lt;br /&gt;
&lt;br /&gt;
Такая модель разработки отражает теоретическую модель и позволяет эмулировать отказы и эффекты асинхронности в тестах. Не допускается порождать и использовать фоновые потоки (threads); ваш код должен быть однопоточным. Код тестов взаимодействует с вашим процессом путем отправки специальных сообщений а-ля RPC-запрос. Формат сообщения следующий: &amp;#039;&amp;#039;{&amp;quot;method&amp;quot;: &amp;quot;M&amp;quot;, &amp;quot;request_id&amp;quot;: N, ...}&amp;#039;&amp;#039;. Код тестов отправляет запросы с M=get или M=set и ожидает получить в ответ (спустя некоторое количество шагов) в ответ структуру с ответом, аннотированную request_id.&lt;br /&gt;
&lt;br /&gt;
Более точно, протокол взаимодействия следующий:&lt;br /&gt;
* {&amp;quot;method&amp;quot;: &amp;quot;get&amp;quot;, &amp;quot;request_id&amp;quot;: N, &amp;quot;key&amp;quot;: &amp;quot;K&amp;quot;} -&amp;gt; {&amp;quot;request_id&amp;quot;: N, &amp;quot;value&amp;quot;: &amp;quot;V&amp;quot;} ; запрос на чтение данных по ключу K (строка); в ответ ожидается значение V (строка).&lt;br /&gt;
* {&amp;quot;method&amp;quot;: &amp;quot;set&amp;quot;, &amp;quot;request_id&amp;quot;: N, &amp;quot;key&amp;quot;: &amp;quot;K&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;V&amp;quot;} -&amp;gt; {&amp;quot;request_id&amp;quot;: N, &amp;quot;value&amp;quot;: &amp;quot;W&amp;quot;, &amp;quot;flag&amp;quot;: &amp;quot;F&amp;quot;} ; запрос на запись данных V (строка) по ключу K (строка); в ответ приходит флаг-индикатор F исхода операции; если флаг истинен, то операция закончилась успешно, и в ячейку по ключу K было действительно сохранено значение V, и в таком случае возвращаемое значение W совпадает с V; если флаг ложен, то по каким-либо причинам операция записи закончилась неуспешно (заполненность ячейки / конкуренция при записи), и возвращается фактическое значение в ячейке W.&lt;br /&gt;
* в тестах чтение ключа K всегда идет строго после какой-либо успешной записи по ключу K.&lt;br /&gt;
&lt;br /&gt;
Для запуска тестов используйте скрипт main.py. Ему необходимо передать путь до вашего класса в формате &amp;quot;МОДУЛЬ.КЛАСС&amp;quot;. К примеру, main.py -i solution_puzyrevskiy_example.GlobalKeyValueStoreProcess. Для отладки передайте ключ -v. &lt;br /&gt;
&lt;br /&gt;
Набор тестов скоро пополнится стресс-тестом. Если вы придумаете хороший, полезный тест, то присылайте PR.&lt;br /&gt;
&lt;br /&gt;
Ваше решение -- py-файл и имя класса -- присылайте на почту sandello@gmail.com или присылайте ссылку на GH.&lt;br /&gt;
&lt;br /&gt;
== Задание 3 ==&lt;br /&gt;
&lt;br /&gt;
Ваша задача -- написать краткий обзор и рецензию научной статьи.&lt;br /&gt;
&lt;br /&gt;
Дедлайн: 21 июня 19:00.&lt;br /&gt;
&lt;br /&gt;
Что такое рецензия: это текст на 1-2 страницы, резюмирующий основные результаты работы, их отличительные характеристики и важные идеи. Если в статье описывается некоторая система -- то в рецензии стоит кратко определить (без воды) решаемую задачу, архитектуру системы, интерфейсы, протоколы. Если в статье описывается алгоритм -- важные технические характеристики (время работы, память, количество сообщений, и т. д.) и ключевые идеи. Если в статье описывается исследование -- то предмет исследования, методологию и выводы из исследования. Также, чтобы рецензия не была простым пересказом, вам &amp;#039;&amp;#039;&amp;#039;обязательно&amp;#039;&amp;#039;&amp;#039; в конце рецензии необходимо добавить собственный оценочный блок:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;как минимум&amp;#039;&amp;#039;&amp;#039; три комментария по упомянутым в статье требованиям (условиям окружения, ограничениям на класс решений, предпосылкам, желаемым гарантиям системы, etc); каждый комментарий -- это цитата автора, определяющая требования + аргументация, почему требование неактуально / ослаблено / невыполнимо в других условиях. К примеру: &amp;quot;в работе авторы пишут: &amp;quot;так как мы планируем запускать протокол поверх SMS-сообщений, то ограничим длину каждого сообщения протокола 80 символами&amp;quot;; -&amp;gt; в настоящий момент меньше приложений используют SMS, предпочитая месседжеры&amp;quot;.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;как минимум&amp;#039;&amp;#039;&amp;#039; три комментария по принятым авторами дизайн-решениям в вопросах, допускающих альтернативные решения; каждый комментарий -- это краткая суть решаемой проблемы + описание принятого решения. К примеру: &amp;quot;авторы работы для валидации целостности контента сообщения используют чексумму, и дополнительно указывают отправителя в заголовке для аутентификации; возможно, более надежно было бы рассмотреть использование HMAC как альтернативы для одновременного контроля целостности и аутентификации&amp;quot;.&lt;br /&gt;
Цель данного задания -- научиться видеть требования и граничные условия, во многом обуславливающие принимаемые авторами работы решения, а также уметь генерировать альтернативные варианты решения задач. За каждый валидный комментарий (в смысле определения выше) начисляется 0.5 балла. Итого за задание можно получить 3 балла.&lt;br /&gt;
&lt;br /&gt;
Список доступных работ для рецензирования:&lt;br /&gt;
* [https://yadi.sk/i/KeJ-HuVM3XwT9D Astrolabe]&lt;br /&gt;
* [https://yadi.sk/i/RFFb68Dz3XwTB3 Bayou]&lt;br /&gt;
* [https://yadi.sk/i/sJwGSkOB3XwTCY Chord]&lt;br /&gt;
* [https://yadi.sk/i/ehIIf-YH3XwTDH Dapper]&lt;br /&gt;
* [https://yadi.sk/i/986hw3is3XwTEE DNS]&lt;br /&gt;
* [https://yadi.sk/i/PWRPtcgW3XwTEi Kademlia]&lt;br /&gt;
* [https://yadi.sk/i/1KHUCZD03XwTFw Swim]&lt;br /&gt;
* можно предложить свою работу, предварительно её согласовав.&lt;br /&gt;
&lt;br /&gt;
Регламент сдачи:&lt;br /&gt;
1. В [https://docs.google.com/spreadsheets/d/1Jb3IudYuWIe0FPE5i1T_5dKprUQoepRQ0WWyBcmug9A/edit?usp=sharing таблице] вписать свою фамилию в свободный слот. Каждую работу может рецензировать не более двух студентов.&lt;br /&gt;
2. Написать в Google Documents рецензию.&lt;br /&gt;
3. Прислать на sandello@gmail.com share-ссылку на документ с правами &amp;quot;Can Comment&amp;quot;. В теме письма укажите номер группы и фамилию.&lt;/div&gt;</summary>
		<author><name>imported&gt;Sandello</name></author>
	</entry>
</feed>