О.В.Сухорослов "Распределенное программирование....

97

Click here to load reader

Upload: yandex

Post on 14-Jan-2015

1.822 views

Category:

Documents


4 download

DESCRIPTION

О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2", 27.04.2012, место показа: МФТИ, Школа анализа данных (ШАД)

TRANSCRIPT

Page 1: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

10 Распределенное программирование

О.В. Сухорослов

[email protected]

26.04.2012

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 1 / 64

Page 2: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Темы курса

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 2 / 64

Page 3: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

План лекции

Распределенные системы и вычисленияВзаимодействие распределенных процессов

Сокеты, message passing, RPC, примеры

ДЗ №4

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 3 / 64

Page 4: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

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

Page 5: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Distributed System

A collection of autonomous entities (processes, computers, nodes)Each node has its own local memoryNodes communicate with each other through a computer network

All nodes have a common goalSolving a large computational problem

Each node has its own goals/needsCoordination of the use of shared resourcesCommunication services

A distributed system is one in which the failure of a computer youdidn’t even know existed can render your own computer unusable.(Leslie Lamport)

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 5 / 64

Page 6: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Distributed System

A collection of autonomous entities (processes, computers, nodes)Each node has its own local memoryNodes communicate with each other through a computer network

All nodes have a common goalSolving a large computational problem

Each node has its own goals/needsCoordination of the use of shared resourcesCommunication services

A distributed system is one in which the failure of a computer youdidn’t even know existed can render your own computer unusable.(Leslie Lamport)

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 5 / 64

Page 7: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Distributed System

A collection of autonomous entities (processes, computers, nodes)Each node has its own local memoryNodes communicate with each other through a computer network

All nodes have a common goalSolving a large computational problem

Each node has its own goals/needsCoordination of the use of shared resourcesCommunication services

A distributed system is one in which the failure of a computer youdidn’t even know existed can render your own computer unusable.(Leslie Lamport)

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 5 / 64

Page 8: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Distributed System

A collection of autonomous entities (processes, computers, nodes)Each node has its own local memoryNodes communicate with each other through a computer network

All nodes have a common goalSolving a large computational problem

Each node has its own goals/needsCoordination of the use of shared resourcesCommunication services

A distributed system is one in which the failure of a computer youdidn’t even know existed can render your own computer unusable.(Leslie Lamport)

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 5 / 64

Page 9: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Distributed Systems

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 6 / 64

Page 10: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Related Fields

ConcurrencySimultaneous execution of several computations interacting with eachother

Parallel ComputingDividing large problems into smaller ones which can be solvedconcurrently (“in parallel”)

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 7 / 64

Page 11: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Related Fields

ConcurrencySimultaneous execution of several computations interacting with eachother

Parallel ComputingDividing large problems into smaller ones which can be solvedconcurrently (“in parallel”)

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 7 / 64

Page 12: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Features of Distributed Systems

Loosely coupledEach computer is autonomous and has only a limited, incomplete viewof the systemThe system doesn’t have global state or clockThe structure of the system (network topology, network latency,number of nodes) may be not known in advance

HeterogeneousThe system may consist of different kinds of computers and networklinks

DynamicThe system may change during the execution

UnreliableNodes and communication links may fail (partial failure)

Slow communicationHigh latency, limited bandwidth

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 8 / 64

Page 13: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Features of Distributed Systems

Loosely coupledEach computer is autonomous and has only a limited, incomplete viewof the systemThe system doesn’t have global state or clockThe structure of the system (network topology, network latency,number of nodes) may be not known in advance

HeterogeneousThe system may consist of different kinds of computers and networklinks

DynamicThe system may change during the execution

UnreliableNodes and communication links may fail (partial failure)

Slow communicationHigh latency, limited bandwidth

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 8 / 64

Page 14: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Features of Distributed Systems

Loosely coupledEach computer is autonomous and has only a limited, incomplete viewof the systemThe system doesn’t have global state or clockThe structure of the system (network topology, network latency,number of nodes) may be not known in advance

