Your SlideShare is downloading. ×
0
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
О.В.Сухорослов "Распределенное программирование. Разбор ДЗ №2"
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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

1,911

Published on

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

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

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,911
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
63
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 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 ;1314 Protocol protocol = new Protocol ();15 response = protocol . processRequest ( null );16 out . println ( response );1718 while (( request = in . readLine ()) != null ) {19 response = protocol . processRequest ( request );20 out . println ( request );21 if ( protocol . isTerminated ()) break ;22 }2324 out . close (); in . close (); clientSocket . close ();25 }2627 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 }2021 return response ;22 }2324 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 ;1011 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 }2021 out . close (); in . close (); stdIn . close (); socket . close (); О.В. Сухорослов 10 Распределенное программирование () 26.04.2012 20 / 64
  • 32. Пример сессии1 Server : Connection accepted2 Hello Server !3 Server : Hello Client !4 TIME5 Server : 12065455366566 MONEY7 Server : What ?8 Bye Server !9 Server : Bye Client ! О.В. Сухорослов 10 Распределенное программирование () 26.04.2012 21 / 64
  • 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 );1011 byte [] buf = new byte [256];12 packet = new DatagramPacket ( buf , buf . length );13 socket . receive ( packet );1415 String response = new String (16 packet . getData () , 0 , packet . getLength ());17 System . out . println ( response );1819 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 ());1314 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 ());1920 socket . send ( packet );21 }2223 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 }; 910 sequence < string > Lines ;1112 interface File extends Node {13 idempotent Lines read ();14 idempotent void write ( Lines text ) throws GenericError ;15 };1617 sequence < Node * > NodeSeq ;1819 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 }45 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 parameters11 Remote . config ( null , port , null , 0);1213 // register remote object14 ItemServer . bind ( new C ompu ting Serv iceImpl () , " comp " );1516 // enable remote code loading !17 ItemServer . acceptProxies ();1819 System . out . println ( " ComputingService is running on "20 + " // " + Remote . get Defa ultServerHost () + " : "21 + Remote . g etDe faul tSer ver Port () + " / comp " );22 }2324 } О.В. Сухорослов 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 @Override10 public Integer execute () {11 System . out . println ( " Calculating fib ( " + n + " ) " );12 return fib ( n );13 }1415 private int fib ( int n ) {16 if ( n <= 1)17 return n ;18 else19 return fib ( n - 1) + fib ( n - 2);20 }21 } О.В. Сухорослов 10 Распределенное программирование () 26.04.2012 39 / 64
  • 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 reference10 ComputingService service =11 ( ComputingService ) T r a n s parentItemProxy . getItem (12 serviceRef , new Class [] { ComputingService . class });1314 // invoke service15 int n = Integer . parseInt ( args [1]);16 int result = service . executeTask ( new FibTask ( n ));17 System . out . println ( n + " ! = " + result );1819 // stop codebase server20 cb . interrupt ();21 }22 } О.В. Сухорослов 10 Распределенное программирование () 26.04.2012 40 / 64
  • 52. Запуск сервиса Windows1 java - cp grail . jar ; compserv . jar 2 - Djava . security . manager - Djava . security . policy = server . policy3 lecture10 . compserv . ComputingServiceImpl PORT Linux1 java - cp grail . jar : compserv . jar 2 - Djava . security . manager - Djava . security . policy = server . policy3 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. Запуск клиента Windows1 java - cp grail . jar ; fib - client . jar 2 lecture10 . compserv . FibClient // SERVER_HOST : PORT / comp NUM Linux1 java - cp grail . jar : fib - client . jar 2 lecture10 . compserv . FibClient // SERVER_HOST : PORT / comp NUM fib-client.jar содержит: ComputingService.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. Интерфейс Master1 public interface Master {23 public Task getTask () throws RemoteException ;45 public void setResult ( int taskId , Object result )6 throws RemoteException ;78 } О.В. Сухорослов 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 }1011 public int getId () {12 return id ;13 }1415 public void setResult ( Object result ) {16 this . result = ( T ) result ;17 }1819 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 }1011 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 } 910 @Override11 public void setResult ( int taskId , Object result )12 throws RemoteException {13 System . out . println ( " Got result for task " + taskId );14 runningTasks . remove ( taskId ). setResult ( result );15 } О.В. Сухорослов 10 Распределенное программирование () 26.04.2012 50 / 64
  • 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 }2122 } О.В. Сухорослов 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 } 910 @Override11 public Integer call () throws Exception {12 System . out . println ( " Calculating fib ( " + n + " ) " );13 return fib ( n );14 }1516 private int fib ( int n ) {17 if ( n <= 1)18 return n ;19 else20 return fib ( n - 1) + fib ( n - 2);21 }22 } О.В. Сухорослов 10 Распределенное программирование () 26.04.2012 52 / 64
  • 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);1011 // create master and register remote object12 MasterImpl master = new MasterImpl ();13 ItemServer . bind ( master , " master " );14 System . out . println ( " Master is running on // "15 + Remote . 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 }1011 // submit tasks to master12 master . execute ( tasks );1314 // print results15 for ( FibTask task : tasks ) {16 System . out . println ( task . n + " ! = " + task . getResult ());17 }1819 // shutdown server20 Remote . shutdown ();21 }22 } О.В. Сухорослов 10 Распределенное программирование () 26.04.2012 54 / 64
  • 66. Запуск сервера Windows1 java - cp grail . jar ; fib - master . jar 2 lecture10 . masterworker . FibMain PORT NUM_TASKS MIN MAX Linux1 java - cp grail . jar : fib - master . jar 2 lecture10 . masterworker . FibMain PORT NUM_TASKS MIN MAX fib-master.jar содержит FibMain.class FibTask.class Master.class MasterImpl.class Task.class О.В. Сухорослов 10 Распределенное программирование () 26.04.2012 55 / 64
  • 67. Запуск рабочего Windows1 java - cp grail . jar ; worker . jar 2 - Djava . security . manager - Djava . security . policy = client . policy3 lecture10 . masterworker . Worker // SERVER_HOST : PORT / master Linux1 java - cp grail . jar : worker . jar 2 - Djava . security . manager - Djava . security . policy = client . policy3 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 Computing2Essentially everyone, when they first build a distributed application, makesthe following eight assumptions. All prove to be false in the long run andall cause big trouble and painful learning experiences. (Peter Deutsch,James Gosling) 1 The network is 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

×