You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: articles/api-management/backends.md
+74-10Lines changed: 74 additions & 10 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,7 +5,7 @@ services: api-management
5
5
author: dlepow
6
6
ms.service: azure-api-management
7
7
ms.topic: concept-article
8
-
ms.date: 04/01/2025
8
+
ms.date: 05/20/2025
9
9
ms.author: danlep
10
10
ms.custom:
11
11
- build-2024
@@ -239,16 +239,63 @@ Use a backend pool for scenarios such as the following:
239
239
240
240
API Management supports the following load balancing options for backend pools:
241
241
242
-
***Round-robin**: By default, requests are distributed evenly across the backends in the pool.
243
-
***Weighted**: Weights are assigned to the backends in the pool, and requests are distributed across the backends based on the relative weight assigned to each backend. Use this option for scenarios such as conducting a blue-green deployment.
244
-
***Priority-based**: Backends are organized in priority groups, and requests are sent to the backends in order of the priority groups. Within a priority group, requests are distributed either evenly across the backends, or (if assigned) according to the relative weight assigned to each backend.
245
-
242
+
| Load balancing option | Description |
243
+
|------------------|-------------|
244
+
|**Round-robin**| Requests are distributed evenly across the backends in the pool by default. |
245
+
|**Weighted**| Weights are assigned to the backends in the pool, and requests are distributed based on the relative weight of each backend. Useful for scenarios such as blue-green deployments. |
246
+
|**Priority-based**| Backends are organized into priority groups. Requests are sent to higher priority groups first; within a group, requests are distributed evenly or according to assigned weights. |
247
+
246
248
> [!NOTE]
247
249
> Backends in lower priority groups will only be used when all backends in higher priority groups are unavailable because circuit breaker rules are tripped.
248
250
251
+
### Session awareness
252
+
253
+
With any of the preceding load balancing options, optionally enable **session awareness** (session affinity) to ensure that all requests from a specific user during a session are directed to the same backend in the pool. API Management sets a session ID cookie to maintain session state. This option is useful, for example, in scenarios with backends such as AI chat assistants or other conversational agents to route requests from the same session to the same endpoint.
254
+
255
+
> [!NOTE]
256
+
> Session awareness in load-balanced pools is being released first to the **AI Gateway Early**[update group](configure-service-update-settings.md).
257
+
258
+
#### Manage cookies for session awareness
259
+
260
+
When using session awareness, the client must handle cookies appropriately. The client needs to store the `Set-Cookie` header value and send it with subsequent requests to maintain session state.
261
+
262
+
You can use API Management policies to help set cookies for session awareness. For example, for the case of the Assistants API (a feature of [Azure OpenAI in Azure AI Foundry Models](/azure/ai-services/openai/concepts/models)), the client needs to keep the session ID, extract the thread ID from the body, and keep the pair and send the right cookie for each call. Moreover, the client needs to know when to send a cookie or when not to send a cookie header. These requirements can be handled appropriately by defining the following example policies:
263
+
264
+
265
+
```xml
266
+
<policies>
267
+
<inbound>
268
+
<base />
269
+
<set-backend-servicebackend-id="APIMBackend" />
270
+
</inbound>
271
+
<backend>
272
+
<base />
273
+
</backend>
274
+
<outbound>
275
+
<base />
276
+
<set-variablename="gwSetCookie"value="@{
277
+
var payload = context.Response.Body.As<JObject>();
278
+
var threadId = payload["id"];
279
+
var gwSetCookieHeaderValue = context.Request.Headers.GetValueOrDefault("SetCookie", string.Empty);
Use the portal, API Management [REST API](/rest/api/apimanagement/backend), or a Bicep or ARM template to configure a backend pool. In the following example, the backend *myBackendPool* in the API Management instance *myAPIM* is configured with a backend pool. Example backends in the pool are named *backend-1* and *backend-2*. Both backends are in the highest priority group; within the group, *backend-1* has a greater weight than *backend-2*.
298
+
Use the portal, API Management [REST API](/rest/api/apimanagement/backend), or a Bicep or ARM template to configure a backend pool. In the following example, the backend *myBackendPool* in the API Management instance *myAPIM* is configured with a backend pool. Example backends in the pool are named *backend-1* and *backend-2*. Both backends are in the highest priority group; within the group, *backend-1* has a greater weight than *backend-2*.
252
299
253
300
254
301
#### [Portal](#tab/portal)
@@ -266,7 +313,9 @@ Use the portal, API Management [REST API](/rest/api/apimanagement/backend), or a
266
313
267
314
#### [Bicep](#tab/bicep)
268
315
269
-
Include a snippet similar to the following in your Bicep file for a load-balanced pool. Set the `type` property of the backend entity to `Pool` and specify the backends in the pool:
316
+
Include a snippet similar to the following in your Bicep file for a load-balanced pool. Set the `type` property of the backend entity to `Pool` and specify the backends in the pool.
317
+
318
+
This example includes an optional `sessionAffinity` pool configuration for session awareness. It sets a cookie so that requests from a user session are routed to a specific backend in the pool.
Include a JSON snippet similar to the following in your ARM template for a load-balanced pool. Set the `type` property of the backend resource to `Pool` and specify the backends in the pool:
351
+
Include a JSON snippet similar to the following in your ARM template for a load-balanced pool. Set the `type` property of the backend resource to `Pool` and specify the backends in the pool.
352
+
353
+
This example includes an optional `sessionAffinity` pool configuration for session awareness. It sets a cookie so that requests from a user session are routed to a specific backend in the pool.
354
+
297
355
298
356
```json
299
357
{
@@ -315,7 +373,13 @@ Include a JSON snippet similar to the following in your ARM template for a load-
Copy file name to clipboardExpand all lines: articles/container-apps/sticky-sessions.md
+10-4Lines changed: 10 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,7 +5,7 @@ services: container-apps
5
5
author: craigshoemaker
6
6
ms.service: azure-container-apps
7
7
ms.topic: how-to
8
-
ms.date: 03/28/2023
8
+
ms.date: 05/29/2025
9
9
ms.author: cshoe
10
10
zone_pivot_groups: arm-portal
11
11
---
@@ -51,15 +51,21 @@ Session affinity is configured by setting the `affinity` property in the `ingres
51
51
52
52
You can enable session affinity when you create your container app via the Azure portal. To enable session affinity:
53
53
54
-
1. On the **Create Container App** page, select the **App settings** tab.
55
-
1. In the **Application ingress settings** section, select **Enabled** for the **Session affinity** setting.
54
+
1. Start at the Azure portal home page, search for **Container Apps** in the top search bar.
56
55
56
+
1. Select **Container Apps** in the search results and select the **Create** button.
57
+
58
+
1. In the *Basics* and *Container* tabs, provide all required values in each section, and then select the **Ingress** tab.
59
+
60
+
1. In the *Application ingress settings* section, set *Ingress* to **Enabled**. Once enabled, the *Session affinity* setting becomes available.
61
+
62
+
1. For *Session affinity* select **Enabled**.
57
63
58
64
:::image type="content" source="media/ingress/screenshot-session-affinity.png" alt-text="Screenshot of the session affinity setting in Create Container App page.":::
59
65
60
66
You can also enable or disable session affinity after your container app is created. To enable session affinity:
61
67
62
-
1. Go to your app in the portal.
68
+
1. Go to your app in the portal.
63
69
1. Select **Ingress**.
64
70
1. You can enable or disable **Session affinity** by selecting or deselecting **Enabled**.
0 commit comments