16-Apr-08 Objetivo • Entender a motivação para o conceito de middleware Processamento Paralelo Middleware Prof. João Paulo A. Almeida ([email protected]) 2008/01 - INF02799 Aplicações distribuídas: interação entre partes Histórico • Surgimento e popularização das redes criou a necessidade e oportunidade dos sistemas distribuídos • Mainframe com seu terminais... Rede B – Terminais ficaram mais poderosos e com mais periféricos que poderiam ser compartilhados Rede A Rede C Cliente/Servidor Cliente/Servidor • Paradigma para interação: – Uma parte do sistema assume papel de executar um serviço (servidor) – Outra parte pede a execução de um serviço (cliente) – Normalmente muitos clientes para um servidor (compartilha-se/reusa-se o serviço) Request • Parecido com invocar uma função/método/procedimento em linguagem de programação… • Por que não é a mesma coisa? Request Processing request Response client Response server 1 16-Apr-08 Programação de sistemas distribuídos Sockets • Como programar a interação entre clientes e servidores em um sistema distribuído? • Modelos de programação para sistemas distribuídos • Interface de software para comunicação de um programa de usuário (parte de aplicação) com a pilha de protocolos TCP/IP • Biblioteca de chamadas / API • Socket é uma estrutura de dados • Cliente e servidor se comunicam através de um par de sockets – Sockets – Middleware: Remote Procedure Call – Middleware: Orientado a objetos – Middleware: Orientado a components – Middleware: Orientado a serviços – Outros modelos de comunicação http://pages.cpsc.ucalgary.ca/~ijirasek/courses/cpsc441/slides/sockets.ppt#3 Sockets: usando serviços no nível de transporte Sockets • Protocolos no nível de aplicação (ex., HTTP, DNS, SMTP) usam os serviços da camada de transporte • A camada de transporte provê: • Comunicação entre processos • Uma Application Programming Interface (API) provê funções, tipos de dados, estruturas de dados e constantes – Multiplexação/demultiplexação baseado no conceito de portas • Entrega confiável de dados (em ordem): TCP – – – – connection setup (handshake) congestion control flow control Stream (SOCK_STREAM) • Não confiável e sem ordem garantida de datagramas: UDP – Para se usar “best-effort” IP – Datagram (SOCK_DGRAM) – Flexível, simples de usar, padronizado (portabilidade) • A API BSD sockets provê uma abstração similar a um sistema de arquivos para sockets (open, close, read, write) – BSD sockets (originários do BSD 4.1 Unix em 1981) são a forma mais popular (API mais popular) disponível em: FreeBSD, Linux, Windows, Mac OS X, ... • Sockets também podem ser usados para comunicação entre processos no UNIX http://lrcwww.epfl.ch/sc250_2004/lecture_notes/sc250_04_7.pdf Arquitetura com sockets http://lrcwww.epfl.ch/sc250_2004/lecture_notes/sc250_04_7.pdf Arquitetura com sockets Application Program User Space Application Program Socket Layer Socket Layer User Space Kernel Space Socket Layer UDP Kernel Space UDP TCP IP UDP User Space Kernel Space TCP TCP Application Program IP Drivers Drivers network IP Drivers 2 16-Apr-08 SERVER Arquitetura com sockets Application Program Sockets User Space Application Program Create socket User Space bind a port to the socket Socket Layer Kernel Space Socket Layer UDP TCP Kernel Space CLIENT listen for incoming connections Create socket accept an incoming connection connect to server's port read from the connection write to the connection write to the connection read from the connection UDP TCP IP IP Drivers Drivers network internet loop loop close connection Cliente/Servidor com sockets Servidor TCP • Cliente: • sock_init() Create the socket • bind() Register port with the system • listen() Establish client connection • accept() Accept client connection • read/write read/write data • close() shutdown – Inicia o contato com o servidor • (tem que saber o endereço IP ou hostname, e a porta) – Normalmente requisita execução de um serviço • Servidor: – Espera passivamente (em uma certa porta) – Normalmente roda constantemente à espera de clientes Cliente TCP • sock_init () Sockets Create socket SERVER Create socket • connect() Set up connection • write/read write/read data • close() Shutdown int socket(int domain, int type, int protocol) sockfd = socket(PF_INET, SOCK_STREAM, 0); bind a port to the socket int bind(int sockfd, struct sockaddr *server_addr, socklen_t length) bind(sockfd, &server, sizeof(server)); listen for incoming connections int listen( int sockfd, int num_queued_requests) listen( sockfd, 5); accept an incoming connection int accept(int sockfd, struct sockaddr *incoming_address, socklen_t length) newfd = accept(sockfd, &client, sizeof(client)); /* BLOCKS */ read from the connection int read(int sockfd, void * buffer, size_t buffer_size) read(newfd, buffer, sizeof(buffer)); write to the connection int write(int sockfd, void * buffer, size_t buffer_size) write(newfd, buffer, sizeof(buffer)); 3 16-Apr-08 Sockets Sockets: Java (Cliente TCP) (1/2) CLIENT Create socket connect to Server socket int socket(int domain, int type, int protocol) sockfd = socket(PF_INET, SOCK_STREAM, 0); int connect(int sockfd, struct sockaddr *server_address, socklen_t length) connect(sockfd, &server, sizeof(server)); write to the connection int write(int sockfd, void * buffer, size_t buffer_size) write(sockfd, buffer, sizeof(buffer)); read from the connection int read(int sockfd, void * buffer, size_t buffer_size) read(sockfd, buffer, sizeof(buffer)); Sockets: Java (Cliente TCP) (2/2) Sockets: Java (Servidor TCP) (1/2) http://lrcwww.epfl.ch/sc250_2004/lecture_notes/sc250_04_7.pdf Sockets: Java (Servidor TCP) (2/2) Servidor single-threaded x multi-threaded •Vários clientes podem fazer pedidos ao mesmo tempo para o servidor. O servidor então pode: – a) atender um cliente por vez; outros clientes tem que esperar (servidor não concorrente, ou single-threaded) – b) atender vários clientes simultaneamente (servidor concorrente ou multi-threaded) http://lrcwww.epfl.ch/sc250_2004/lecture_notes/sc250_04_7.pdf 4 16-Apr-08 Non-concurrent server Concurrent server sock_init() Sock_init() Create the socket bind() Register port with the system while(1) { listen() accept() read/write } Start the loop. This loop will service each request sequentially Establish client connection Accept client connection read/write data End loop close() Shutdown Create the socket bind() Register port with the system listen() Establish client connection accept() Accept client connection fork() Create a child process which will now communicate with client read/write read/write data in child process exit() exit child process Sockets Sockets • Problemas?? • Ordem dos bytes nos tipos de dados dependem da arquitetura da máquina • host order: – 12 34 56 78 (Motorola) big endian – 78 56 34 12 (Intel) little endian network order: 12 34 56 78 • Funções de conversão: – u_long htonl(u_long hostlong); – u_short htons(u_short hostshort); – u_long ntohl(u_long netlong); – u_short ntohs(u_short netshort); Sockets Protocolo • Baixo nível de abstração... – Principalmente quando o que você queria fazer era pedir para outra máquina executar um serviço... ou simplesmente usar um procedimento remoto – Endereços IPs/DNS/portas – Detectar time-outs – Threading • Como codificar os dados de uma aplicação? – Por exemplo, como enviar uma lista, um array, um struct, um objeto • Definição clássica – Mensagens e regras que determinam ações a serem tomadas de acordo com a recepção das mensagens Cooperation Entity A Entity B • Mais precisamente... – Entidades (de protocolo) cooperando através de um meio de comunicação Communication means • Tem que se criar um “protocolo” sempre... 5 16-Apr-08 Protocolo Protocolo / serviço • Definir/especificar: – Formatos de mensagens • Tanto tipos de dados abstratos quanto a forma de se codificá-los na rede – Comportamento User Q User A A-req Q-req SAP Q • Em que momento cada mensagem pode ser enviada e o que deve ser feito para cada lidar com cada mensagem SAP A A-ind Q-ind QA-Service provider Implementação do protocolo LSI A PE A socket Middleware: Visão 1 User A User C SAP A SAP C PDU exchange Lower Level LSI C • “Software that „sits in the middle‟ of the interacting application parts playing the roles of client and server” [Orfali 97] PE C sockets cliente middleware servidor Service provider Service provider Middleware: Visão 2 Middleware: Visão 2 Software que permite que partes de aplicações distribuídas interajam, independente das tecnologias com as quais elas sejam construídas Mascarando as diferenças em tecnologias de rede, linguagem de programação, sistemas operacionais computer B computer A middleware client server LAN-1 LAN-2 6 16-Apr-08 Middleware: Visão 3 Middleware: Visão 3 • Software que simplifica a tarefa de um desenvolvedor de aplicações provendo uma coleção de “componentes” reusáveis para a construção de aplicações distribuídas • Middleware é mais do que comunicação / interação, ... • Mas ajuda a atingir os objetivos de distribuição computer B computer A middleware object 2 object 1 LAN-1 LAN-2 • Esta é a visão que nós adotamos nesse curso other computers Aplicações distribuídas CORBA Object Model • Aplicações que são uma coleção de „partes‟ geograficamente distribuídas ou “distributíveis” • Quando usamos middleware orientado a objetos essas partes são objetos • Servants (Object implementations) and Object references CORBA object servant client Site A Site B Site C Object reference = reference to object interface Interface specified in IDL Distributed application Exemplo (IDL) IDL -> protocolo module bank { // scope for bank interfaces interface account { // account user interface readonly attribute float balance; // attribute void makeDeposit (in float f); // operation void makeWithdrawal (in float f); // operation }; interface accountManagement { // mgmnt interface exception reject { string reason; } account newAccount (in string name) raises (reject); // operation void deleteAccount (in account a); // operation }; }; • A partir da descrição da interface um protocolo é gerado (assim como sua implementação) client op (args) servant result Object Adapter proxy ORB 7 16-Apr-08 IDL -> para várias linguagens • • • • • • • • • IDL IDL IDL IDL IDL IDL IDL IDL IDL -> -> -> -> -> -> -> -> -> Middleware é mais que interação Java C++ C Ada COBOL Lisp PL/1 Python Smalltalk Application objects Domain objects Realm of OMG standards Object Request Broker Object services Middleware é mais que interação Application objects Common facilities Leitura p/ discussão • P.A. Bernstein. Middleware. Communications of the ACM, Vol. 39, No. 2, February 1996, 86-98. • Tragam esse texto impresso na próxima aula! Domain objects Fundamental services (general purpose) naming, ObjectExamples: Request Broker events, life-cycle, persistent objects, transactions, security, trading, etc. Object services Common facilities Camadas da arquitetura Applications, services Middleware OS: kernel, libraries & servers OS1 Processes, threads, communication, ... OS2 Processes, threads, communication, ... Computer & network hardware Computer & network hardware Node 1 Platform Node 2 Fonte: Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Pearson Education 2005 8