Skip to content

Commit 4c14009

Browse files
committed
Update per feedback
1 parent 2e1e224 commit 4c14009

File tree

1 file changed

+18
-18
lines changed

1 file changed

+18
-18
lines changed

articles/logic-apps/business-continuity-disaster-recovery-guidance.md

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,8 @@ You can set up your primary and secondary locations so that your logic app insta
101101

102102
| Primary-secondary role | Description |
103103
|------------------------|-------------|
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. |
106106
| Combination | Some logic apps play an active-active role, while other logic apps play an active-passive role. |
107107
|||
108108

@@ -128,7 +128,7 @@ These examples show the active-active setup where both logic app instances activ
128128

129129
### Active-passive examples
130130

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.
132132

133133
!["Active-passive" setup that uses "competing consumers"](./media/business-continuity-disaster-recovery-guidance/active-passive-setup.png)
134134

@@ -202,7 +202,7 @@ For example, suppose that you have a logic app that needs to run every 10 minute
202202

203203
* 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.
204204

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.
206206

207207
<a name="polling-trigger"></a>
208208

@@ -213,27 +213,27 @@ To regularly check whether new data for processing is available from a specific
213213
* Static data, which describes data that is always available for reading
214214
* Volatile data, which describes data that is no longer available after reading
215215

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.
217217

218-
* Logic apps track their state on the client side when they run based on their trigger state.
218+
* Logic apps that work with client-side state use triggers that can maintain state.
219219

220220
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.
221221

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.
223223

224224
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`.
225225

226226
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.
227227

228228
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:
229229

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.
231231

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.
233233

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.
235235

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.
237237

238238
> [!NOTE]
239239
> 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,
255255

256256
* 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
257257

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:
259259

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.
261261

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.
263263

264264
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).
265265

@@ -277,7 +277,7 @@ For your disaster recovery strategy to work, your solution needs ways to perform
277277

278278
* [Check the primary instance's availability](#check-primary-availability)
279279
* [Monitor the primary instance's health](#monitor-primary-health)
280-
* [Enable the secondary instance](#enable-secondary)
280+
* [Activate the secondary instance](#activate-secondary)
281281

282282
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:
283283

@@ -287,7 +287,7 @@ This section describes one solution that you can use outright or as a foundation
287287

288288
### Check primary instance availability
289289

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.
291291

292292
For this task, create a basic health-check logic app that performs these tasks:
293293

@@ -320,9 +320,9 @@ For this task, in the secondary location, create a watchdog logic app that perfo
320320

321321
<a name="enable-secondary"></a>
322322

323-
### Enable your secondary instance
323+
### Activate your secondary instance
324324

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.
326326

327327
<a name="collect-diagnostic-data"></a>
328328

0 commit comments

Comments
 (0)