OGSI.NET: Building Grids for the .NET World Glenn Wasson Grid Computing Group University of Virginia Building Large Grids ► Standards are important OGSA / OGSI WS-* Others? ► Grids span many platforms But typically not Windows Enter .NET ► What is .NET? Runtime (CLR) for many languages ►C#, VB, VC++, J#, F#, Perl, Python, Fortran, Cobol, SmallTalk, Pascal, Eiffel, Haskell, Scheme.. Runtimes for many platforms ►Mono runs on Linux, FreeBSD, Solaris, SPARC, PowerPC, StrongArm, and Windows! Technology for many MS products ►ASP.NET, ADO.NET, Web Services .NET’s Relationship to the Grid ► Web Services are fundamental building blocks for Grid Services Easy to build Web Services with MS tools Infrastructure can be used for Grid Services ► Pervasiveness of .NET capable machines Including handhelds Talk Outline ► Introduction of OGSI.NET ► Container Operation ► Message Flow ► Security ► Programming Model ► Application / Research using OGSI.NET ► Future Work OGSI.NET ► OGSI-compliant hosting environment ► Goals: Bring OGSI-compliant grid services to .NET & Windows world Expose MS technology to “the grid” ►e.g. ADO.NET OGSI.NET is… ►A hosting environment Container that holds service instances Dispatcher that routes messages to them ► Libraries OGSI port types, Service base class ► Attribute-based programming model Meta-data added to service logic The OGSI.NET Container OGSI.NET Container ► Container divided into separate Application Domains (AppDom’s) Process-style memory protection w/o process Each service instance has its own AppDom 1 additional AppDom contains Dispatcher ► Dispatcher Knows how to route requests to services OGSI.NET Container ► Each service’s AppDom contains a Grid Service Wrapper (GSW) ► GSW provides Message handlers for serializing/deserializing various message types Routing requests to methods of service’s port types SDE storage/retrieval WSE pipeline Basically encapsulates service logic with helper code OGSI.NET Request Flow ► Client sends request message “to service” Assume SOAP/HTTP for the moment ► IIS receives HTTP request If begins with container prefix, sends it to ISAPI filter ISAPI filter “rewrites” request to dispatch into ASP.NET allows arbitrary service names OGSI.NET Request Flow ► ASP.NET HttpHandler sends request to container process ► Request received by Dispatcher ► Dispatcher routes request into service instance’s AppDom ► Service’s GSW selects appropriate message handler OGSI.NET Request Flow ► Message Handler processes request Runs WSE pipeline (examine msg headers) Deserializes data items ► GSW marshals data items and calls requested method ► Result sent to message handler for serialization Could be return values or exceptions ► Result message follows reverse path OGSI.NET Security ► Web Service Extensions (WSE) pipeline in each AppDom ► Digital Signing and Encryption X509, Kerberos and WindowsIdentity tokens ► WS-SecurityPolicy more later… Programming Grid Services ► Goal: Make it as easy as Web Services ► Difference between a “Grid Service” and “service logic” is meta-data Defines how methods and data are exposed Conditions of exposure (policy) ► Programmers annotate their code C# attributes (can get at runtime) Other languages (need pre-processing) OGSI.NET Attribute-based Programming ► [OGSIPortType] [OGSIPortType(typeof(FactoryPortType))] [OGSIPortType(typeof(NotificationSourcePortType))] [OGSIPortType(typeof(GridServicePortType))] public class FactoryService : GridServiceSkeleton { ► [SoapDocumentMethod] [WebMethod] [SoapDocumentMethod("http://gcg.virginia.edu/samples/ counter#subtract", Binding="CounterSOAPBinding")] [return: XmlElement("returnValue")] public int subtract(int value) { Exposing Service Data ► [SDE] [SDE ("interface", typeof(XmlQualifiedName), false, MutabilityType.constant, false, "1", "unbounded")] public class GridServicePortType : GridServiceSkeleton { Exposing Service Data ► Get and Set handlers for SDEs [SDEGet(“currentTime”)] public ArrayList getTime(OGSIServiceData sde, GridServiceWrapper gsw) { ► Member variables as SDEs public class SomeServicePortType : GridServiceSkeleton { SomeServicePortType() { … } [SDE] public int foo; Specifying Service Policy ► Initially security policy [Integrity(“require”, “body”, “token1, token2”)] [Confidentiality(“reject”, “header1”, “token3”)] [Message(“require”, “age<30”)] [Token(“token1”, “x509v3”, “subject=Bob Smith, CA=UVA”)] [Token(“token2”, “Kerberosv5ST”)] [Token(“token3”, “SecurityContextToken”, “issuer=http://token.virginia.edu/ mytoken”)] public class Service1 : GridServiceSkeleton { ► Other types of policy… Issues in Building an OGSICompliant Container ► Processing GWSDL (de/serialization) Wsdl.exe and xsd.exe don’t correctly process the OGSI v1.0 WSDL and data types Somewhat broken even for WSDL 1.1… C# doesn’t have faults in its function signature ► So you can’t just reflect on the method (attributes needed) ► Inter-op with GT3 OGSI spec compliance not enough Need similar service semantics ► Microsoft’s envisioned usage pattern for tools Grid Services: Heavy or Light? ► Not one service per process Thread pool for the container Let OS sort it out ► Light-weight services Services without full container under them More than one service per AppDom Notification sinks UVa OGSI.NET NAMD Testbed Research with OGSI.NET ► Role of hand-held devices in the grid .NET CF → Grid Services on PocketPC OGSI.NET clients exist, server-side is future ► Policy for Grids What policies might be particular to grids? Survivability policy! Not writing a new policy specification language (i.e. use WS-Policy or other) Future Work ► What is next for OGSI? WSDL 1.2? ► Improve service programming model ► Policy for grid services ► More interesting security work ► Services on the device ► Globus protocols/GGF standards? ► OGSA compliance?