HeterogeneousThe system may consist of different kinds of computers and networklinks

DynamicThe system may change during the execution

UnreliableNodes and communication links may fail (partial failure)

Slow communicationHigh latency, limited bandwidth

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 8 / 64

Page 15: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Features of Distributed Systems

Loosely coupledEach computer is autonomous and has only a limited, incomplete viewof the systemThe system doesn’t have global state or clockThe structure of the system (network topology, network latency,number of nodes) may be not known in advance

HeterogeneousThe system may consist of different kinds of computers and networklinks

DynamicThe system may change during the execution

UnreliableNodes and communication links may fail (partial failure)

Slow communicationHigh latency, limited bandwidth

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 8 / 64

Page 16: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Features of Distributed Systems

Loosely coupledEach computer is autonomous and has only a limited, incomplete viewof the systemThe system doesn’t have global state or clockThe structure of the system (network topology, network latency,number of nodes) may be not known in advance

HeterogeneousThe system may consist of different kinds of computers and networklinks

DynamicThe system may change during the execution

UnreliableNodes and communication links may fail (partial failure)

Slow communicationHigh latency, limited bandwidth

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 8 / 64

Page 17: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Why Distributed Systems?

PerformanceSolve big problemsStore large dataServe huge number of clients

Communication and coordinationUsers and resources are geographically distributed

AvailabilityAvoid single point of failure

ScalabilityEasier to expand and manage

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 9 / 64

Page 18: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Why Distributed Systems?

PerformanceSolve big problemsStore large dataServe huge number of clients

Communication and coordinationUsers and resources are geographically distributed

AvailabilityAvoid single point of failure

ScalabilityEasier to expand and manage

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 9 / 64

Page 19: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Why Distributed Systems?

PerformanceSolve big problemsStore large dataServe huge number of clients

Communication and coordinationUsers and resources are geographically distributed

AvailabilityAvoid single point of failure

ScalabilityEasier to expand and manage

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 9 / 64

Page 20: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Why Distributed Systems?

PerformanceSolve big problemsStore large dataServe huge number of clients

Communication and coordinationUsers and resources are geographically distributed

AvailabilityAvoid single point of failure

ScalabilityEasier to expand and manage

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 9 / 64

Page 21: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Классы распределенных систем

Распределенные вычислительные системыКластерNetwork of workstationsDesktop 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

MessagingEnterprise Application Integration...

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 10 / 64

Page 22: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Взаимодействие распределенных процессов

Обмен сообщениями (message passing)Удаленные вызовы процедур (RPC)

Streams/pipesPublish/subscribe

Распределенная общая память(Распределенные) хранилища

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 11 / 64

Page 23: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Обмен сообщениями

Сообщение - структурированные данные, передаваемые междупроцессами через некоторый коммуникационный канал

Идентификатор сообщения, тип, другие поля...

Процесс 1 отправляет сообщение процессу 2 иЖдет ответа (синхронная передача)Продолжает выполнение и проверяет, пришел ли ответ(асинхронная передача)Продолжает выполнение и не ждет ответа (односторонняяпередача)

Процесс 2Ожидает прихода сообщения (синхронно)Проверяет, есть ли новые сообщенияРегистрирует обработчик (callback), вызываемый при получениисообщения

ПримерыMPI, Erlang (actors), Web Services, XMPPБиблиотеки или часть языка

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 12 / 64

Page 24: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Обмен сообщениями

ПреимуществаНет разделяемого состояния (shared nothing)Альтернатива lockingВозможность обмениваться данными между программами,написанными на разных языках и работающими на разныхархитектурах

ПроблемыЧасто требуется "ручная"сериализация и десериализация структурданныхОстается возможность возникновения взаимной блокировкипроцессов и race condition

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 13 / 64

Page 25: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Характерные особенности реализаций

Гарантии доставки сообщенийСохранение порядка сообщенийПоддержка различных режимов (sync/async, unicast/multicast)

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 14 / 64

Page 26: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Сокеты

