<?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_%28%D0%BE%D1%81%D0%B5%D0%BD%D1%8C_2016%29</id>
	<title>НИС Распределенные системы (осень 2016) - История изменений</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_%28%D0%BE%D1%81%D0%B5%D0%BD%D1%8C_2016%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_(%D0%BE%D1%81%D0%B5%D0%BD%D1%8C_2016)&amp;action=history"/>
	<updated>2026-06-06T13:55:28Z</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_(%D0%BE%D1%81%D0%B5%D0%BD%D1%8C_2016)&amp;diff=1068&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_(%D0%BE%D1%81%D0%B5%D0%BD%D1%8C_2016)&amp;diff=1068&amp;oldid=prev"/>
		<updated>2017-06-05T10:00:19Z</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;
=== Оценка ===&lt;br /&gt;
&lt;br /&gt;
Оценка за НИС складывается из двух частей: оценки за практические задания и общей оценки.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;S = S_tasks + S_general&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Практических заданий -- две штуки: одно на программирование, одно на работу с текстом. За первое задание можно получить максимум 5 баллов, за второе максимум 3 балла. Сдача после дедлайна штрафуется. За каждый просроченный модуль -- минус балл. Таким образом, максимум за первое задание при сдаче во втором модуле можно получить 4 балла, в третьем -- 3, в четвертом -- 2.&lt;br /&gt;
&lt;br /&gt;
Общая оценка складывается из трех частей: посещаемости, участия в семинарах и экзамена. Суммарно общая оценка ограничена сверху 3 баллами. Посещаемость оценивается в 0.25 балла за каждый модуль, если вы посетили более половины занятий в данном модуле. Активность -- до 0.50 балла каждый модуль по усмотрению преподавателя. Экзамен -- до 2.00 баллов (4*0.50).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;S_general = min(3.00, S_attendance + S_participation + S_exam); S_attendance &amp;lt;= 1.00; S_participation &amp;lt;= 2.00; S_exam &amp;lt;= 2.00&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Текущая таблица с оценками доступна [https://docs.google.com/spreadsheets/d/1s5ZTsYTt90PV2QJo0DVAcc0W7sGf8NsPBSoONIzdDAI/pubhtml по ссылке].&lt;br /&gt;
&lt;br /&gt;
== Занятия ==&lt;br /&gt;
&lt;br /&gt;
=== 1 модуль ===&lt;br /&gt;
&lt;br /&gt;
==== 2 сентября ====&lt;br /&gt;
Вводное занятие.&lt;br /&gt;
&lt;br /&gt;
Материалы:&lt;br /&gt;
* &amp;#039;&amp;#039;Mockapetris, Dunlap&amp;#039;&amp;#039; -- Development of the domain name system ([https://yadi.sk/i/hSHHyuoUv9Xsk pdf])&lt;br /&gt;
&lt;br /&gt;
==== 9 сентября ====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Занятия не будет&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==== 16 сентября ====&lt;br /&gt;
Сетевое взаимодействие в распределенных системах.&lt;br /&gt;
&lt;br /&gt;
Материалы:&lt;br /&gt;
* &amp;#039;&amp;#039;Google Code University&amp;#039;&amp;#039; -- Introduction to Distributed Systems Design ([https://yadi.sk/i/qVqtGXs4v9YEy pdf])&lt;br /&gt;
* &amp;#039;&amp;#039;Birrell, Nelson&amp;#039;&amp;#039; -- Implementing remote procedure calls ([https://yadi.sk/i/L_t0OemAv9Yzc pdf])&lt;br /&gt;
* &amp;#039;&amp;#039;Eriksen&amp;#039;&amp;#039; -- Your server as a function ([https://yadi.sk/i/2lFIzNyIv9YGT pdf])&lt;br /&gt;
* (по желанию) &amp;#039;&amp;#039;Liskov&amp;#039;&amp;#039; -- Promises: linguistic support for efficient asynchronous procedure calls in distributed systems ([https://yadi.sk/i/nxcDLp4yv9YG4 pdf])&lt;br /&gt;
* (по желанию) Futures/Promises в C++: интерфейс ([https://bartoszmilewski.com/2009/03/03/broken-promises-c0x-futures/ 1], [https://bartoszmilewski.com/2009/03/10/futures-done-right/ 2], [https://bartoszmilewski.com/2014/02/26/c17-i-see-a-monad-in-your-future/ 3]), рабочая имплементация ([https://github.com/facebook/folly/tree/master/folly/futures 1]).&lt;br /&gt;
&lt;br /&gt;
==== 23 сентября ====&lt;br /&gt;
Время, часы, синхронизация событий.&lt;br /&gt;
&lt;br /&gt;
Материалы:&lt;br /&gt;
* &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;
* &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;
* &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;
==== 30 сентября ====&lt;br /&gt;
&lt;br /&gt;
Синхронизация событий (продолжение). Когерентность памяти.&lt;br /&gt;
&lt;br /&gt;
Материалы:&lt;br /&gt;
* &amp;#039;&amp;#039;Li, Hudak&amp;#039;&amp;#039; -- Memory coherency in shared virtual memory systems ([https://yadi.sk/i/gXssi_hRvjUY6 pdf])&lt;br /&gt;
&lt;br /&gt;
==== 7 октября ====&lt;br /&gt;
&lt;br /&gt;
Ослабление модели памяти. Слабоконсистентные хранилища на примере Bayou.&lt;br /&gt;
&lt;br /&gt;
Материалы:&lt;br /&gt;
* &amp;#039;&amp;#039;Terry et. al.&amp;#039;&amp;#039; -- Managing update conflicts in Bayou, a weakly connected replicated storage system ([https://yadi.sk/i/Gxu0RvtOw8inm pdf])&lt;br /&gt;
&lt;br /&gt;
==== 14 октября ====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Занятия не будет.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
==== 21 октября ====&lt;br /&gt;
&lt;br /&gt;
Детальный рассказ о предлагаемых курсовых работах от руководителей.&lt;br /&gt;
&lt;br /&gt;
=== 2 модуль ===&lt;br /&gt;
&lt;br /&gt;
==== 4 ноября ====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Занятия не будет.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
==== 11 ноября ====&lt;br /&gt;
&lt;br /&gt;
Задача распределенного консенсуса. Paxos.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;Lamport&amp;#039;&amp;#039; -- Paxos made simple ([https://yadi.sk/i/ZTjKI346y6C3m pdf])&lt;br /&gt;
* (по желанию) &amp;#039;&amp;#039;Lamport&amp;#039;&amp;#039; -- The part-time parliament ([https://yadi.sk/i/bExaZsh4y6CqB pdf]; [http://research.microsoft.com/en-us/um/people/lamport/pubs/pubs.html#lamport-paxos история публикации])&lt;br /&gt;
* &amp;#039;&amp;#039;Ousterhout&amp;#039;&amp;#039; -- Paxos lecture ([https://www.youtube.com/watch?v=JEpsBg0AO6o video]; 1.0ч)&lt;br /&gt;
* &amp;#039;&amp;#039;Guerraoui&amp;#039;&amp;#039; -- Paxos lecture ([https://www.youtube.com/watch?v=WX4gjowx45E video]; 0.5ч)&lt;br /&gt;
&lt;br /&gt;
==== 18 ноября ====&lt;br /&gt;
&lt;br /&gt;
Распределенный консенсус, продолжение. Viewstamped replication.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;Liskov, Cowling&amp;#039;&amp;#039; -- Viewstamped replication revisited ([https://yadi.sk/i/EO37MNowy6Cwv pdf])&lt;br /&gt;
* &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;
&lt;br /&gt;
==== 25 ноября ====&lt;br /&gt;
&lt;br /&gt;
Распределенный консенсус, продолжение. Raft.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;Ongaro, Ousterhout&amp;#039;&amp;#039; -- In search of understandable consensus algorithm ([https://yadi.sk/i/K5gdY2X2y6EE4 pdf])&lt;br /&gt;
* (по желанию) &amp;#039;&amp;#039;Howard et. al.&amp;#039;&amp;#039; -- Raft refloated: do we have consensus? ([https://yadi.sk/i/BQ6yMr-zy6EHW pdf])&lt;br /&gt;
* &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;
==== 2 декабря ====&lt;br /&gt;
&lt;br /&gt;
Распределенный консенсус, завершение.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;Chandra et. al.&amp;#039;&amp;#039; -- Paxos made live: an engineering perspective ([https://yadi.sk/i/G7S7Ku6zy6ERw pdf])&lt;br /&gt;
* &amp;#039;&amp;#039;van Renesse et. al.&amp;#039;&amp;#039; -- Vive la différence: Paxos vs. Viewstamped replication vs. Zab ([https://yadi.sk/i/aanIRk9ly6EVW pdf])&lt;br /&gt;
* (по желанию) &amp;#039;&amp;#039;Junqueira et. al.&amp;#039;&amp;#039; -- Zab: high performance broadcast for primary-backup systems ([https://yadi.sk/i/iZMiY8ayy6EaS pdf])&lt;br /&gt;
* (по желанию) &amp;#039;&amp;#039;Medeiros&amp;#039;&amp;#039; -- ZooKeeper&amp;#039;s atomic broadcast protocol: theory and practice ([https://yadi.sk/i/gNHW6YuEy6EgQ pdf])&lt;br /&gt;
&lt;br /&gt;
==== 9 декабря ====&lt;br /&gt;
&lt;br /&gt;
CRDTs: счетчики (G, PN, NN), множества (G, 2P, U, LWW, PN, OR).&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;Shapiro et. al.&amp;#039;&amp;#039; -- A comprehensive study of convergent and commutative replicated data types ([https://yadi.sk/d/75pfodsK32UEKQ pdf])&lt;br /&gt;
&lt;br /&gt;
==== 16 декабря ====&lt;br /&gt;
&lt;br /&gt;
CRDTs: списочные структуры.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;Nedelec et. al.&amp;#039;&amp;#039; -- LSEQ: an adaptive structure for sequences in distributed collaborative editing ([https://yadi.sk/i/1te0_h1S32UG3G pdf])&lt;br /&gt;
&lt;br /&gt;
=== 3 модуль ===&lt;br /&gt;
&lt;br /&gt;
==== 24 января ====&lt;br /&gt;
&lt;br /&gt;
Иерархические блокировки.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;Grey et. al.&amp;#039;&amp;#039; -- Granularity of locks in a shared database ([https://yadi.sk/i/xmxCp1CQ3Aiwob pdf])&lt;br /&gt;
&lt;br /&gt;
==== 31 января ====&lt;br /&gt;
&lt;br /&gt;
Уровни изоляции. Классификация через аномалии.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;Bernson et. al.&amp;#039;&amp;#039; -- A critique of ANSI SQL isolation levels ([https://yadi.sk/i/O_Ub6TYs3AiuUE pdf])&lt;br /&gt;
&lt;br /&gt;
==== 7 февраля ====&lt;br /&gt;
&lt;br /&gt;
Уровни изоляции. Формальная модель.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;Adya, Liskov, O&amp;#039;Neil&amp;#039;&amp;#039; -- Generalized isolation level definitions ([https://yadi.sk/i/kTCgW3Jy3Aivtb pdf])&lt;br /&gt;
&lt;br /&gt;
==== 14 февраля ====&lt;br /&gt;
&lt;br /&gt;
Уровни изоляции &amp;amp; управление одновременным исполнением транзакций.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;Xie et. al.&amp;#039;&amp;#039; -- High-performance ACID via modular concurrency control ([https://yadi.sk/i/JYQeEg_63DJ9cR pdf])&lt;br /&gt;
&lt;br /&gt;
==== 21 февраля ====&lt;br /&gt;
&lt;br /&gt;
Отмена занятия.&lt;br /&gt;
&lt;br /&gt;
==== 28 февраля ====&lt;br /&gt;
&lt;br /&gt;
Окончание уровней изоляции (закончили разбор материалов с предыдущих семинаров).&lt;br /&gt;
&lt;br /&gt;
==== 7 марта ====&lt;br /&gt;
&lt;br /&gt;
Отладка распределенных систем: трассировка сетевого взаимодействия.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;Fonseca et. al.&amp;#039;&amp;#039; -- X-Trace: a pervasive network tracing framework ([https://yadi.sk/i/M7NZeknW3EqkV9 pdf])&lt;br /&gt;
* &amp;#039;&amp;#039;Sigelman et. al.&amp;#039;&amp;#039; -- Dapper, a large-scale distributed systems tracing infrastructure ([https://yadi.sk/i/5pfVnzBC3Eqkr5 pdf])&lt;br /&gt;
&lt;br /&gt;
==== 14 марта ====&lt;br /&gt;
&lt;br /&gt;
Отладка распределенных систем: отладка производительности, вывод взаимосвязей событий.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;Barham et. al.&amp;#039;&amp;#039; -- Magpie: online modelling and performance-aware systems ([https://yadi.sk/i/ezE0m1m33EqmBW pdf])&lt;br /&gt;
* &amp;#039;&amp;#039;Chow et. al.&amp;#039;&amp;#039; -- The mystery machine: end-to-end performance analysis of large-scale internet services ([https://yadi.sk/i/6PT-31-G3EqmHa pdf])&lt;br /&gt;
&lt;br /&gt;
==== 21 марта ====&lt;br /&gt;
&lt;br /&gt;
Отладка распределенных систем: вывод взаимосвязей событий.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;Mace et. al.&amp;#039;&amp;#039; -- Pivot tracing: dynamic causal monitoring for distributed systems ([https://yadi.sk/d/M2KqToyu3EqmX2 pdf])&lt;br /&gt;
&lt;br /&gt;
=== 4 модуль ===&lt;br /&gt;
&lt;br /&gt;
==== 10 апреля ====&lt;br /&gt;
Сервисы блокировок.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;Burrows&amp;#039;&amp;#039; -- The Chubby lock service for loosely-coupled distributed systems ([https://yadi.sk/i/YHoCSaAU3Gb8pf pdf])&lt;br /&gt;
* &amp;#039;&amp;#039;Hunt et. al.&amp;#039;&amp;#039; -- ZooKeeper: wait-free coordination for Internet-scale systems ([https://yadi.sk/i/NRcFm-uS3Gb8vH pdf])&lt;br /&gt;
&lt;br /&gt;
==== 17 апреля ====&lt;br /&gt;
ZooKeeper, продолжение. Реализация примитивов блокировок, семафор, очередей, выбора лидера, двухфазной фиксации транзакций.&lt;br /&gt;
&lt;br /&gt;
==== 21 апреля ====&lt;br /&gt;
* &amp;#039;&amp;#039;Tasci et. al&amp;#039;&amp;#039; -- Panopticon: an omniscient lock broker for efficient distributed transactions in the datacenter ([https://yadi.sk/i/c6bJ9kEt3Gb98a pdf])&lt;br /&gt;
&lt;br /&gt;
=== Будущие занятия ===&lt;br /&gt;
Для справки ниже перечислен предполагаемый список тем для изучения на последующих занятиях. Если у вас есть предложения, что какие работы, темы стоит разобрать на семинаре, то пишите мне на [mailto:sandello@gmail.com sandello@gmail.com].&lt;br /&gt;
&lt;br /&gt;
* P2P (BitTorrent, BitCoin)&lt;br /&gt;
* Управление ресурсами (DRF; Borg; Omega)&lt;br /&gt;
&lt;br /&gt;
== Практические задания ==&lt;br /&gt;
&lt;br /&gt;
=== Сдача заданий ===&lt;br /&gt;
&lt;br /&gt;
Сдача заданий происходит через Anytask (ссылка: http://anytask.org/course/116 ; инвайт: Q8eM54X). Если инвайт перестает работать / не удается зарегистрироваться -- пишите [http://mailto:sandello@gmail.com мне].&lt;br /&gt;
&lt;br /&gt;
=== Lamport Mutex ===&lt;br /&gt;
&lt;br /&gt;
В рамках первого практического задания вам предлагается реализовать распределенный алгоритм взаимного исключения, описанный Лампортом в статье &amp;#039;&amp;#039;Time, clocks and the ordering of events in a distributed system&amp;#039;&amp;#039; (см. материалы занятия от 23.09). &lt;br /&gt;
&lt;br /&gt;
==== Требования к реализации ====&lt;br /&gt;
# Конфигурация конкретного процесса (например, локальный адрес и порт для слушающего сокета, список адресов и портов других процессов, режим работы) указывается через аргументы командной строки.&lt;br /&gt;
# Сетевое взаимодействие должно быть вынесено за RPC-слой. RPC-слой вам нужно реализовать самостоятельно. От вас не требуется сверхоптимальный код; от вас требуется создать целостную абстракцию. Клиентский код (использующий RPC-сервис), серверный код (реализующий RPC-сервис), транспортный код (сериализация/десериализация, работа с сетью) должны быть разделены.&lt;br /&gt;
# Каждый процесс должен поддерживать логические часы.&lt;br /&gt;
# Каждый из процессов должен вести собственный, локальный журнал событий request / acquire / release (запрос на взятие mutex-а, взятие mutex-а, освобождение mutex-а). Каждое событие должно быть аннотировано физическим временем, логическим временем, PID-ом.&lt;br /&gt;
# При взятии mutex-а (событие acquire) процесс должен открыть некий специальный файл (например, ~/mutex.txt; путь до файла указывается в аргументах командной строки), вызывать flock(_, LOCK_EX | LOCK_NB), записывать в файл пометку (PID, логическое время взятие mutex-а, логическое время освобождение mutex-а), после чего отпускать (release) mutex.&lt;br /&gt;
# Должны поддерживаться два режима работы: ручной, когда взятие mutex-а инициирует пользователь (по команде с stdin), и стрессовый, когда процесс в бесконечном цикле пробует взять mutex без задержек.&lt;br /&gt;
# Для реализации можно использовать языки C++, Python, Java, Go.&lt;br /&gt;
&lt;br /&gt;
==== Требования к тестированию ====&lt;br /&gt;
# Должны быть написаны юнит-тесты на алгоритм взятия mutex-а, подменяющие сетевую имплементацию RPC-сервиса на локальную.&lt;br /&gt;
# Должна быть проведена экспериментальная проверка корректности работы в стресс-режиме для 10 запущенных процессов (в случае корректной работы не должно быть ошибок от flock-а на разделяемый файл).&lt;br /&gt;
# Должна быть написана утилита анализа локальных логов процессов, проверяющая, что по логическим часам периоды acquire-release не пересекаются, и что для каждого процесса acquire следует строго после request.&lt;br /&gt;
&lt;br /&gt;
==== Требования к сдаче ====&lt;br /&gt;
При сдаче в Anytask (см. общую часть про сдачу задания) укажите:&lt;br /&gt;
* ссылку на github/bitbucket репозиторий;&lt;br /&gt;
* ссылки на реализацию алгоритма Лампорта;&lt;br /&gt;
* ссылку на реализацию RPC-слоя (где происходит сетевое взаимодействие, где устанавливаются соединения, где происходит серилизация/десериализация вызовов, где происходит регистрация сервисов);&lt;br /&gt;
* ссылку на реализацию логических часов;&lt;br /&gt;
* ссылку на анализатор локальных логов процессов;&lt;br /&gt;
* инструкцию по сборке проекта;&lt;br /&gt;
* инструкцию по запуску юнит-тестов;&lt;br /&gt;
* инструкцию по запуску стресс-теста с 10 процессами;&lt;br /&gt;
* инструкцию по запуску анализатора локальных логов.&lt;br /&gt;
&lt;br /&gt;
==== Критерии сдачи ====&lt;br /&gt;
Задание считается сданным, если:&lt;br /&gt;
* предоставлена реализация алгоритма, удовлетворяющая вышеуказанным требованиям;&lt;br /&gt;
* юнит-тесты успешно отрабатывают;&lt;br /&gt;
* стресс-тест успешно отрабатывает;&lt;br /&gt;
* анализатор локальных логов подтверждает корректность значений логических часов.&lt;br /&gt;
&lt;br /&gt;
==== Дополнительные указания ====&lt;br /&gt;
* Обычно при имплементации RPC-слоя возникают такие абстракции как стаб (интерфейс, используемый клиентской стороной и реализуемый серверной стороной), сервис (отвечает за маршрутизацию конкретного вызова в конкретный метод языка), сервер (отвечает за сетевое серверное взаимодействие (bind+accept), маршрутизацию вызова в конкретный сервис), канал (создается клиентом, скрывает сетевое взаимодействие (connect), реализует отправку запросов и получение ответов). На клиенте стаб связывается с каналом, на сервере -- с сервисом.&lt;br /&gt;
* Учтите, что в данном задании каждый процесс является и клиентом, и сервером одновременно. Чтобы не запутаться, реализуйте сначала простейший ping-pong сервис поверх вашего RPC-слоя, чтобы отработать сетевое взаимодействие.&lt;br /&gt;
* Алгоритм Лампорта, как и многие другие распределенные алгоритмы, формулируется в терминах реакции на события (сообщения). Если вы не знаете с чего начать имплементацию, то выделите события и пересылаемые сообщения, участвующие в алгоритме, распишите подробно реакцию на них, обдумайте, какое состояние должно сохраняться между вызовами обработчиков событий.&lt;br /&gt;
&lt;br /&gt;
=== Обзор литературы и рецензирование ===&lt;br /&gt;
&lt;br /&gt;
==== TL;DR ====&lt;br /&gt;
# Определитесь с командой (2-3 человека), запишитесь в табличку: https://docs.google.com/spreadsheets/d/1pfcTgQQt8zFXePhFhFm4xK0gdoGqppzm-rP25d1v_Ug/edit?usp=sharing (первый лист), распределите статьи.&lt;br /&gt;
# Напишите обзор по статьям. Отправьте обзор вашим рецензентам.&lt;br /&gt;
# Определитесь с рецензируемыми вами работами, запишитесь в той же табличке на втором листе: в строке с вашей фамилией поставьте &amp;quot;X&amp;quot; в колонке с рецензируемой работой (одна работа должна быть из вашей команды, одна -- не из вашей).&lt;br /&gt;
# Напишите реценизии. Не забудьте отправить копию авторам обзора.&lt;br /&gt;
# Отправьте копию обзора (в Google Document) и копию рецензии (тоже в Google Document) в Anytask.&lt;br /&gt;
&lt;br /&gt;
==== Описание задание ====&lt;br /&gt;
В рамках данного задания вам нужно изучить несколько работ по интересной вам теме, написать краткий обзор по них, а также отрецензировать обзоры ваших однокурсников. Целей у данного задания две: первая -- научиться искать и разбирать материал по интересующей вас теме, выделять главные аспекты и воссоздавать логику работы; вторая -- научиться критически оценивать представляемые результаты и их аргументацию.&lt;br /&gt;
&lt;br /&gt;
Структурно, задание проходит в несколько этапов:&lt;br /&gt;
1. выбор работ для изучения,&lt;br /&gt;
2. разбиение по минигруппам,&lt;br /&gt;
3. изучение работ,&lt;br /&gt;
4. написание обзора,&lt;br /&gt;
5. рецензирование смежных обзоров.&lt;br /&gt;
&lt;br /&gt;
Предполагается, что некоторой фиксированной темы 2-3 человека выбирают себе по 2-3 работы каждый; далее, каждый человек пишет собственный обзор выбранных работ; далее, каждый человек рецензирует 2-3 обзора от своих смежников (один обзор из своей группы + один обзор не из своей группы).&lt;br /&gt;
&lt;br /&gt;
Оценка за задание складывается из двух частей -- &amp;quot;зачет//не зачет&amp;quot; за написание собственного обзора и &amp;quot;зачет//не зачет&amp;quot; за рецензирование работ.&lt;br /&gt;
&lt;br /&gt;
Далее приведены более подробные пояснения по каждому из этапов.&lt;br /&gt;
&lt;br /&gt;
==== Выбор работ для изучения ====&lt;br /&gt;
Вы можете, в целом, выбрать любую интересную вам тему, по которой есть публикации за последние 15 лет.&lt;br /&gt;
&lt;br /&gt;
Например, можете изучить работы с конференций:&lt;br /&gt;
&lt;br /&gt;
# OSDI [https://www.usenix.org/conference/osdi16/program 2016], [https://www.usenix.org/conference/osdi14/technical-sessions 2014], [https://www.usenix.org/conference/osdi12/technical-sessions 2012], ...&lt;br /&gt;
# VLDB [http://www.vldb.org/pvldb/vol9.html 2016], [http://www.vldb.org/pvldb/vol8.html 2015], [http://www.vldb.org/pvldb/vol7.html 2014], ...&lt;br /&gt;
# SIGMOD/PODS [http://sigmod2016.org/sigmodtoc.html 2016]/ [http://sigmod2016.org/podstoc.html 2016], [http://www.sigmod2015.org/toc_sigmod.shtml 2015]/ [http://www.sigmod2015.org/toc_pods.shtml 2015], [http://www.sigmod2014.org/research_list.shtml 2014]/ [http://www.sigmod2014.org/pods_list.shtml 2014], ...&lt;br /&gt;
# EUROSYS [http://eurosys16.doc.ic.ac.uk/program/papers/ 2016], [http://eurosys2015.labri.fr/program/papers/ 2015], [http://eurosys2014.vu.nl/papers/ 2014], ...&lt;br /&gt;
# PODC [https://www.podc.org/podc2016/proceedings/ 2016], [https://www.podc.org/podc2015/proceedings/ 2015], [https://www.podc.org/podc2014/2014-proceedings/ 2014], ...&lt;br /&gt;
# SOCC [http://acmsocc.github.io/2016/schedule.html 2016], [http://acmsocc.github.io/2015/accepted-papers.html 2015], [https://sites.google.com/site/2014socc/home/program 2014], ...&lt;br /&gt;
# SYSTOR [http://www.systor.org/2016/program.html 2016], [http://www.systor.org/2015/program.html 2015], [http://www.systor.org/2014/program.html 2014], ...&lt;br /&gt;
# HOTSTORAGE [https://www.usenix.org/conference/hotstorage16/workshop-program 2016], [https://www.usenix.org/conference/hotstorage15/workshop-program 2015], [https://www.usenix.org/conference/hotstorage14/workshop-program 2014], ...&lt;br /&gt;
# FAST [https://www.usenix.org/conference/fast16/technical-sessions 2016], [https://www.usenix.org/conference/fast15/technical-sessions 2015], [https://www.usenix.org/conference/fast14/technical-sessions 2014], ...&lt;br /&gt;
# ATC [https://www.usenix.org/conference/atc16/technical-sessions 2016], [https://www.usenix.org/conference/atc15/technical-sessions 2015], [https://www.usenix.org/conference/atc14/technical-sessions 2014], ...&lt;br /&gt;
&lt;br /&gt;
Поисковик по статьям:&lt;br /&gt;
# [http://scholar.google.com Scholar Google] &lt;br /&gt;
&lt;br /&gt;
Скомпоновать работы можно из разных соображений:&lt;br /&gt;
&lt;br /&gt;
# сравнительный анализ разных подходов,&lt;br /&gt;
# детальный углубленный разбор одной из существующих систем,&lt;br /&gt;
# вводный обзор по какой-либо тематике.&lt;br /&gt;
&lt;br /&gt;
Примеры подборок:&lt;br /&gt;
&lt;br /&gt;
# алгоритмы деанонимизации в Tor (выбрать несколько разных методов, выделить, чем они отличаются, сравнить),&lt;br /&gt;
# вариации Paxos (Ring Paxos -- с мультикастом для доставки данных, Net Paxos -- с имплементацией на сетевом уровне, Egalitarian Paxos -- для WAN; методы эксплуатируют разные идеи -- выделить какие, зачем, где применимы),&lt;br /&gt;
# ослабление требований в Paxos (Flexible Paxos, Ios),&lt;br /&gt;
# криптовалюты (BTC-vs-ETH-vs-...),&lt;br /&gt;
# gossip-протоколы (&amp;quot;Efficient and Adaptive Epidemic-Style Protocols for Reliable and Scalable Multicast&amp;quot;, &amp;quot;Bounded gossip: a gossip protocol for large-scale datacenters&amp;quot;),&lt;br /&gt;
# файловая система BetrFS (&amp;quot;BetrFS: A Right-Optimized Write-Optimized File System&amp;quot;, &amp;quot;Optimizing Every Operation in a Write-Optimized File System&amp;quot;, &amp;quot;File Systems Fated for Senescence? Nonsense, Says Science!&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
==== Разбиение по минигруппам ====&lt;br /&gt;
Одна минигруппа -- это 2-3 человека, которые разбирают 2-3 работы каждый. При этом у каждого в минигруппе хотя бы одна изучаемая работа уникальна.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
# тема -- вариации Paxos; человек 1 -- Paxos Made Simple (базовая работа) + Ring Paxos; человек 2 -- Paxos Made Live + Net Paxos; человек 3 -- Paxos Made Simple + Egalitarian Paxos.&lt;br /&gt;
# тема -- BetrFS: человек 1 -- BetrFS + Optimizing Every Opration; человек 2 -- BetrFS + File Systems Faed for Senescence?&lt;br /&gt;
&lt;br /&gt;
==== Изучение работ и написание обзора ====&lt;br /&gt;
От вас требуется разобраться в работе, определить её актуальность и значимость, выделить основные идеи и результаты работы, сравнить их с альтернативами (если применимо), выделить сильные и слабые стороны работы. Целевой объем обзора -- 2-3 страницы. Критерий хорошего обзора -- что на его основе ваш однокурсник может составить представление об изучаемой области.&lt;br /&gt;
&lt;br /&gt;
Примерный список вопросов, которые стоит затронуть в обзоре:&lt;br /&gt;
# какая задача решается?&lt;br /&gt;
# почему эта задача важна, в чем польза от её решения?&lt;br /&gt;
# почему эта задача актуальна, насколько часто она возникает, насколько широко распространена?&lt;br /&gt;
# какие были предыдущие попытки решения этой задачи? какие были получены результаты?&lt;br /&gt;
# в чем суть, идея предлагаемого решения?&lt;br /&gt;
# каковы преимущества и недостатки предлагаемого решения по отношению к решаемой задачи?&lt;br /&gt;
# каковы преимущества и недостатки предлагаемого решения по сравнению с другими решениями?&lt;br /&gt;
# какие экспериментальные результаты получены?&lt;br /&gt;
# какие аспекты работы хорошо/плохо проработаны?&lt;br /&gt;
&lt;br /&gt;
При написании обзора следует не просто слепо копировать фрагменты оригинальной работы, но и сохранять логику работы: не пропускать аргументы, обоснования предлагаемых решений. &lt;br /&gt;
&lt;br /&gt;
==== Рецензирование смежных обзоров  ====&lt;br /&gt;
Вам нужно отрецензировать обзоры своих одногруппников в минигруппе, а также один из обзоров одногруппников в учебной группе. В рецензии вам нужно оценить, насколько аргументировано и последовательно излагается материал, насколько понятны переходы и выводы в работе.&lt;br /&gt;
&lt;br /&gt;
Полученную рецензию не забудьте отправить автору обзора.&lt;br /&gt;
&lt;br /&gt;
==== Требования к сдаче ====&lt;br /&gt;
&lt;br /&gt;
При сдаче в Anytask (см. общую часть про сдачу задания) отправьте ссылку на Google Document с обзором и Google Document с рецензией. Требования про Google Document обусловлено удобством комментирования и рецензирования текста.&lt;br /&gt;
&lt;br /&gt;
== Курсовые работы ==&lt;br /&gt;
&lt;br /&gt;
[http://wiki.cs.hse.ru/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%BA%D1%83%D1%80%D1%81%D0%BE%D0%B2%D1%8B%D1%85_%D1%80%D0%B0%D0%B1%D0%BE%D1%82._%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 Список курсовых работ]&lt;/div&gt;</summary>
		<author><name>imported&gt;Sandello</name></author>
	</entry>
</feed>