SlideShare a Scribd company logo
1 of 62
Download to read offline
30 SEPTEMBER 2021
Near Real-Time ERP Integration
Processing High Data Volumes
Ozan Çali
OutSystems Developer @ Product League
ocali@product-league.com
Agenda
• Integration Strategies
o Cache & Synchronization Patterns
• Queueing & Bucketing
• Throttling
• Best Practices
5
200 shelves in each store
400 stores
15000 articles
Multiple prices for different
units / dates / stores
ERP
• Master of data
• Near-static store & article data
• Frequent updates for shelf plans & prices
6
7
Large central price changes each week
~6M total shelf plans,
available every night
~20M total price records,
available immediately
~15000 articles,
rarely change
Store
employee
Backoffice
admin
Reporter
Use Cases
Client wants to have shelf labels printed
when any label field is updated in ERP
8
Use Cases
Create jobs to print shelf labels automatically
when there is a change to any article-related data
9
Use Cases
Allow users to select articles to be printed on demand
10
Challenge
How do we get all the changes real-time?
11
Multi-Layer Cache
12
Read-Through Cache
1. Try to fetch from cache (DB)
2. If not found or outdated, get from ERP and cache it
13
Synchronization Patterns
Direct Integration Cold Cache with batch sync Cold Cache with real-time sync
Article_CS
Article_IS
ERP
Article_CS
Article_IS
ERP
Article_Sync Article_CS
Article_IS
ERP
Article_API
14
Direct Integration
Always call ERP?
• Suitable if information changes too often
• Data always up-to-date
• Only good for small amounts
• More latency
• More hits to ERP
• More APIs, one per retrieval use case
• Single point of failure
Article_CS
Article_IS
ERP
15
Article_CS
Article_IS
ERP
Synchronization Patterns
Direct Integration Cold Cache with batch sync Cold Cache with real-time sync
Article_CS
Article_IS
ERP
Article_Sync Article_CS
Article_IS
ERP
Article_API
16
Get changes periodically?
Cold Cache with batch sync • Simple to set up IS
• Enables data manipulation in OutSystems
• Less calls to ERP
• Isolated Sync module
-> consumers of CS is not impacted by the Sync code
Data may be outdated
Article_CS
Article_IS
ERP
Article_Sync
17
Article_CS
Article_IS
ERP
Article_CS
Article_IS
ERP
Article_Sync
Synchronization Patterns
Direct Integration Cold Cache with batch sync Cold Cache with real-time sync
Article_CS
Article_IS
ERP
Article_API
18
Get changes as they happen?
Cold Cache with real-time sync
• ERP calls OutSystems when there is a change
• API and IS isolated from CS
• Data always up to date
More alignment between ERP and OutSystems teams
Article_CS
Article_IS
ERP
Article_API
19
call OS about
a change
Article_CS
Article_IS
ERP
Article_CS
Article_IS
ERP
Article_Sync
Synchronization Patterns
Direct Integration Cold Cache with batch sync Cold Cache with real-time sync
Article_CS
Article_IS
ERP
Article_API
SUITABLE
20
A business rule appears!
Cold Cache with real-time sync
• ERP calls back OutSystems when there is a change
• API and IS isolated from CS
• Data always up to date
More alignment between ERP and OutSystems teams
…Might be insufficient for a high load of changes
“Every Wed morning, we
send all price changes for
all articles & stores”
Article_CS
Article_IS
ERP
Article_API
21
Extra flavor: Queueing
Queued real-time sync
Synchronization of data is processed in parallel
Quick insert of update request in a queue
BPT reacts to the inserted queue message
Article_CS
Article_IS
ERP
Article_API
22
What if the size of incoming change is very big?
23
Divide and conquer!
Queued real-time sync with buckets
Each subset starts a BPT, which in turn calls
back ERP to get the details for changes
A timer gets the first unprocessed staging and
divides it into smaller subsets (= buckets)
Article_Sync
ERP calls our API about a change
Each call to our API is quickly saved as JSON
in a Staging entity
Each returning set from ERP is flat-saved in a
Notification entity with StagingId FK.
Article_CS
Article_IS
ERP
Article_API
When the last bucket is finished with
processing, all records from the Notification
table for that StagingId will be upserted into CS.
24
Only IDs of the changes
from ERP to our API
Max no. of allowed articles
in a call to ERP: 2 (from SP)
E.g. there are 5 changes
I II
25
In Sync module, we create 3
buckets out of the staging
They each start a BPT each, to
get the details from ERP
III IV
26
The retrieved details are flat-saved in a Notification table,
to be merged to cache after the staging is fully processed.
V
27
SQL MERGE
28
VS
Merge Update
StagingId
(QueueMessageId)
29
A limitation appears!
“But you can only do 10 requests
to ERP concurrently!”
Queued real-time sync with buckets OS default:
• 10 simultaneous BPT threads
• 20 simultaneous LightBPTs threads
per OS FE server!
Article_Sync Article_CS
Article_IS
ERP
Article_API
30
Throttling to the rescue!
Intentional slowing down of the requests to ERP
Control the number of active BPTs
31
Define max allowed no. of concurrent buckets in a SP
Subtract no. of currently in-progress buckets
Launch a BPT for each bucket with no. of available threads
Throttling to the rescue!
32
33
34
34
A well-oiled machine!
BEST PRACTICES
35
Isolation
• Integration Service per independent concept
• Separation of concerns
• Each concept has its own life cycle
• Also separate BPTs for each concept
36
Bootstrapping Initial Load
• Need readily available data
for go-live?
o Design proactively
o Reusable actions
37
Exception Handling
• Handling errors per use-case
• Lets us to decide
o whether to retry or stop the process instance
o to log the message into right location and notify the
right people
38
39
Retry button in Backoffice
40
Data cleanup
• A timer for each concept to
delete records that are older than
X days
• Old data can be backed up to
another archive DB for logging
reasons
41
References
• Designing the Architecture of OS Applications
• Integration Patterns for Core Services Abstraction
• Processes (BPT)
• Using MERGE in SQL
42
TRANSFER SOLUTIONS
A bit of sass never hurt anyone
1
Getting Sassy with
Outsystems
Getting Sassy with
Outsystems
Joris Albeda
joris.albeda@transfer-solutions.com
GETTING SASSY WITH OUTSYSTEMS
|1. What is Sass
|2. But How!
|3. Sassy Outsystems in your team
2 Getting Sassy with Outsystems
PART 1: WHAT IS IT
Getting Sassy with Outsystems
3
Syntactically Awesome StyleSheets
PART 1: WHAT IS IT
Getting Sassy with Outsystems
4
SCSS: Sassy CSS
THE EXPANSION
PART 1: WHAT IS IT
Getting Sassy with Outsystems
5
| Sass is a preprocessor.
| New functionality
| Neater code, which is compiled to CSS!
Sass Compiler
WHAT IS THIS FUNCTIONALITY YOU SPEAK OF?
6 Getting Sassy with Outsystems
7 Getting Sassy with Outsystems
PART 1: WHAT IS IT
| Variables
| Nesting
| External files
| Extending, mixins, functions, @if en @for, and much more…
In summary
PART 2: BUT HOW?
Getting Sassy with Outsystems
8
A setup for Outsystems and Sass
9 Getting Sassy with Outsystems
PART 2: BUT HOW?
| Visual Studio Code with extensions:
| Live Server for hosting the CSS
| Live Sass Compiler for compiling your Sass
| SCSS IntelliSense for checking your Sass
| Super CSS Inject
| For Chrome
| For Firefox
Ingredients
SHOW US!
10 Getting Sassy with Outsystems
11 Getting Sassy with Outsystems
PART 3: SASSY OUTSYSTEMS IN YOUR TEAM
Two scenarios
| Scenario 1: Only you manage the Theme
| Scenario 2: Managing the Theme together
12 Getting Sassy with Outsystems
PART 3: SASSY OUTSYSTEMS IN YOUR TEAM
Scenario 1: Only you manage the Theme
13 Getting Sassy with Outsystems
PART 3: SASSY OUTSYSTEMS IN YOUR TEAM
| Only you use Sass
| Communicate clearly to your team!
| Repository is recommended (Git, SVN,
…)
| Team members add new CSS at the
bottom of the Theme CSS
Scenario 1: Only you manage the Theme
14 Getting Sassy with Outsystems
PART 3: SASSY OUTSYSTEMS IN YOUR TEAM
| Only you use Sass
| Communicate clearly to your team!
| Repository is recommended (Git, SVN,
…)
| Team members add new CSS at the
bottom of the Theme CSS
Scenario 1: Only you manage the Theme
You process new CSS in the Sass
15 Getting Sassy with Outsystems
PART 3: SASSY OUTSYSTEMS IN YOUR TEAM
| Agree to use Sass together!
| Repository is needed (Git, SVN, …)
Scenario 2: Managing the Theme together
16 Getting Sassy with Outsystems
CONCLUSION
| Sass: make your CSS better and neater
| InjectCSS: Develop more quickly
| Do as I did, and try it out!
17 Getting Sassy with Outsystems
CONCLUSION
| Sass: make your CSS better and neater
| InjectCSS: Develop more quickly
| Do as I did, and try it out!
18 Getting Sassy with Outsystems
LINKS
| Visual Studio Code with extensions:
| Live Server for hosting the CSS
| Live Sass Compiler for compiling the Sass
| SCSS IntelliSense for checking the Sass
| Super CSS Inject
| For Chrome
| For Firefox
| Sass documentation
| Sass 7-1 project structure
| Need help? Ideas? joris.albeda@transfer-solutions.com
For your convenience
ANY QUESTIONS?
19
Getting Sassy with
Outsystems

