You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Eduardo Freitas 9665db2f39 Adding licence notice in each file 1 year ago
application Adding licence notice in each file 1 year ago
middleware Adding licence notice in each file 1 year ago
.gitignore git wont get vim's swp nor emacs' archives 1 year ago
LICENSE client reqest handler and start of server rh 1 year ago readme 1 year ago

fdRPC Middleware


This is supposed to be a simple RPC middleware written in GoLang for my "Distributed Systems" class.


The middleware will (maybe) respect design patterns and implement infrastructure, distribution and common services layers. There will be a client request handler, server request handler, requestor and marshaller. This is the "application neutral" part, where the middleware will not change acoording to the application/remote object. Then there is the client proxy and invoker, that relates directly to the application, wether its the client or remote object.


The application will be a simple "weather" app. Previously, I made a weather application using OpenWeatherMap, implemented in GoLang's RPC. But performing an application performance evaluation was very difficult since the time measurament depended on the request and reply from openweathermaps' service. Since the class goal is to develop a middleware and compare its performance to existing ones, the application should depend only on the middleware, for simplicity's sake. So, in this scenario, there will be no real weather. The application will generate a fake struct containing some weather data and send to the client. This will be done so that the implementation can be done locally, and performance evaluation can evaluate only the middleware performance.

Code Structure

  1. Middleware

    1. Infrastructure

      1. Client Request Handler (application neutral)

      2. Server Request Handler (application neutral)

    2. Distribution

      1. Client Proxy

      2. Requestor (application neutral)

      3. Marshaller (application neutral)

      4. Invoker

    3. Common Services

      1. Naming Service

  2. Application

    1. Weather

      1. Server

      2. Client

General todo List

DONE Client Request Handler DONE Server Request Handler DONE Requestor DONE Marshaler DONE Weather Implementation DONE Invoker (AS) DONE Client Proxy (AS) DONE Naming Service DONE NamingProxy DONE Application Server fdRPC DONE Application Server GoLang RPC DONE Application Client fdRPC DONE Application Client GoLang RPC
DONE Performance Evaluation
DONE Presentation

Performance Evaluation


200 requests
300 requests
15.228220265s -> 50ms delay/request 228,22026ms
500 requests
25.377409998s -> 50ms delay/request 377,40999ms
700 requests
35.535756s -> 50ms delay/request 535,75ms
1000 requests
50.765702959s -> 50ms delay/request 765,70295ms


200 requests
300 requests
500 requests
700 requests
1000 requests