From cfb47e9db7811a19294d455dc238bef40fc74359 Mon Sep 17 00:00:00 2001 From: "Alessandro (Ale) Segala" <43508+ItalyPaleAle@users.noreply.github.com> Date: Tue, 7 Feb 2023 22:09:32 -0800 Subject: [PATCH] Docs for ServiceInvocationStreaming feature flag (#3102) * Docs for ServiceInvocationStreaming feature flag Fixes #3096 Also removes the Resiliency feature flag from the table Signed-off-by: ItalyPaleAle <43508+ItalyPaleAle@users.noreply.github.com> * Future note Signed-off-by: ItalyPaleAle <43508+ItalyPaleAle@users.noreply.github.com> * Added diagram Signed-off-by: ItalyPaleAle <43508+ItalyPaleAle@users.noreply.github.com> * Update daprdocs/content/en/operations/support/support-preview-features.md Co-authored-by: Hannah Hunter <94493363+hhunter-ms@users.noreply.github.com> Signed-off-by: Alessandro (Ale) Segala <43508+ItalyPaleAle@users.noreply.github.com> --------- Signed-off-by: ItalyPaleAle <43508+ItalyPaleAle@users.noreply.github.com> Signed-off-by: Alessandro (Ale) Segala <43508+ItalyPaleAle@users.noreply.github.com> Co-authored-by: Hannah Hunter <94493363+hhunter-ms@users.noreply.github.com> --- .../support/support-preview-features.md | 30 ++++++++++++++++-- .../images/service-invocation-simple.webp | Bin 0 -> 38786 bytes 2 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 daprdocs/static/images/service-invocation-simple.webp diff --git a/daprdocs/content/en/operations/support/support-preview-features.md b/daprdocs/content/en/operations/support/support-preview-features.md index e8f1e5867..ab4c93d40 100644 --- a/daprdocs/content/en/operations/support/support-preview-features.md +++ b/daprdocs/content/en/operations/support/support-preview-features.md @@ -14,9 +14,35 @@ For CLI there is no explicit opt-in, just the version that this was first made a ## Current preview features | Feature | Description | Setting | Documentation | Version introduced | -| ---------- |-------------|---------|---------------|-----------------| | **App Middleware** | Allow middleware components to be executed when making service-to-service calls | N/A | [App Middleware]({{}}) | v1.9 | +| **Streaming for HTTP service invocation** | Enables (partial) support for using streams in HTTP service invocation; see below for more details. | `ServiceInvocationStreaming` | [Details]({{< ref "support-preview-features.md#streaming-for-http-service-invocation" >}}) | v1.10 | | **App health checks** | Allows configuring app health checks | `AppHealthCheck` | [App health checks]({{}}) | v1.9 | | **Pluggable components** | Allows creating self-hosted gRPC-based components written in any language that supports gRPC. The following component APIs are supported: State stores, Pub/sub, Bindings | N/A | [Pluggable components concept]({{}})| v1.9 | | **Multi-App Run** | Configure multiple Dapr applications from a single configuration file and run from a single command | `dapr run -f` | [Multi-App Run]({{< ref multi-app-dapr-run.md >}}) | v1.10 | -| **Workflows** | Author workflows as code to automate and orchestrate tasks within your application, like messaging, state management, and failure handling | N/A | [Workflows concept]({{< ref "components-concept#workflows" >}})| v1.10 | \ No newline at end of file +| **Workflows** | Author workflows as code to automate and orchestrate tasks within your application, like messaging, state management, and failure handling | N/A | [Workflows concept]({{< ref "components-concept#workflows" >}})| v1.10 | + +### Streaming for HTTP service invocation + +Running Dapr with the `ServiceInvocationStreaming` feature flag enables partial support for handling data as a stream in HTTP service invocation. This can offer improvements in performance and memory utilization when using Dapr to invoke another service using HTTP with large request or response bodies. + +The table below summarizes the current state of support for streaming in HTTP service invocation in Dapr, including the impact of enabling `ServiceInvocationStreaming`, in the example where "app A" is invoking "app B" using Dapr. There are six steps in the data flow, with various levels of support for handling data as a stream: + +Diagram showing the steps of service invocation described in the table below + +| Step | Handles data as a stream | Dapr 1.10 | Dapr 1.10 with
`ServiceInvocationStreaming` | +|:---:|---|:---:|:---:| +| 1 | Request: "App A" to "Dapr sidecar A | | | +| 2 | Request: "Dapr sidecar A" to "Dapr sidecar B | | | +| 3 | Request: "Dapr sidecar B" to "App B" | | | +| 4 | Response: "App B" to "Dapr sidecar B" | | | +| 5 | Response: "Dapr sidecar B" to "Dapr sidecar A | | | +| 6 | Response: "Dapr sidecar A" to "App A | | | + +Important notes: + +- `ServiceInvocationStreaming` needs to be applied on caller sidecars only. + In the example above, streams are used for HTTP service invocation if `ServiceInvocationStreaming` is applied to the configuration of "app A" and its Dapr sidecar, regardless of whether the feature flag is enabled for "app B" and its sidecar. +- When `ServiceInvocationStreaming` is enabled, you should make sure that all services your app invokes using Dapr ("app B") are updated to Dapr 1.10, even if `ServiceInvocationStreaming` is not enabled for those sidecars. + Invoking an app using Dapr 1.9 or older is still possible, but those calls may fail if you have applied a Dapr Resiliency policy with retries enabled. + +> Full support for streaming for HTTP service invocation will be completed in a future Dapr version. diff --git a/daprdocs/static/images/service-invocation-simple.webp b/daprdocs/static/images/service-invocation-simple.webp new file mode 100644 index 0000000000000000000000000000000000000000..a4fbc7ba3af3a593d81ee41660006bca83c476cb GIT binary patch literal 38786 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 literal 0 HcmV?d00001