More Related Content

What's hot

Northwestern Mutual Journey – Transform BI Space to Cloud
Northwestern Mutual Journey – Transform BI Space to CloudNorthwestern Mutual Journey – Transform BI Space to Cloud
Northwestern Mutual Journey – Transform BI Space to Cloud
Databricks
 
SplunkLive! Nutanix Session - Turnkey and scalable infrastructure for Splunk ...
SplunkLive! Nutanix Session - Turnkey and scalable infrastructure for Splunk ...SplunkLive! Nutanix Session - Turnkey and scalable infrastructure for Splunk ...
SplunkLive! Nutanix Session - Turnkey and scalable infrastructure for Splunk ...
Splunk
 

What's hot (20)

IMC Summit 2016 Innovation - Steve Wilkes - Tap Into Your Enterprise – Why Da...
IMC Summit 2016 Innovation - Steve Wilkes - Tap Into Your Enterprise – Why Da...IMC Summit 2016 Innovation - Steve Wilkes - Tap Into Your Enterprise – Why Da...
IMC Summit 2016 Innovation - Steve Wilkes - Tap Into Your Enterprise – Why Da...
 
Northwestern Mutual Journey – Transform BI Space to Cloud
Northwestern Mutual Journey – Transform BI Space to CloudNorthwestern Mutual Journey – Transform BI Space to Cloud
Northwestern Mutual Journey – Transform BI Space to Cloud
 