Двусторонний канал для взаимодействия распределенныхпроцессов

Протокол (TCP, UDP)Локальный IP-адресНомер локального сетевого портаУдаленный IP-адрес (TCP)Номер удаленного сетевого порта (TCP)

0.0.0.0 - listening socket255.255.255.255 broadcasting socket

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 15 / 64

Page 27: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

TCP / Клиент-Сервер

Сервер создает слушающий сокет на стандартном порте(например, 80)

Клиент создает сокет со случайно выбранным локальным портоми отправляет запрос серверу

Сервер принимает соединение и создает парный сокет длявзаимодействия с данным клиентом

Данные передаются по установленному сокету в обе стороны какпоток байтов

Сервер продолжает слушать...

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 16 / 64

Page 28: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Пример

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 17 / 64

Page 29: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Сервер

1 ServerSocket serverSocket = new ServerSocket (4444);2 Socket clientSocket = null;3

4 boolean listening = true;5 while (listening) {6 clientSocket = serverSocket.accept ();7

8 PrintWriter out = new PrintWriter(9 clientSocket.getOutputStream (), true);

10 BufferedReader in = new BufferedReader(11 new InputStreamReader(clientSocket.getInputStream ()));12 String request , response;13

14 Protocol protocol = new Protocol ();15 response = protocol.processRequest(null);16 out.println(response );17

18 while (( request = in.readLine ()) != null) {19 response = protocol.processRequest(request );20 out.println(request );21 if (protocol.isTerminated ()) break;22 }23

24 out.close (); in.close (); clientSocket.close ();25 }26

27 serverSocket.close ();

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 18 / 64

Page 30: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Протокол

1 public class Protocol {2

3 private boolean isTerminated = false;4

5 public String processRequest(String request) {6 String response = null;7

8 if (request == null) {9 response = "Connection accepted";

10 } else if (request.equals("Hello Server!")) {11 response = "Hello Client!";12 } else if (request.equals("TIME")) {13 response = String.valueOf(System.currentTimeMillis ());14 } else if (request.equals("Bye Server!")) {15 response = "Bye Client!";16 isTerminated = true;17 } else {18 response = "What?";19 }20

21 return response;22 }23

24 public boolean isTerminated () {25 return isTerminated;26 }27 }

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 19 / 64

Page 31: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Клиент

1 String host = args [0];2 Socket socket = new Socket(host , 4444);3 PrintWriter out = new PrintWriter(socket.getOutputStream (), true);4 BufferedReader in = new BufferedReader(5 new InputStreamReader(socket.getInputStream ()));6

7 BufferedReader stdIn = new BufferedReader(8 new InputStreamReader(System.in));9 String fromServer , fromUser;

10

11 while (( fromServer = in.readLine ()) != null) {12 System.out.println("Server: " + fromServer );13 if (fromServer.equals("Bye Client!"))14 break;15 fromUser = stdIn.readLine ();16 if (fromUser != null) {17 out.println(fromUser );18 }19 }20

21 out.close (); in.close (); stdIn.close (); socket.close ();

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 20 / 64

Page 32: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Пример сессии

1 Server: Connection accepted2 Hello Server!3 Server: Hello Client!4 TIME5 Server: 12065455366566 MONEY7 Server: What?8 Bye Server!9 Server: Bye Client!

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 21 / 64

Page 33: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Несколько клиентов?

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 22 / 64

Page 34: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Многопоточный сервер

1 while (listening) {2 Socket clientSocket = serverSocket.accept ();3 new MultiServerThread(clientSocket ). start ();4 }

Другие варианты реализации?

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 23 / 64

Page 35: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Как клиент найдет сервер?

Клиент знает IP-адрес и порт сервераТривиальноЧто если IP-адрес сервера изменился?

Клиент знает доменное имя и порт сервераDNS

Клиент знает идентификатор или другой признак сервераСлужба имен (naming service)Каталог (directory)

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 24 / 64

Page 36: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Мультикаст

Групповая рассылка сообщений (дейтаграмм)

