DAOS-19644 cart: Add multiprovider design document - #19092
frostedcmos wants to merge 3 commits into
Conversation
- Add multiprovider design doc Signed-off-by: Alexander A Oganezov <alexander.oganezov@hpe.com>
|
Ticket title is 'Add multi-provider design document to github in .md format' |
|
You should move that doc to |
/design is the agreed location to put these, not under /docs. we don't want the designs to show up on the docs website (even if they aren't linked to the navigation bar, they would still be there...) |
|
|
||
| ## 1. Summary | ||
|
|
||
| DAOS and CaRT currently assume a single fabric provider per deployment path. That limitation makes it difficult to run one DAOS deployment across multiple network fabrics or to support separate client populations that must reach the same servers through different providers. |
There was a problem hiding this comment.
"per deployment path" is confusing, this sounds like there may be multiple "deployment paths" within a single DAOS system? I believe that is impossible, and I would reword this as "per DAOS system".
And "difficult to run one DAOS deployment" should probably be "impossible to access one DAOS system"?
|
|
||
| This design adds initial multi-provider support with one **primary** provider and one **secondary** provider. The primary provider remains the normal server execution and server-to-server communication path. The secondary provider is introduced as a client ingress path: requests received on the secondary provider are forwarded to the appropriate primary execution target inside the engine. | ||
|
|
||
| The result is a single DAOS deployment that can serve multiple client populations across different providers or network paths without requiring a separate DAOS instance per fabric. |
There was a problem hiding this comment.
DAOS deployment -> DAOS system
i would delete "without requiring a separate DAOS instance per fabric". such a thing would essentially bifurcate a single DAOS system into two disjoint ones ... we cannot have two engines (with two different fabric interfaces) access the same NVMe storage...
|
|
||
| *Figure 1. Example topology with a primary CXI client cluster and a secondary TCP client cluster.* | ||
|
|
||
|  |
There was a problem hiding this comment.
texts in the images are rendering really badly - change font or increase resolution?
There was a problem hiding this comment.
i will see what i can do to make them better, copilot struggled few times to convert originals from the document
| 3. Preserve the existing primary-provider server execution model. | ||
| 4. Minimize client-side changes required to use the secondary provider. | ||
| 5. Keep the design extensible so future work can support more than two providers. | ||
|
|
There was a problem hiding this comment.
any goals for an admin node to talk to the servers using IP addresses that are configured on the same physical interface that's used for the secondary provider? or do we restrict admin nodes to the fabric of the primary provider (should be acceptable, just explicitly spell out the goal/non-goal)
There was a problem hiding this comment.
Tagging @kjacque for this question above
There was a problem hiding this comment.
The admin node talks exclusively over the control plane network, and from the control plane perspective, we use TCP over whatever route will allow us to reach an MS replica's IP. So it could in theory be routed over the secondary provider's network if that allows us to get to the MS replica. You could even bind the control plane to the secondary interface if desired. Not sure what the potential consequences of that are.
| CRT_PROVIDER_SECONDARY=1 | ||
| ``` | ||
|
|
||
| That should also be representable through CaRT initialization options so that the role choice is not environment-variable only. |
There was a problem hiding this comment.
role -> provider ?
There was a problem hiding this comment.
This is a bit different from the provider. You could in theory have the same provider as primary and secondary, so this would be the selector of 'primary' vs 'secondary' roles.
| - `port` | ||
|
|
||
| The configuration should also define the number of secondary ingress endpoints, for example `secondary_provider_endpoints`, with an initial default of `1`. | ||
|
|
There was a problem hiding this comment.
it's unclear if a future extension to more than two providers would establish one primary and multiple secondary providers, or if the "ordered list" approach make the 3rd a tertiary provider, and what that difference would actually be?
implementation is OOS here, but we may want to make the wording/parameter naming more clear in such examples.
There was a problem hiding this comment.
Will clarify, current thinking is that in future we might have 1 primary and multiple secondary providers, each secondary provider is identified by the unique secondary provider index. There would be no difference in treatment between secondary providers
| Secondary-provider support changes the DAOS data plane, not the management-plane transport. | ||
|
|
||
| The control-plane components, including `daos_server` and `daos_agent`, continue to communicate over the management network using gRPC over TCP. All server and client nodes therefore still need access to a shared management TCP network so that the agent can communicate with the server even when the data-plane provider selected for the client is not TCP. | ||
|
|
There was a problem hiding this comment.
This warrants more discussion, as we cannot require the existence of a physical TCP network for management traffic that is separate from the (primary or secondary) provider network.
In scenarios where management traffic uses an "IPoverIB" TCP connection over the high-speed fabric, we need to spell out what is supported as access_points in daos_agent.yml and as hostlist in daos_control.yml (and i assume we only want to support IP addresses on the primary fabric for mgmt_svc_replicas in daos_server.yml?)
There was a problem hiding this comment.
From the control plane perspective, all we need is a network that can access the IP addresses listed as access_points/mgmt_svc_replicas in the config. Whether that is running over the primary or secondary fabric, or some third management network, isn't really the control plane's business, as long as there is some route from each client cluster to the MS IPs.
| - Validate binding-bulk flows where control and data paths differ. | ||
|
|
||
| ## 6. Compatibility and Interoperability | ||
|
|
There was a problem hiding this comment.
we should spell out the expected incompatibilities here. my understanding is that the wire protocol changes in a way that makes it incompatible with earlier DAOS versions?
There was a problem hiding this comment.
will do, the main incompatibility is in bulks, where multiprovider support requires additional data to be transferred with each bulk handle identifying 'provider index' on which such bulk was originally created.
|
|
||
| - Missing secondary-provider metadata. | ||
| - Mismatched provider ordering across configuration fields. | ||
| - Bulk transfer attempted across incompatible providers. |
There was a problem hiding this comment.
Mismatched provider ordering across servers/engines?
There was a problem hiding this comment.
not sure if this one needs to be called out separately. with two providers this would be same as mismatch of primary providers across servers and is not multiprovider specific
Michael-Hennecke
left a comment
There was a problem hiding this comment.
see inline comments...
Doc-only: true Signed-off-by: Alexander A Oganezov <alexander.oganezov@hpe.com>
Doc-only: true Signed-off-by: Alexander A Oganezov <alexander.oganezov@hpe.com>
kjacque
left a comment
There was a problem hiding this comment.
My concerns have been addressed. LGTM
Steps for the author:
After all prior steps are complete: