SlideShare uma empresa Scribd logo
1 de 21
Baixar para ler offline
Monday, April 8, 13
Creating Successful
Magento ERP Integrations
Monday, April 8, 13
Happy Together
Creating Successful
Magento ERP Integrations
CTO / Lead Engineer
www.classyllama.com
David Alger
Monday, April 8, 13
A Little About Me
• Exclusively focused on Magento eCommerce since early ’09
• Member of the Magento Technical Partner Council
• Member of the Magento Certification Advisory Board
• Magento Certified Developer Plus
• Magento Front End Certified Developer
• Zend Certified Engineer
• Experienced Software Integrator
Monday, April 8, 13
Architecting and engineering a Magento ERP integration while
avoiding the pitfalls and challenges that come with integrating
multiple enterprise-level software components
Creating Magento ERP Integrations
Monday, April 8, 13
What’s On Our Agenda
• Reasons for Integrating
• Purpose Driven Nature
• Architectural Design
• Facing Challenges
• Engineering Solutions
• Integration Scalability
Monday, April 8, 13
Why an Integration?
• An ERP in simple terms:
– Software built around the premise of having the ability to manage all of
the information and functions of a company seamlessly and in real-time
• What benefits are there?
– Centralization, accuracy, less hassle!
• Order Fulfillment
• Customer Service
• Product Management
• Integrating Magento with your ERP means an increase in efficiency
Monday, April 8, 13
Purpose Driven Nature
• Integrations with any software should be purpose driven
• What are the goals of the integration?
– Example: Guaranteed accurate information across properties
– Example: Less headaches during order fulfillment
Monday, April 8, 13
Architectural Design
• The importance of having an integration “blueprint”
– Information Coverage
– Master of Record
– Direction of Flow
• Pre-requisites for designing a workable solution
– Insights into business process
– Familiarity with software
– Knowledge of the data
• Integration paradigms
– Middleware vs Direct
Monday, April 8, 13
Typical Technical “Blueprint”
1. Integration Goals / Summary
2. Integration Dependencies
3. Integration Method
4. Integration Requirements
4.1. Product Information
4.1.1. Inventory
4.1.2. Pricing
4.1.2.1. General Pricing
4.1.2.2. Customer Tiers
4.2. Customer Accounts
4.3. Orders
4.3.1. Export
4.3.2. Fulfillment / Updates
4.3.3. Payment Processing
Monday, April 8, 13
Facing Challenges
• Using COTS (Commercial Off the Shelf) products
• Controlling data exposure at connection points
– aka PCI-DSS compliance
• Real-time data synchronization: Is it possible or even worth it?
• Maintaining data integrity between disparate systems
• Overall reliability of the integration processes
Monday, April 8, 13
Engineering Solutions
• Methods of Direct Integration
• Managing Memory Leaks
• Building a Scalable Integration
Monday, April 8, 13
Methods of Direct Integration
• Database
– Remote
– Local
• Flat Files
• Web Services
• Combinations
Monday, April 8, 13
Managing Memory Leaks
• PHP 5.3 Garbage Collector
– Largely addressed circular reference memory leaks
– Far better than PHP 5.2 but doesn’t eliminate all possible leaks
– Global anonymous functions can still be orphaned!
• Looping over all records of a large catalog in one execution is a practical
impossibility... particularly when running PHP 5.2 or GC disabled
• Using memory_get_usage and a bit of clever logic:
– We can prevent processes dying due to memory leaks
– Create a robust and reliable process manager
Monday, April 8, 13
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
abstract class CLS_Integration_Model_Process_Abstract
{
protected static function _getMemLimit() {
static $limit = NULL;
if ($limit === NULL) {
$value = trim(ini_get('memory_limit'));
$code = strtolower($value[strlen($value)-1]);
switch ($code) {
case 'g': // intentional fall through
$value *= 1024;
case 'm': // intentional fall through
$value *= 1024;
case 'k': // intentional fall through
$value *= 1024;
}
$limit = (int)$value;
}
return $limit;
}
/**
* Reschedules the cron job $interval seconds into the future.
*
* @param Mage_Cron_Model_Schedule $schedule
Monday, April 8, 13
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
* @param CLS_Integration_Model_Resource_Erp_Db_Collection_Abstract $collection
* @param string $callback
*/
protected function _processDataCollection($collection, $callback) {
$index = 0;
$limit = self::_getMemLimit(); // store the memory limit in bytes for calculations
$baseline = 0; // the current memory usage at last iteration
$delta = 0; // maximum difference in memory usgae from one iteration to the next
$space = NULL; // the remaining number of iterations we have based on the $delta
foreach ($collection as $record) {
$baseline = memory_get_usage(); // update the baseline
try {
$this->$callback($record); // process the record
} catch (Zend_Db_Exception $e) {
// catch, log and skip items where an exception (like a deadlock or lock timeout) occurs...
Mage::logException($e);
continue;
}
if ($index == 0) {
$baseline = memory_get_usage(); // first iteration, update this post-processing to avoid inflated delta
} else {
$delta = max($delta, memory_get_usage() - $baseline, 0.0001); // calculate memory usage delta
$space = floor(($limit - memory_get_usage()) / $delta); // calculate approximate space for iterations
}
// if we have space for less than 100 estimated iteration remaining, log a message and break to cleanup
if ($space !== NULL && $space <= 100) {
Mage::log("CLS_Integration [".__CLASS__."::".__FUNCTION__."]: Must terminate, within 100"
." iterations of remaining space allowed by memory_limit!");
return false;
}
}
return true;
}
}
Monday, April 8, 13
Building a Scalable Integration
• Dealing with large amounts of data
– Polling for changes
– Data write throughput
– Index management
• Managing integration processes
– Use the built-in cron dispatcher for job execution
– Thread locks are critical to avoid racing and overworking jobs
– A page cursor can come in very handy when polling is used
Monday, April 8, 13
}
/**
* Reschedules the cron job $interval seconds into the future.
*
* @param Mage_Cron_Model_Schedule $schedule
* @param int $interval
*/
protected function _rescheduleCron(Mage_Cron_Model_Schedule $pSchedule, $interval = 10) {
$timestamp = Mage::getSingleton('core/date')->gmtTimestamp()+$interval;
$schedule = Mage::getModel('cron/schedule');
$schedule->setJobCode($pSchedule->getJobCode())
->setStatus(Mage_Cron_Model_Schedule::STATUS_PENDING)
->setCreatedAt($timestamp)
->setScheduledAt($timestamp)
;
$schedule->save();
return $this;
}
/**
* Takes a data collections and process it within a memory monitoring loop
*
* @param CLS_Integration_Model_Resource_Erp_Db_Collection_Abstract $collectionMonday, April 8, 13
--
-- cls_integration_process_lock - table schema
--
CREATE TABLE `cls_integration_process_lock` (
`code` varchar(50) NOT NULL COMMENT 'Job Code',
`locked_at` timestamp NULL DEFAULT NULL COMMENT 'Locked At',
`freed_at` timestamp NULL DEFAULT NULL COMMENT 'Freed At',
`status` smallint(6) NOT NULL DEFAULT '0' COMMENT 'Lock Status',
PRIMARY KEY (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Holds an atomically set lock to prevent overlapping jobs.';
--
-- cls_integration_process_lock - atomic lock update
-- ref: CLS_Integration_Model_Resource_Process_Lock::obtainLock
--
UPDATE `cls_integration_process_lock` SET `status` = 1 WHERE `status` = 0 AND `code` = 'product';
8e7c0768e7c076 a minute agoa minute ago BlameBlame FuFu
Blog · Report a bug · Support · Documentation · API · Forum · Server status · Terms of service · Privacy policy
Monday, April 8, 13
--
-- cls_integration_process_lock - table schema
--
CREATE TABLE `cls_integration_process_lock` (
`code` varchar(50) NOT NULL COMMENT 'Job Code',
`locked_at` timestamp NULL DEFAULT NULL COMMENT 'Locked At',
`freed_at` timestamp NULL DEFAULT NULL COMMENT 'Freed At',
`status` smallint(6) NOT NULL DEFAULT '0' COMMENT 'Lock Status',
PRIMARY KEY (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Holds an atomically set lock to prevent overlapping jobs.';
--
-- cls_integration_process_lock - atomic lock update
-- ref: CLS_Integration_Model_Resource_Process_Lock::obtainLock
--
UPDATE `cls_integration_process_lock` SET `status` = 1 WHERE `status` = 0 AND `code` = 'product';
8e7c0768e7c076 a minute agoa minute ago BlameBlame FuFu
Blog · Report a bug · Support · Documentation · API · Forum · Server status · Terms of service · Privacy policy
Monday, April 8, 13
Questions or Comments?
David Alger (@blackbooker)
CTO / Lead Engineer
www.classyllama.com
david@classyllama.com
http://bit.ly/imagine-erp
P.S.W
E’R
E
H
IR
IN
G
!!!
Monday, April 8, 13

Mais conteúdo relacionado

Mais procurados

Cake PHP 3 Presentaion
Cake PHP 3 PresentaionCake PHP 3 Presentaion
Cake PHP 3 Presentaionglslarmenta
 
Drupal 8 Services And Dependency Injection
Drupal 8 Services And Dependency InjectionDrupal 8 Services And Dependency Injection
Drupal 8 Services And Dependency InjectionPhilip Norton
 
Getting Into Drupal 8 Configuration
Getting Into Drupal 8 ConfigurationGetting Into Drupal 8 Configuration
Getting Into Drupal 8 ConfigurationPhilip Norton
 
Database Connection With Mysql
Database Connection With MysqlDatabase Connection With Mysql
Database Connection With MysqlHarit Kothari
 
Php MySql For Beginners
Php MySql For BeginnersPhp MySql For Beginners
Php MySql For BeginnersPriti Solanki
 
Building a theming system with React - Matteo Ronchi - Codemotion Amsterdam 2017
Building a theming system with React - Matteo Ronchi - Codemotion Amsterdam 2017Building a theming system with React - Matteo Ronchi - Codemotion Amsterdam 2017
Building a theming system with React - Matteo Ronchi - Codemotion Amsterdam 2017Codemotion
 
PHP and MySQL PHP Written as a set of CGI binaries in C in ...
PHP and MySQL PHP Written as a set of CGI binaries in C in ...PHP and MySQL PHP Written as a set of CGI binaries in C in ...
PHP and MySQL PHP Written as a set of CGI binaries in C in ...webhostingguy
 
System performance tuning
System performance tuningSystem performance tuning
System performance tuningMenandro Oba
 
Drupal 8 configuration management
Drupal 8 configuration managementDrupal 8 configuration management
Drupal 8 configuration managementAlexander Tkachev
 

Mais procurados (14)

Php database connectivity
Php database connectivityPhp database connectivity
Php database connectivity
 
Cake PHP 3 Presentaion
Cake PHP 3 PresentaionCake PHP 3 Presentaion
Cake PHP 3 Presentaion
 
Drupal 8 Services And Dependency Injection
Drupal 8 Services And Dependency InjectionDrupal 8 Services And Dependency Injection
Drupal 8 Services And Dependency Injection
 
Getting Into Drupal 8 Configuration
Getting Into Drupal 8 ConfigurationGetting Into Drupal 8 Configuration
Getting Into Drupal 8 Configuration
 
Drupal 8 Services
Drupal 8 ServicesDrupal 8 Services
Drupal 8 Services
 
Database Connection With Mysql
Database Connection With MysqlDatabase Connection With Mysql
Database Connection With Mysql
 
PHP and MySQL
PHP and MySQLPHP and MySQL
PHP and MySQL
 
Php MySql For Beginners
Php MySql For BeginnersPhp MySql For Beginners
Php MySql For Beginners
 
Building a theming system with React - Matteo Ronchi - Codemotion Amsterdam 2017
Building a theming system with React - Matteo Ronchi - Codemotion Amsterdam 2017Building a theming system with React - Matteo Ronchi - Codemotion Amsterdam 2017
Building a theming system with React - Matteo Ronchi - Codemotion Amsterdam 2017
 
PHP and MySQL PHP Written as a set of CGI binaries in C in ...
PHP and MySQL PHP Written as a set of CGI binaries in C in ...PHP and MySQL PHP Written as a set of CGI binaries in C in ...
PHP and MySQL PHP Written as a set of CGI binaries in C in ...
 
4.3 MySQL + PHP
4.3 MySQL + PHP4.3 MySQL + PHP
4.3 MySQL + PHP
 
Alfredo-PUMEX
Alfredo-PUMEXAlfredo-PUMEX
Alfredo-PUMEX
 
System performance tuning
System performance tuningSystem performance tuning
System performance tuning
 
Drupal 8 configuration management
Drupal 8 configuration managementDrupal 8 configuration management
Drupal 8 configuration management
 

Destaque

Data Isolation and Merchandizing in a Single Magento Instance | Imagine 2013 ...
Data Isolation and Merchandizing in a Single Magento Instance | Imagine 2013 ...Data Isolation and Merchandizing in a Single Magento Instance | Imagine 2013 ...
Data Isolation and Merchandizing in a Single Magento Instance | Imagine 2013 ...Atwix
 
Host and Boast: Best Practices for Magento Hosting | Imagine 2013 Technolog…
Host and Boast: Best Practices for Magento Hosting | Imagine 2013 Technolog…Host and Boast: Best Practices for Magento Hosting | Imagine 2013 Technolog…
Host and Boast: Best Practices for Magento Hosting | Imagine 2013 Technolog…Atwix
 
Act Now: 10 Tips for Boosting your Business | Magento Imagine 2013 Marketing ...
Act Now: 10 Tips for Boosting your Business | Magento Imagine 2013 Marketing ...Act Now: 10 Tips for Boosting your Business | Magento Imagine 2013 Marketing ...
Act Now: 10 Tips for Boosting your Business | Magento Imagine 2013 Marketing ...Atwix
 
Brands to Beat: Brand Building in an Omni Channel World | Imagine 2013 Strate...
Brands to Beat: Brand Building in an Omni Channel World | Imagine 2013 Strate...Brands to Beat: Brand Building in an Omni Channel World | Imagine 2013 Strate...
Brands to Beat: Brand Building in an Omni Channel World | Imagine 2013 Strate...Atwix
 
Mobile First: Responsive Design for eCommerce | Imagine 2013 Technology | B…
Mobile First: Responsive Design for eCommerce | Imagine 2013 Technology | B…Mobile First: Responsive Design for eCommerce | Imagine 2013 Technology | B…
Mobile First: Responsive Design for eCommerce | Imagine 2013 Technology | B…Atwix
 
The Future of Magento Extensibility | Imagine 2013 Technology | Christopher O...
The Future of Magento Extensibility | Imagine 2013 Technology | Christopher O...The Future of Magento Extensibility | Imagine 2013 Technology | Christopher O...
The Future of Magento Extensibility | Imagine 2013 Technology | Christopher O...Atwix
 
The Importance of Fully Managed Hosting for Magento Enterprise | Imagine 2013...
The Importance of Fully Managed Hosting for Magento Enterprise | Imagine 2013...The Importance of Fully Managed Hosting for Magento Enterprise | Imagine 2013...
The Importance of Fully Managed Hosting for Magento Enterprise | Imagine 2013...Atwix
 
Learning to Fly: How Angry Birds Reached the Heights of Store Performance |…
Learning to Fly: How Angry Birds Reached the Heights of Store Performance |…Learning to Fly: How Angry Birds Reached the Heights of Store Performance |…
Learning to Fly: How Angry Birds Reached the Heights of Store Performance |…Atwix
 

Destaque (8)

Data Isolation and Merchandizing in a Single Magento Instance | Imagine 2013 ...
Data Isolation and Merchandizing in a Single Magento Instance | Imagine 2013 ...Data Isolation and Merchandizing in a Single Magento Instance | Imagine 2013 ...
Data Isolation and Merchandizing in a Single Magento Instance | Imagine 2013 ...
 
Host and Boast: Best Practices for Magento Hosting | Imagine 2013 Technolog…
Host and Boast: Best Practices for Magento Hosting | Imagine 2013 Technolog…Host and Boast: Best Practices for Magento Hosting | Imagine 2013 Technolog…
Host and Boast: Best Practices for Magento Hosting | Imagine 2013 Technolog…
 
Act Now: 10 Tips for Boosting your Business | Magento Imagine 2013 Marketing ...
Act Now: 10 Tips for Boosting your Business | Magento Imagine 2013 Marketing ...Act Now: 10 Tips for Boosting your Business | Magento Imagine 2013 Marketing ...
Act Now: 10 Tips for Boosting your Business | Magento Imagine 2013 Marketing ...
 
Brands to Beat: Brand Building in an Omni Channel World | Imagine 2013 Strate...
Brands to Beat: Brand Building in an Omni Channel World | Imagine 2013 Strate...Brands to Beat: Brand Building in an Omni Channel World | Imagine 2013 Strate...
Brands to Beat: Brand Building in an Omni Channel World | Imagine 2013 Strate...
 
Mobile First: Responsive Design for eCommerce | Imagine 2013 Technology | B…
Mobile First: Responsive Design for eCommerce | Imagine 2013 Technology | B…Mobile First: Responsive Design for eCommerce | Imagine 2013 Technology | B…
Mobile First: Responsive Design for eCommerce | Imagine 2013 Technology | B…
 
The Future of Magento Extensibility | Imagine 2013 Technology | Christopher O...
The Future of Magento Extensibility | Imagine 2013 Technology | Christopher O...The Future of Magento Extensibility | Imagine 2013 Technology | Christopher O...
The Future of Magento Extensibility | Imagine 2013 Technology | Christopher O...
 
The Importance of Fully Managed Hosting for Magento Enterprise | Imagine 2013...
The Importance of Fully Managed Hosting for Magento Enterprise | Imagine 2013...The Importance of Fully Managed Hosting for Magento Enterprise | Imagine 2013...
The Importance of Fully Managed Hosting for Magento Enterprise | Imagine 2013...
 
Learning to Fly: How Angry Birds Reached the Heights of Store Performance |…
Learning to Fly: How Angry Birds Reached the Heights of Store Performance |…Learning to Fly: How Angry Birds Reached the Heights of Store Performance |…
Learning to Fly: How Angry Birds Reached the Heights of Store Performance |…
 

Semelhante a Happy Together: Creating Successful Magento ERP Integrations | Imagine 2013…

Advance Sql Server Store procedure Presentation
Advance Sql Server Store procedure PresentationAdvance Sql Server Store procedure Presentation
Advance Sql Server Store procedure PresentationAmin Uddin
 
6 tips for improving ruby performance
6 tips for improving ruby performance6 tips for improving ruby performance
6 tips for improving ruby performanceEngine Yard
 
PHP Continuous Data Processing
PHP Continuous Data ProcessingPHP Continuous Data Processing
PHP Continuous Data ProcessingMichael Peacock
 
Zend Con 2008 Slides
Zend Con 2008 SlidesZend Con 2008 Slides
Zend Con 2008 Slidesmkherlakian
 
Caching and tuning fun for high scalability @ FrOSCon 2011
Caching and tuning fun for high scalability @ FrOSCon 2011Caching and tuning fun for high scalability @ FrOSCon 2011
Caching and tuning fun for high scalability @ FrOSCon 2011Wim Godden
 
Caching and tuning fun for high scalability @ phpBenelux 2011
Caching and tuning fun for high scalability @ phpBenelux 2011Caching and tuning fun for high scalability @ phpBenelux 2011
Caching and tuning fun for high scalability @ phpBenelux 2011Wim Godden
 
Finding Your Way: Understanding Magento Code
Finding Your Way: Understanding Magento CodeFinding Your Way: Understanding Magento Code
Finding Your Way: Understanding Magento CodeBen Marks
 
Caching and tuning fun for high scalability
Caching and tuning fun for high scalabilityCaching and tuning fun for high scalability
Caching and tuning fun for high scalabilityWim Godden
 
Sql storeprocedure
Sql storeprocedureSql storeprocedure
Sql storeprocedureftz 420
 
Intro To Mvc Development In Php
Intro To Mvc Development In PhpIntro To Mvc Development In Php
Intro To Mvc Development In Phpfunkatron
 
JUDCon London 2011 - Bin packing with drools planner by example
JUDCon London 2011 - Bin packing with drools planner by exampleJUDCon London 2011 - Bin packing with drools planner by example
JUDCon London 2011 - Bin packing with drools planner by exampleGeoffrey De Smet
 
Built-in query caching for all PHP MySQL extensions/APIs
Built-in query caching for all PHP MySQL extensions/APIsBuilt-in query caching for all PHP MySQL extensions/APIs
Built-in query caching for all PHP MySQL extensions/APIsUlf Wendel
 
Magento Live Australia 2016: Request Flow
Magento Live Australia 2016: Request FlowMagento Live Australia 2016: Request Flow
Magento Live Australia 2016: Request FlowVrann Tulika
 
Caching and tuning fun for high scalability
Caching and tuning fun for high scalabilityCaching and tuning fun for high scalability
Caching and tuning fun for high scalabilityWim Godden
 
Sydney Oracle Meetup - execution plans
Sydney Oracle Meetup - execution plansSydney Oracle Meetup - execution plans
Sydney Oracle Meetup - execution planspaulguerin
 
Zend Server Data Caching
Zend Server Data CachingZend Server Data Caching
Zend Server Data CachingEl Taller Web
 
Caching and tuning fun for high scalability @ PHPTour
Caching and tuning fun for high scalability @ PHPTourCaching and tuning fun for high scalability @ PHPTour
Caching and tuning fun for high scalability @ PHPTourWim Godden
 
ONE MORE TIME ABOUT CODE STANDARDS AND BEST PRACTICES
ONE MORE TIME ABOUT CODE STANDARDS AND BEST PRACTICESONE MORE TIME ABOUT CODE STANDARDS AND BEST PRACTICES
ONE MORE TIME ABOUT CODE STANDARDS AND BEST PRACTICESDrupalCamp Kyiv
 

Semelhante a Happy Together: Creating Successful Magento ERP Integrations | Imagine 2013… (20)

Advance Sql Server Store procedure Presentation
Advance Sql Server Store procedure PresentationAdvance Sql Server Store procedure Presentation
Advance Sql Server Store procedure Presentation
 
6 tips for improving ruby performance
6 tips for improving ruby performance6 tips for improving ruby performance
6 tips for improving ruby performance
 
PHP Continuous Data Processing
PHP Continuous Data ProcessingPHP Continuous Data Processing
PHP Continuous Data Processing
 
Zend Con 2008 Slides
Zend Con 2008 SlidesZend Con 2008 Slides
Zend Con 2008 Slides
 
Caching and tuning fun for high scalability @ FrOSCon 2011
Caching and tuning fun for high scalability @ FrOSCon 2011Caching and tuning fun for high scalability @ FrOSCon 2011
Caching and tuning fun for high scalability @ FrOSCon 2011
 
Caching and tuning fun for high scalability @ phpBenelux 2011
Caching and tuning fun for high scalability @ phpBenelux 2011Caching and tuning fun for high scalability @ phpBenelux 2011
Caching and tuning fun for high scalability @ phpBenelux 2011
 
Php frameworks
Php frameworksPhp frameworks
Php frameworks
 
Finding Your Way: Understanding Magento Code
Finding Your Way: Understanding Magento CodeFinding Your Way: Understanding Magento Code
Finding Your Way: Understanding Magento Code
 
Caching and tuning fun for high scalability
Caching and tuning fun for high scalabilityCaching and tuning fun for high scalability
Caching and tuning fun for high scalability
 
Sql storeprocedure
Sql storeprocedureSql storeprocedure
Sql storeprocedure
 
Intro To Mvc Development In Php
Intro To Mvc Development In PhpIntro To Mvc Development In Php
Intro To Mvc Development In Php
 
JUDCon London 2011 - Bin packing with drools planner by example
JUDCon London 2011 - Bin packing with drools planner by exampleJUDCon London 2011 - Bin packing with drools planner by example
JUDCon London 2011 - Bin packing with drools planner by example
 
Built-in query caching for all PHP MySQL extensions/APIs
Built-in query caching for all PHP MySQL extensions/APIsBuilt-in query caching for all PHP MySQL extensions/APIs
Built-in query caching for all PHP MySQL extensions/APIs
 
Magento Live Australia 2016: Request Flow
Magento Live Australia 2016: Request FlowMagento Live Australia 2016: Request Flow
Magento Live Australia 2016: Request Flow
 
Oracle SQL Tuning
Oracle SQL TuningOracle SQL Tuning
Oracle SQL Tuning
 
Caching and tuning fun for high scalability
Caching and tuning fun for high scalabilityCaching and tuning fun for high scalability
Caching and tuning fun for high scalability
 
Sydney Oracle Meetup - execution plans
Sydney Oracle Meetup - execution plansSydney Oracle Meetup - execution plans
Sydney Oracle Meetup - execution plans
 
Zend Server Data Caching
Zend Server Data CachingZend Server Data Caching
Zend Server Data Caching
 
Caching and tuning fun for high scalability @ PHPTour
Caching and tuning fun for high scalability @ PHPTourCaching and tuning fun for high scalability @ PHPTour
Caching and tuning fun for high scalability @ PHPTour
 
ONE MORE TIME ABOUT CODE STANDARDS AND BEST PRACTICES
ONE MORE TIME ABOUT CODE STANDARDS AND BEST PRACTICESONE MORE TIME ABOUT CODE STANDARDS AND BEST PRACTICES
ONE MORE TIME ABOUT CODE STANDARDS AND BEST PRACTICES
 

Mais de Atwix

Igor Miniailo - Magento 2 API Design Best Practices
Igor Miniailo - Magento 2 API Design Best PracticesIgor Miniailo - Magento 2 API Design Best Practices
Igor Miniailo - Magento 2 API Design Best PracticesAtwix
 
Valeriy Nayda - Best Practices in Magento 2. Based on Multi Source Inventory ...
Valeriy Nayda - Best Practices in Magento 2. Based on Multi Source Inventory ...Valeriy Nayda - Best Practices in Magento 2. Based on Multi Source Inventory ...
Valeriy Nayda - Best Practices in Magento 2. Based on Multi Source Inventory ...Atwix
 
Yaroslav Rogoza - Development Environment: Local or Remote?
Yaroslav Rogoza - Development Environment: Local or Remote?Yaroslav Rogoza - Development Environment: Local or Remote?
Yaroslav Rogoza - Development Environment: Local or Remote?Atwix
 
Magento 2 performance comparison in different environments by Yaroslav Rogoza...
Magento 2 performance comparison in different environments by Yaroslav Rogoza...Magento 2 performance comparison in different environments by Yaroslav Rogoza...
Magento 2 performance comparison in different environments by Yaroslav Rogoza...Atwix
 
Viacheslav Kravchuk. Working as a distributed company. Our journey. Meet Mage...
Viacheslav Kravchuk. Working as a distributed company. Our journey. Meet Mage...Viacheslav Kravchuk. Working as a distributed company. Our journey. Meet Mage...
Viacheslav Kravchuk. Working as a distributed company. Our journey. Meet Mage...Atwix
 
Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2
Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2
Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2Atwix
 
Александр Смага, Юрий Муратов - Meet Magento Ukraine - Технический обзор OroCRM
Александр Смага, Юрий Муратов - Meet Magento Ukraine - Технический обзор OroCRM Александр Смага, Юрий Муратов - Meet Magento Ukraine - Технический обзор OroCRM
Александр Смага, Юрий Муратов - Meet Magento Ukraine - Технический обзор OroCRM Atwix
 
Иван Чепурный - Meet Magento Ukraine - Varnish Cache and its usage in the rea...
Иван Чепурный - Meet Magento Ukraine - Varnish Cache and its usage in the rea...Иван Чепурный - Meet Magento Ukraine - Varnish Cache and its usage in the rea...
Иван Чепурный - Meet Magento Ukraine - Varnish Cache and its usage in the rea...Atwix
 
Владимир Дубина - Meet Magento Ukraine - Data consistency
Владимир Дубина - Meet Magento Ukraine - Data consistencyВладимир Дубина - Meet Magento Ukraine - Data consistency
Владимир Дубина - Meet Magento Ukraine - Data consistencyAtwix
 
Андрей Самиляк - Meet Magento Ukraine - Как мы играли в DevOps и как получилс...
Андрей Самиляк - Meet Magento Ukraine - Как мы играли в DevOps и как получилс...Андрей Самиляк - Meet Magento Ukraine - Как мы играли в DevOps и как получилс...
Андрей Самиляк - Meet Magento Ukraine - Как мы играли в DevOps и как получилс...Atwix
 
Сергей Кибиткин - Meet Magento Ukraine - Что вы никогда не сделаете в Magento
Сергей Кибиткин - Meet Magento Ukraine - Что вы никогда не сделаете в MagentoСергей Кибиткин - Meet Magento Ukraine - Что вы никогда не сделаете в Magento
Сергей Кибиткин - Meet Magento Ukraine - Что вы никогда не сделаете в MagentoAtwix
 
Макс Екатериненко - Meet Magento Ukraine - Magento 2 Overview
Макс Екатериненко - Meet Magento Ukraine - Magento 2 OverviewМакс Екатериненко - Meet Magento Ukraine - Magento 2 Overview
Макс Екатериненко - Meet Magento Ukraine - Magento 2 OverviewAtwix
 
Александр Каранда - Meet Magento Ukraine - Реальность нереальных вещей
Александр Каранда - Meet Magento Ukraine - Реальность нереальных вещейАлександр Каранда - Meet Magento Ukraine - Реальность нереальных вещей
Александр Каранда - Meet Magento Ukraine - Реальность нереальных вещейAtwix
 
Антон Капля - Meet Magento Ukraine - Кодогенератор в Magento
Антон Капля - Meet Magento Ukraine - Кодогенератор в MagentoАнтон Капля - Meet Magento Ukraine - Кодогенератор в Magento
Антон Капля - Meet Magento Ukraine - Кодогенератор в MagentoAtwix
 
Анатолій Денис - Meet Magento Ukraine - Migration to Magento - mission possible
Анатолій Денис - Meet Magento Ukraine - Migration to Magento - mission possibleАнатолій Денис - Meet Magento Ukraine - Migration to Magento - mission possible
Анатолій Денис - Meet Magento Ukraine - Migration to Magento - mission possibleAtwix
 
Артем Кузнецов - Meet Magento Ukraine - инструменты для отдела поддержки, опы...
Артем Кузнецов - Meet Magento Ukraine - инструменты для отдела поддержки, опы...Артем Кузнецов - Meet Magento Ukraine - инструменты для отдела поддержки, опы...
Артем Кузнецов - Meet Magento Ukraine - инструменты для отдела поддержки, опы...Atwix
 
Александр Стельмах - Meet Magento Ukraine - Прибыльная e-mail рассылка за 5 ш...
Александр Стельмах - Meet Magento Ukraine - Прибыльная e-mail рассылка за 5 ш...Александр Стельмах - Meet Magento Ukraine - Прибыльная e-mail рассылка за 5 ш...
Александр Стельмах - Meet Magento Ukraine - Прибыльная e-mail рассылка за 5 ш...Atwix
 
Владимир Галика - Meet Magento Ukraine - Чудесный Новый Мир – почему продвиже...
Владимир Галика - Meet Magento Ukraine - Чудесный Новый Мир – почему продвиже...Владимир Галика - Meet Magento Ukraine - Чудесный Новый Мир – почему продвиже...
Владимир Галика - Meet Magento Ukraine - Чудесный Новый Мир – почему продвиже...Atwix
 
Александр Колб - Meet Magento Ukraine - психология потребления онлайн
Александр Колб - Meet Magento Ukraine - психология потребления онлайнАлександр Колб - Meet Magento Ukraine - психология потребления онлайн
Александр Колб - Meet Magento Ukraine - психология потребления онлайнAtwix
 
Елена Леонова - Meet Magento Ukraine - Трасформация в e-commerce с Magento
Елена Леонова - Meet Magento Ukraine - Трасформация в e-commerce с MagentoЕлена Леонова - Meet Magento Ukraine - Трасформация в e-commerce с Magento
Елена Леонова - Meet Magento Ukraine - Трасформация в e-commerce с MagentoAtwix
 

Mais de Atwix (20)

Igor Miniailo - Magento 2 API Design Best Practices
Igor Miniailo - Magento 2 API Design Best PracticesIgor Miniailo - Magento 2 API Design Best Practices
Igor Miniailo - Magento 2 API Design Best Practices
 
Valeriy Nayda - Best Practices in Magento 2. Based on Multi Source Inventory ...
Valeriy Nayda - Best Practices in Magento 2. Based on Multi Source Inventory ...Valeriy Nayda - Best Practices in Magento 2. Based on Multi Source Inventory ...
Valeriy Nayda - Best Practices in Magento 2. Based on Multi Source Inventory ...
 
Yaroslav Rogoza - Development Environment: Local or Remote?
Yaroslav Rogoza - Development Environment: Local or Remote?Yaroslav Rogoza - Development Environment: Local or Remote?
Yaroslav Rogoza - Development Environment: Local or Remote?
 
Magento 2 performance comparison in different environments by Yaroslav Rogoza...
Magento 2 performance comparison in different environments by Yaroslav Rogoza...Magento 2 performance comparison in different environments by Yaroslav Rogoza...
Magento 2 performance comparison in different environments by Yaroslav Rogoza...
 
Viacheslav Kravchuk. Working as a distributed company. Our journey. Meet Mage...
Viacheslav Kravchuk. Working as a distributed company. Our journey. Meet Mage...Viacheslav Kravchuk. Working as a distributed company. Our journey. Meet Mage...
Viacheslav Kravchuk. Working as a distributed company. Our journey. Meet Mage...
 
Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2
Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2
Сергей Иващенко - Meet Magento Ukraine - Цены в Magento 2
 
Александр Смага, Юрий Муратов - Meet Magento Ukraine - Технический обзор OroCRM
Александр Смага, Юрий Муратов - Meet Magento Ukraine - Технический обзор OroCRM Александр Смага, Юрий Муратов - Meet Magento Ukraine - Технический обзор OroCRM
Александр Смага, Юрий Муратов - Meet Magento Ukraine - Технический обзор OroCRM
 
Иван Чепурный - Meet Magento Ukraine - Varnish Cache and its usage in the rea...
Иван Чепурный - Meet Magento Ukraine - Varnish Cache and its usage in the rea...Иван Чепурный - Meet Magento Ukraine - Varnish Cache and its usage in the rea...
Иван Чепурный - Meet Magento Ukraine - Varnish Cache and its usage in the rea...
 
Владимир Дубина - Meet Magento Ukraine - Data consistency
Владимир Дубина - Meet Magento Ukraine - Data consistencyВладимир Дубина - Meet Magento Ukraine - Data consistency
Владимир Дубина - Meet Magento Ukraine - Data consistency
 
Андрей Самиляк - Meet Magento Ukraine - Как мы играли в DevOps и как получилс...
Андрей Самиляк - Meet Magento Ukraine - Как мы играли в DevOps и как получилс...Андрей Самиляк - Meet Magento Ukraine - Как мы играли в DevOps и как получилс...
Андрей Самиляк - Meet Magento Ukraine - Как мы играли в DevOps и как получилс...
 
Сергей Кибиткин - Meet Magento Ukraine - Что вы никогда не сделаете в Magento
Сергей Кибиткин - Meet Magento Ukraine - Что вы никогда не сделаете в MagentoСергей Кибиткин - Meet Magento Ukraine - Что вы никогда не сделаете в Magento
Сергей Кибиткин - Meet Magento Ukraine - Что вы никогда не сделаете в Magento
 
Макс Екатериненко - Meet Magento Ukraine - Magento 2 Overview
Макс Екатериненко - Meet Magento Ukraine - Magento 2 OverviewМакс Екатериненко - Meet Magento Ukraine - Magento 2 Overview
Макс Екатериненко - Meet Magento Ukraine - Magento 2 Overview
 
Александр Каранда - Meet Magento Ukraine - Реальность нереальных вещей
Александр Каранда - Meet Magento Ukraine - Реальность нереальных вещейАлександр Каранда - Meet Magento Ukraine - Реальность нереальных вещей
Александр Каранда - Meet Magento Ukraine - Реальность нереальных вещей
 
Антон Капля - Meet Magento Ukraine - Кодогенератор в Magento
Антон Капля - Meet Magento Ukraine - Кодогенератор в MagentoАнтон Капля - Meet Magento Ukraine - Кодогенератор в Magento
Антон Капля - Meet Magento Ukraine - Кодогенератор в Magento
 
Анатолій Денис - Meet Magento Ukraine - Migration to Magento - mission possible
Анатолій Денис - Meet Magento Ukraine - Migration to Magento - mission possibleАнатолій Денис - Meet Magento Ukraine - Migration to Magento - mission possible
Анатолій Денис - Meet Magento Ukraine - Migration to Magento - mission possible
 
Артем Кузнецов - Meet Magento Ukraine - инструменты для отдела поддержки, опы...
Артем Кузнецов - Meet Magento Ukraine - инструменты для отдела поддержки, опы...Артем Кузнецов - Meet Magento Ukraine - инструменты для отдела поддержки, опы...
Артем Кузнецов - Meet Magento Ukraine - инструменты для отдела поддержки, опы...
 
Александр Стельмах - Meet Magento Ukraine - Прибыльная e-mail рассылка за 5 ш...
Александр Стельмах - Meet Magento Ukraine - Прибыльная e-mail рассылка за 5 ш...Александр Стельмах - Meet Magento Ukraine - Прибыльная e-mail рассылка за 5 ш...
Александр Стельмах - Meet Magento Ukraine - Прибыльная e-mail рассылка за 5 ш...
 
Владимир Галика - Meet Magento Ukraine - Чудесный Новый Мир – почему продвиже...
Владимир Галика - Meet Magento Ukraine - Чудесный Новый Мир – почему продвиже...Владимир Галика - Meet Magento Ukraine - Чудесный Новый Мир – почему продвиже...
Владимир Галика - Meet Magento Ukraine - Чудесный Новый Мир – почему продвиже...
 
Александр Колб - Meet Magento Ukraine - психология потребления онлайн
Александр Колб - Meet Magento Ukraine - психология потребления онлайнАлександр Колб - Meet Magento Ukraine - психология потребления онлайн
Александр Колб - Meet Magento Ukraine - психология потребления онлайн
 
Елена Леонова - Meet Magento Ukraine - Трасформация в e-commerce с Magento
Елена Леонова - Meet Magento Ukraine - Трасформация в e-commerce с MagentoЕлена Леонова - Meet Magento Ukraine - Трасформация в e-commerce с Magento
Елена Леонова - Meet Magento Ukraine - Трасформация в e-commerce с Magento
 

Último

Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 

Último (20)

Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 

Happy Together: Creating Successful Magento ERP Integrations | Imagine 2013…

  • 2. Creating Successful Magento ERP Integrations Monday, April 8, 13
  • 3. Happy Together Creating Successful Magento ERP Integrations CTO / Lead Engineer www.classyllama.com David Alger Monday, April 8, 13
  • 4. A Little About Me • Exclusively focused on Magento eCommerce since early ’09 • Member of the Magento Technical Partner Council • Member of the Magento Certification Advisory Board • Magento Certified Developer Plus • Magento Front End Certified Developer • Zend Certified Engineer • Experienced Software Integrator Monday, April 8, 13
  • 5. Architecting and engineering a Magento ERP integration while avoiding the pitfalls and challenges that come with integrating multiple enterprise-level software components Creating Magento ERP Integrations Monday, April 8, 13
  • 6. What’s On Our Agenda • Reasons for Integrating • Purpose Driven Nature • Architectural Design • Facing Challenges • Engineering Solutions • Integration Scalability Monday, April 8, 13
  • 7. Why an Integration? • An ERP in simple terms: – Software built around the premise of having the ability to manage all of the information and functions of a company seamlessly and in real-time • What benefits are there? – Centralization, accuracy, less hassle! • Order Fulfillment • Customer Service • Product Management • Integrating Magento with your ERP means an increase in efficiency Monday, April 8, 13
  • 8. Purpose Driven Nature • Integrations with any software should be purpose driven • What are the goals of the integration? – Example: Guaranteed accurate information across properties – Example: Less headaches during order fulfillment Monday, April 8, 13
  • 9. Architectural Design • The importance of having an integration “blueprint” – Information Coverage – Master of Record – Direction of Flow • Pre-requisites for designing a workable solution – Insights into business process – Familiarity with software – Knowledge of the data • Integration paradigms – Middleware vs Direct Monday, April 8, 13
  • 10. Typical Technical “Blueprint” 1. Integration Goals / Summary 2. Integration Dependencies 3. Integration Method 4. Integration Requirements 4.1. Product Information 4.1.1. Inventory 4.1.2. Pricing 4.1.2.1. General Pricing 4.1.2.2. Customer Tiers 4.2. Customer Accounts 4.3. Orders 4.3.1. Export 4.3.2. Fulfillment / Updates 4.3.3. Payment Processing Monday, April 8, 13
  • 11. Facing Challenges • Using COTS (Commercial Off the Shelf) products • Controlling data exposure at connection points – aka PCI-DSS compliance • Real-time data synchronization: Is it possible or even worth it? • Maintaining data integrity between disparate systems • Overall reliability of the integration processes Monday, April 8, 13
  • 12. Engineering Solutions • Methods of Direct Integration • Managing Memory Leaks • Building a Scalable Integration Monday, April 8, 13
  • 13. Methods of Direct Integration • Database – Remote – Local • Flat Files • Web Services • Combinations Monday, April 8, 13
  • 14. Managing Memory Leaks • PHP 5.3 Garbage Collector – Largely addressed circular reference memory leaks – Far better than PHP 5.2 but doesn’t eliminate all possible leaks – Global anonymous functions can still be orphaned! • Looping over all records of a large catalog in one execution is a practical impossibility... particularly when running PHP 5.2 or GC disabled • Using memory_get_usage and a bit of clever logic: – We can prevent processes dying due to memory leaks – Create a robust and reliable process manager Monday, April 8, 13
  • 15. 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 abstract class CLS_Integration_Model_Process_Abstract { protected static function _getMemLimit() { static $limit = NULL; if ($limit === NULL) { $value = trim(ini_get('memory_limit')); $code = strtolower($value[strlen($value)-1]); switch ($code) { case 'g': // intentional fall through $value *= 1024; case 'm': // intentional fall through $value *= 1024; case 'k': // intentional fall through $value *= 1024; } $limit = (int)$value; } return $limit; } /** * Reschedules the cron job $interval seconds into the future. * * @param Mage_Cron_Model_Schedule $schedule Monday, April 8, 13
  • 16. 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 * @param CLS_Integration_Model_Resource_Erp_Db_Collection_Abstract $collection * @param string $callback */ protected function _processDataCollection($collection, $callback) { $index = 0; $limit = self::_getMemLimit(); // store the memory limit in bytes for calculations $baseline = 0; // the current memory usage at last iteration $delta = 0; // maximum difference in memory usgae from one iteration to the next $space = NULL; // the remaining number of iterations we have based on the $delta foreach ($collection as $record) { $baseline = memory_get_usage(); // update the baseline try { $this->$callback($record); // process the record } catch (Zend_Db_Exception $e) { // catch, log and skip items where an exception (like a deadlock or lock timeout) occurs... Mage::logException($e); continue; } if ($index == 0) { $baseline = memory_get_usage(); // first iteration, update this post-processing to avoid inflated delta } else { $delta = max($delta, memory_get_usage() - $baseline, 0.0001); // calculate memory usage delta $space = floor(($limit - memory_get_usage()) / $delta); // calculate approximate space for iterations } // if we have space for less than 100 estimated iteration remaining, log a message and break to cleanup if ($space !== NULL && $space <= 100) { Mage::log("CLS_Integration [".__CLASS__."::".__FUNCTION__."]: Must terminate, within 100" ." iterations of remaining space allowed by memory_limit!"); return false; } } return true; } } Monday, April 8, 13
  • 17. Building a Scalable Integration • Dealing with large amounts of data – Polling for changes – Data write throughput – Index management • Managing integration processes – Use the built-in cron dispatcher for job execution – Thread locks are critical to avoid racing and overworking jobs – A page cursor can come in very handy when polling is used Monday, April 8, 13
  • 18. } /** * Reschedules the cron job $interval seconds into the future. * * @param Mage_Cron_Model_Schedule $schedule * @param int $interval */ protected function _rescheduleCron(Mage_Cron_Model_Schedule $pSchedule, $interval = 10) { $timestamp = Mage::getSingleton('core/date')->gmtTimestamp()+$interval; $schedule = Mage::getModel('cron/schedule'); $schedule->setJobCode($pSchedule->getJobCode()) ->setStatus(Mage_Cron_Model_Schedule::STATUS_PENDING) ->setCreatedAt($timestamp) ->setScheduledAt($timestamp) ; $schedule->save(); return $this; } /** * Takes a data collections and process it within a memory monitoring loop * * @param CLS_Integration_Model_Resource_Erp_Db_Collection_Abstract $collectionMonday, April 8, 13
  • 19. -- -- cls_integration_process_lock - table schema -- CREATE TABLE `cls_integration_process_lock` ( `code` varchar(50) NOT NULL COMMENT 'Job Code', `locked_at` timestamp NULL DEFAULT NULL COMMENT 'Locked At', `freed_at` timestamp NULL DEFAULT NULL COMMENT 'Freed At', `status` smallint(6) NOT NULL DEFAULT '0' COMMENT 'Lock Status', PRIMARY KEY (`code`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Holds an atomically set lock to prevent overlapping jobs.'; -- -- cls_integration_process_lock - atomic lock update -- ref: CLS_Integration_Model_Resource_Process_Lock::obtainLock -- UPDATE `cls_integration_process_lock` SET `status` = 1 WHERE `status` = 0 AND `code` = 'product'; 8e7c0768e7c076 a minute agoa minute ago BlameBlame FuFu Blog · Report a bug · Support · Documentation · API · Forum · Server status · Terms of service · Privacy policy Monday, April 8, 13
  • 20. -- -- cls_integration_process_lock - table schema -- CREATE TABLE `cls_integration_process_lock` ( `code` varchar(50) NOT NULL COMMENT 'Job Code', `locked_at` timestamp NULL DEFAULT NULL COMMENT 'Locked At', `freed_at` timestamp NULL DEFAULT NULL COMMENT 'Freed At', `status` smallint(6) NOT NULL DEFAULT '0' COMMENT 'Lock Status', PRIMARY KEY (`code`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Holds an atomically set lock to prevent overlapping jobs.'; -- -- cls_integration_process_lock - atomic lock update -- ref: CLS_Integration_Model_Resource_Process_Lock::obtainLock -- UPDATE `cls_integration_process_lock` SET `status` = 1 WHERE `status` = 0 AND `code` = 'product'; 8e7c0768e7c076 a minute agoa minute ago BlameBlame FuFu Blog · Report a bug · Support · Documentation · API · Forum · Server status · Terms of service · Privacy policy Monday, April 8, 13
  • 21. Questions or Comments? David Alger (@blackbooker) CTO / Lead Engineer www.classyllama.com david@classyllama.com http://bit.ly/imagine-erp P.S.W E’R E H IR IN G !!! Monday, April 8, 13