Code Management
● Magento is big!
○ Our project has over 820,000 lines of PHP
● Multi-lingual, multi-currency, multi-store
● Classes can have complex names
○ *cough*
Enterprise_Reward_Block_Adminhtml_Customer_Edit_T
ab_Reward_History_Grid_Column_Renderer_Reason
*cough*
Slide 5
Slide 5 text
Code Management (cont.)
● Configuration is driven by XML
● The dreaded EAV
● Magento Indices
● Event-Observer
Slide 6
Slide 6 text
Code Management (Tools)
Good tools make the job easier!
● A good IDE
○ Magicento
● Commerce Bug 2
● n98-magerun
Slide 7
Slide 7 text
Code Management
● NEVER modify core files
○ Magento’s forum never helped
● NEVER* add files to app/code/local/Mage
○ Magento was built to be modular**
● Test your code with flat catalog enabled
and disabled
● Before overwriting classes, check for events
Slide 8
Slide 8 text
Code Optimization (Quick Wins)
Caching Magento Blocks
● DIY! Event to add cache data:
core_block_abstract_to_html_before
● OR use a module https://github.
com/aligent/CacheObserver
Slide 9
Slide 9 text
Code Optimization (Quick Wins)
Mage::getModel(‘catalog/product’)->load($_product-
>getId());
● This is bad in templates and when looping
over product collections
● Load with initial data select
○ used_in_product_listing attribute option
Slide 10
Slide 10 text
Code Optimization
Make efficient use of Magento indices
● Example: Catalog URL Rewrites
○ Includes all products by default (including products
marked as “Not Visible Individually”)
○ Do you need SEO friendly URLs for products that
will never be seen???
○ Reduce your index size by up to 95%
○ Mage_Catalog_Model_Resource_Url::_getProducts
Systems
● Hardware Profile
● Cluster Design
● Scaling
Slide 13
Slide 13 text
No content
Slide 14
Slide 14 text
Hardware Profile (overview)
● 2 racks of hardware and dozens of servers
● Top quality of available (and compatible)
chipsets and memory
● Buffered DDR3; 1 channel per CPU
● 126 kW of stable, reliable, redundant, and
backed up power
● Minor kernel tweaks
Slide 15
Slide 15 text
Hardware Profile (network)
● NetScaler for load balancing
○ Vserver pools
○ Balances web, database, admin and endeca
○ Monitors will remove downed hosts
● Redundant Network Infrastructure
○ Backplane uses LACP (link aggregation) for
redundancy, load balancing and failover
○ HA pairing of configurations
Slide 16
Slide 16 text
Hardware Profile (network)
Dynamic port forwarding for browsing:
kyle@localhost $ ssh -L 2221:127.0.0.1:2221 whitelistedhost.example.com
kyle@whitelistedhost $ ssh -D 2221 cluster.example.com
Static port forwarding for Navicat SSH tunneling (tunneling through a tunnel):
kyle@localhost $ ssh -L 2222:127.0.0.1:2222 whitelistedhost.example.com
kyle@whitelistedhost $ ssh -L 2222:127.0.0.1:22 cluster.example.com
Slide 17
Slide 17 text
Hardware Profile (web)
● Dual Intel Xeon E3-1230 @ 3.30GHz
● 32 GB RAM
● Dozens of servers
● nginx and PHP5-FPM
● 6:1 ratio of PHP processes to CPU cores
Slide 18
Slide 18 text
Hardware Profile (database)
● Redundant database hosts
● MySQL 5.6 chosen for scaling capability
● tcmalloc further improves throughput
● Master/slave replication
● Standby hosts for warm failover
● Failure point: > 4,000 checkouts/hour
Slide 19
Slide 19 text
Hardware Profile (database)
● Quad Intel Xeon E7-2860
○ 10 cores + hyperthreading each totalling 80 threads
● 128 GBs of RAM
● RAID10 SSDs for data
○ writeback cache; noatime,noexec mount options
● RAID1 HDDs for OS
Slide 20
Slide 20 text
Oops!
Slide 21
Slide 21 text
Hardware Profile (cache)
● Powering discrete instances of Redis
○ Sessions
○ Full page cache
○ Magento back end cache
○ Background processing queues
● Discrete instances are for threading, differing
memory limits, differing backup rules, and
multi-db deprecation
Slide 22
Slide 22 text
Hardware Profile (cache)
● Content is compressed with LZF
○ Compression and decompression with LZF is faster
than gzip so it’s an ideal solution
● Decreased utilization of network capacity
● Sentinel for failover (soon)
● RDB BGSAVE: prime number intervals
Slide 23
Slide 23 text
Compression Outcomes
Slide 24
Slide 24 text
Hardware Profile (cache)
● Quad Intel Xeon E5-2620 @ 2.00GHz
● 128 GBs of RAM
● 4 bonded network interfaces
○ Prevents saturation of private network
○ 4 Gb/s
○ Bonding mode 5 (balance-tlb)
■ No special switch support
■ Nice when the colo manages the switch
Slide 25
Slide 25 text
Hardware Profile (utility)
● Cron and systems jobs
● Scripts
● Deploys
● Chef Server 10 for deploy and configuration
● Tests
○ Database test suite in Perl (Test::DatabaseRow)
● Backups (and copies)
Slide 26
Slide 26 text
Cluster Overview
● Production
○ Most hardware serves production
● Staging
○ Some data promoted to production nightly
● Preview{1..n}
○ Instances for testing and previewing new features,
bug fixes and design changes.
Slide 27
Slide 27 text
● Aggregate hardware availability exceeds
six nines (99.9999%)
● Software availability is ~99.999%
● Software, including deployments: 99.98%
● Software, including maintenance: 99.9%
● Non-recoverable human errors: 98%
Production Uptime
Slide 28
Slide 28 text
Scale Your Team
Slide 29
Slide 29 text
Team Profile
● 16 committers; 8.25 FTE
● 4 Project Managers
● 5 departments
● 31 vendors
● 5 time zones
Slide 30
Slide 30 text
Team Values
● State your needs; respect others’
● Respect is given, then adjusted
● Process can always change and improve
● Work/life balance
● Mature and non-aggressive; mediate conflict
● Honesty and transparency
Slide 31
Slide 31 text
Team Mantras
● Trust (relevant) data; make things visible
● Measurable, repeatable, falsifiable
(scientific method)
● Redundancy reduces risks (if documented)
● Set expectations (timing, contents, formats)
and deliver on them
Slide 32
Slide 32 text
Team Mantras
● Automate what is repeated
● Use known patterns and
proven architectures
● Grow talent from within
● Compartmentalization of some data,
code, and knowledge
● Group emails: avoid general questions,
assign actions to people, minimize
distribution lists
● Identify urgency of requests
● Use email filters
● Coach and mentor
Effective Communication
Slide 37
Slide 37 text
● Daily phone calls: only while needed
● Set an agenda; keep to a schedule
● Encourage people to skip calls
or to leave early
● End the call when completed
Effective Communication
Slide 38
Slide 38 text
Tools
● GitHub
● Google Docs
● Pivotal Tracker
● Conference calls, Skype, and IM
● BugHerd
Slide 39
Slide 39 text
No content
Slide 40
Slide 40 text
No content
Slide 41
Slide 41 text
Launch Day
Slide 42
Slide 42 text
Release Day
Slide 43
Slide 43 text
QA preparation
Slide 44
Slide 44 text
Productive!
Slide 45
Slide 45 text
Off-hours chaos
Slide 46
Slide 46 text
Build Knowledge
● Document the “obvious”
● 1000-line README
● Capture failures and solutions
● What happens when?
● Which database and server?
Releases and Git flow: rhythm, ownership, and pride.
Slide 54
Slide 54 text
No content
Slide 55
Slide 55 text
Deployments
● Monday through Thursday only!
● Communication: tickets, cross references,
pull requests, QA status, and releases
● Set expectations: timings for outages,
maintenance, and degraded functionality
● Are we done, yet?
● Explain outcomes and options
Community Participation
● http://magento.stackexchange.com/
● http://stackoverflow.com/
● phpredis bug(s)
Slide 58
Slide 58 text
● Spence, Muneera U. Collaborative
Processes lecture. 13 Apr. 2006.
● Marks, Andrea. "The Role of Writing in a
Design Curriculum." AIGA: Design Education
(2004).
● Katzenbach, Jon R., and Douglas K. Smith.
The Wisdom of Teams. HarperCollins, 2003.
Collaboration Texts
Slide 59
Slide 59 text
● Bennis, Warren, and Patricia W. Biederman.
Organizing Genius. Perseus, 1997.
● Marcum, James W. After the Information
Age. Peter Lang, 2006.
● https://en.wikipedia.org/wiki/Collaboration
(and collaborative method)
Collaboration Texts
Slide 60
Slide 60 text
See Also
GitHub (and Gist)
@parhamr
@kyleterry
@aedmonds