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/logic-apps/business-continuity-disaster-recovery-guidance.md
+18-18Lines changed: 18 additions & 18 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -101,8 +101,8 @@ You can set up your primary and secondary locations so that your logic app insta
101
101
102
102
| Primary-secondary role | Description |
103
103
|------------------------|-------------|
104
-
|*Active-active*| The primary and secondary logic app instances in both locations are enabled and actively handle requests by following either of these patterns: <p><p>- *Load balance*: You can have both instances listen to an endpoint and load balance traffic to each instance as necessary. <p>- *Competing consumers*: You can have both instances act as competing consumers so that the instances compete for messages from a queue. If one instance fails, the other instance takes over the workload. |
105
-
|*Active-passive*| The primary logic app instance is enabled and actively handles the entire workload, while the secondary instance is passive (disabled or inactive). The secondary waits for a signal that the primary is unavailable or not working due to disruption or failure and takes over the workload as the active instance. |
104
+
|*Active-active*| The primary and secondary logic app instances in both locations actively handle requests by following either of these patterns: <p><p>- *Load balance*: You can have both instances listen to an endpoint and load balance traffic to each instance as necessary. <p>- *Competing consumers*: You can have both instances act as competing consumers so that the instances compete for messages from a queue. If one instance fails, the other instance takes over the workload. |
105
+
|*Active-passive*| The primary logic app instance actively handles the entire workload, while the secondary instance is passive (disabled or inactive). The secondary waits for a signal that the primary is unavailable or not working due to disruption or failure and takes over the workload as the active instance. |
106
106
| Combination | Some logic apps play an active-active role, while other logic apps play an active-passive role. |
107
107
|||
108
108
@@ -128,7 +128,7 @@ These examples show the active-active setup where both logic app instances activ
128
128
129
129
### Active-passive examples
130
130
131
-
This example shows the active-passive setup where the primary logic app instance is active and enabled in one location, while the secondary instance stays inactive and disable in another location. If the primary experiences a disruption or failure, you can have some kind of operator run a script that enables the secondary to take on the workload.
131
+
This example shows the active-passive setup where the primary logic app instance is active in one location, while the secondary instance remains inactive in another location. If the primary experiences a disruption or failure, you can have an operator run a script that activates the secondary to take on the workload.
132
132
133
133