Зарезервированные IP-адреса224.0.0.0 - 239.255.255.255

При доставке дейтаграммНе устанавливается соединениеНе гарантируется доставка, порядок доставки и целостностьдейтаграммБыстро, но ненадежно

Наиболее часто реализуется с помощью протокола UDP

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 25 / 64

Page 37: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Клиент

1 DatagramSocket socket = new DatagramSocket (4444);2 InetAddress group = InetAddress.getByName("230.0.0.1");3

4 String request = "TIME";5 int requestSize = request.getBytes (). length;6 DatagramPacket packet = new DatagramPacket(7 new byte[requestSize], requestSize , group, 4445);8 packet.setData(request.getBytes ());9 socket.send(packet );

10

11 byte[] buf = new byte [256];12 packet = new DatagramPacket(buf , buf.length );13 socket.receive(packet );14

15 String response = new String(16 packet.getData(), 0, packet.getLength ());17 System.out.println(response );18

19 socket.close ();

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 26 / 64

Page 38: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Сервер

1 MulticastSocket socket = new MulticastSocket(4445);2 InetAddress group = InetAddress.getByName("230.0.0.1");3 socket.joinGroup(group);4

5 DatagramPacket packet; String request , response;6 boolean listening = true;7

8 while (listening) {9 byte[] buf = new byte [256];

10 packet = new DatagramPacket(buf , buf.length );11 socket.receive(packet );12 request = new String(packet.getData(), 0, packet.getLength ());13

14 response = String.valueOf(System.currentTimeMillis ());15 int respSize = response.getBytes (). length;16 packet = new DatagramPacket(new byte[respSize], respSize ,17 packet.getAddress(), packet.getPort());18 packet.setData(response.getBytes ());19

20 socket.send(packet );21 }22

23 socket.leaveGroup(group );24 socket.close ();

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 27 / 64

Page 39: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Remote Procedure Call (RPC)

Удаленный вызов процедурыКлиент передает в запросе имя процедуры и значения ееаргументовСервер выполняет код процедуры и возвращает полученныйрезультат клиенту (или код ошибки)

Скрытие особенностей удаленного вызоваЯзык описания интерфейсов (IDL) используется для генерациикода, осуществляющего сериализацию данных

Внутри — передача сообщений, сокеты...

ПримерыONC RPC, DCE/RPC, MSRPC

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 28 / 64

Page 40: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Отличие от локальных вызовов

Удаленный вызов может не удаться по различным,непредсказуемым причинам

При этом может быть не известно, была ли вызвана удаленнаяпроцедура

Идемпотентные процедуры можно безопасно вызвать еще разВ общем случае, обычно гарантируется семантика “не более одноговызова” (at most once)

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 29 / 64

Page 41: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Виды удаленных вызовов

Синхронный

АсинхронныйСпособы получения результата

ОпросОбратный вызов (callback)

Односторонний (one-way)

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 30 / 64

Page 42: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Remote Method Invocation

Объектно-ориентированная разновидностьВызовы методов удаленных объектов

Интерфейсы удаленных объектов описываются на IDL-языкеОбычно является платформонезависимым

IDL-компилятор генерирует базовый код (заглушки, stubs) длясервера и клиента на определенном языке программирования

Вызовы удаленных объектов осуществляются путем вызовалокальных объектов-представителей (прокси, proxy)

Внутри - RPC, передача сообщений, сокеты

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 31 / 64

Page 43: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Примеры технологий

CORBADCOM -> .NET Remoting -> WCFJava RMIWeb-сервисы (XML-RPC)

Ice (ZeroC)C++, Java, C#, Visual Basic, Python, PHP, Ruby

Thrift (Facebook)C++, Java, Perl, Python, PHP, Ruby, Erlang

Protocol Buffers (Google)C++, Java, Python

Apache AvroC, C++, C#, Java, Python, Ruby, PHP

Etch (Cisco)Java, C, C#

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 32 / 64

Page 44: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Пример описания интерфейса удаленного объекта

