1 Abstract The role of brokers in client-server systems is to accommodate flexible, open, heterogeneous sys- tem design and to facilitate fault tolerance and improved performance through load balancing. Some architectural design decisions, such as broker distribution and server replication, strongly affect the system performance. The paper presents alternative client-broker-server architectures and compares their performance by using a combination of measurements and simulation. Broker distribution is found to reduce some of the overheads due to the introduction of brokers into client-server systems, and results in a system that has performance characteristics comparable to that of a pure client-server sys- tem. It is shown that in a client-server-broker sys- tem employing stateful server replication and using the unicast group communication mecha- nism for server-state consistency, there is a criti- cal message size beyond which the system incurs degradation in performance. 1 Introduction Many of today’s application software systems tend to be distributed and very complex. Object- oriented (OO) technology helps developers cope with the complexity of building such systems as it provides distributed computing with benefits such as encapsulation, reuse, portability, and extensibility. The use of OO technology in dis- tributed systems is very natural due to their inher- ent decentralization. In distributed OO environments, objects encapsulate an internal state and make it accessible through a well- defined interface. Client applications may import an interface, bind to a remote instance of it, and issue remote object invocations. Building complex OO distributed software by using a set of decoupled and interoperating components has the potential to produce software that is flexible, distributable, scalable easier to maintain, and readily changeable [1]. A server can be considered as an object since it encapsulates some data struc- tures and allows the manipulation of the encapsu- lated data through requests from client application, which are like method invocations. In client/server (CS) systems, a client and server form two indepen- dent components. A client needing a service from a particular server sends a request to the appropriate server and blocks until the response to its request arrives. Upon receiving the client request, the server performs the requested service and returns the result to the client. For small software systems, the CS computational model works fine since clients access only a small set of known services or servers [2]. However, as systems grow and evolve, individ- ual clients need to be constantly updated to reflect routine enhancements, substitutions, relocation as well as the addition of new servers and services. Moreover, accessing servers and services becomes increasingly difficult in heterogeneous networks with clients and servers running on different types of platforms. A solution to this problem is to have the interaction between clients and servers further decoupled by introducing a broker component. Servers register themselves with the broker and make their services available through well defined interfaces. Clients access services provided by a server by issuing a request to server via the broker component. The cli- ent does this by invoking the appropriate method of the server object just as it would any C++ object, which results in a request being sent to the broker, request that contains the appropriate information, such as the particular service or type of service A Performance Study of Client-Broker-Server Systems Omotunde Adebayo, John Neilson, Dorina Petriu Department of Systems and Computer Engineering Carleton University Ottawa, CANADA K1S 5B6 email: adebayo@sce.carleton.ca, neilson@scs.carleton.ca, petriu@sce.carleton.ca