In addition, if DSProxy native Publish/Subscribe is to be used, the client must be
modified to engage in the polling cycle described earlier. This typically involves
wrapping the request-statement within the code in a loop structure. Finally, clients
must handle null-responses, which occur when the client-side DSProxy being polled
do not offer any new notifications. The two latter modifications are usually quick and
easy to implement and do not include touching the actual business logic, but they do
require the client to be recompiled.
The Web services on the other hand, require no modifications. Still,
considerations should be made when selecting which Web services to
Publish/Subscribe-enable through the DSProxy overlay network. As a DSProxy
determines whether or not the information is updated based on the hash produced,
constantly changing information will produce ever changing hashes, thus, also a
constant flow of notifications. For instance, responses that contain fine-grained time-
stamps would always produce new notifications, even though the information may
otherwise be unchanged.
Although the intra-machine polling mechanism utilized by DSProxys to retrieve
updated information from COTS Web services does not generate any network traffic,
it does require server resources such as CPU and memory. While a typical Web
service invocation only requires a small amount of resources, it may ultimately limit
the number of Web service methods and the polling frequency that can be used. In
order to establish this limit, an experiment was conducted using a setup similar to the
one presented in Figure 1, with one client machine and one server machine, both
running one DSProxy instance. Simple “Hello world”-like services were developed
using C# and ASP.NET 3.5, which returned strings consisting of 100 random
characters for each invocation. This made the services produce new responses for
every invocation, which in turn lead to notifications being produced for every poll, in
order to produce a “worst-case” scenario.
The services were deployed inside a Microsoft Internet Information Services (IIS)
5.1 Web Server instance running on the server. The server machine was equipped
with an Intel Pentium 4 dual core 2.6 GHz CPU, 1 GB RAM running MS Windows
XP Pro SP3. A standard Web service client application capable of invoking the
services in the normal Request/Response-fashion were developed using .NET 3.5.
The client application ran on the client machine, and by modifying the Web
service invocation URL, the invocation requests were relayed through the two
DSProxy instances and delivered to the Web service. The URL was also modified to
instruct the DSProxy overlay network to initiate Publish/Subscribe, and the server
DSProxy would start one polling-cycle for each service subscribed to (running as
parallel threads). Because the client application ran on a separate machine, all CPU
load on the server was associated with the server DSProxy repeatedly polling the
services and notifying the client DSProxy (in addition to some load associated with
the actual Web services and the IIS).
The server DSProxy was configured to poll each service once every second, and
the number of services subscribed to could be controlled from the client application.
The CPU utilizations were measured using MS PerfMon, and averages were
monitored for 60 seconds during each run. Figure 5 shows the varying average CPU
loads when subscribing to 5, 10, 15 and 20 Web services. As seen from the graph, the
performance scaled close to linearly, ranging from 0.755 % to 4.469 % CPU
132