1 module Filesystem {2 interface Node {3 idempotent string name ();4 };5

6 exception GenericError {7 string reason;8 };9

10 sequence <string > Lines;11

12 interface File extends Node {13 idempotent Lines read ();14 idempotent void write(Lines text) throws GenericError;15 };16

17 sequence <Node*> NodeSeq;18

19 interface Directory extends Node {20 idempotent NodeSeq list ();21 };22 };

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 33 / 64

Page 45: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

“Подводные камни” ОО-RPC

Удаленные вызовы отличаются от локальныхПолная “прозрачность” недостижимаНовые типы ошибок, возникающих при вызове

Удаленные объекты отличаются от локальныхОбычно являются “фасадами” к группе локальных объектовСледует использовать “крупные” операции и минимизироватьобмены (round trips)

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 34 / 64

Page 46: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Примеры

Вычислительный Сервис

Master/Workers

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 35 / 64

Page 47: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Cajo1

Удобная библиотека для удаленных вызовов на JavaВнутри Java RMICерверы и клиенты только на Java

УстановкаСкачать Cajo SDK

http://java.net/projects/cajo/downloads/download/sdk.zip

РаспаковатьДобавить grail.jar в classpath

Аналогичные библиотекиKryoNet (Java)Pyro (Python)

1http://java.net/projects/cajo/О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 36 / 64

Page 48: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Пример1: Вычислительный Сервис

1 public interface ComputingService {2 <T> T executeTask(Task <T> task) throws RemoteException;3 }4

5 public interface Task <T> extends Serializable {6 T execute ();7 }

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 37 / 64

Page 49: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Реализация сервиса

1 public class ComputingServiceImpl implements ComputingService {2

3 @Override4 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 parameters11 Remote.config(null , port , null , 0);12

13 // register remote object14 ItemServer.bind(new ComputingServiceImpl (), "comp");15

16 // enable remote code loading!17 ItemServer.acceptProxies ();18

19 System.out.println("ComputingService is running on "20 + "//" + Remote.getDefaultServerHost () + ":"21 + Remote.getDefaultServerPort () + "/comp");22 }23

24 }

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 38 / 64

Page 50: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Пример задания

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 @Override10 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 else19 return fib(n - 1) + fib(n - 2);20 }21 }

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 39 / 64

Page 51: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Клиент

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 class7 CodebaseServer cb = new CodebaseServer(null , 0);8

9 // obtain service proxy by string reference10 ComputingService service =11 (ComputingService) TransparentItemProxy.getItem(12 serviceRef , new Class[] { ComputingService.class });13

14 // invoke service15 int n = Integer.parseInt(args [1]);16 int result = service.executeTask(new FibTask(n));17 System.out.println(n + "! = " + result );18

19 // stop codebase server20 cb.interrupt ();21 }22 }

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 40 / 64

Page 52: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Запуск сервиса

Windows1 java -cp grail.jar;compserv.jar \2 -Djava.security.manager -Djava.security.policy=server.policy \3 lecture10.compserv.ComputingServiceImpl PORT

Linux1 java -cp grail.jar:compserv.jar \2 -Djava.security.manager -Djava.security.policy=server.policy \3 lecture10.compserv.ComputingServiceImpl PORT

compserv.jar содержит:ComputingService.classComputingServiceImpl.classTask.class

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 41 / 64

Page 53: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

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

Page 54: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Запуск клиента

Windows1 java -cp grail.jar;fib -client.jar \2 lecture10.compserv.FibClient // SERVER_HOST:PORT/comp NUM

Linux1 java -cp grail.jar:fib -client.jar \2 lecture10.compserv.FibClient // SERVER_HOST:PORT/comp NUM

fib-client.jar содержит:ComputingService.classFibClient.classFibTask.classTask.class

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 43 / 64

Page 55: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Важно

Клиент и сервер не должны находиться за firewall или NAT

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 44 / 64

Page 56: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Что если...

Клиент не хочет ждать результата, а получить его позже?

Клиент отключается не получив результат?

