The new client server model in qudt for domian tools - adamnagel/qudt-for-domain-tools GitHub Wiki

Background

Qudt for domain tools is a unit system which provides interface in multi- programming language to those projects want to unify the unit in different domain tools(like modelica, openMdao). To support the varied programming language used in client side, one of the challenge is to write and maintain several implementations of client interface. Thus, we urgently need to find a effective way to let our client interface become more maintainable. This project aims to create a server-side warp to simplify the communication layer. Motivation

  • Greatly improving the maintainability of the client interface
  • Better performance in those queries between server and client side.

Detail

In current model, the Jena-server is deployed at server side and respond those queries come from each client program. Every time when the client want to get the unit information, it will pack a query written in sparql(one kind of query language can be recognized by Jena-server) and parse the json formatted re- sult from server side, which made the client interface much more complicated than we expected. Since the client interface has several version implemented in different programming language, the primary task to reduce the complexity of

client interface. In this project, the main idea is to add a intermediate protocol communication layer instead of the query strategy used in current model. Since we found the communication layer is language independent, it is not hard to define a meta language to describe the unit data structure, which means we can write the pro- tocol once and automatically generate the code of data definition in all version of client interface. Fortunately, there is already a wonderful tool called Protocol Buffers, which can help us to create the protocol layer. And our task in this project is to move the packing and parsing part to the server side and write a new server warp. The tentative idea is to combine the existed python code and Protocol Buffers to create the server warp. Schedule

  • Week 1-2: Server warp.
  • Week 3-4: Protocol layer.
  • Week 5-6: c++ client interface.
  • Week 7: Performance test.
  • Week 8: The Test case in server side.