Comparison of Distributed Object Architectures Goal of the project The goal of this project is to compare various distributed object middleware . Specifically you will compare Java RMI and CORBA (Sun’s Java IDL). These two distributed computing middleware will be compared from a programmer’s standpoint as well as an architectural standpoint. Thus you will need to compare the performance obtained in each case (quantitative comparison), as well as make a qualitative comparison. While discussing the quantitative results obtained, back your conclusions with data to support your conclusions. Try to answer why you feel technique A is faster than technique B etc. In the qualitative comparison, you will address architectural issues. Examples of these include support for multiple inheritance, underlying protocol used, lookup technique used by the client to obtain a server object reference, registry service, whether distributed garbage collection is performed, whether object serialization is supported, platform independence, language independence, exception handling, locating and activating a remote object etc. In addition, you will compare these middleware, based on your observations, in relation to the ease of understanding the technology; time required for development, difficulties encountered, stability of code etc. This list is not meant to be exhaustive. Be sure to include any pertinent conclusions based on your experiences. Description of the Client-server interaction You will make a connection-oriented (TCP), concurrent “database” server. Your server needs to spawn a thread to service each client request. The client must be able to READ and UPDATE data stored at the server. For the READ, since we don’t care about real data, you can create a data file on the server machine with data as: 1 2 John Adams Mary Adams 123 St. Johns Blvd, Jacksonville 32224 232 St. Johns Blvd, Jacksonville 32224 Provide a simple menu to the user, e.g. 1. 2. 3. 4. READ UPDATE LIST QUIT If the user chooses to READ, then prompt the user for the ID number. If the user chooses to UPDATE, prompt the user to enter a string that will be sent to the server. Your code must be robust and handle any incorrect user input. During the READ command, the client will transmit the user supplied ID number to the server as an argument. The server will perform a search of file, and if the ID number matches the ID number of a particular string, then the server returns that string to the client. You can implement a search algorithm (e.g. sequential search, or binary search) of your choice. However, you must be consistent in that the same search algorithm must be used for both projects. For the UPDATE, the client will send a string to the server and the server will update a file. Since there can be multiple clients querying the server at the same time with each client being serviced by a different thread on the server, the server must ensure concurrency control on the data file while it is being updated. Thus only one thread must gain access to the data file at a time. For the LIST command, the server will send the clients all the records in its data file. Be sure to terminate each thread cleanly after each client request has been serviced. Project 1 Implement the project as described using Java RMI. Points: 45 Project 2 Implement the project as described using CORBA (Java IDL). Points: 45 In each project, be sure to measure the mean response time for the server to service the client request. Measure the response time separately for READ and LIST. Spawn multiple clients that access the server at the same time and determine the mean response time. Plot two graphs (one each for READ and LIST) that compare the mean response time with the number of clients accessing the server at the same time (determine the mean response time obtained with 1 client, 5 clients, 10 clients, 20 clients, 50 clients, and 100 clients). At the end of the two projects you should have four such graphs. Condense the two graphs for READ into one so that the reviewer can study the performance characteristics of two paradigms. Do likewise for the LIST graphs. Note: The READ graph will be for light load and the LIST graph will for heavy load. Label the READ graph as READ – LIGHT LOAD and the LIST graph as LIST – HEAVY LOAD. Ensure that the LIST data is approximately 1 MB in size. Next use the data from the HEAVY LOAD graph to plot the throughput for each of the middleware technologies where throughput is defined to be the number of clients serviced per second. Hence you will have one graph for the throughput, which will depict the throughput achieved by the two technologies. Your graph will have the “throughput” on the y-axis and the “offered load” on the x-axis. Additional study: Here we will document the throughput achieved by the server in terms of # of bytes delivered/second. To graph this, you need to only have one client make requests in the order of the following data sizes: 1MB, 10 MB, 20MB, 30 MB, 50 MB, and 50 MB. Use the LIST command to do this. Again determine the response time in each case, then plot the throughout versus offered load graph. Note: In all there should be 4 graphs in your paper: LIGHT LOAD, HEAVY LOAD, THROUGHPUT (# of clients serviced per second), and THROUGHPUT (# of bytes delivered per second). Your code must be well documented with adequate comments, suitable use of variable names, and follow good programming practices. You will provide a demo at the end of each project to the instructor. Have your server print out diagnostic messages about what it is doing (e.g. “spawning a child thread”, “accepting a new connection”, etc). Your code will be expected to deal with invalid user commands. You will turn in binaries and source code of your programs at the time of the demo. You should have measured the performance parameters prior to the demo. Have in hand the graphs showing the performance measures obtained and give this to the instructor at the time of the demo. Paper Points: 50 The paper must be well written and must have the sections listed below. It is good idea to keep writing your paper as each project ends, rather than waiting till the end of the semester. That way your experiences with the technology will still be fresh in your mind. Abstract Describe what your project is about: what goals were (i.e. comparison of various commercially available distributed application development paradigms); what experiments were conducted. The abstract must be concise. Try not to exceed 150 words. 1.0 Introduction First describe your project in greater depth, i.e. explain your goals, and include an explanation of the client-server set-up. 2.0 Distributed Application Development Paradigms You will describe each of the two paradigms in this section (section 2.1 RMI and 2.2 CORBA). Be sure to provide references when you refer to texts, papers, and websites etc. to describe these paradigms. 3.0 Results and Comparisons Provide your test-bed information in Section 3.1. Then describe the studies carried out/research methodology in Section 3.2. Then provide the results by referring the reader to your graph(s) in Section 3.3. Explain your results. Then create a table in Section 3.4 where you compare Java RMI and CORBA (Java IDL) middleware technologies qualitatively with reference to the issues pointed out above. We are interested in services that CORBA offers over RMI and vice-versa. 4.0 Conclusions Provide your conclusions, insights that you have gained in this section. E.g. which technology shows better performance and why, which technology is easier to learn, which technology has a richer set of services to offer, which technology is better used in which circumstance (e.g. in legacy systems CORBA may be preferred etc). References Use the following IEEE standard as an example when listing references: [1] Ahuja, Sanjay P., Mani, S., Empirical Performance Analysis of HPC Benchmarks Across Variations of Cloud Computing, International Journal of Cloud Applications and Computing (IJCAC), Volume 3, No. 1, pp. 13 – 26, 2013.