How do you structure you Logic Apps and related items in a solution? What is your naming conventions for Logic Apps? Mikael Sand will show a real customer case where he used a Microservices approach, the upsides, and the downsides.
4. Mikael Sand
Long time blogger & community contributor
Did 10 years of BizTalk!
Works for Enfo Sweden – Solution Architect
Microsoft integration leason and gray-back
@mikaelsand
http://mikaelsand.com
mikael_sand@hotmail.com
6. AGENDA 1. TRADITIONAL LOGIC APPS VS
MICROSERVICES ARCHITECTURE
2. REUSABILITY
3. COMPOSITE SERVICES
4. ABSTRACT VS DETAILED
5. SCALABILITY
6. CHALLENGES
7. NOTES FROM THE FIELD
9. • Workflow (large) that solves a particular problem.
• End to end: Move data from system A to system B.
• Mixing process with solution
TRADITIONAL LOGIC APP
10. • Independently deployable, easy to replace.
– Contract
– ”Binary compatability”
• Small and message based
• Modular structure
• Reusable + Idempotent => Highly scaleable
MICROSERVICES
11. • Independently deployable, easy to replace.
– Contract
– ”Binary compatability”
• Small and message based
• Modular structure
• Reusable + Idempotent => Highly scaleable
REUSEABILITY
13. DEMO – GET KEY
Get Customer
data
Get Key From
Keyvault
Is key expired?
Login to
system
Get Key
Store Key in
Keyvault
Set Key as new
value
Get Data from
System A using
key
Return the data
Set Key as
value
Key
Problems!
Reuse get key for other
flows?
19. • Combination of lots of small services
=> Create a new whole
• Combination of a new whole
=> Process
• Process is abstract
• Detail is technical
HIERARCHY OF SERVICES –
PROCESS VS DETAIL
21. • Microservices architecture fit very well
• Scaleability built right into Logic Apps
• ForEach – Parallel 20 exec by default
• Start new Logic App – also parallel exec
• Can your downstream system take it?
SCALEABLE
22. DEMO – SCALEABILITY – GET NEW ORDERS
Get orders by status
Get order by ID
Call
Save instance
Get key
Combine
Return orders
ForEach
Get New Orders
Call
Call
Call
List Orders
Key
Get Order
Aggregate orders
24. • Naming discussions turn rational poeple into these =>
• Deciding on a name for a LA depends..
– Who is calling it?
– What is the conext?
• A process might be a service for someone else
• Here is a proposal from Enfo:
NAMING – HARD AS NAILS
25. Remember the guys to the right….
<Unique ID_><Affiliation_><Business Need>
Examples
INT0001_ACT0004_CustOnboarding
SVC0001_COM005_Customer
NAMING – HARD AS NAILS CONT
26. • No visual tool
– Connecting the Logic Apps visually to show composite services
• Need to plan – Rework andreuse
• Compatability and versions
CHALLENGES
27. • Excel sheet: Names and descriptions befor you build
• Use the clone feature in the Azure portal
– Good for copy
– And renamning
• Use search in the list of artifacts
• Drill down debugging
• Plan ahead! Design before you build.
• Don’t go overboard with abstraction. Getting key/Loggin in.
NOTES FROM THE FIELD
28. • You do not need to restart the whole process.
• Debug only a certain part of the flow.
• ”Seal” a Logic App by making it accessable only by other Logic Apps.
• Retry policy for calling Logic Apps.
• Use schemas, required, and validation.
NOTES FROM THE FIELD CONT
Start: Talk about how services often have tokens that might expire.
This is a great pattern for that.
Unique ID
The unique id should be seen as a representation of the integration or part of integration. The ID can have a qualifier appended. Ex. INT for integration or SVC for service. All artifacts that are connected to the same integration should have the same ID.
RecommendationINT0004 – for initiating artifact of the integration SVC0004 – for integration internal artifacts
Business Need
Business business specific definition ex. Contract or information object. This should be the business used notation for what is build.
Affiliation
To manage a specific affiliation/membership (ACT) or identifying a common component (COM). The affiliation should be non-system specific if it is replaced. Affiliation should have a unique ID to correlate to CMDB. Even the integration platform should have a unique ID defined for internal processes.
Realized that this might be a session all by it self.