Discovery

protoSDC discovery defines a discovery protocol to locate gRPC services in a protoSDC-featured IT network. It is based on WS-Discovery to the extent that it functionally covers aspects like probe filtering, endpoint resolution, and a decentralized Ad hoc Mode as well as a centralized Managed Mode.

However, protoSDC discovery is not based on talkative XML messages but on protobuf-encoded messages. Moreover, it comes with a reduced set of message types: Hello, Bye, SearchRequest, SearchResponse.

See Definitions for more information on used terms.

Address information

In Ad hoc Mode, protoSDC discovery leverages the following address information to exchange messages:

  • Port: 6464 [IANA]

  • IPv4 multicast address: 239.255.255.250

  • IPv6 multicast address: FF02::C (link-local scope)

Action identifiers

Although protobuf messages are dispatched by means of the OneOf directive, protoSDC discovery defines the following action identifiers to facilitate debugging and additional message validation.

  • Hello: org.somda.protosdc.discovery.action.Hello

  • Bye: org.somda.protosdc.discovery.action.Bye

  • SearchRequest: org.somda.protosdc.discovery.action.SearchRequest

  • SearchResponse: org.somda.protosdc.discovery.action.SearchResponse

Implicit discovery in Ad hoc Mode

In Ad hoc Mode, a Service Provider shall send a Hello when it joins the network, when its Endpoint information changes, or when its Metadata changes. A Service Consumer that is interested in the Service Provider may send a SearchRequest if the Hello does not contain a physical address.

Note

A physical address can be missing from a Hello, e.g. if the Service Provider multicasts to multiple network adapters.

A Service Provider shall not send a Bye as the Ad hoc Mode uses an unsecured channel, and most Service Consumers would ignore that message anyway.

sequenceDiagram Service Provider->>Service Consumer: Hello opt if physical addresses are missing Service Consumer->>Service Provider: SearchRequest Service Provider->>Service Consumer: SearchResponse end

Explicit discovery in Ad hoc Mode

In Ad hoc Mode, a Service Consumer may send a SearchRequest to search for Service Providers.

sequenceDiagram Service Consumer->>Service Provider: SearchRequest Service Provider->>Service Consumer: SearchResponse

Implicit discovery in Managed Mode

In Managed Mode, a Service Consumer may use the ConsumerProxyService of a Discovery Proxy to subscribe to Hello and Bye. The Discovery Proxy shall respond with a stream of HelloAndByeResponse messages.

Note

  • ConsumerProxyService is a gRPC service

  • ProxySubscribeHelloAndByeRequest requests to receive a stream of ProxyHelloAndByeResponse messages

  • ProxyHelloAndByeResponse is used by the ConsumerProxyService to convey Hello and Bye

sequenceDiagram Service Consumer->>Discovery Proxy: ConsumerProxyService.SubscribeHelloAndBye(ProxySubscribeHelloAndByeRequest) Discovery Proxy-->>Service Consumer: ProxySubscribeHelloAndByeResponse Discovery Proxy-->>Service Consumer: ProxySubscribeHelloAndByeResponse Discovery Proxy-->>Service Consumer: ProxySubscribeHelloAndByeResponse

Explicit discovery in Managed Mode

In Managed Mode, a Service Consumer may use the ConsumerProxyService of a Discovery Proxy to search for Service Providers matching specific Scopes or Endpoint identifier.

Note

  • ConsumerProxyService is a gRPC service

  • ProxySearchRequest and ProxySearchResponse are messages used by the Discovery Proxy to convey search request and response data

sequenceDiagram Service Consumer->>+Discovery Proxy: ConsumerProxyService.Search(ProxySearchRequest) Discovery Proxy-->>-Service Consumer: ProxySearchResponse

Notification of Hello and Bye in Managed Mode

In Managed Mode, the Service Provider shall use the ProviderProxyService of a Discovery Proxy to establish a stream of NotifyHelloAndByeRequest messages.

Note

  • ProviderProxyService is a gRPC service

  • ProxyNotifyHelloAndByeRequest is used by the ProviderProxyService to publish Hello and Bye

sequenceDiagram Service Provider->>+Discovery Proxy: ProviderProxyService.NotifyHelloAndBye(ProxyNotifyHelloAndByeRequest) Service Provider->>+Discovery Proxy: ProviderProxyService.NotifyHelloAndBye(ProxyNotifyHelloAndByeRequest) Service Provider->>+Discovery Proxy: ProviderProxyService.NotifyHelloAndBye(ProxyNotifyHelloAndByeRequest)