Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support service discovery #791

Open
minwoox opened this issue Jan 20, 2023 · 0 comments
Open

Support service discovery #791

minwoox opened this issue Jan 20, 2023 · 0 comments

Comments

@minwoox
Copy link
Member

minwoox commented Jan 20, 2023

We can use Central Dogma servers as the service registry to store the dynamically changed information of services and fetch the information for service discovery.
Instead of defining our own protocol to communicate with the clients, we can use the De facto standard xDS REST and gRPC protocol so that Central Dogma will be integrated well with other discovery clients.

If we use the protocol, Central Dogma will play the role of a control plane so that services push their information to Central Dogma.

How will a service register its information?

  • Currently, the XDS protocol does not define the APIs for registering and deregistering so we should define them.
  • As XDS protocol supports both REST and gRPC, we need to support both eventually.
    • However, if we use gRPC bidi-streaming, the client would get a notification right away when the source is changed so I prefer to implement gRPC first.

How will the information is stored in Central Dogma?

  • The information will be stored in the repository in Central Dogma with the format of Protobuf IDL that is defined by Envoy.
  • Because the throughput of write per second of the current repository is too low, we need alternatives;
    • Merging the requests that are received within a certain period of time and committing them at once.
    • Implementing another repository that fastly commits with a lower consistency level.

Note:

  • We are not going to remove the information of a service when the connection is disconnected unless the service deregisters itself explicitly via the API.
    • The CSLB client will be in charge of not sending a request to the unhealthy server using the health check.
    • We might want to consider adding a feature that the control plane deregisters a service when the control plane gets a lot of complaints from the CSLB client.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant