SlideShare a Scribd company logo
1 of 97
Download to read offline
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 memory
         Nodes communicate with each other through a computer network




    О.В. Сухорослов    10 Распределенное программирование
                           ()                               26.04.2012   5 / 64
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
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
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
Distributed Systems




    О.В. Сухорослов   10 Распределенное программирование
                          ()                               26.04.2012   6 / 64
Related Fields
    Concurrency
         Simultaneous execution of several computations interacting with each
         other




    О.В. Сухорослов     10 Распределенное программирование
                            ()                                  26.04.2012   7 / 64
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
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
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
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
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
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
Why Distributed Systems?
   Performance
         Solve big problems
         Store large data
         Serve huge number of clients




    О.В. Сухорослов     10 Распределенное программирование
                            ()                               26.04.2012   9 / 64
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
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
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
Классы распределенных систем
   Распределенные вычислительные системы
         Кластер
         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
Взаимодействие распределенных процессов

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

   Streams/pipes
   Publish/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 socket
              255.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 Inp utStreamReader ( socket . getInputStream ()));
 6
 7   BufferedReader stdIn = new BufferedReader (
 8           new Inp utStreamReader ( 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 accepted
2   Hello Server !
3   Server : Hello Client !
4   TIME
5   Server : 1206545536656
6   MONEY
7   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 Mul tiServerThread ( 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
Примеры технологий

   CORBA
   DCOM -> .NET Remoting -> WCF
   Java RMI
   Web-сервисы (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 Avro
         C, 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 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
Пример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 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
Пример задания

 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
Клиент
 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
Запуск сервиса

     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
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
Запуск клиента

     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
Важно

   Клиент и сервер не должны находиться за 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 ( 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
Управляющий (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
Рабочий
 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
Пример задания
 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
Сервер (запуск мастера)

 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
Сервер (запуск пакета заданий)
 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
Запуск сервера

     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
Запуск рабочего

     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
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, 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
Отказы в распределенной системе

   “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
Типичные требования

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

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

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

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

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


    О.В. Сухорослов   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) внутри параллельных секций




    О.В. Сухорослов       ()   10 Разбор ДЗ №2             27.04.2012   3 / 14
Задача 2.1 - Анализ
   Просто расстановка прагм приводит к решению с ограниченной
   эффективностью
         Синхронизация (atomic/critical) внутри параллельных секций

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




    О.В. Сухорослов       ()   10 Разбор ДЗ №2             27.04.2012   3 / 14
Задача 2.1 - Анализ
   Просто расстановка прагм приводит к решению с ограниченной
   эффективностью
         Синхронизация (atomic/critical) внутри параллельных секций

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

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




    О.В. Сухорослов       ()   10 Разбор ДЗ №2             27.04.2012   3 / 14
Задача 2.1 - Анализ
   Просто расстановка прагм приводит к решению с ограниченной
   эффективностью
         Синхронизация (atomic/critical) внутри параллельных секций

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

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

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



    О.В. Сухорослов       ()   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 у процесса 0
         send и 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

More Related Content

What's hot

Введение в сетевые технологии
Введение в сетевые технологииВведение в сетевые технологии
Введение в сетевые технологииUnguryan Vitaliy
 
Семинар 8. Параллельное программирование на MPI (часть 1)
Семинар 8. Параллельное программирование на MPI (часть 1)Семинар 8. Параллельное программирование на MPI (часть 1)
Семинар 8. Параллельное программирование на MPI (часть 1)Mikhail Kurnosov
 
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray ChapelЛекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray ChapelMikhail Kurnosov
 
MPIPerf: пакет оценки эффективности коммуникационных функций стандарта MPI
MPIPerf: пакет оценки эффективности коммуникационных функций стандарта MPIMPIPerf: пакет оценки эффективности коммуникационных функций стандарта MPI
MPIPerf: пакет оценки эффективности коммуникационных функций стандарта MPIMikhail Kurnosov
 
C++ STL & Qt. Занятие 06.
C++ STL & Qt. Занятие 06.C++ STL & Qt. Занятие 06.
C++ STL & Qt. Занятие 06.Igor Shkulipa
 
Язык параллельного программирования Cray Chapel
Язык параллельного программирования Cray ChapelЯзык параллельного программирования Cray Chapel
Язык параллельного программирования Cray ChapelMikhail Kurnosov
 
Семинар 9. Параллельное программирование на MPI (часть 2)
Семинар 9. Параллельное программирование на MPI (часть 2)Семинар 9. Параллельное программирование на MPI (часть 2)
Семинар 9. Параллельное программирование на MPI (часть 2)Mikhail Kurnosov
 
Multiprocessor Programming Intro (lecture 1)
Multiprocessor Programming Intro (lecture 1)Multiprocessor Programming Intro (lecture 1)
Multiprocessor Programming Intro (lecture 1)Dmitry Tsitelov
 
C++ STL & Qt. Занятие 07.
C++ STL & Qt. Занятие 07.C++ STL & Qt. Занятие 07.
C++ STL & Qt. Занятие 07.Igor Shkulipa
 
Java весна 2014 лекция 5
Java весна 2014 лекция 5Java весна 2014 лекция 5
Java весна 2014 лекция 5Technopark
 
Лекция 7. Язык параллельного программирования Intel Cilk Plus
Лекция 7. Язык параллельного программирования Intel Cilk PlusЛекция 7. Язык параллельного программирования Intel Cilk Plus
Лекция 7. Язык параллельного программирования Intel Cilk PlusMikhail Kurnosov
 
Lecture1: Introduction to Parallel Computing
Lecture1: Introduction to  Parallel ComputingLecture1: Introduction to  Parallel Computing
Lecture1: Introduction to Parallel ComputingAndrii Rodionov
 
Java. Многопоточность.
Java. Многопоточность.Java. Многопоточность.
Java. Многопоточность.Unguryan Vitaliy
 
C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.Igor Shkulipa
 
C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.Igor Shkulipa
 
Архитектура. Доступноять программных систем.
Архитектура. Доступноять программных систем.Архитектура. Доступноять программных систем.
Архитектура. Доступноять программных систем.Dima Dzuba
 
Системы контроля версий
Системы контроля версийСистемы контроля версий
Системы контроля версийUnguryan Vitaliy
 
Функциональные сети на основе библиотеки SynapseGrid
Функциональные сети на основе библиотеки SynapseGridФункциональные сети на основе библиотеки SynapseGrid
Функциональные сети на основе библиотеки SynapseGridАрсений Жижелев
 
C++ STL & Qt. Занятие 03.
C++ STL & Qt. Занятие 03.C++ STL & Qt. Занятие 03.
C++ STL & Qt. Занятие 03.Igor Shkulipa
 

What's hot (20)

Введение в сетевые технологии
Введение в сетевые технологииВведение в сетевые технологии
Введение в сетевые технологии
 
Семинар 8. Параллельное программирование на MPI (часть 1)
Семинар 8. Параллельное программирование на MPI (часть 1)Семинар 8. Параллельное программирование на MPI (часть 1)
Семинар 8. Параллельное программирование на MPI (часть 1)
 
Lekt 04 5-osi_decrypted
Lekt 04 5-osi_decryptedLekt 04 5-osi_decrypted
Lekt 04 5-osi_decrypted
 
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray ChapelЛекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
Лекция 12 (часть 1): Языки программирования семейства PGAS: Cray Chapel
 
MPIPerf: пакет оценки эффективности коммуникационных функций стандарта MPI
MPIPerf: пакет оценки эффективности коммуникационных функций стандарта MPIMPIPerf: пакет оценки эффективности коммуникационных функций стандарта MPI
MPIPerf: пакет оценки эффективности коммуникационных функций стандарта MPI
 
C++ STL & Qt. Занятие 06.
C++ STL & Qt. Занятие 06.C++ STL & Qt. Занятие 06.
C++ STL & Qt. Занятие 06.
 
Язык параллельного программирования Cray Chapel
Язык параллельного программирования Cray ChapelЯзык параллельного программирования Cray Chapel
Язык параллельного программирования Cray Chapel
 
Семинар 9. Параллельное программирование на MPI (часть 2)
Семинар 9. Параллельное программирование на MPI (часть 2)Семинар 9. Параллельное программирование на MPI (часть 2)
Семинар 9. Параллельное программирование на MPI (часть 2)
 
Multiprocessor Programming Intro (lecture 1)
Multiprocessor Programming Intro (lecture 1)Multiprocessor Programming Intro (lecture 1)
Multiprocessor Programming Intro (lecture 1)
 
C++ STL & Qt. Занятие 07.
C++ STL & Qt. Занятие 07.C++ STL & Qt. Занятие 07.
C++ STL & Qt. Занятие 07.
 
Java весна 2014 лекция 5
Java весна 2014 лекция 5Java весна 2014 лекция 5
Java весна 2014 лекция 5
 
Лекция 7. Язык параллельного программирования Intel Cilk Plus
Лекция 7. Язык параллельного программирования Intel Cilk PlusЛекция 7. Язык параллельного программирования Intel Cilk Plus
Лекция 7. Язык параллельного программирования Intel Cilk Plus
 
Lecture1: Introduction to Parallel Computing
Lecture1: Introduction to  Parallel ComputingLecture1: Introduction to  Parallel Computing
Lecture1: Introduction to Parallel Computing
 
Java. Многопоточность.
Java. Многопоточность.Java. Многопоточность.
Java. Многопоточность.
 
C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.
 
C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.
 
Архитектура. Доступноять программных систем.
Архитектура. Доступноять программных систем.Архитектура. Доступноять программных систем.
Архитектура. Доступноять программных систем.
 
Системы контроля версий
Системы контроля версийСистемы контроля версий
Системы контроля версий
 
Функциональные сети на основе библиотеки SynapseGrid
Функциональные сети на основе библиотеки SynapseGridФункциональные сети на основе библиотеки SynapseGrid
Функциональные сети на основе библиотеки SynapseGrid
 
C++ STL & Qt. Занятие 03.
C++ STL & Qt. Занятие 03.C++ STL & Qt. Занятие 03.
C++ STL & Qt. Занятие 03.
 

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

Konspekt
KonspektKonspekt
KonspektArtem
 
Разработка встраиваемой операционной системы на базе микроядерной архитектуры...
Разработка встраиваемой операционной системы на базе микроядерной архитектуры...Разработка встраиваемой операционной системы на базе микроядерной архитектуры...
Разработка встраиваемой операционной системы на базе микроядерной архитектуры...Vasily Sartakov
 
Архитектура Операционных Систем
Архитектура Операционных СистемАрхитектура Операционных Систем
Архитектура Операционных Системkurbanovafaina
 

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

Konspekt
KonspektKonspekt
Konspekt
 
Разработка встраиваемой операционной системы на базе микроядерной архитектуры...
Разработка встраиваемой операционной системы на базе микроядерной архитектуры...Разработка встраиваемой операционной системы на базе микроядерной архитектуры...
Разработка встраиваемой операционной системы на базе микроядерной архитектуры...
 
9138
91389138
9138
 
Архитектура Операционных Систем
Архитектура Операционных СистемАрхитектура Операционных Систем
Архитектура Операционных Систем
 
Модуль
МодульМодуль
Модуль
 
Модуль
МодульМодуль
Модуль
 
Модуль
МодульМодуль
Модуль
 
Модуль
МодульМодуль
Модуль
 
Модуль
МодульМодуль
Модуль
 
Модуль
МодульМодуль
Модуль
 
Модуль
МодульМодуль
Модуль
 
Модуль
МодульМодуль
Модуль
 
Модуль
МодульМодуль
Модуль
 
Модуль
МодульМодуль
Модуль
 
Модуль
МодульМодуль
Модуль
 
Модуль
МодульМодуль
Модуль
 
Модуль
МодульМодуль
Модуль
 
Модуль
МодульМодуль
Модуль
 
Модуль
МодульМодуль
Модуль
 
Модуль
МодульМодуль
Модуль
 

More from Yandex

Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksYandex
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Yandex
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаYandex
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаYandex
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Yandex
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Yandex
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Yandex
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Yandex
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Yandex
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Yandex
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Yandex
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Yandex
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровYandex
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Yandex
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Yandex
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Yandex
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Yandex
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Yandex
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Yandex
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Yandex
 

More from Yandex (20)

Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of Tanks
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
 

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

  • 1. 10 Распределенное программирование О.В. Сухорослов oleg.sukhoroslov@gmail.com 26.04.2012 О.В. Сухорослов 10 Распределенное программирование () 26.04.2012 1 / 64
  • 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
  • 9. Distributed Systems О.В. Сухорослов 10 Распределенное программирование () 26.04.2012 6 / 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
  • 28. Пример О.В. Сухорослов 10 Распределенное программирование () 26.04.2012 17 / 64
  • 29. Сервер 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
  • 30. Протокол 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
  • 31. Клиент 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 Inp utStreamReader ( socket . getInputStream ())); 6 7 BufferedReader stdIn = new BufferedReader ( 8 new Inp utStreamReader ( 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
  • 32. Пример сессии 1 Server : Connection accepted 2 Hello Server ! 3 Server : Hello Client ! 4 TIME 5 Server : 1206545536656 6 MONEY 7 Server : What ? 8 Bye Server ! 9 Server : Bye Client ! О.В. Сухорослов 10 Распределенное программирование () 26.04.2012 21 / 64
  • 33. Несколько клиентов? О.В. Сухорослов 10 Распределенное программирование () 26.04.2012 22 / 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
  • 37. Клиент 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
  • 38. Сервер 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
  • 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
  • 41. Виды удаленных вызовов Синхронный Асинхронный Способы получения результата Опрос Обратный вызов (callback) Односторонний (one-way) О.В. Сухорослов 10 Распределенное программирование () 26.04.2012 30 / 64
  • 42. Remote Method Invocation Объектно-ориентированная разновидность Вызовы методов удаленных объектов Интерфейсы удаленных объектов описываются на IDL-языке Обычно является платформонезависимым IDL-компилятор генерирует базовый код (заглушки, stubs) для сервера и клиента на определенном языке программирования Вызовы удаленных объектов осуществляются путем вызова локальных объектов-представителей (прокси, proxy) Внутри - RPC, передача сообщений, сокеты О.В. Сухорослов 10 Распределенное программирование () 26.04.2012 31 / 64
  • 43. Примеры технологий CORBA DCOM -> .NET Remoting -> WCF Java RMI Web-сервисы (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 Avro C, C++, C#, Java, Python, Ruby, PHP Etch (Cisco) Java, C, C# О.В. Сухорослов 10 Распределенное программирование () 26.04.2012 32 / 64
  • 44. Пример описания интерфейса удаленного объекта 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
  • 45. “Подводные камни” ОО-RPC Удаленные вызовы отличаются от локальных Полная “прозрачность” недостижима Новые типы ошибок, возникающих при вызове Удаленные объекты отличаются от локальных Обычно являются “фасадами” к группе локальных объектов Следует использовать “крупные” операции и минимизировать обмены (round trips) О.В. Сухорослов 10 Распределенное программирование () 26.04.2012 34 / 64
  • 46. Примеры Вычислительный Сервис Master/Workers О.В. Сухорослов 10 Распределенное программирование () 26.04.2012 35 / 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
  • 48. Пример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
  • 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
  • 57. Пример 2: Master/Workers О.В. Сухорослов 10 Распределенное программирование () 26.04.2012 46 / 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
  • 76. 10 Разбор ДЗ №2 О.В. Сухорослов oleg.sukhoroslov@gmail.com 27.04.2012 О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 1 / 14
  • 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
  • 87. Примеры графиков (Дмитрий Марьин) О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 8 / 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
  • 96. Примеры графиков (Дмитрий Марьин) О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 13 / 14
  • 97. Примеры графиков (Вероника Левкевич) О.В. Сухорослов () 10 Разбор ДЗ №2 27.04.2012 14 / 14