134
134
@@ -202,7 +202,7 @@ For example, suppose that you have a logic app that needs to run every 10 minute
202
202
203
203
* For the *active* enabled logic app, set the Recurrence trigger to the same schedule as the passive logic app in the primary location, which is to start at 10 minutes past the hour and repeat every 20 minutes, for example, 9:10 AM, 9:20 AM, and so on.
204
204
205
-
Now, if a disruptive event happens in the primary location, enable the passive logic app in the alternate location. That way, if finding the failure takes time, this setup limits the number of missed recurrences during that delay.
205
+
Now, if a disruptive event happens in the primary location, activate the passive logic app in the alternate location. That way, if finding the failure takes time, this setup limits the number of missed recurrences during that delay.
206
206
207
207
<aname="polling-trigger"></a>
208
208
@@ -213,27 +213,27 @@ To regularly check whether new data for processing is available from a specific
213
213
* Static data, which describes data that is always available for reading
214
214
* Volatile data, which describes data that is no longer available after reading
215
215
216
-
To avoid repeatedly reading the same data, your logic app needs to remember which data was previously read. Logic apps track their state either on the client side or on the server side.
216
+
To avoid repeatedly reading the same data, your logic app needs to remember which data was previously read by maintaining state either on the client side or on the server, service, or system side.
217
217
218
-
* Logic apps track their state on the clientside when they run based on their trigger state.
218
+
* Logic apps that work with client-side state use triggers that can maintain state.
219
219
220
220
For example, a trigger that reads a new message from an email inbox requires that the trigger can remember the most recently read message. That way, the trigger starts the logic app only when the next unread message arrives.
221
221
222
-
* Logic apps track their state on the server side when they run based a property value or setting that's on the server or system side.
222
+
* Logic apps that work with server, service, or system-side state use property values or settings that are on the server, service, or system side.
223
223
224
224
For example, a query-based trigger that reads a row from a database requires that the row has an `isRead` column that's set to `FALSE`. Every time that the trigger reads a row, the logic app updates that row by changing the `isRead` column from `FALSE` to `TRUE`.
225
225
226
226
This server-side approach works similarly for Service Bus queues or topics that have queuing semantics where a trigger can read and lock a message while the logic app processes the message. When the logic app finishes processing, the trigger deletes the message from the queue or topic.
227
227
228
228
From a disaster recovery perspective, when you set up your logic app's primary and secondary instances, make sure that you account for these behaviors based on whether your logic app tracks state on the client side or on the server side:
229
229
230
-
* For a logic app that tracks client-side state, make sure that your logic app doesn't read the same message more than one time. Only one location can have an active logic app instance at any specific time. Make sure that the logic app instance in the alternate location is inactive or disabled until the primary instance fails over to the alternate location.
230
+
* For a logic app that works with client-side state, make sure that your logic app doesn't read the same message more than one time. Only one location can have an active logic app instance at any specific time. Make sure that the logic app instance in the alternate location is inactive or disabled until the primary instance fails over to the alternate location.
231
231
232
-
For example, an Office 365 Outlook trigger is a client-side trigger that maintains state. The trigger tracks the timestamp for the most recently read email to avoid reading a duplicate.
232
+
For example, the Office 365 Outlook trigger maintains client-side state and tracks the timestamp for the most recently read email to avoid reading a duplicate.
233
233
234
-
* For a logic app that tracks server-side state, you can set up your logic app instances to play either [active-active roles](#roles) where they work as competing consumers or [active-passive roles](#roles) where the alternate instance waits until the primary instance fails over to the alternate location.
234
+
* For a logic app that works with server-side state, you can set up your logic app instances to play either [active-active roles](#roles) where they work as competing consumers or [active-passive roles](#roles) where the alternate instance waits until the primary instance fails over to the alternate location.
235
235
236
-
For example, reading from a message queue, such as an Azure Service Bus queue, requires tracking server-side state because the queuing service maintains locks on messages to prevent other clients from reading the same messages.
236
+
For example, reading from a message queue, such as an Azure Service Bus queue, requires working with server-side state because the queuing service maintains locks on messages to prevent other clients from reading the same messages.
237
237
238
238
> [!NOTE]
239
239
> If your logic app needs to read messages in a specific order, for example, from a Service Bus queue,
@@ -255,11 +255,11 @@ The **Request** trigger makes your logic app callable from other apps, services,
255
255
256
256
* A way that you can manually run user operations or routines to call your logic app, for example, by using a PowerShell script that performs a specific task
257
257
258
-
From a disaster recovery perspective, the Request trigger plays a passive role because the logic app doesn't do any work and waits until some other service or system explicitly calls the trigger. As a passive endpoint, you can set up your primary and secondary instances in these ways:
258
+
From a disaster recovery perspective, the Request trigger is a passive receiver because the logic app doesn't do any work and waits until some other service or system explicitly calls the trigger. As a passive endpoint, you can set up your primary and secondary instances in these ways:
259
259
260
-
*[Active-active](#roles): Both instances are enabled. The caller or router balances or distributes traffic between those instances.
260
+
*[Active-active](#roles): Both instances actively handle requests or calls. The caller or router balances or distributes traffic between those instances.
261
261
262
-
*[Active-passive](#roles): Only the primary instance is enabled and handles all the work. The secondary instance is disabled and waits until the primary is disrupted or fails. The caller or router determines when to enable the secondary instance.
262
+
*[Active-passive](#roles): Only the primary instance is active and handles all the work, while the secondary instance waits until the primary experiences disruption or failure. The caller or router determines when to run the secondary instance.
263
263
264
264
As a recommended architecture, you can use Azure API Management as a proxy for the logic apps that use Request triggers. API Management provides [built-in cross-regional resiliency and the capability to route traffic across multiple endpoints](https://docs.microsoft.com/azure/api-management/api-management-howto-deploy-multi-region).
265
265
@@ -277,7 +277,7 @@ For your disaster recovery strategy to work, your solution needs ways to perform
277
277
278
278
*[Check the primary instance's availability](#check-primary-availability)
279
279
*[Monitor the primary instance's health](#monitor-primary-health)
280
-
*[Enable the secondary instance](#enable-secondary)
280
+
*[Activate the secondary instance](#activate-secondary)
281
281
282
282
This section describes one solution that you can use outright or as a foundation for your own design. Here's a high-level visual overview for this solution:
283
283
@@ -287,7 +287,7 @@ This section describes one solution that you can use outright or as a foundation
287
287
288
288
### Check primary instance availability
289
289
290
-
To determine whether the primary instance is available, running, and able to work, you can create a "health-check" logic app that's in the same location as the primary instance. You can then call this health-check app from an alternate location. If the health-check app successfully responds, the underlying infrastructure for the Azure Logic Apps service in that region is available and working. If the health-check app fails to respond, you can assume that the location is no longer healthy.
290
+
To determine whether the primary instance is available, running, and able to work, you can create a "health-check" logic app that's in the same location as the primary instance. You can then call this health-check app from an alternate location. If the health-check app successfully responds, the underlying infrastructure for the Azure Logic Apps service in that region is available and working. If the health-check app fails to respond, you can assume that the location is no longer healthy.
291
291
292
292
For this task, create a basic health-check logic app that performs these tasks:
293
293
@@ -320,9 +320,9 @@ For this task, in the secondary location, create a watchdog logic app that perfo
320
320
321
321
<aname="enable-secondary"></a>
322
322
323
-
### Enable your secondary instance
323
+
### Activate your secondary instance
324
324
325
-
To automatically enable or activate the secondary location, create a logic app that calls the appropriate logic apps in the secondary location. Expand your watchdog app to call this activation logic app after a specific number of failures happen.
325
+
To automatically activate the secondary instance, you can create a logic app that calls the management API such as the Azure Resource Manager connector to activate the appropriate logic apps in the secondary location. You can expand your watchdog app to call this activation logic app after a specific number of failures happen.
0 commit comments