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
Design the interface that allows multiple versions of Reminders/ Actors implementation #7203
Comments
/assign |
Part of dapr#7203 This is some initial work towards dapr#7203 and it involves standardizing how objects that provide actors services are initialized: Placement and Reminders. There are no functional changes. 1. All objects receive the same struct with properties that are used by both placement and reminder providers 2. All objects are initialized in the `newActorsWithClock` method, while before placement was initialized in `Init` Signed-off-by: ItalyPaleAle <43508+ItalyPaleAle@users.noreply.github.com>
Based on the discussion that I had with Alessandro (and I think he had with Yaron), I have put together this: Interfaces for Actors and RemindersThere are two places where APIs or functions required for Actors and Reminders are defined.
Out of these 2, protos are not to be updated, as every implementation will have their own RPCs defined accordingly. Only interfaces in pkg/actors/internal have to be updated. Though, a major work has already been done for them in release 1.12 already by segregating actors, reminders and timers interfaces (#6669 ). Idea behind this is that interfaces defined in pkg/actors/internal will be used to form a Building Block / Client which will implement all these methods defined in these interfaces. Whereas, methods defined for Services in protos will be implemented by respective new/existing Control Plane Service(s). And, the methods from these clients will call methods of the servers, wherever required. Depending on the implementation, it can be decided that what all RPCs need to be defined for a Service. Example, for a Placement Service which just creates and pushes Actor Types v/s Dapr Hosts table information to All sidecars, only table related Whereas, for a Service, where Actor information is Pulled by sidecars from Actors Service needs some methods like LookupActor or ReportActorDeactivation, which thus form a part of RPCs. For some minor changes left in interfaces, #7281 has been raised. How to build and deploy Actors/Scheduler/Placement Service?There are two sub-systems that we are dealing with here: Actors and Reminders. And, as we know, going forward, there can be multiple variants of Services providing either of these sub-systems or both. There will be multiple possibilities, like:
So, how to decide what all to deploy in what case for user? Steps:
Step 1: Configuration changes: A) Changes in charts/dapr/charts/dapr_config/templates/dapr_default_config.yaml B) Changes in charts/dapr/values.yaml for global values to take inputs from users. C) Changes in templates/deployment.yaml of particular service in charts to check if it needs to be deployed: Step 2: Component loading: A) Take out operator code in a library to specifically load a component, scoped only for a control plane service, in dapr-system namespace. B) Secrets also to be loaded. @dapr/maintainers-dapr @dapr/approvers-dapr |
Please can you move this proposal into a date/proposal PR so we can track ADR there, and be able to incline comment. |
Following up on the design on how it's exposed to end users, as discussed with @yaron2, here's what I am thinking about CLI flags and annotations:
For reminders:
For placement:
This is backwards-compatible.
|
Looks good |
…Reminders Part of dapr#7203 Signed-off-by: ItalyPaleAle <43508+ItalyPaleAle@users.noreply.github.com>
…7281) * Standardize initialization actor services: Placement and Reminders Part of #7203 This is some initial work towards #7203 and it involves standardizing how objects that provide actors services are initialized: Placement and Reminders. There are no functional changes. 1. All objects receive the same struct with properties that are used by both placement and reminder providers 2. All objects are initialized in the `newActorsWithClock` method, while before placement was initialized in `Init` Signed-off-by: ItalyPaleAle <43508+ItalyPaleAle@users.noreply.github.com> * Forgot this... Signed-off-by: ItalyPaleAle <43508+ItalyPaleAle@users.noreply.github.com> * Clock option was duplicate Signed-off-by: ItalyPaleAle <43508+ItalyPaleAle@users.noreply.github.com> * Changed per review feedback Signed-off-by: ItalyPaleAle <43508+ItalyPaleAle@users.noreply.github.com> --------- Signed-off-by: ItalyPaleAle <43508+ItalyPaleAle@users.noreply.github.com> Co-authored-by: Dapr Bot <56698301+dapr-bot@users.noreply.github.com> Co-authored-by: Mukundan Sundararajan <65565396+mukundansundar@users.noreply.github.com>
I believe we can close this issue as completed. Please confirm! |
This is a placeholder to add a design proposal for Interface that allows multiple reminders/ actior implementation(versions) in-tree and implement it in 1.13 once the design proposal is approved
The text was updated successfully, but these errors were encountered: