Sistemas Distribuidos Sesión 3 CORBA: Sistemas de Información Diego Sevilla Ruiz DITEC Facultad de Informática Murcia, 2012 Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, 2012 1 / 23
Índice Servicios de Nombres Servicios de Trading CORBA Naming Service CORBA Trading Service Patrones: Iterator, Federation Bibliografía: Colouris Cap. 9 y 17, Henning & Vinoski, Cap. 18 y 19 Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, 2012 2 / 23
Servicios de Nombres En un sistema distribuido, los nombres se utilizan para identificar todo tipo de recursos: objetos, ficheros Un nombre se resuelve cuando se puede asociar a la información a la que identifica La asociación entre un nombre e información se llama enlace o simplemente asociación Ejemplos: DNS Directorio X.500 (personas correo, número de teléfono, etc.) Servicio de Nombres, Trading Lightweight Directory Access Protocol (LDAP) Globus MDS (Metacomputing Directory Service) Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, 2012 3 / 23
Servicios de Nombres (ii) Servicio de Nombres: Almacena contextos, esto es, conjuntos de asociaciones entre nombres y entidades nombradas La principal operación es la resolución de nombres También otras operaciones, como añadir nuevas asociaciones, eliminar, crear contextos, etc. Requisitos y características: Gestionar un número arbitrariamente grande de asociaciones Tiempo de vida elevado Alta disponibilidad (recurso crítico) Aislamiento de fallos Consistencia de caché no tan crítica (pocas actualizaciones) Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, 2012 4 / 23
Servicios de Nombres (ii) Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, 2012 5 / 23
Servicios de Trading Los objetos no se buscan por nombre, sino por un conjunto de propiedades Nombres Páginas Blancas Trading Páginas Amarillas Un Trader guarda objetos junto con sus propiedades La búsqueda no es por nombre, sino por tipo y características P. ej. Imaginemos que describimos las impresoras en un servicio de trading A cada impresora se le asocian características (color, ppm, resolución, ubicación) Un cliente especifica: impresora, ubicación==xxx, color=si Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, 2012 6 / 23
Servicio de Nombres de CORBA (CORBA Naming Service) k a r o i j q p Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, 2012 7 / 23
Servicio de Nombres de CORBA Un nombre: module CosNaming { typedef string Istring; struct NameComponent { Istring id; Istring kind; }; typedef sequence<namecomponent> Name;... }; kind normalmente se deja vacío No hay separador estándar Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, 2012 8 / 23
CosNaming module CosNaming { interface NamingContext { void bind(in Name n, in Object obj) raises(notfound, CannotProceed, InvalidName, AlreadyBound); void rebind(in Name n, in Object obj) raises(notfound, CannotProceed, InvalidName); void bind_context(in Name n, in NamingContext nc) raises(notfound, CannotProceed, InvalidName, AlreadyBound); void rebind_context(in Name n, in NamingContext nc) raises(notfound, CannotProceed, InvalidName); Object resolve (in Name n) raises(notfound, CannotProceed, InvalidName); void unbind(in Name n) raises(notfound, CannotProceed, InvalidName); NamingContext new_context(); NamingContext bind_new_context(in Name n) raises(notfound, AlreadyBound, CannotProceed, InvalidName); void destroy() raises(notempty); void list(in unsigned long how_many, out BindingList bl, out BindingIterator bi); };... }; Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, 2012 9 / 23
Servicio de Nombres de CORBA Permite obtener y registrar referencias relativas a un contexto Actúa como factoría de contextos: new_context y bind_new_context También destrucción de contextos: destroy + unbind Las operaciones se aplican recursivamente sobre los elementos del nombre (Name): Resolver a/b/c sobre el contexto raíz es equivalente a resolver b/c sobre el contexto a Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, 2012 10 / 23
Servicio de Nombres de CORBA Las aplicaciones tienen que buscar el contexto inicial CORBA::ORB_var orb = CORBA::ORB_init(...); CORBA::Object_var o = orb->resolve_initial_references("nameservice"); assert(!corba::is_nil( o )); CosNaming::NamingContext_var contextoinicial = CosNaming::NamingContext::_narrow( o ); Se puede especificar el contexto inicial con el parámetro -ORBInitRef:./aplicación -ORBInitRef NameService=<ior> Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, 2012 11 / 23
Servicio de Nombres de CORBA IORs como URLs corbaloc corbaname Formato corbaloc corbaloc::máquina:3000/nameservice NameService es el ObjectID Identifica a cualquier objeto El servidor de nombres se puede configurar para que se instale en ese puerto, y utiliza ese identificador de objeto Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, 2012 12 / 23
Servicio de Nombres de CORBA Formato corbaname: Especifica el nombre de un objeto almacenado en el servicio de nombres El formato es parecido al corbaloc, salvo que añade el nombre del objeto buscado: corbaname::máquina:3000/nameservice#a/b/c Usados sólo para referencias iniciales, no como mecanismo general P. ej. -ORBInitRef Para lanzar el Servicio de Nombres en ORBacus: nameserv -OAport 3000 (la opción -i muestra el IOR (aunque forzando el puerto se puede usar corbaloc) Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, 2012 13 / 23
Servicio de Nombres de CORBA CosNamning::Name name; name.length(1); name[0].id = CORBA::string_dup("app1"); CosNaming::NamingContext_var app1 = contextoinicial->bind_new_context( name ); name[0].id = CORBA::string_dup("dispositivos"); CosNaming::NamingContext_var app1_disp = app1->bind_new_context( name ); CORBA::Object_var obj = //... objeto a incluir en el NS name[0].id = CORBA::string_dup("disp1"); app1_disp->bind(name, obj); // El objeto es app1/dispositivos/disp1 Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, 2012 14 / 23
Servicio de Nombres de CORBA CosNamning::Name name; name.length(3); name[0].id = CORBA::string_dup("app1"); name[1].id = CORBA::string_dup("dispositivos"); name[2].id = CORBA::string_dup("disp1"); CORBA::Object_var o; try { o = contextoinicial->resolve( name ); } catch (CosNaming::NamingContext::NotFound &) { cerr << "No se encuentra el objeto" << endl; throw 0; } Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, 2012 15 / 23
Servicio de Nombres de CORBA Iterador module CosNaming { enum BindingType {nobject, ncontext}; struct Binding { Name binding_name; BindingType binding_type; }; typedef sequence<binding> BindingList; interface BindingIterator; interface NamingContext { void list(in unsigned long how_many, out BindingList bl, out BindingIterator bi); }; interface BindingIterator { boolean next_one(out Binding b); boolean next_n(in unsigned long how_many, out BindingList bl); void destroy(); }; }; Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, 2012 16 / 23
Servicio de Nombres de CORBA Iterador Características interesantes: Se ofrecen funciones que permiten parametrizar el número de elementos devueltos (how_many) La primera llamada devuelve un primer grupo y un iterador Incluso ese primer grupo puede incluir a todos los nombres Una sola llamada remota Las llamadas next_n devuelven how_many elementos Functión destroy Manejo de memoria en el servidor de objetos BindingIterator? Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, 2012 17 / 23
Servicio de Nombres de CORBA Federation Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, 2012 18 / 23
Servicio de Nombres de CORBA Federation Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, 2012 19 / 23
Servicio de Nombres de CORBA Federation Opción 1: Espacio de nombres uniforme Buena tolerancia a fallos Difícil de administrar Opción 2: Más fácil de administrar Relativamente tolerante a fallos Cada contexto inicial tiene un enlace al padre Espacio de nombres no uniforme Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, 2012 20 / 23
Servicio de nombres de CORBA Conclusión El uso de contextos como objetos hace que se puedan implementar patrones como el de Federation Escalabilidad El patrón de iteración permite tratar conjuntos muy grandes de objetos. Aunque hay otras posibilidades Condiciones: ItemList find_items_by_condition( in unsigned long num_items, in Condition cond); El objeto condición restringe la búsqueda Más funcionalidad al servidor Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, 2012 21 / 23
CORBA Trading Service Un trader almacena ofertas de servicio Almacenan la descripción del servicio y una referencia al objeto que ofrece el servicio El que pone un servicio en un trader se llama un exportador El objeto que ofrece es el servicio se llama proveedor del servicio La descripción de un servicio incluye una serie de pares nombre, valor llamadas propiedades El acto de buscar un servicio por unas características se llama importar Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, 2012 22 / 23
CORBA Trading Service Interesante: Políticas de federación en una importación search_card Indica el número máximo de ofertas a buscar match_card Número de ofertas que se ordenan return_card Indica el número máximo de ofertas retornadas como máximo follow_policy Indica la política de seguimiento de traders federados: local_only, if_no_local, always hop_count Número máximo de veces que una consulta se reenvía a otro servidor... Diego Sevilla Ruiz (DITEC Facultad de Informática) Sistemas Distribuidos Murcia, 2012 23 / 23