From dffd49143854fae4bc4cec1f6e57a026872fc6ab Mon Sep 17 00:00:00 2001 From: Yaron Schneider Date: Thu, 3 Oct 2019 13:20:36 -0700 Subject: [PATCH] added how to for rate limiting (#38) --- howto/control-concurrency/Readme.md | 47 +++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 howto/control-concurrency/Readme.md diff --git a/howto/control-concurrency/Readme.md b/howto/control-concurrency/Readme.md new file mode 100644 index 000000000..c9c8e9c15 --- /dev/null +++ b/howto/control-concurrency/Readme.md @@ -0,0 +1,47 @@ +# Rate limiting an application + +A common scenario in distributed computing is to only allow for a given number of requests to execute concurrently. +Using Dapr, you can control how many requests and events will invoke your application simultaneously. + +*Note that this rate limiting is guaranteed for every event that's coming from Dapr, meaning Pub-Sub events, direct invocation from other services, bindings events etc. Dapr can't enforce the concurrency policy on requests that are coming to your app externally.* + +## Setting max-concurrency + +Without using Dapr, a developer would need to create some sort of a semaphore in the application and take care of acquiring and releasing it. +Using Dapr, there are no code changes needed to an app. + +### Setting max-concurrency in Kubernetes + +To set max-concurrency in Kubernetes, add the following annotation to your pod: + +
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: nodesubscriber
+  labels:
+    app: nodesubscriber
+spec:
+  replicas: 1
+  selector:
+    matchLabels:
+      app: nodesubscriber
+  template:
+    metadata:
+      labels:
+        app: nodesubscriber
+      annotations:
+        dapr.io/enabled: "true"
+        dapr.io/id: "nodesubscriber"
+        dapr.io/port: "3000"
+        dapr.io/max-concurrency: "1"
+...
+
+ +### Setting max-concurrency using the Actions CLI + +To set max-concurrency with the Actions CLI for running on your local dev machine, add the `max-concurrency` flag: + +`dapr run --max-concurrency 1 --app-port 5000 python ./app.py`. + +The above examples will effectively turn your app into a single concurrent service. \ No newline at end of file