SlideShare a Scribd company logo
Scalability in Mind 
當老軟體Drupal 遇上大架構 
2014-10-18 PHPConf 
Jimmy Huang 黃雋
Drupal and me 
Jimmy Major Versions 
媽,我在這裡
Why not Drupal?
It’s just a CMS 
for damned cat not for me 
Image from: https://flic.kr/p/hv9xDs
Learning Curve 
Image from http://www.codem0nk3y.com/2012/04/what-bugs-me-about-modx-and-why/cms-learning-curve/
Slower... 
than my own fastest code 
Image from: https://flic.kr/p/9CWhYu
Too may reason to say no... 
Not OOP 
No ORM 
Made by PHP 
Hard to make theme 
Hard to staging, continues deploying
沒有愛
1. Flexibility 
For Drupal Beginner
Drupal can be a: 
● Personal blog 
● Company official site 
● Community forum 
● Online commerce shopping mall 
● Company intranet portal 
● Heavy media site 
● Video portal 
● Mobile backend CMS
Scaling in Mind (Case study of Drupal Core)
Scaling in Mind (Case study of Drupal Core)
Scaling in Mind (Case study of Drupal Core)
Scaling in Mind (Case study of Drupal Core)
Scaling in Mind (Case study of Drupal Core)
Scaling in Mind (Case study of Drupal Core)
Scaling in Mind (Case study of Drupal Core)
Scaling in Mind (Case study of Drupal Core)
CMS? 
Development oriented CMS 
● Not (only) a framework 
● config many things in UI 
● Abstract in data layer 
● Need 3-party modules
Content Type 
Sample for phpconf 2014
Sample for phpconf 2014
View 1
View 1
View 2
View 2
View 3
View 3
Query Generator in clicks 
same query, different layout
Modules will working together 
hook API design
Modules will working together
module_invoke('AMAZINGMY_captcha', 'captcha', 
'generate', $captcha_type_challenge); 
/** 
* Implementation of hook_captcha(). 
*/ 
function AMAZINGMY_captcha_captcha($op, $captcha_type='') { 
switch ($op) { 
case 'list': 
return array('AMAZINGMY CAPTCHA'); 
case 'generate': 
if ($captcha_type == 'AMAZINGMY CAPTCHA') { 
$captcha = array(); 
$captcha['solution'] = 'AMAZINGMY'; 
$captcha['form']['captcha_response'] = array( 
'#type' => 'textfield', 
'#title' => t('Enter "Amazing"'), 
'#required' => TRUE, 
); 
return $captcha;
horizontal 
2. Scalability
Hosting Architecture 
Image from https://groups.drupal.org/node/24412 
scale out 
scale out 
for pure dynamic site
Prepare to scale 
● Reverse proxy or Hardware load balance? 
● Where are your Sessions? 
● File storage? 
● Separated read/write query?
Reverse Proxy 
ip from - $_SERVER[‘HTTP_X_FORWARDED_FOR‘] 
https://api.drupal.org/api/drupal/includes%21bootstrap.inc/function/ip_address/7
Reverse Proxy 
Reverse Proxy 
Remote addr will get proxy IP 
Real ip need forward from Proxy
Reverse Proxy 
Example setting of Nginx 
Location { 
proxy_set_header Host $host; 
proxy_set_header X-Real-IP $remote_addr; 
proxy_set_header X-Forwarded-Host $host; 
proxy_set_header X-Forwarded-Server $host; 
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
}
Session Storage 
●Plugable 
●Centralized 
●Fast
Session Storage 
before 2008, Drupal 6 save session to DB 
https://api.drupal.org/api/drupal/includes%21bootstrap.inc/function/_drupal_bootstrap/6
Session Storage 
after 2011, Drupal 7, have plugable Session config in core 
https://api.drupal.org/api/drupal/includes%21bootstrap.inc/function/drupal_bootstrap/7
Session Storage 
after 2014, Drupal 8 include better handler from Symfony 2 
Drupal 8 API: http://goo.gl/VVQ2Ua
Session Storage 
PHP 5.4 also have better SessionHandler class 
http://php.net/manual/en/class.sessionhandler.php
File Storage 
● After upload 
can other instance saw files?
File Storage 
Drupal 6 – only 1 hook nothing to help scaling
File Storage 
Drupal 7 – complete file handling api (hook_file_*)
File Storage 
● After upload, send to AWS S3 or FTP? 
– Yes! by hook_file_copy 
● Before display, alter URL for CDN support? 
– Yes! by hook_file_url_alter 
● When load file, streaming by other host? 
– Yes! by hook_file_load
File Storage 
function hook_file_url_alter(&$uri) { 
$cdn1 = 'http://cdn1.example.com'; 
$cdn2 = 'http://cdn2.example.com'; 
$cdn_extensions = array('css', 'js'); 
if($this_file_extension in $cdn_extensions){ 
$uri = $cdn1 . '/' . $path; 
} 
else{ 
$uri = $cdn2 . '/' . $path; 
} 
}
File Storage 
Third-party module - Storage API 
● Save to FTP / HTTP 
● Save to Database 
● Save to S3 
● Save to Rackspace
Database Scaling 
MongoDB? PostgreSQL?
Database Scaling 
Drupal 6 - happy querying, tragedy scaling 
function statistics_get($nid) { 
if ($nid > 0) { 
// Retrieve an array with both totalcount and 
daycount. 
$statistics = db_fetch_array(db_query('SELECT 
totalcount, daycount, timestamp FROM {node_counter} 
WHERE nid = %d', $nid)); 
} 
return $statistics; 
}
Database Scaling 
Drupal 7 – DB abstract layer 
$statistics = db_select('node_counter', 'n') 
->fields('n', array( 
'totalcount', 
'daycount', 
'timestamp')) 
->condition('nid', $nid,'=') 
->execute() 
->fetchAssoc(); 
● Support another Database (not MySQL only) 
● Separate R/W query easily
Database Scaling 
random slave every time DB bootstrap 
# default master (read / write query) 
$databases['default']['default'] = $info_array; 
# multiple slave (read only query) 
$databases['default']['slave'][] = $info_array; 
$databases['default']['slave'][] = $info_array;
Database Scaling 
page specific query to slave by 1 click
Database Scaling
3. why Scalability matter?
我不胖,只是腫了一點
Not Fastest solution 
But Available solution
Why a CMS designed like this? 
● Pro 
– Quick and easy to enter Drupal (even not Engineer) 
– Can stack special requirement into Drupal 
– When more function or more user, scale out 
● Cons 
– Not so easy (if you would like to develop with D) 
– Not so flexible vs framework (because it isn’t) 
– Definitely can scale if well planned, but always not
沒有深深愛過 
怎知好與壞? 
我知道你胖,但還是愛你
you may interested in: 
● 2.4 million page views per day in Drupal 
http://sf2010.drupal.org/conference/sessions/24-million-page-views-day-6 
0-m-month-one-server.html 
● Auto Scale Drupal setup in AWS 
http://www.slideshare.net/burgerboydaddy/scaling-drupal-horizontally-and-in- 
cloud 
● Drupal vs Django 
http://birdhouse.org/blog/2009/11/11/drupal-or-django/ 
● Drupal with nodejs 
https://www.drupal.org/project/nodejs 
● Drupal with Docker 
https://github.com/ricardoamaro/docker-drupal 
● Drupal with MongoDB 
https://www.drupal.org/project/mongodb
Thank You! 
You can also find Drupaler here: 
1. DrupalTaiwan.org 
2. goo.gl/PxuhqQ 
每週三晚上8:00 Hangout 網路聚 
3. FB/groups/drupaltaiwan/ 
DrupalTaiwan Facebook 社團

More Related Content

What's hot (20)

ODP
phptek13 - Caching and tuning fun tutorial
Wim Godden
 
PDF
Intro To Couch Db
Shahar Evron
 
PPT
Speeding Up The Snail
Marcus Deglos
 
PPTX
1
tristup
 
PDF
Zend Server Data Caching
El Taller Web
 
PDF
Drupal 8 configuration management
Alexander Tkachev
 
KEY
Mysqlnd uh
natmchugh
 
PDF
Drupal feature proposal: two new stream-wrappers
Marcus Deglos
 
PDF
Boosting MongoDB performance
Alexei Panin
 
PDF
Hadoop 2.x HDFS Cluster Installation (VirtualBox)
Amir Sedighi
 
PDF
Drupal 7 database api
Andrii Podanenko
 
PDF
Common Pitfalls for your Drupal Site, and How to Avoid Them
Acquia
 
PDF
Data cache management in php
Andrew Yatsenko
 
PPT
Introducing PHP Data Objects
webhostingguy
 
PDF
Clug 2012 March web server optimisation
grooverdan
 
PDF
Elasticsearch 1.x Cluster Installation (VirtualBox)
Amir Sedighi
 
PDF
10 things i wish i'd known before using spark in production
Paris Data Engineers !
 
PDF
WordPress Café: Using WordPress as a Framework
Exove
 
PDF
An introduction To Apache Spark
Amir Sedighi
 
PDF
Moodle 3.3 - API Change Overview #mootieuk17
Dan Poltawski
 
phptek13 - Caching and tuning fun tutorial
Wim Godden
 
Intro To Couch Db
Shahar Evron
 
Speeding Up The Snail
Marcus Deglos
 
Zend Server Data Caching
El Taller Web
 
Drupal 8 configuration management
Alexander Tkachev
 
Mysqlnd uh
natmchugh
 
Drupal feature proposal: two new stream-wrappers
Marcus Deglos
 
Boosting MongoDB performance
Alexei Panin
 
Hadoop 2.x HDFS Cluster Installation (VirtualBox)
Amir Sedighi
 
Drupal 7 database api
Andrii Podanenko
 
Common Pitfalls for your Drupal Site, and How to Avoid Them
Acquia
 
Data cache management in php
Andrew Yatsenko
 
Introducing PHP Data Objects
webhostingguy
 
Clug 2012 March web server optimisation
grooverdan
 
Elasticsearch 1.x Cluster Installation (VirtualBox)
Amir Sedighi
 
10 things i wish i'd known before using spark in production
Paris Data Engineers !
 
WordPress Café: Using WordPress as a Framework
Exove
 
An introduction To Apache Spark
Amir Sedighi
 
Moodle 3.3 - API Change Overview #mootieuk17
Dan Poltawski
 

Similar to Scaling in Mind (Case study of Drupal Core) (20)

PDF
Escalando PHP e Drupal: performance ao infinito e além! - DrupalCamp SP 2015
Lucas Arruda
 
PDF
DrupalCamp SP 2015 - Escalando PHP e Drupal- Performance ao infinito e além!
Taller Negócio Digitais
 
PDF
Escalando php e drupal- performance ao infinito e além! - Drupal camp sp 2015
Handrus Nogueira
 
PDF
Escalando php e drupal- performance ao infinito e além! - DrupalCamp SP 2015
Handrus Nogueira
 
PDF
DrupalCampLA 2014 - Drupal backend performance and scalability
cherryhillco
 
PDF
Drupal performance and scalability
Twinbit
 
PDF
High Performance Drupal
Chapter Three
 
PDF
DrupalCampLA 2011: Drupal backend-performance
Ashok Modi
 
PDF
Drupal - it all comes down to performance
Janis Janovskis
 
PDF
Drupal performance
Solihin Jinata (SJ)
 
PDF
Introduction to Drupal - Installation, Anatomy, Terminologies
Gerald Villorente
 
KEY
Drupal High Availability High Performance 2012
Amazee Labs
 
PPT
Drupalcamp Estonia - High Performance Sites
Exove
 
PPT
Drupalcamp Estonia - High Performance Sites
drupalcampest
 
PPTX
Drupal Backend Performance and Scalability
Ashok Modi
 
PPTX
Drupal performance
Piyuesh Kumar
 
PDF
Drupal camp.sg 2012 session - Drupal in the cloud
Muhammad Nurazhan Moin
 
PDF
Beat the devil: towards a Drupal performance benchmark
Pedro González Serrano
 
PDF
Drupal 7 performance and optimization
Shafqat Hussain
 
PDF
Tuning Drupal for Scale and Performance
Adam Kalsey
 
Escalando PHP e Drupal: performance ao infinito e além! - DrupalCamp SP 2015
Lucas Arruda
 
DrupalCamp SP 2015 - Escalando PHP e Drupal- Performance ao infinito e além!
Taller Negócio Digitais
 
Escalando php e drupal- performance ao infinito e além! - Drupal camp sp 2015
Handrus Nogueira
 
Escalando php e drupal- performance ao infinito e além! - DrupalCamp SP 2015
Handrus Nogueira
 
DrupalCampLA 2014 - Drupal backend performance and scalability
cherryhillco
 
Drupal performance and scalability
Twinbit
 
High Performance Drupal
Chapter Three
 
DrupalCampLA 2011: Drupal backend-performance
Ashok Modi
 
Drupal - it all comes down to performance
Janis Janovskis
 
Drupal performance
Solihin Jinata (SJ)
 
Introduction to Drupal - Installation, Anatomy, Terminologies
Gerald Villorente
 
Drupal High Availability High Performance 2012
Amazee Labs
 
Drupalcamp Estonia - High Performance Sites
Exove
 
Drupalcamp Estonia - High Performance Sites
drupalcampest
 
Drupal Backend Performance and Scalability
Ashok Modi
 
Drupal performance
Piyuesh Kumar
 
Drupal camp.sg 2012 session - Drupal in the cloud
Muhammad Nurazhan Moin
 
Beat the devil: towards a Drupal performance benchmark
Pedro González Serrano
 
Drupal 7 performance and optimization
Shafqat Hussain
 
Tuning Drupal for Scale and Performance
Adam Kalsey
 
Ad

More from jimyhuang (18)

ODP
穿越時空的資料新聞學
jimyhuang
 
ODP
年輕世代與公共事務參與
jimyhuang
 
ODP
從數位公益出發的社會企業 - 網絡行動科技
jimyhuang
 
ODP
賽豬公上太空計畫(twlandsat)
jimyhuang
 
PDF
網路科技於社會工作倡議
jimyhuang
 
PDF
只會用鍵盤可以改變什麼?
jimyhuang
 
PDF
經營網站前,先設計網站
jimyhuang
 
PDF
Ne tivism intro
jimyhuang
 
PDF
Drupal Case Study for Taiwan Wheat Traceability Information System
jimyhuang
 
ODP
喜願小麥網站分享
jimyhuang
 
PPT
Drupal performance (in DrupalCamp Taipei)
jimyhuang
 
ODP
Aegir with drupal
jimyhuang
 
PPT
D7 易用性增進
jimyhuang
 
PDF
Android with LBS
jimyhuang
 
PDF
Drupal sharing in HP7
jimyhuang
 
PDF
CiviCRM 分享會
jimyhuang
 
ODP
Open source business model note in Drupal
jimyhuang
 
ODP
Drupal Npo
jimyhuang
 
穿越時空的資料新聞學
jimyhuang
 
年輕世代與公共事務參與
jimyhuang
 
從數位公益出發的社會企業 - 網絡行動科技
jimyhuang
 
賽豬公上太空計畫(twlandsat)
jimyhuang
 
網路科技於社會工作倡議
jimyhuang
 
只會用鍵盤可以改變什麼?
jimyhuang
 
經營網站前,先設計網站
jimyhuang
 
Ne tivism intro
jimyhuang
 
Drupal Case Study for Taiwan Wheat Traceability Information System
jimyhuang
 
喜願小麥網站分享
jimyhuang
 
Drupal performance (in DrupalCamp Taipei)
jimyhuang
 
Aegir with drupal
jimyhuang
 
D7 易用性增進
jimyhuang
 
Android with LBS
jimyhuang
 
Drupal sharing in HP7
jimyhuang
 
CiviCRM 分享會
jimyhuang
 
Open source business model note in Drupal
jimyhuang
 
Drupal Npo
jimyhuang
 
Ad

Recently uploaded (20)

PDF
Why Businesses Are Switching to Open Source Alternatives to Crystal Reports.pdf
Varsha Nayak
 
PPTX
Migrating Millions of Users with Debezium, Apache Kafka, and an Acyclic Synch...
MD Sayem Ahmed
 
PPTX
Engineering the Java Web Application (MVC)
abhishekoza1981
 
PDF
Powering GIS with FME and VertiGIS - Peak of Data & AI 2025
Safe Software
 
PDF
Unlock Efficiency with Insurance Policy Administration Systems
Insurance Tech Services
 
PPTX
3uTools Full Crack Free Version Download [Latest] 2025
muhammadgurbazkhan
 
PDF
Alarm in Android-Scheduling Timed Tasks Using AlarmManager in Android.pdf
Nabin Dhakal
 
PDF
Beyond Binaries: Understanding Diversity and Allyship in a Global Workplace -...
Imma Valls Bernaus
 
PDF
Salesforce CRM Services.VALiNTRY360
VALiNTRY360
 
PDF
Efficient, Automated Claims Processing Software for Insurers
Insurance Tech Services
 
PDF
vMix Pro 28.0.0.42 Download vMix Registration key Bundle
kulindacore
 
PPTX
Tally software_Introduction_Presentation
AditiBansal54083
 
PPTX
Feb 2021 Cohesity first pitch presentation.pptx
enginsayin1
 
PDF
Letasoft Sound Booster 1.12.0.538 Crack Download+ Product Key [Latest]
HyperPc soft
 
PPTX
Platform for Enterprise Solution - Java EE5
abhishekoza1981
 
PDF
Alexander Marshalov - How to use AI Assistants with your Monitoring system Q2...
VictoriaMetrics
 
PPTX
A Complete Guide to Salesforce SMS Integrations Build Scalable Messaging With...
360 SMS APP
 
PPTX
Fundamentals_of_Microservices_Architecture.pptx
MuhammadUzair504018
 
PDF
Thread In Android-Mastering Concurrency for Responsive Apps.pdf
Nabin Dhakal
 
PPTX
MiniTool Power Data Recovery Full Crack Latest 2025
muhammadgurbazkhan
 
Why Businesses Are Switching to Open Source Alternatives to Crystal Reports.pdf
Varsha Nayak
 
Migrating Millions of Users with Debezium, Apache Kafka, and an Acyclic Synch...
MD Sayem Ahmed
 
Engineering the Java Web Application (MVC)
abhishekoza1981
 
Powering GIS with FME and VertiGIS - Peak of Data & AI 2025
Safe Software
 
Unlock Efficiency with Insurance Policy Administration Systems
Insurance Tech Services
 
3uTools Full Crack Free Version Download [Latest] 2025
muhammadgurbazkhan
 
Alarm in Android-Scheduling Timed Tasks Using AlarmManager in Android.pdf
Nabin Dhakal
 
Beyond Binaries: Understanding Diversity and Allyship in a Global Workplace -...
Imma Valls Bernaus
 
Salesforce CRM Services.VALiNTRY360
VALiNTRY360
 
Efficient, Automated Claims Processing Software for Insurers
Insurance Tech Services
 
vMix Pro 28.0.0.42 Download vMix Registration key Bundle
kulindacore
 
Tally software_Introduction_Presentation
AditiBansal54083
 
Feb 2021 Cohesity first pitch presentation.pptx
enginsayin1
 
Letasoft Sound Booster 1.12.0.538 Crack Download+ Product Key [Latest]
HyperPc soft
 
Platform for Enterprise Solution - Java EE5
abhishekoza1981
 
Alexander Marshalov - How to use AI Assistants with your Monitoring system Q2...
VictoriaMetrics
 
A Complete Guide to Salesforce SMS Integrations Build Scalable Messaging With...
360 SMS APP
 
Fundamentals_of_Microservices_Architecture.pptx
MuhammadUzair504018
 
Thread In Android-Mastering Concurrency for Responsive Apps.pdf
Nabin Dhakal
 
MiniTool Power Data Recovery Full Crack Latest 2025
muhammadgurbazkhan
 

Scaling in Mind (Case study of Drupal Core)

  • 1. Scalability in Mind 當老軟體Drupal 遇上大架構 2014-10-18 PHPConf Jimmy Huang 黃雋
  • 2. Drupal and me Jimmy Major Versions 媽,我在這裡
  • 4. It’s just a CMS for damned cat not for me Image from: https://flic.kr/p/hv9xDs
  • 5. Learning Curve Image from http://www.codem0nk3y.com/2012/04/what-bugs-me-about-modx-and-why/cms-learning-curve/
  • 6. Slower... than my own fastest code Image from: https://flic.kr/p/9CWhYu
  • 7. Too may reason to say no... Not OOP No ORM Made by PHP Hard to make theme Hard to staging, continues deploying
  • 9. 1. Flexibility For Drupal Beginner
  • 10. Drupal can be a: ● Personal blog ● Company official site ● Community forum ● Online commerce shopping mall ● Company intranet portal ● Heavy media site ● Video portal ● Mobile backend CMS
  • 19. CMS? Development oriented CMS ● Not (only) a framework ● config many things in UI ● Abstract in data layer ● Need 3-party modules
  • 20. Content Type Sample for phpconf 2014
  • 28. Query Generator in clicks same query, different layout
  • 29. Modules will working together hook API design
  • 31. module_invoke('AMAZINGMY_captcha', 'captcha', 'generate', $captcha_type_challenge); /** * Implementation of hook_captcha(). */ function AMAZINGMY_captcha_captcha($op, $captcha_type='') { switch ($op) { case 'list': return array('AMAZINGMY CAPTCHA'); case 'generate': if ($captcha_type == 'AMAZINGMY CAPTCHA') { $captcha = array(); $captcha['solution'] = 'AMAZINGMY'; $captcha['form']['captcha_response'] = array( '#type' => 'textfield', '#title' => t('Enter "Amazing"'), '#required' => TRUE, ); return $captcha;
  • 33. Hosting Architecture Image from https://groups.drupal.org/node/24412 scale out scale out for pure dynamic site
  • 34. Prepare to scale ● Reverse proxy or Hardware load balance? ● Where are your Sessions? ● File storage? ● Separated read/write query?
  • 35. Reverse Proxy ip from - $_SERVER[‘HTTP_X_FORWARDED_FOR‘] https://api.drupal.org/api/drupal/includes%21bootstrap.inc/function/ip_address/7
  • 36. Reverse Proxy Reverse Proxy Remote addr will get proxy IP Real ip need forward from Proxy
  • 37. Reverse Proxy Example setting of Nginx Location { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
  • 38. Session Storage ●Plugable ●Centralized ●Fast
  • 39. Session Storage before 2008, Drupal 6 save session to DB https://api.drupal.org/api/drupal/includes%21bootstrap.inc/function/_drupal_bootstrap/6
  • 40. Session Storage after 2011, Drupal 7, have plugable Session config in core https://api.drupal.org/api/drupal/includes%21bootstrap.inc/function/drupal_bootstrap/7
  • 41. Session Storage after 2014, Drupal 8 include better handler from Symfony 2 Drupal 8 API: http://goo.gl/VVQ2Ua
  • 42. Session Storage PHP 5.4 also have better SessionHandler class http://php.net/manual/en/class.sessionhandler.php
  • 43. File Storage ● After upload can other instance saw files?
  • 44. File Storage Drupal 6 – only 1 hook nothing to help scaling
  • 45. File Storage Drupal 7 – complete file handling api (hook_file_*)
  • 46. File Storage ● After upload, send to AWS S3 or FTP? – Yes! by hook_file_copy ● Before display, alter URL for CDN support? – Yes! by hook_file_url_alter ● When load file, streaming by other host? – Yes! by hook_file_load
  • 47. File Storage function hook_file_url_alter(&$uri) { $cdn1 = 'http://cdn1.example.com'; $cdn2 = 'http://cdn2.example.com'; $cdn_extensions = array('css', 'js'); if($this_file_extension in $cdn_extensions){ $uri = $cdn1 . '/' . $path; } else{ $uri = $cdn2 . '/' . $path; } }
  • 48. File Storage Third-party module - Storage API ● Save to FTP / HTTP ● Save to Database ● Save to S3 ● Save to Rackspace
  • 50. Database Scaling Drupal 6 - happy querying, tragedy scaling function statistics_get($nid) { if ($nid > 0) { // Retrieve an array with both totalcount and daycount. $statistics = db_fetch_array(db_query('SELECT totalcount, daycount, timestamp FROM {node_counter} WHERE nid = %d', $nid)); } return $statistics; }
  • 51. Database Scaling Drupal 7 – DB abstract layer $statistics = db_select('node_counter', 'n') ->fields('n', array( 'totalcount', 'daycount', 'timestamp')) ->condition('nid', $nid,'=') ->execute() ->fetchAssoc(); ● Support another Database (not MySQL only) ● Separate R/W query easily
  • 52. Database Scaling random slave every time DB bootstrap # default master (read / write query) $databases['default']['default'] = $info_array; # multiple slave (read only query) $databases['default']['slave'][] = $info_array; $databases['default']['slave'][] = $info_array;
  • 53. Database Scaling page specific query to slave by 1 click
  • 57. Not Fastest solution But Available solution
  • 58. Why a CMS designed like this? ● Pro – Quick and easy to enter Drupal (even not Engineer) – Can stack special requirement into Drupal – When more function or more user, scale out ● Cons – Not so easy (if you would like to develop with D) – Not so flexible vs framework (because it isn’t) – Definitely can scale if well planned, but always not
  • 60. you may interested in: ● 2.4 million page views per day in Drupal http://sf2010.drupal.org/conference/sessions/24-million-page-views-day-6 0-m-month-one-server.html ● Auto Scale Drupal setup in AWS http://www.slideshare.net/burgerboydaddy/scaling-drupal-horizontally-and-in- cloud ● Drupal vs Django http://birdhouse.org/blog/2009/11/11/drupal-or-django/ ● Drupal with nodejs https://www.drupal.org/project/nodejs ● Drupal with Docker https://github.com/ricardoamaro/docker-drupal ● Drupal with MongoDB https://www.drupal.org/project/mongodb
  • 61. Thank You! You can also find Drupaler here: 1. DrupalTaiwan.org 2. goo.gl/PxuhqQ 每週三晚上8:00 Hangout 網路聚 3. FB/groups/drupaltaiwan/ DrupalTaiwan Facebook 社團