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

Post on 14-Jan-2015

1.822 Views

Category:

Documents

4 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

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

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

oleg.sukhoroslov@gmail.com

26.04.2012

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

Темы курса

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

План лекции

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

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

ДЗ №4

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

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

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

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

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

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

Distributed Systems

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Streams/pipesPublish/subscribe

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Сокеты

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

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

0.0.0.0 - listening socket255.255.255.255 broadcasting socket

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

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

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

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

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

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

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

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

Пример

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

Сервер

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

Протокол

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

Клиент

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Мультикаст

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

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

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

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

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

Клиент

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

Сервер

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

Remote Procedure Call (RPC)

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

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

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

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

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

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

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

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

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

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

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

Синхронный

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

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

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

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

Remote Method Invocation

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Примеры

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

Master/Workers

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

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

Пример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

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

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

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

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

Клиент

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

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

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

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

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

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

Важно

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

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

Что если...

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

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

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

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

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

Пример 2: Master/Workers

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

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

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

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

Управляющий (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

Управляющий (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

Рабочий

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

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

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

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

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

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

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

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

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

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

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

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

Что если...

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

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

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

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

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

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

“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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

10 Разбор ДЗ №2

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

oleg.sukhoroslov@gmail.com

27.04.2012

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

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

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

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

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

diff result1 result2

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

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

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

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

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

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

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

Выбор schedule?

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

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

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

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

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

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

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

Выбор schedule?

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

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

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

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

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

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

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

Выбор schedule?

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

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

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

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

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

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

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

Выбор schedule?

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

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

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

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

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

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

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

Выбор schedule?

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

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

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

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

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

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

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

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

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

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

vector<bool>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

top related