In this paper, we have shown that existing solutions to providing transparent access to network services suffer from a lack of knowledge about the semantics of individual services. The recent advent of Java allowing distribution of portable client code presents an opportunity to migrate certain service functionality onto the client machine. We show that such migration can simplify service implementation and improve the quality of service to users. To this end, we describe our implementation of Smart Clients to show the greater flexibility available from a client-side approach to building scalable services. The Smart Clients API provides a generic interface for accessing network services. Further, the decomposition of the API into individual client interface and director applets allows interchanging of these applets for a variety of services. The Smart Clients API is specialized to provide scalable access to three sample services: telnet, FTP, and Internet chat.
In the future, we will further explore service-specific load balancing techniques for achieving scalability. We also plan to demonstrate how Smart Clients can be used to provide load balancing and fault transparency for services replicated across the wide area. We also plan to implement an interface for transparent access to HTTP servers and a fault-tolerant telnet client. Migration of other code, besides the director, from the server to the client will also be explored.