10.07.2015 Views

An Architecture for Dynamic Allocation of Compute Cluster Bandwidth

An Architecture for Dynamic Allocation of Compute Cluster Bandwidth

An Architecture for Dynamic Allocation of Compute Cluster Bandwidth

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

6created from the WSDL which makes client interaction withthe service as easy as making a local function call. Morein<strong>for</strong>mation on WS C and WSRF can be found in the WS CCore web pages [36] and in “The <strong>An</strong>atomy <strong>of</strong> the Grid:Enabling Scalable Virtual Organizations,” [37].E. The Embedded ServiceWe identify the following list <strong>of</strong> internal state the frontendservice must expose to the controller:• Current client connections: The number <strong>of</strong> clientscurrently requesting or per<strong>for</strong>ming transfers.• Max client connections: The maximum number <strong>of</strong> clientsallowed to connect simultaneously.• Available Backend Services: The number <strong>of</strong> backendservices ready <strong>for</strong> use.• Approximate load <strong>of</strong> each backend: a percentageassociated with each backend that approximates how hard it isworking.We defined these states in a WSRF compliant WSDLdocument as resource properties. The WSDL documentsserves as an interface definition <strong>for</strong> both clients and services.We use it to generate stubs <strong>for</strong> the controller programs andalso to create a service <strong>for</strong> exposing these resource properties.Because it is important <strong>for</strong> the service to be light weight andhave very low overhead interactions with the frontend servicewe used WS C Core.WS C Core is a light weight hosting environment that canbe embedded into the GridFTP frontend service. WS C Corecompiles to native code allowing it to be linked into existingapplications. From the WSDL we generate C bindings whichhandle the conversion <strong>of</strong> SOAP messages into C datastructures. Using the bindings we create an embeddableservice that observes the internal state <strong>of</strong> the GridFTP serverand sets the resource properties appropriately as the statechanges. The service is linked into a shared library which isloaded at runtime in the presence <strong>of</strong> an option. If loaded, theWS service starts providing in<strong>for</strong>mation; if not loaded, theGridFTP server is left entirely unaffected.F. ControllerThe controller is a client to the embedded service. ViaWSRF, it gets notifications from the frontend service whenany <strong>of</strong> the resource properties defined above change. Stubs aregenerated from the WSDL that make each notification asimple function call. When a client connects or disconnects, orwhen a backend is added or removed from the transfer pool, orwhen the frontend service’s exposed state otherwise changes,the controller is notified asynchronously. It then uses thisin<strong>for</strong>mation to decide when to start new backend serviceinstances and when to kill existing ones.The controller also observes the amount <strong>of</strong> time that anybackend is idle and may, depending on the policy that itimplements, decide to kill the backend service so that theassociated node can be returned to the compute resource pool.The GridFTP server is fault tolerant and can handleunexpected backend service termination. Termination <strong>of</strong> onebackend has no effect on any other, nor does it affect thefrontend service. However, it may leave a client that requesteda transfer with an error. Such errors are not a problem sinceGridFTP transfers can be restarted in such a way that little dataneeds retransmission.The controller uses GRAM to start up new backend serviceinstances via the LRM. GRAM is used because it is aconvenient and easy to use interface to many different LRMs.The ease <strong>of</strong> use is important <strong>for</strong> enabling the creation <strong>of</strong> sitespecific policies. With GRAM starting up a new backend is asimple function call available in many programminglanguages. Additionally GRAM is a network protocol whichallows the controller to run on an entirely separate system fromthat <strong>of</strong> the LRM. No CPU cycles or other resources arediverted from the frontend and thus we can expect that theper<strong>for</strong>mance <strong>of</strong> the transfer service will be minimally affected.Figure 3: Event SequenceFigure 3 shows the event sequence <strong>of</strong> our architecture. Aclient connects to the frontend service and requests a transfer(line 1). If an unused backend service instance has alreadybeen registered with the frontend service it is used, if not thefrontend waits <strong>for</strong> one to be registered. The controller receivesa WSRF notification when the client connects telling it that thestate <strong>of</strong> the frontend service has changed (line 2). Thecontroller may then use the GRAM interface to the LRM tostart up a new instance <strong>of</strong> a backend service (line 3). Thenewly requested backend service will not start immediately,and the time it takes to start will vary with contention in theLRM’s wait queue. When it does start, it registers itself withthe frontend service (line 5). The frontend service can now useit and the clients can begin transferring data (line 6).The decision as to when to start up a new backend serviceinstance is entirely up to the logic <strong>of</strong> the controller. In somecases the controller will wait until a client request prompts theneed <strong>for</strong> a new backend. In other cases it may start a newinstance based on a prediction algorithm guessing that atransfer request will be made in the near future. Its modularplacement in the architecture allows it to be noninvasive to the

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!