2. Темы курса
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 2 / 64
3. План лекции
Распределенные системы и вычисления
Взаимодействие распределенных процессов
Сокеты, message passing, RPC, примеры
ДЗ №4
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 3 / 64
4. Distributed Computing
A field of computer science that studies distributed systems
Use of distributed systems to solve computational problems
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 4 / 64
5. Distributed System
A collection of autonomous entities (processes, computers, nodes)
Each node has its own local memory
Nodes communicate with each other through a computer network
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 5 / 64
6. Distributed System
A collection of autonomous entities (processes, computers, nodes)
Each node has its own local memory
Nodes communicate with each other through a computer network
All nodes have a common goal
Solving a large computational problem
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 5 / 64
7. Distributed System
A collection of autonomous entities (processes, computers, nodes)
Each node has its own local memory
Nodes communicate with each other through a computer network
All nodes have a common goal
Solving a large computational problem
Each node has its own goals/needs
Coordination of the use of shared resources
Communication services
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 5 / 64
8. Distributed System
A collection of autonomous entities (processes, computers, nodes)
Each node has its own local memory
Nodes communicate with each other through a computer network
All nodes have a common goal
Solving a large computational problem
Each node has its own goals/needs
Coordination of the use of shared resources
Communication services
A distributed system is one in which the failure of a computer you
didn’t even know existed can render your own computer unusable.
(Leslie Lamport)
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 5 / 64
10. Related Fields
Concurrency
Simultaneous execution of several computations interacting with each
other
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 7 / 64
11. Related Fields
Concurrency
Simultaneous execution of several computations interacting with each
other
Parallel Computing
Dividing large problems into smaller ones which can be solved
concurrently (“in parallel”)
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 7 / 64
12. Features of Distributed Systems
Loosely coupled
Each computer is autonomous and has only a limited, incomplete view
of the system
The system doesn’t have global state or clock
The structure of the system (network topology, network latency,
number of nodes) may be not known in advance
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 8 / 64
13. Features of Distributed Systems
Loosely coupled
Each computer is autonomous and has only a limited, incomplete view
of the system
The system doesn’t have global state or clock
The structure of the system (network topology, network latency,
number of nodes) may be not known in advance
Heterogeneous
The system may consist of different kinds of computers and network
links
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 8 / 64
14. Features of Distributed Systems
Loosely coupled
Each computer is autonomous and has only a limited, incomplete view
of the system
The system doesn’t have global state or clock
The structure of the system (network topology, network latency,
number of nodes) may be not known in advance
Heterogeneous
The system may consist of different kinds of computers and network
links
Dynamic
The system may change during the execution
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 8 / 64
15. Features of Distributed Systems
Loosely coupled
Each computer is autonomous and has only a limited, incomplete view
of the system
The system doesn’t have global state or clock
The structure of the system (network topology, network latency,
number of nodes) may be not known in advance
Heterogeneous
The system may consist of different kinds of computers and network
links
Dynamic
The system may change during the execution
Unreliable
Nodes and communication links may fail (partial failure)
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 8 / 64
16. Features of Distributed Systems
Loosely coupled
Each computer is autonomous and has only a limited, incomplete view
of the system
The system doesn’t have global state or clock
The structure of the system (network topology, network latency,
number of nodes) may be not known in advance
Heterogeneous
The system may consist of different kinds of computers and network
links
Dynamic
The system may change during the execution
Unreliable
Nodes and communication links may fail (partial failure)
Slow communication
High latency, limited bandwidth
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 8 / 64
17. Why Distributed Systems?
Performance
Solve big problems
Store large data
Serve huge number of clients
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 9 / 64
18. Why Distributed Systems?
Performance
Solve big problems
Store large data
Serve huge number of clients
Communication and coordination
Users and resources are geographically distributed
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 9 / 64
19. Why Distributed Systems?
Performance
Solve big problems
Store large data
Serve huge number of clients
Communication and coordination
Users and resources are geographically distributed
Availability
Avoid single point of failure
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 9 / 64
20. Why Distributed Systems?
Performance
Solve big problems
Store large data
Serve huge number of clients
Communication and coordination
Users and resources are geographically distributed
Availability
Avoid single point of failure
Scalability
Easier to expand and manage
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 9 / 64
21. Классы распределенных систем
Распределенные вычислительные системы
Кластер
Network of workstations
Desktop grids (SETI@Home)
Service grids (European Grid Infrastructure)
Распределенные хранилища
Файловые системы (Lustre, GFS, HDFS)
Реляционные СУБД (Oracle, Vertica, VoltDB)
NoSQL (Cassandra, HBase, MongoDB)
Peer-to-peer (BitTorrent)
DNS, World Wide Web
Messaging
Enterprise Application Integration
...
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 10 / 64
22. Взаимодействие распределенных процессов
Обмен сообщениями (message passing)
Удаленные вызовы процедур (RPC)
Streams/pipes
Publish/subscribe
Распределенная общая память
(Распределенные) хранилища
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 11 / 64
23. Обмен сообщениями
Сообщение - структурированные данные, передаваемые между
процессами через некоторый коммуникационный канал
Идентификатор сообщения, тип, другие поля...
Процесс 1 отправляет сообщение процессу 2 и
Ждет ответа (синхронная передача)
Продолжает выполнение и проверяет, пришел ли ответ
(асинхронная передача)
Продолжает выполнение и не ждет ответа (односторонняя
передача)
Процесс 2
Ожидает прихода сообщения (синхронно)
Проверяет, есть ли новые сообщения
Регистрирует обработчик (callback), вызываемый при получении
сообщения
Примеры
MPI, Erlang (actors), Web Services, XMPP
Библиотеки или часть языка
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 12 / 64
24. Обмен сообщениями
Преимущества
Нет разделяемого состояния (shared nothing)
Альтернатива locking
Возможность обмениваться данными между программами,
написанными на разных языках и работающими на разных
архитектурах
Проблемы
Часто требуется "ручная"сериализация и десериализация структур
данных
Остается возможность возникновения взаимной блокировки
процессов и race condition
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 13 / 64
25. Характерные особенности реализаций
Гарантии доставки сообщений
Сохранение порядка сообщений
Поддержка различных режимов (sync/async, unicast/multicast)
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 14 / 64
26. Сокеты
Двусторонний канал для взаимодействия распределенных
процессов
Протокол (TCP, UDP)
Локальный IP-адрес
Номер локального сетевого порта
Удаленный IP-адрес (TCP)
Номер удаленного сетевого порта (TCP)
0.0.0.0 - listening socket
255.255.255.255 broadcasting socket
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 15 / 64
27. TCP / Клиент-Сервер
Сервер создает слушающий сокет на стандартном порте
(например, 80)
Клиент создает сокет со случайно выбранным локальным портом
и отправляет запрос серверу
Сервер принимает соединение и создает парный сокет для
взаимодействия с данным клиентом
Данные передаются по установленному сокету в обе стороны как
поток байтов
Сервер продолжает слушать...
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 16 / 64
34. Многопоточный сервер
1 while ( listening ) {
2 Socket clientSocket = serverSocket . accept ();
3 new Mul tiServerThread ( clientSocket ). start ();
4 }
Другие варианты реализации?
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 23 / 64
35. Как клиент найдет сервер?
Клиент знает IP-адрес и порт сервера
Тривиально
Что если IP-адрес сервера изменился?
Клиент знает доменное имя и порт сервера
DNS
Клиент знает идентификатор или другой признак сервера
Служба имен (naming service)
Каталог (directory)
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 24 / 64
36. Мультикаст
Групповая рассылка сообщений (дейтаграмм)
Зарезервированные IP-адреса
224.0.0.0 - 239.255.255.255
При доставке дейтаграмм
Не устанавливается соединение
Не гарантируется доставка, порядок доставки и целостность
дейтаграмм
Быстро, но ненадежно
Наиболее часто реализуется с помощью протокола UDP
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 25 / 64
39. Remote Procedure Call (RPC)
Удаленный вызов процедуры
Клиент передает в запросе имя процедуры и значения ее
аргументов
Сервер выполняет код процедуры и возвращает полученный
результат клиенту (или код ошибки)
Скрытие особенностей удаленного вызова
Язык описания интерфейсов (IDL) используется для генерации
кода, осуществляющего сериализацию данных
Внутри — передача сообщений, сокеты...
Примеры
ONC RPC, DCE/RPC, MSRPC
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 28 / 64
40. Отличие от локальных вызовов
Удаленный вызов может не удаться по различным,
непредсказуемым причинам
При этом может быть не известно, была ли вызвана удаленная
процедура
Идемпотентные процедуры можно безопасно вызвать еще раз
В общем случае, обычно гарантируется семантика “не более одного
вызова” (at most once)
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 29 / 64
42. Remote Method Invocation
Объектно-ориентированная разновидность
Вызовы методов удаленных объектов
Интерфейсы удаленных объектов описываются на IDL-языке
Обычно является платформонезависимым
IDL-компилятор генерирует базовый код (заглушки, stubs) для
сервера и клиента на определенном языке программирования
Вызовы удаленных объектов осуществляются путем вызова
локальных объектов-представителей (прокси, proxy)
Внутри - RPC, передача сообщений, сокеты
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 31 / 64
45. “Подводные камни” ОО-RPC
Удаленные вызовы отличаются от локальных
Полная “прозрачность” недостижима
Новые типы ошибок, возникающих при вызове
Удаленные объекты отличаются от локальных
Обычно являются “фасадами” к группе локальных объектов
Следует использовать “крупные” операции и минимизировать
обмены (round trips)
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 34 / 64
47. Cajo1
Удобная библиотека для удаленных вызовов на Java
Внутри Java RMI
Cерверы и клиенты только на Java
Установка
Скачать Cajo SDK
http://java.net/projects/cajo/downloads/download/sdk.zip
Распаковать
Добавить grail.jar в classpath
Аналогичные библиотеки
KryoNet (Java)
Pyro (Python)
1
http://java.net/projects/cajo/
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 36 / 64
49. Реализация сервиса
1 public class C o m p u t i n g S ervi ceI mpl implements ComputingService {
2
3 @Override
4 public <T > T executeTask ( Task <T > task ) throws RemoteException {
5 return task . execute ();
6 }
7
8 public static void main ( String [] args ) throws Exception {
9 int port = Integer . parseInt ( args [0]);
10 // configure server ’s TCP parameters
11 Remote . config ( null , port , null , 0);
12
13 // register remote object
14 ItemServer . bind ( new C ompu ting Serv iceImpl () , " comp " );
15
16 // enable remote code loading !
17 ItemServer . acceptProxies ();
18
19 System . out . println ( " ComputingService is running on "
20 + " // " + Remote . get Defa ultServerHost () + " : "
21 + Remote . g etDe faul tSer ver Port () + " / comp " );
22 }
23
24 }
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 38 / 64
50. Пример задания
1 public class FibTask implements Task < Integer > {
2
3 private int n ;
4
5 public FibTask ( int n ) {
6 this . n = n ;
7 }
8
9 @Override
10 public Integer execute () {
11 System . out . println ( " Calculating fib ( " + n + " ) " );
12 return fib ( n );
13 }
14
15 private int fib ( int n ) {
16 if ( n <= 1)
17 return n ;
18 else
19 return fib ( n - 1) + fib ( n - 2);
20 }
21 }
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 39 / 64
51. Клиент
1 public class FibClient {
2
3 public static void main ( String [] args ) throws Exception {
4 String serviceRef = args [0];
5
6 // codebase server will serve FibTask class
7 CodebaseServer cb = new CodebaseServer ( null , 0);
8
9 // obtain service proxy by string reference
10 ComputingService service =
11 ( ComputingService ) T r a n s parentItemProxy . getItem (
12 serviceRef , new Class [] { ComputingService . class });
13
14 // invoke service
15 int n = Integer . parseInt ( args [1]);
16 int result = service . executeTask ( new FibTask ( n ));
17 System . out . println ( n + " ! = " + result );
18
19 // stop codebase server
20 cb . interrupt ();
21 }
22 }
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 40 / 64
52. Запуск сервиса
Windows
1 java - cp grail . jar ; compserv . jar
2 - Djava . security . manager - Djava . security . policy = server . policy
3 lecture10 . compserv . ComputingServiceImpl PORT
Linux
1 java - cp grail . jar : compserv . jar
2 - Djava . security . manager - Djava . security . policy = server . policy
3 lecture10 . compserv . ComputingServiceImpl PORT
compserv.jar содержит:
ComputingService.class
ComputingServiceImpl.class
Task.class
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 41 / 64
53. server.policy
1 grant codeBase " file : grail . jar " {
2 permission java . security . AllPermission ;
3 }; // the grail library can do anything it wants ,
4
5 grant codeBase " file : compserv . jar " {
6 permission java . security . AllPermission ;
7 }; // the server code can do anything it wants , however ...
8
9 grant { // loaded tasks get no permissions :
10 }; // grant any permissions , if you wish
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 42 / 64
54. Запуск клиента
Windows
1 java - cp grail . jar ; fib - client . jar
2 lecture10 . compserv . FibClient // SERVER_HOST : PORT / comp NUM
Linux
1 java - cp grail . jar : fib - client . jar
2 lecture10 . compserv . FibClient // SERVER_HOST : PORT / comp NUM
fib-client.jar содержит:
ComputingService.class
FibClient.class
FibTask.class
Task.class
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 43 / 64
55. Важно
Клиент и сервер не должны находиться за firewall или NAT
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 44 / 64
56. Что если...
Клиент не хочет ждать результата, а получить его позже?
Клиент отключается не получив результат?
Сервер отключается не досчитав результат?
Несколько клиентов одновременно обращаются к серверу?
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 45 / 64
58. Интерфейс Master
1 public interface Master {
2
3 public Task getTask () throws RemoteException ;
4
5 public void setResult ( int taskId , Object result )
6 throws RemoteException ;
7
8 }
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 47 / 64
59. Базовый класс заданий
1 public abstract class Task < T extends Serializable >
2 implements Callable <T > , Serializable {
3
4 private int id ;
5 private T result ;
6
7 public Task ( int id ) {
8 this . id = id ;
9 }
10
11 public int getId () {
12 return id ;
13 }
14
15 public void setResult ( Object result ) {
16 this . result = ( T ) result ;
17 }
18
19 public T getResult () {
20 return result ;
21 }
22 }
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 48 / 64
60. Управляющий (1)
1 public class MasterImpl implements Master {
2
3 private Queue < Task > queue ;
4 private Map < Integer , Task > runningTasks ;
5
6 public MasterImpl () throws RemoteException {
7 queue = new ConcurrentLinkedQueue < Task >();
8 runningTasks = new ConcurrentHashMap < Integer , Task >();
9 }
10
11 public void execute ( List <? extends Task > tasks ) {
12 for ( Task < Integer > task : tasks ) {
13 queue . add ( task );
14 }
15 while ( queue . size () > 0 || runningTasks . size () > 0) {
16 try {
17 Thread . sleep (1000);
18 } catch ( I n t e r r u pt e d E x ce p t i o n e ) {
19 }
20 }
21 }
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 49 / 64
61. Управляющий (2)
1 @Override
2 public Task < Integer > getTask () throws RemoteException {
3 Task task = queue . poll ();
4 if ( task != null ) {
5 runningTasks . put ( task . getId () , task );
6 }
7 return task ;
8 }
9
10 @Override
11 public void setResult ( int taskId , Object result )
12 throws RemoteException {
13 System . out . println ( " Got result for task " + taskId );
14 runningTasks . remove ( taskId ). setResult ( result );
15 }
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 50 / 64
62. Рабочий
1 public class Worker {
2
3 public static void main ( String [] args ) throws Exception {
4 Master master = ( Master ) Tr a n s p ar entItemProxy . getItem (
5 args [0] , new Class [] { Master . class });
6
7 Task task = null ;
8 while (( task = master . getTask ()) != null ) {
9 System . out . println ( " Got task " + task . getId ());
10 Object result = null ;
11 try {
12 result = task . call ();
13 master . setResult ( task . getId () , result );
14 } catch ( Exception e ) {
15 e . printStackTrace ();
16 master . setResult ( task . getId () , null );
17 }
18 }
19 System . out . println ( " No more tasks , exiting ... " );
20 }
21
22 }
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 51 / 64
63. Пример задания
1 public class FibTask extends Task < Integer > {
2
3 public int n ;
4
5 public FibTask ( int id , int n ) {
6 super ( id );
7 this . n = n ;
8 }
9
10 @Override
11 public Integer call () throws Exception {
12 System . out . println ( " Calculating fib ( " + n + " ) " );
13 return fib ( n );
14 }
15
16 private int fib ( int n ) {
17 if ( n <= 1)
18 return n ;
19 else
20 return fib ( n - 1) + fib ( n - 2);
21 }
22 }
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 52 / 64
64. Сервер (запуск мастера)
1 public class FibMain {
2
3 public static void main ( String [] args ) throws Exception {
4 // serve FibTask class to workers
5 new CodebaseServer ( null , 0);
6
7 // configure server ’s TCP parameters
8 int port = Integer . parseInt ( args [0]);
9 Remote . config ( null , port , null , 0);
10
11 // create master and register remote object
12 MasterImpl master = new MasterImpl ();
13 ItemServer . bind ( master , " master " );
14 System . out . println ( " Master is running on // "
15 + Remote . g e tD e f a u l tS e rv e r Host () + " : "
16 + Remote . g e tD e f a u l tS e rv e r Port () + " / master " );
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 53 / 64
65. Сервер (запуск пакета заданий)
1 // generate tasks
2 int numTasks = Integer . parseInt ( args [1]);
3 int min = Integer . parseInt ( args [2]);
4 int max = Integer . parseInt ( args [3]);
5 List < FibTask > tasks = new ArrayList < FibTask >( numTasks );
6 for ( int i = 0; i < numTasks ; i ++) {
7 tasks . add ( new FibTask (i ,
8 ( int ) ( min + Math . random () * ( max - min ))));
9 }
10
11 // submit tasks to master
12 master . execute ( tasks );
13
14 // print results
15 for ( FibTask task : tasks ) {
16 System . out . println ( task . n + " ! = " + task . getResult ());
17 }
18
19 // shutdown server
20 Remote . shutdown ();
21 }
22 }
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 54 / 64
66. Запуск сервера
Windows
1 java - cp grail . jar ; fib - master . jar
2 lecture10 . masterworker . FibMain PORT NUM_TASKS MIN MAX
Linux
1 java - cp grail . jar : fib - master . jar
2 lecture10 . masterworker . FibMain PORT NUM_TASKS MIN MAX
fib-master.jar содержит
FibMain.class
FibTask.class
Master.class
MasterImpl.class
Task.class
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 55 / 64
67. Запуск рабочего
Windows
1 java - cp grail . jar ; worker . jar
2 - Djava . security . manager - Djava . security . policy = client . policy
3 lecture10 . masterworker . Worker // SERVER_HOST : PORT / master
Linux
1 java - cp grail . jar : worker . jar
2 - Djava . security . manager - Djava . security . policy = client . policy
3 lecture10 . masterworker . Worker // SERVER_HOST : PORT / master
worker.jar содержит
Master.class
Task.class
Worker.class
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 56 / 64
68. client.policy
1 grant codeBase " file : grail . jar " {
2 permission java . security . AllPermission ;
3 }; // the grail library can do anything it wants ,
4
5 grant codeBase " file : worker . jar " {
6 permission java . security . AllPermission ;
7 }; // the worker code can do anything it wants , however ...
8
9 grant { // loaded tasks get no permissions :
10 }; // grant any permissions , if you wish
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 57 / 64
69. Что если...
Рабочий находится за firewall или NAT?
Отключается рабочий?
Отключается сервер?
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 58 / 64
70. The Eight Fallacies of Distributed Computing2
Essentially everyone, when they first build a distributed application, makes
the following eight assumptions. All prove to be false in the long run and
all cause big trouble and painful learning experiences. (Peter Deutsch,
James Gosling)
1 The network is reliable
2 Latency is zero
3 Bandwidth is infinite
4 The network is secure
5 Topology doesn’t change
6 There is one administrator
7 Transport cost is zero
8 The network is homogeneous
2
http://nighthacks.com/roller/jag/resource/Fallacies.html
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 59 / 64
71. Отказы в распределенной системе
“A distributed system is one in which the failure of a computer you
didn’t even know existed can render your own computer unusable.”
Leslie Lamport
“Failure is the defining difference between distributed and local
programming.”
Ken Arnold, CORBA designer
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 60 / 64
72. Типичные требования
Система должна продолжать работать после выхода из строя
части узлов
Функционирующие узлы должны взять на себя работу,
выполнявшуюся отказавшими узлами
Узлы, вновь запущенные после отказа, должны возвращаться в
систему без полного ее перезапуска
Частичные отказы внутри системы не должны приводить к
наблюдаемому внешне недетерминизму
Увеличение нагрузки на систему не должно приводить к полному
отказу системы, а только к постепенному снижению
производительности
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 61 / 64
73. Домашнее задание №4 - Задача 1
Реализовать распределенную обработку поисковых запросов
N backend-серверов
каждый хранит в памяти некоторую часть инвертированного
индекса
Frontend-сервер
принимает запрос клиента
разбивает запрос на слова
опрашивает backend-серверы
собирает ответы серверов в результаты поиска
возвращает результаты поиска клиенту
Клиент
принимает запрос пользователя,
отправляет frontend-серверу, отображает результат
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 62 / 64
74. Домашнее задание №4 - Задача 2
Усовершенствовать один из примеров из лекции (на выбор)
ComputingService
Ограничить число одновременно выполняемых заданий
Предоставить клиенту возможность отключиться после отправки
задания сервису и получить результат позже
Master/Worker
Реализовать обнаружение и обработку отказов рабочих процессов
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 63 / 64
75. Домашнее задание №4 - Альтернатива
Реализовать нетривиальную процедуру обработки и анализа
данных на Hadoop
Примеры
вычисление PageRank страниц Википедии
кластеризация фильмов/пользователей из Netflix dataset
Содержание задачи должно быть предварительно согласовано со
мной
О.В. Сухорослов 10 Распределенное программирование
() 26.04.2012 64 / 64
77. Общие замечания
Измерение времени параллельного выполнения без ввода-вывода
Вычисление ускорения относительно параллельной реализации с
одним потоком/процессом
Не исследованы ускорение и эффективность для различного
числа процессов и задач различного размера
Измерение времени выполнения программы
omp_get_wtime(), MPI_Wtime(), time, gettimeofday()
clock()?
Сравнение результатов последовательной и параллельной
программ
diff result1 result2
О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 2 / 14
78. Задача 2.1 - Анализ
Просто расстановка прагм приводит к решению с ограниченной
эффективностью
Синхронизация (atomic/critical) внутри параллельных секций
О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 3 / 14
79. Задача 2.1 - Анализ
Просто расстановка прагм приводит к решению с ограниченной
эффективностью
Синхронизация (atomic/critical) внутри параллельных секций
Распараллеливание шага assignment
Хранение всех точек кластера в одной структуре
Хранение номера кластера внутри точки
О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 3 / 14
80. Задача 2.1 - Анализ
Просто расстановка прагм приводит к решению с ограниченной
эффективностью
Синхронизация (atomic/critical) внутри параллельных секций
Распараллеливание шага assignment
Хранение всех точек кластера в одной структуре
Хранение номера кластера внутри точки
Шаг update тоже имеет смысл распараллеливать
Почему?
Цикл по кластерам или точкам?
О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 3 / 14
81. Задача 2.1 - Анализ
Просто расстановка прагм приводит к решению с ограниченной
эффективностью
Синхронизация (atomic/critical) внутри параллельных секций
Распараллеливание шага assignment
Хранение всех точек кластера в одной структуре
Хранение номера кластера внутри точки
Шаг update тоже имеет смысл распараллеливать
Почему?
Цикл по кластерам или точкам?
Как накапливать центры масс в update?
Общие переменные (синхронизация)
reduction с несколькими переменными
Локальные переменные + агрегация после цикла
О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 3 / 14
82. Задача 2.1 - Анализ
Просто расстановка прагм приводит к решению с ограниченной
эффективностью
Синхронизация (atomic/critical) внутри параллельных секций
Распараллеливание шага assignment
Хранение всех точек кластера в одной структуре
Хранение номера кластера внутри точки
Шаг update тоже имеет смысл распараллеливать
Почему?
Цикл по кластерам или точкам?
Как накапливать центры масс в update?
Общие переменные (синхронизация)
reduction с несколькими переменными
Локальные переменные + агрегация после цикла
Выбор schedule?
О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 3 / 14
83. Задача 2.1 - Эффективная параллельная реализация
Совмещение шагов assignment и update в один параллельный цикл
по точкам
Накопление новых центров масс в отдельных переменных внутри
каждого потока
Использование reduce для подсчета количества перемещений
точек
Вычисление новых центров путем агрегации результатов потоков
(окончание update) после цикла
О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 4 / 14
84. Задача 2.1 - Ошибки
Низкая эффективность из-за использования синхронизации
внутри параллельных секций или false sharing
Запись в общие переменные без синхронизации внутри
параллельной секции
Распараллеливание “мелких” циклов
О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 5 / 14
85. Задача 2.1 - Подводные камни
Странное поведение программы с флагами оптимизации
скорее всего сигнализирует об ошибке в коде
могут также быть неудачные комбинации нескольких флагов
OpenMP reduction не гарантирует детерминированный порядок
вычислений агрегата
vector<bool>
О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 6 / 14
86. Задача 2.1 - Влияние размера задачи
Как размер задачи влияет на ускорение?
Кол-во точек
Кол-во кластеров
Размерность данных
О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 7 / 14
88. Задача 2.2 - Анализ
Декомпозиция
О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 9 / 14
89. Задача 2.2 - Анализ
Декомпозиция
Распределение начальных данных между процессами
О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 9 / 14
90. Задача 2.2 - Анализ
Декомпозиция
Распределение начальных данных между процессами
Обмены между соседними процессами
О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 9 / 14
91. Задача 2.2 - Анализ
Декомпозиция
Распределение начальных данных между процессами
Обмены между соседними процессами
Сбор результатов
О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 9 / 14
92. Задача 2.2 - Анализ
Декомпозиция
Распределение начальных данных между процессами
Обмены между соседними процессами
Сбор результатов
О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 9 / 14
93. Задача 2.1 - Эффективная параллельная реализация
Использование эффективного представления начального поля для
уменьшения объема считываемых в начале данных
Чтение входных данных одним процессом
Использование MPI_Scatter(v)/Gather(v) для распределения
данных и сбора результатов
Использование MPI_Isend/Irecv для совмещения обменов
границами с вычислениями внутри области
О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 10 / 14
94. Задача 2.1 - Оптимизации
Проверять только те клетки, которые были изменены на
предыдущей итерации, а так же их соседей
Останавливаться, если ни одна клетка не изменила состояние
Дополнительная коллективная операция
Перекрытие областей, синхронизация через N итераций
Меняем обмены на дополнительные вычисления
MPI_IN_PLACE у процесса 0
send и receive буферы совпадают
О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 11 / 14
95. Задача 2.2 - Влияние размера задачи
Как размер задачи влияет на ускорение?
Размер поля
Кол-во итераций
О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 12 / 14