Overview of v cloud case studies
Overview of v cloud case studiesOverview of v cloud case studies
Overview of v cloud case studies
 
Building Reactive Applications With Node.Js And Red Hat JBoss Data Grid (Gald...
Building Reactive Applications With Node.Js And Red Hat JBoss Data Grid (Gald...Building Reactive Applications With Node.Js And Red Hat JBoss Data Grid (Gald...
Building Reactive Applications With Node.Js And Red Hat JBoss Data Grid (Gald...
 
Big Data Quickstart Series 3: Perform Data Integration
Big Data Quickstart Series 3: Perform Data IntegrationBig Data Quickstart Series 3: Perform Data Integration
Big Data Quickstart Series 3: Perform Data Integration
 
LeanXcale for Monitoring
LeanXcale for MonitoringLeanXcale for Monitoring
LeanXcale for Monitoring
 
Scaling Your Database In The Cloud
Scaling Your Database In The CloudScaling Your Database In The Cloud
Scaling Your Database In The Cloud
 
Scylla Summit 2018: Grow small, Get big — Experiences with Scylla
Scylla Summit 2018: Grow small, Get big — Experiences with ScyllaScylla Summit 2018: Grow small, Get big — Experiences with Scylla
Scylla Summit 2018: Grow small, Get big — Experiences with Scylla
 
SplunkLive! Nutanix Session - Turnkey and scalable infrastructure for Splunk ...
SplunkLive! Nutanix Session - Turnkey and scalable infrastructure for Splunk ...SplunkLive! Nutanix Session - Turnkey and scalable infrastructure for Splunk ...
SplunkLive! Nutanix Session - Turnkey and scalable infrastructure for Splunk ...
 
Microsoft: Building a Massively Scalable System with DataStax and Microsoft's...
Microsoft: Building a Massively Scalable System with DataStax and Microsoft's...Microsoft: Building a Massively Scalable System with DataStax and Microsoft's...
Microsoft: Building a Massively Scalable System with DataStax and Microsoft's...
 
In-Stream Processing Service Blueprint, Reference architecture for real-time ...
In-Stream Processing Service Blueprint, Reference architecture for real-time ...In-Stream Processing Service Blueprint, Reference architecture for real-time ...
In-Stream Processing Service Blueprint, Reference architecture for real-time ...
 
Five ways database modernization simplifies your data life
Five ways database modernization simplifies your data lifeFive ways database modernization simplifies your data life
Five ways database modernization simplifies your data life
 
MemSQL
MemSQLMemSQL
MemSQL
 
Choosing the right Cloud Database
Choosing the right Cloud DatabaseChoosing the right Cloud Database
Choosing the right Cloud Database
 
Migration to Alibaba Cloud
Migration to Alibaba CloudMigration to Alibaba Cloud
Migration to Alibaba Cloud
 
How Kafka and Modern Databases Benefit Apps and Analytics
How Kafka and Modern Databases Benefit Apps and AnalyticsHow Kafka and Modern Databases Benefit Apps and Analytics
How Kafka and Modern Databases Benefit Apps and Analytics
 
Launch and Scale Your E-commerce Website with Magento
Launch and Scale Your E-commerce Website with MagentoLaunch and Scale Your E-commerce Website with Magento
Launch and Scale Your E-commerce Website with Magento
 
Add Historical Analysis of Operational Data with Easy Configurations in Fivet...
Add Historical Analysis of Operational Data with Easy Configurations in Fivet...Add Historical Analysis of Operational Data with Easy Configurations in Fivet...
Add Historical Analysis of Operational Data with Easy Configurations in Fivet...
 
Cost Effectively Run Multiple Oracle Database Copies at Scale
Cost Effectively Run Multiple Oracle Database Copies at Scale Cost Effectively Run Multiple Oracle Database Copies at Scale
Cost Effectively Run Multiple Oracle Database Copies at Scale
 
Accelerate Data Science Initiatives: Databricks & Privacera
Accelerate Data Science Initiatives: Databricks & PrivaceraAccelerate Data Science Initiatives: Databricks & Privacera
Accelerate Data Science Initiatives: Databricks & Privacera
 

Similar to Netherlands OSUG | Sep 30

AX2012 Technical Track - Infrastructure, Davy Vliegen
AX2012 Technical Track - Infrastructure, Davy VliegenAX2012 Technical Track - Infrastructure, Davy Vliegen
AX2012 Technical Track - Infrastructure, Davy Vliegen
dynamicscom
 

Similar to Netherlands OSUG | Sep 30 (20)

London Redshift Meetup - July 2017
London Redshift Meetup - July 2017London Redshift Meetup - July 2017
London Redshift Meetup - July 2017
 
Elasticsearch @ ShopWiki 2014-03-20
Elasticsearch @ ShopWiki 2014-03-20Elasticsearch @ ShopWiki 2014-03-20
Elasticsearch @ ShopWiki 2014-03-20
 
Enterprise Data World 2018 - Building Cloud Self-Service Analytical Solution
Enterprise Data World 2018 - Building Cloud Self-Service Analytical SolutionEnterprise Data World 2018 - Building Cloud Self-Service Analytical Solution
Enterprise Data World 2018 - Building Cloud Self-Service Analytical Solution
 
AX2012 Technical Track - Infrastructure, Davy Vliegen
AX2012 Technical Track - Infrastructure, Davy VliegenAX2012 Technical Track - Infrastructure, Davy Vliegen
AX2012 Technical Track - Infrastructure, Davy Vliegen
 
Model versioning done right: A ModelDB 2.0 Walkthrough
Model versioning done right: A ModelDB 2.0 WalkthroughModel versioning done right: A ModelDB 2.0 Walkthrough
Model versioning done right: A ModelDB 2.0 Walkthrough
 
Amazon Redshift Deep Dive
Amazon Redshift Deep Dive Amazon Redshift Deep Dive
Amazon Redshift Deep Dive
 
7 Database Mistakes YOU Are Making -- Linuxfest Northwest 2019
7 Database Mistakes YOU Are Making -- Linuxfest Northwest 20197 Database Mistakes YOU Are Making -- Linuxfest Northwest 2019
7 Database Mistakes YOU Are Making -- Linuxfest Northwest 2019
 
Cloud Native Data Pipelines (DataEngConf SF 2017)
Cloud Native Data Pipelines (DataEngConf SF 2017)Cloud Native Data Pipelines (DataEngConf SF 2017)
Cloud Native Data Pipelines (DataEngConf SF 2017)
 
(ISM303) Migrating Your Enterprise Data Warehouse To Amazon Redshift
(ISM303) Migrating Your Enterprise Data Warehouse To Amazon Redshift(ISM303) Migrating Your Enterprise Data Warehouse To Amazon Redshift
(ISM303) Migrating Your Enterprise Data Warehouse To Amazon Redshift
 
Extreme SSAS - Part II
Extreme SSAS - Part IIExtreme SSAS - Part II
Extreme SSAS - Part II
 
(BDT403) Best Practices for Building Real-time Streaming Applications with Am...
(BDT403) Best Practices for Building Real-time Streaming Applications with Am...(BDT403) Best Practices for Building Real-time Streaming Applications with Am...
(BDT403) Best Practices for Building Real-time Streaming Applications with Am...
 
Migrating and Running DBs on Amazon RDS for Oracle
Migrating and Running DBs on Amazon RDS for OracleMigrating and Running DBs on Amazon RDS for Oracle
Migrating and Running DBs on Amazon RDS for Oracle
 
SQL Server and SharePoint - Best Practices presented by Steffen Krause, Micro...
SQL Server and SharePoint - Best Practices presented by Steffen Krause, Micro...SQL Server and SharePoint - Best Practices presented by Steffen Krause, Micro...
SQL Server and SharePoint - Best Practices presented by Steffen Krause, Micro...
 
Mongo DB at Community Engine
Mongo DB at Community EngineMongo DB at Community Engine
Mongo DB at Community Engine
 
MongoDB at community engine
MongoDB at community engineMongoDB at community engine
MongoDB at community engine
 
Big problems Big Data, simple solutions
Big problems Big Data, simple solutionsBig problems Big Data, simple solutions
Big problems Big Data, simple solutions
 
Redshift deep dive
Redshift deep diveRedshift deep dive
Redshift deep dive
 
Serverless Analytics with Amazon Redshift Spectrum, AWS Glue, and Amazon Quic...
Serverless Analytics with Amazon Redshift Spectrum, AWS Glue, and Amazon Quic...Serverless Analytics with Amazon Redshift Spectrum, AWS Glue, and Amazon Quic...
Serverless Analytics with Amazon Redshift Spectrum, AWS Glue, and Amazon Quic...
 
Big problems Big data, simple AWS solution
Big problems Big data, simple AWS solutionBig problems Big data, simple AWS solution
Big problems Big data, simple AWS solution
 
Easy Analytics with AWS - AWS Summit Bahrain 2017
Easy Analytics with AWS - AWS Summit Bahrain 2017Easy Analytics with AWS - AWS Summit Bahrain 2017
Easy Analytics with AWS - AWS Summit Bahrain 2017
 

Recently uploaded

Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
VictoriaMetrics
 

Recently uploaded (20)

WSO2CON 2024 - How CSI Piemonte Is Apifying the Public Administration
WSO2CON 2024 - How CSI Piemonte Is Apifying the Public AdministrationWSO2CON 2024 - How CSI Piemonte Is Apifying the Public Administration
WSO2CON 2024 - How CSI Piemonte Is Apifying the Public Administration
 
WSO2Con2024 - Facilitating Broadband Switching Services for UK Telecoms Provi...
WSO2Con2024 - Facilitating Broadband Switching Services for UK Telecoms Provi...WSO2Con2024 - Facilitating Broadband Switching Services for UK Telecoms Provi...
WSO2Con2024 - Facilitating Broadband Switching Services for UK Telecoms Provi...
 
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
WSO2CON 2024 - API Management Usage at La Poste and Its Impact on Business an...
 
WSO2CON 2024 - Architecting AI in the Enterprise: APIs and Applications
WSO2CON 2024 - Architecting AI in the Enterprise: APIs and ApplicationsWSO2CON 2024 - Architecting AI in the Enterprise: APIs and Applications
WSO2CON 2024 - Architecting AI in the Enterprise: APIs and Applications
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
WSO2Con2024 - Software Delivery in Hybrid Environments
WSO2Con2024 - Software Delivery in Hybrid EnvironmentsWSO2Con2024 - Software Delivery in Hybrid Environments
WSO2Con2024 - Software Delivery in Hybrid Environments
 
WSO2CON 2024 - Designing Event-Driven Enterprises: Stories of Transformation
WSO2CON 2024 - Designing Event-Driven Enterprises: Stories of TransformationWSO2CON 2024 - Designing Event-Driven Enterprises: Stories of Transformation
WSO2CON 2024 - Designing Event-Driven Enterprises: Stories of Transformation
 
WSO2CON 2024 Slides - Unlocking Value with AI
WSO2CON 2024 Slides - Unlocking Value with AIWSO2CON 2024 Slides - Unlocking Value with AI
WSO2CON 2024 Slides - Unlocking Value with AI
 
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
 
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
 
WSO2Con2024 - Navigating the Digital Landscape: Transforming Healthcare with ...
WSO2Con2024 - Navigating the Digital Landscape: Transforming Healthcare with ...WSO2Con2024 - Navigating the Digital Landscape: Transforming Healthcare with ...
WSO2Con2024 - Navigating the Digital Landscape: Transforming Healthcare with ...
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
 
WSO2CON 2024 - Unlocking the Identity: Embracing CIAM 2.0 for a Competitive A...
WSO2CON 2024 - Unlocking the Identity: Embracing CIAM 2.0 for a Competitive A...WSO2CON 2024 - Unlocking the Identity: Embracing CIAM 2.0 for a Competitive A...
WSO2CON 2024 - Unlocking the Identity: Embracing CIAM 2.0 for a Competitive A...
 
AzureNativeQumulo_HPC_Cloud_Native_Benchmarks.pdf
AzureNativeQumulo_HPC_Cloud_Native_Benchmarks.pdfAzureNativeQumulo_HPC_Cloud_Native_Benchmarks.pdf
AzureNativeQumulo_HPC_Cloud_Native_Benchmarks.pdf
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
 
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
 
WSO2Con2024 - Low-Code Integration Tooling
WSO2Con2024 - Low-Code Integration ToolingWSO2Con2024 - Low-Code Integration Tooling
WSO2Con2024 - Low-Code Integration Tooling
 
WSO2CON 2024 - Not Just Microservices: Rightsize Your Services!
WSO2CON 2024 - Not Just Microservices: Rightsize Your Services!WSO2CON 2024 - Not Just Microservices: Rightsize Your Services!
WSO2CON 2024 - Not Just Microservices: Rightsize Your Services!
 

Netherlands OSUG | Sep 30

  • 1.
  • 2.
  • 3.
  • 4. 30 SEPTEMBER 2021 Near Real-Time ERP Integration Processing High Data Volumes Ozan Çali OutSystems Developer @ Product League ocali@product-league.com
  • 5. Agenda • Integration Strategies o Cache & Synchronization Patterns • Queueing & Bucketing • Throttling • Best Practices 5
  • 6. 200 shelves in each store 400 stores 15000 articles Multiple prices for different units / dates / stores ERP • Master of data • Near-static store & article data • Frequent updates for shelf plans & prices 6
  • 7. 7 Large central price changes each week ~6M total shelf plans, available every night ~20M total price records, available immediately ~15000 articles, rarely change Store employee Backoffice admin Reporter
  • 8. Use Cases Client wants to have shelf labels printed when any label field is updated in ERP 8
  • 9. Use Cases Create jobs to print shelf labels automatically when there is a change to any article-related data 9
  • 10. Use Cases Allow users to select articles to be printed on demand 10
  • 11. Challenge How do we get all the changes real-time? 11
  • 13. Read-Through Cache 1. Try to fetch from cache (DB) 2. If not found or outdated, get from ERP and cache it 13
  • 14. Synchronization Patterns Direct Integration Cold Cache with batch sync Cold Cache with real-time sync Article_CS Article_IS ERP Article_CS Article_IS ERP Article_Sync Article_CS Article_IS ERP Article_API 14
  • 15. Direct Integration Always call ERP? • Suitable if information changes too often • Data always up-to-date • Only good for small amounts • More latency • More hits to ERP • More APIs, one per retrieval use case • Single point of failure Article_CS Article_IS ERP 15
  • 16. Article_CS Article_IS ERP Synchronization Patterns Direct Integration Cold Cache with batch sync Cold Cache with real-time sync Article_CS Article_IS ERP Article_Sync Article_CS Article_IS ERP Article_API 16
  • 17. Get changes periodically? Cold Cache with batch sync • Simple to set up IS • Enables data manipulation in OutSystems • Less calls to ERP • Isolated Sync module -> consumers of CS is not impacted by the Sync code Data may be outdated Article_CS Article_IS ERP Article_Sync 17
  • 18. Article_CS Article_IS ERP Article_CS Article_IS ERP Article_Sync Synchronization Patterns Direct Integration Cold Cache with batch sync Cold Cache with real-time sync Article_CS Article_IS ERP Article_API 18
  • 19. Get changes as they happen? Cold Cache with real-time sync • ERP calls OutSystems when there is a change • API and IS isolated from CS • Data always up to date More alignment between ERP and OutSystems teams Article_CS Article_IS ERP Article_API 19 call OS about a change
  • 20. Article_CS Article_IS ERP Article_CS Article_IS ERP Article_Sync Synchronization Patterns Direct Integration Cold Cache with batch sync Cold Cache with real-time sync Article_CS Article_IS ERP Article_API SUITABLE 20
  • 21. A business rule appears! Cold Cache with real-time sync • ERP calls back OutSystems when there is a change • API and IS isolated from CS • Data always up to date More alignment between ERP and OutSystems teams …Might be insufficient for a high load of changes “Every Wed morning, we send all price changes for all articles & stores” Article_CS Article_IS ERP Article_API 21
  • 22. Extra flavor: Queueing Queued real-time sync Synchronization of data is processed in parallel Quick insert of update request in a queue BPT reacts to the inserted queue message Article_CS Article_IS ERP Article_API 22
  • 23. What if the size of incoming change is very big? 23
  • 24. Divide and conquer! Queued real-time sync with buckets Each subset starts a BPT, which in turn calls back ERP to get the details for changes A timer gets the first unprocessed staging and divides it into smaller subsets (= buckets) Article_Sync ERP calls our API about a change Each call to our API is quickly saved as JSON in a Staging entity Each returning set from ERP is flat-saved in a Notification entity with StagingId FK. Article_CS Article_IS ERP Article_API When the last bucket is finished with processing, all records from the Notification table for that StagingId will be upserted into CS. 24
  • 25. Only IDs of the changes from ERP to our API Max no. of allowed articles in a call to ERP: 2 (from SP) E.g. there are 5 changes I II 25
  • 26. In Sync module, we create 3 buckets out of the staging They each start a BPT each, to get the details from ERP III IV 26
  • 27. The retrieved details are flat-saved in a Notification table, to be merged to cache after the staging is fully processed. V 27
  • 30. A limitation appears! “But you can only do 10 requests to ERP concurrently!” Queued real-time sync with buckets OS default: • 10 simultaneous BPT threads • 20 simultaneous LightBPTs threads per OS FE server! Article_Sync Article_CS Article_IS ERP Article_API 30
  • 31. Throttling to the rescue! Intentional slowing down of the requests to ERP Control the number of active BPTs 31
  • 32. Define max allowed no. of concurrent buckets in a SP Subtract no. of currently in-progress buckets Launch a BPT for each bucket with no. of available threads Throttling to the rescue! 32
  • 33. 33
  • 36. Isolation • Integration Service per independent concept • Separation of concerns • Each concept has its own life cycle • Also separate BPTs for each concept 36
  • 37. Bootstrapping Initial Load • Need readily available data for go-live? o Design proactively o Reusable actions 37
  • 38. Exception Handling • Handling errors per use-case • Lets us to decide o whether to retry or stop the process instance o to log the message into right location and notify the right people 38
  • 39. 39
  • 40. Retry button in Backoffice 40
  • 41. Data cleanup • A timer for each concept to delete records that are older than X days • Old data can be backed up to another archive DB for logging reasons 41
  • 42. References • Designing the Architecture of OS Applications • Integration Patterns for Core Services Abstraction • Processes (BPT) • Using MERGE in SQL 42
  • 43.
  • 44. TRANSFER SOLUTIONS A bit of sass never hurt anyone 1 Getting Sassy with Outsystems Getting Sassy with Outsystems Joris Albeda joris.albeda@transfer-solutions.com
  • 45. GETTING SASSY WITH OUTSYSTEMS |1. What is Sass |2. But How! |3. Sassy Outsystems in your team 2 Getting Sassy with Outsystems
  • 46. PART 1: WHAT IS IT Getting Sassy with Outsystems 3 Syntactically Awesome StyleSheets
  • 47. PART 1: WHAT IS IT Getting Sassy with Outsystems 4 SCSS: Sassy CSS THE EXPANSION
  • 48. PART 1: WHAT IS IT Getting Sassy with Outsystems 5 | Sass is a preprocessor. | New functionality | Neater code, which is compiled to CSS! Sass Compiler
  • 49. WHAT IS THIS FUNCTIONALITY YOU SPEAK OF? 6 Getting Sassy with Outsystems
  • 50. 7 Getting Sassy with Outsystems PART 1: WHAT IS IT | Variables | Nesting | External files | Extending, mixins, functions, @if en @for, and much more… In summary
  • 51. PART 2: BUT HOW? Getting Sassy with Outsystems 8 A setup for Outsystems and Sass
  • 52. 9 Getting Sassy with Outsystems PART 2: BUT HOW? | Visual Studio Code with extensions: | Live Server for hosting the CSS | Live Sass Compiler for compiling your Sass | SCSS IntelliSense for checking your Sass | Super CSS Inject | For Chrome | For Firefox Ingredients
  • 53. SHOW US! 10 Getting Sassy with Outsystems
  • 54. 11 Getting Sassy with Outsystems PART 3: SASSY OUTSYSTEMS IN YOUR TEAM Two scenarios | Scenario 1: Only you manage the Theme | Scenario 2: Managing the Theme together
  • 55. 12 Getting Sassy with Outsystems PART 3: SASSY OUTSYSTEMS IN YOUR TEAM Scenario 1: Only you manage the Theme
  • 56. 13 Getting Sassy with Outsystems PART 3: SASSY OUTSYSTEMS IN YOUR TEAM | Only you use Sass | Communicate clearly to your team! | Repository is recommended (Git, SVN, …) | Team members add new CSS at the bottom of the Theme CSS Scenario 1: Only you manage the Theme
  • 57. 14 Getting Sassy with Outsystems PART 3: SASSY OUTSYSTEMS IN YOUR TEAM | Only you use Sass | Communicate clearly to your team! | Repository is recommended (Git, SVN, …) | Team members add new CSS at the bottom of the Theme CSS Scenario 1: Only you manage the Theme You process new CSS in the Sass
  • 58. 15 Getting Sassy with Outsystems PART 3: SASSY OUTSYSTEMS IN YOUR TEAM | Agree to use Sass together! | Repository is needed (Git, SVN, …) Scenario 2: Managing the Theme together
  • 59. 16 Getting Sassy with Outsystems CONCLUSION | Sass: make your CSS better and neater | InjectCSS: Develop more quickly | Do as I did, and try it out!
  • 60. 17 Getting Sassy with Outsystems CONCLUSION | Sass: make your CSS better and neater | InjectCSS: Develop more quickly | Do as I did, and try it out!
  • 61. 18 Getting Sassy with Outsystems LINKS | Visual Studio Code with extensions: | Live Server for hosting the CSS | Live Sass Compiler for compiling the Sass | SCSS IntelliSense for checking the Sass | Super CSS Inject | For Chrome | For Firefox | Sass documentation | Sass 7-1 project structure | Need help? Ideas? joris.albeda@transfer-solutions.com For your convenience