Сервер отключается не досчитав результат?

Несколько клиентов одновременно обращаются к серверу?

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 45 / 64

Page 57: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Пример 2: Master/Workers

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 46 / 64

Page 58: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Интерфейс 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

Page 59: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Базовый класс заданий

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

Page 60: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Управляющий (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 (InterruptedException e) {19 }20 }21 }

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 49 / 64

Page 61: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Управляющий (2)

1 @Override2 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 @Override11 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

Page 62: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Рабочий

1 public class Worker {2

3 public static void main(String [] args) throws Exception {4 Master master = (Master) TransparentItemProxy.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

Page 63: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Пример задания

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 @Override11 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 else20 return fib(n - 1) + fib(n - 2);21 }22 }

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 52 / 64

Page 64: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Сервер (запуск мастера)

1 public class FibMain {2

3 public static void main(String [] args) throws Exception {4 // serve FibTask class to workers5 new CodebaseServer(null , 0);6

7 // configure server ’s TCP parameters8 int port = Integer.parseInt(args [0]);9 Remote.config(null , port , null , 0);

10

11 // create master and register remote object12 MasterImpl master = new MasterImpl ();13 ItemServer.bind(master , "master");14 System.out.println("Master is running on //"15 + Remote.getDefaultServerHost () + ":"16 + Remote.getDefaultServerPort () + "/master");

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 53 / 64

Page 65: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Сервер (запуск пакета заданий)

1 // generate tasks2 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 master12 master.execute(tasks);13

14 // print results15 for (FibTask task : tasks) {16 System.out.println(task.n + "! = " + task.getResult ());17 }18

19 // shutdown server20 Remote.shutdown ();21 }22 }

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 54 / 64

Page 66: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Запуск сервера

Windows1 java -cp grail.jar;fib -master.jar \2 lecture10.masterworker.FibMain PORT NUM_TASKS MIN MAX

Linux1 java -cp grail.jar:fib -master.jar \2 lecture10.masterworker.FibMain PORT NUM_TASKS MIN MAX

fib-master.jar содержитFibMain.classFibTask.classMaster.classMasterImpl.classTask.class

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 55 / 64

Page 67: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Запуск рабочего

Windows1 java -cp grail.jar;worker.jar \2 -Djava.security.manager -Djava.security.policy=client.policy \3 lecture10.masterworker.Worker // SERVER_HOST:PORT/master

Linux1 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.classTask.classWorker.class

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 56 / 64

Page 68: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

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

Page 69: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Что если...

Рабочий находится за firewall или NAT?

Отключается рабочий?

Отключается сервер?

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 58 / 64

Page 70: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

The Eight Fallacies of Distributed Computing2

Essentially everyone, when they first build a distributed application, makesthe following eight assumptions. All prove to be false in the long run andall cause big trouble and painful learning experiences. (Peter Deutsch,James Gosling)

1 The network is reliable2 Latency is zero3 Bandwidth is infinite4 The network is secure5 Topology doesn’t change6 There is one administrator7 Transport cost is zero8 The network is homogeneous

2http://nighthacks.com/roller/jag/resource/Fallacies.htmlО.В. Сухорослов ()10 Распределенное программирование 26.04.2012 59 / 64

Page 71: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Отказы в распределенной системе

“A distributed system is one in which the failure of a computer youdidn’t even know existed can render your own computer unusable.”Leslie Lamport

“Failure is the defining difference between distributed and localprogramming.”Ken Arnold, CORBA designer

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 60 / 64

Page 72: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Типичные требования

Система должна продолжать работать после выхода из строячасти узлов

Функционирующие узлы должны взять на себя работу,выполнявшуюся отказавшими узлами

Узлы, вновь запущенные после отказа, должны возвращаться всистему без полного ее перезапуска

Частичные отказы внутри системы не должны приводить кнаблюдаемому внешне недетерминизму

Увеличение нагрузки на систему не должно приводить к полномуотказу системы, а только к постепенному снижениюпроизводительности

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 61 / 64

Page 73: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Домашнее задание №4 - Задача 1

Реализовать распределенную обработку поисковых запросов

N backend-серверовкаждый хранит в памяти некоторую часть инвертированногоиндекса

Frontend-серверпринимает запрос клиентаразбивает запрос на словаопрашивает backend-серверысобирает ответы серверов в результаты поискавозвращает результаты поиска клиенту

Клиентпринимает запрос пользователя,отправляет frontend-серверу, отображает результат

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 62 / 64

Page 74: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Домашнее задание №4 - Задача 2

Усовершенствовать один из примеров из лекции (на выбор)

ComputingServiceОграничить число одновременно выполняемых заданийПредоставить клиенту возможность отключиться после отправкизадания сервису и получить результат позже

Master/WorkerРеализовать обнаружение и обработку отказов рабочих процессов

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 63 / 64

Page 75: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Домашнее задание №4 - Альтернатива

Реализовать нетривиальную процедуру обработки и анализаданных на Hadoop

Примерывычисление PageRank страниц Википедиикластеризация фильмов/пользователей из Netflix dataset

Содержание задачи должно быть предварительно согласовано сомной

О.В. Сухорослов ()10 Распределенное программирование 26.04.2012 64 / 64

Page 76: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

10 Разбор ДЗ №2

О.В. Сухорослов

[email protected]

27.04.2012

О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 1 / 14

Page 77: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Общие замечания

Измерение времени параллельного выполнения без ввода-выводаВычисление ускорения относительно параллельной реализации содним потоком/процессомНе исследованы ускорение и эффективность для различногочисла процессов и задач различного размера

Измерение времени выполнения программыomp_get_wtime(), MPI_Wtime(), time, gettimeofday()clock()?

Сравнение результатов последовательной и параллельнойпрограмм

diff result1 result2

О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 2 / 14

Page 78: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Задача 2.1 - Анализ

Просто расстановка прагм приводит к решению с ограниченнойэффективностью

Синхронизация (atomic/critical) внутри параллельных секций

Распараллеливание шага assignmentХранение всех точек кластера в одной структуреХранение номера кластера внутри точки

Шаг update тоже имеет смысл распараллеливатьПочему?Цикл по кластерам или точкам?

Как накапливать центры масс в update?Общие переменные (синхронизация)reduction с несколькими переменнымиЛокальные переменные + агрегация после цикла

Выбор schedule?

О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 3 / 14

Page 79: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Задача 2.1 - Анализ

Просто расстановка прагм приводит к решению с ограниченнойэффективностью

Синхронизация (atomic/critical) внутри параллельных секций

Распараллеливание шага assignmentХранение всех точек кластера в одной структуреХранение номера кластера внутри точки

Шаг update тоже имеет смысл распараллеливатьПочему?Цикл по кластерам или точкам?

Как накапливать центры масс в update?Общие переменные (синхронизация)reduction с несколькими переменнымиЛокальные переменные + агрегация после цикла

Выбор schedule?

О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 3 / 14

Page 80: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Задача 2.1 - Анализ

Просто расстановка прагм приводит к решению с ограниченнойэффективностью

Синхронизация (atomic/critical) внутри параллельных секций

Распараллеливание шага assignmentХранение всех точек кластера в одной структуреХранение номера кластера внутри точки

Шаг update тоже имеет смысл распараллеливатьПочему?Цикл по кластерам или точкам?

Как накапливать центры масс в update?Общие переменные (синхронизация)reduction с несколькими переменнымиЛокальные переменные + агрегация после цикла

Выбор schedule?

О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 3 / 14

Page 81: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Задача 2.1 - Анализ

Просто расстановка прагм приводит к решению с ограниченнойэффективностью

Синхронизация (atomic/critical) внутри параллельных секций

Распараллеливание шага assignmentХранение всех точек кластера в одной структуреХранение номера кластера внутри точки

Шаг update тоже имеет смысл распараллеливатьПочему?Цикл по кластерам или точкам?

Как накапливать центры масс в update?Общие переменные (синхронизация)reduction с несколькими переменнымиЛокальные переменные + агрегация после цикла

Выбор schedule?

О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 3 / 14

Page 82: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Задача 2.1 - Анализ

Просто расстановка прагм приводит к решению с ограниченнойэффективностью

Синхронизация (atomic/critical) внутри параллельных секций

Распараллеливание шага assignmentХранение всех точек кластера в одной структуреХранение номера кластера внутри точки

Шаг update тоже имеет смысл распараллеливатьПочему?Цикл по кластерам или точкам?

Как накапливать центры масс в update?Общие переменные (синхронизация)reduction с несколькими переменнымиЛокальные переменные + агрегация после цикла

Выбор schedule?

О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 3 / 14

Page 83: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Задача 2.1 - Эффективная параллельная реализация

Совмещение шагов assignment и update в один параллельный циклпо точкамНакопление новых центров масс в отдельных переменных внутрикаждого потокаИспользование reduce для подсчета количества перемещенийточекВычисление новых центров путем агрегации результатов потоков(окончание update) после цикла

О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 4 / 14

Page 84: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Задача 2.1 - Ошибки

Низкая эффективность из-за использования синхронизациивнутри параллельных секций или false sharingЗапись в общие переменные без синхронизации внутрипараллельной секцииРаспараллеливание “мелких” циклов

О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 5 / 14

Page 85: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Задача 2.1 - Подводные камни

Странное поведение программы с флагами оптимизациискорее всего сигнализирует об ошибке в кодемогут также быть неудачные комбинации нескольких флагов

OpenMP reduction не гарантирует детерминированный порядоквычислений агрегата

vector<bool>

О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 6 / 14

Page 86: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Задача 2.1 - Влияние размера задачи

Как размер задачи влияет на ускорение?Кол-во точекКол-во кластеровРазмерность данных

О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 7 / 14

Page 87: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Примеры графиков (Дмитрий Марьин)

О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 8 / 14

Page 88: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Задача 2.2 - Анализ

Декомпозиция

Распределение начальных данных между процессами

Обмены между соседними процессами

Сбор результатов

О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 9 / 14

Page 89: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Задача 2.2 - Анализ

Декомпозиция

Распределение начальных данных между процессами

Обмены между соседними процессами

Сбор результатов

О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 9 / 14

Page 90: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Задача 2.2 - Анализ

Декомпозиция

Распределение начальных данных между процессами

Обмены между соседними процессами

Сбор результатов

О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 9 / 14

Page 91: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Задача 2.2 - Анализ

Декомпозиция

Распределение начальных данных между процессами

Обмены между соседними процессами

Сбор результатов

О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 9 / 14

Page 92: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Задача 2.2 - Анализ

Декомпозиция

Распределение начальных данных между процессами

Обмены между соседними процессами

Сбор результатов

О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 9 / 14

Page 93: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Задача 2.1 - Эффективная параллельная реализация

Использование эффективного представления начального поля дляуменьшения объема считываемых в начале данныхЧтение входных данных одним процессомИспользование MPI_Scatter(v)/Gather(v) для распределенияданных и сбора результатовИспользование MPI_Isend/Irecv для совмещения обменовграницами с вычислениями внутри области

О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 10 / 14

Page 94: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Задача 2.1 - Оптимизации

Проверять только те клетки, которые были изменены напредыдущей итерации, а так же их соседей

Останавливаться, если ни одна клетка не изменила состояниеДополнительная коллективная операция

Перекрытие областей, синхронизация через N итерацийМеняем обмены на дополнительные вычисления

MPI_IN_PLACE у процесса 0send и receive буферы совпадают

О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 11 / 14

Page 95: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Задача 2.2 - Влияние размера задачи

Как размер задачи влияет на ускорение?Размер поляКол-во итераций

О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 12 / 14

Page 96: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Примеры графиков (Дмитрий Марьин)

О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 13 / 14

Page 97: О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"

Примеры графиков (Вероника Левкевич)

О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 14 / 14