cesappd service provides host interface that can be accessed by various clients, first of all: Dogus.
cesappd uses gRPC generated from Protocol Buffer to provide interfaces for other applications. gRPC is characterized by its good performance and low communication overhead.
The gRPC services are defined using
proto files and source code is generated from them using the
protoc protobuf compiler. generated. The generated source code contains the basic structures for the implementation of the client and server applications, namely Services and Services.
Client and server communicate in a binary format that cannot be read well by humans. Supporting clients such as grpcox can be used to translate messages into JSON format.
A gRPC server can provide different services, each described separately in the
proto files. The different services are registered with the gRPC server and are thus available under the same endpoint.
The interfaces, which are defined by means of
.proto files, are located, together with the generated source code in a separate package of
cesappd as a library and thus get access to the generated client code to communicate with the server to be able to communicate.
This procedure has the advantage that with each change to client or server code no new release for a (possibly additional) cesappd protobuf repository must be created. As disadvantage results above all that it is more inconvenient to use further programming languages for the client implementation. However, it is not difficult to outsource the interface definitions to an extra cesappd protobuf repository in the future if a different language is used than Golang.
The gRPC server started by
cesappd provides endpoints that can be consumed by clients. For each service, a separate client and server implementation is available. Thus, the server can contain multiple services that can be targeted by the clients.
The following diagram roughly illustrates the client-server structure.
cesappd provides various services for logging and monitoring, for example. These services are each accessed by other client applications in this example. If a client wants to access more than one services, the respective client must be used.