際際滷

際際滷Share a Scribd company logo
Optimize PHP Application in High Traffic
Environment
Oleh
Iskandar Soesman
http://kandar.info
@k4ndar
Introduction
 Hal yang sama bisa diimplementasikan secara
general
 Mengembangkan suatu aplikasi harus bisa
berfikir dari sudut pandang tidak hanya
sebagai developer, tetapi juga sysadmin dan
DBA
The Code
Upgrade ke Versi PHP Terbaru dan
Stabil
 PHP Core Developer selalu berusaha untuk
meningatkan performa dan memperbaiki
setiap bug.
Lakukan Profiling
 Profiling memberikan gambaran yang lebih
jelas pada bagian-bagian mana yang
menjadikan bottleneck pada aplikasi.
 Profiling juga memberikan berapa lama waktu
eksekusi aplikasi.
 Tentukan berapa nilai yang menjadi acuan
waktu eksekusi dalam 1 kali runtime.
Profiling Tools
 xdebug http://xdebug.org/
 xhprof
http://php.net/manual/en/book.xhprof.php
 zend debugger ?
 PHP Profiler
https://github.com/steves/PHP-Profiler
 PHP FPM
Gunakan Variable Secukupnya
$description = strip_tags($_POST['description']);
echo $description;
echo strip_tags($_POST['description']);
Hindari Penggunaan setters dan
getters yang Tidak Perlu
class User {
public $name = '';
public function setName($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
}
$user = new User();
$user->setName('Arman');
echo $user->getName();
$user = new User();
$user->name = 'Arman';
echo $user->name;
Men-set nilai ke dalam property selain menghemat penggunaan memory, cara
ini juga mepercepat waktu development.
Runtime Cache
Cache return value suatu method/fungsi yang digunakan berulang kali dalam satu kali
runtime.
$runCahe = array();
function getUserInfo($userId)
{
global $runCahe;
if( isset($runCahe[$userId]) )
return $runCahe[$userId];
$runCahe[$userId] = queryDB("select name, email from user WHERE id = $userId");
return $runCahe[$userId];
}
Cara ini juga untuk mengurangi query yang sama dilakukan berulang kali ke data
resource seperti DB, Cache Server dll.
Hindari Query di dalam Loop
Query yang berulang mengakibatkan request yang berulang ke database
foreach ($userList as $user) {
$query = 'INSERT INTO users (first_name,last_name) VALUES("' . $user['first_name'] . '", "' . $user['last_name'] . '")';
mysql_query($query);
}
Gunakan Bulk Query jika tersedia
$userData = array();
foreach ($userList as $user) {
$userData[] = '("' . $user['first_name'] . '", "' . $user['last_name'] . '")';
}
$query = 'INSERT INTO users (first_name,last_name) VALUES' . implode(',', $userData);
mysql_query($query);
Proses di atas akan menghasilkan:
INSERT INTO users (first_name,last_name) VALUES("John", "Doe"),("Jane", "Doe")...
Hindari Active Record
 Active Record mempersempit ruang gerak
developer dan DBA untuk melakukan optimasi
query.
 Menghindari penggunaan Active Record
berarti mengurangi penggunaan memory web
server dalam men-konstruct query yang
dilakukan pada class Active Record.
Gunakan Asynchronous Sebisa
Mungkin
Proses Asynchronous memungkin dalam
menjalankan suatu proses tidak perlu harus
menunggu proses tersebut selesai (non
blocking).
pg_send_query();
Load External Resouce Via
Javascript
Pada saat runtime dan aplikasi membutuhkan
data dari resoursce external seperti API, kita
tidak pernah mendapat jaminan resource
tersebut memberikan response yang cepat.
Jika hal ini terjadi, setidaknya tidak membuat
runtime aplikasi kita blocking.
The Server And Infrastructure
PHP Engine
Install hanya modul yang diperlukan.
Opcode Cache

Output dari code akan disimpan menjadi bytecode compiler dan disimpan ke
dalam shared memory.
 Optimasi bytecode ini memungkinkan untuk mendapatkan exsekusi runtime
yang lebih cepat karena instruksi proses pada low level menjadi lebih efisien.
 APC
 Zend Opcache
Cache Object Server
 Simpan setiap object data yang didapat dari query ke DB ke dalam Cache Object Server.
Ini kana mempercepat proses pengambilan data yang dibutuhkan secara berulang.
 Query pada Cache Server menggunakan key-value yang datanya disimpan di dalam
memory, sehingga proses pengambilan data menjadi lebih cepat.
 Redis
 Memcache
Gunakan search Tools dari pada
search ke DB
 Walaupun beberpa database tools telah
menyediakan feature full text search, akan lebih
efisien jika proses ini dilakukan pada tools yang
memang dibuat untuk melakukan pencarian.
 Solr
 Elasticsearch
Tuning Web Server
 Gunakan modul yang hanya diperlukan
 Gunakan konfigurasi variable yang sesuai
dengan kebutuhan
Lakukan Profiling
 Profiling memberikan gambaran yang lebih
jelas pada bagian-bagian mana yang
menjadikan bottleneck pada aplikasi.
 Profiling juga memberikan berapa lama waktu
eksekusi aplikasi.
 Tentukan berapa nilai yang menjadi acuan
waktu eksekusi dalam 1 kali runtime.
Profiling Tools
 xdebug http://xdebug.org/
 xhprof
http://php.net/manual/en/book.xhprof.php
 zend debugger ?
 PHP Profiler
https://github.com/steves/PHP-Profiler
 PHP FPM
Gunakan Variable Secukupnya
$description = strip_tags($_POST['description']);
echo $description;
echo strip_tags($_POST['description']);
Hindari Penggunaan setters dan
getters yang Tidak Perlu

More Related Content

Similar to Optimize php application in high traffic environment (20)

Rekayasa web tugas 4 0916
Rekayasa web tugas 4   0916Rekayasa web tugas 4   0916
Rekayasa web tugas 4 0916
ronald adriansyah
Tugas_pemrograman3_1100631026_Helmi_MH_
Tugas_pemrograman3_1100631026_Helmi_MH_Tugas_pemrograman3_1100631026_Helmi_MH_
Tugas_pemrograman3_1100631026_Helmi_MH_
Helmi Mahfudhatul
Perkuliahan 02 Model software engginer
Perkuliahan 02 Model software engginerPerkuliahan 02 Model software engginer
Perkuliahan 02 Model software engginer
Rakhmi Khalida, M.M.S.I
Node Java Script dasar programmer zaman now
Node Java Script dasar programmer zaman nowNode Java Script dasar programmer zaman now
Node Java Script dasar programmer zaman now
nakaniel01
#4 REST API.pptx
#4 REST API.pptx#4 REST API.pptx
#4 REST API.pptx
GDSC2
PPT Pertemuan 01 Web Developer VSGA DTS 2020.pptx
PPT Pertemuan 01 Web Developer VSGA DTS 2020.pptxPPT Pertemuan 01 Web Developer VSGA DTS 2020.pptx
PPT Pertemuan 01 Web Developer VSGA DTS 2020.pptx
iqbalaryo91
Code igneter
Code igneterCode igneter
Code igneter
maiefendi
589783148888-PresentasiFramework-CI.pptx
589783148888-PresentasiFramework-CI.pptx589783148888-PresentasiFramework-CI.pptx
589783148888-PresentasiFramework-CI.pptx
RizqiMauludin2
TD-666-01-teknik-pemrograman
TD-666-01-teknik-pemrogramanTD-666-01-teknik-pemrograman
TD-666-01-teknik-pemrograman
Tino Dwiantoro
Tugas 4 - Rekayasa Web
Tugas 4 - Rekayasa WebTugas 4 - Rekayasa Web
Tugas 4 - Rekayasa Web
Aditya Indraprasti
Presentasi Kelas 11 Rekayasa Perangkat Lunak
Presentasi Kelas 11 Rekayasa Perangkat LunakPresentasi Kelas 11 Rekayasa Perangkat Lunak
Presentasi Kelas 11 Rekayasa Perangkat Lunak
Veri Husaeni
cara install nginx dengan php5 dan dukungan Mysql Di CentOS 6.5
cara install nginx dengan php5 dan dukungan Mysql Di CentOS 6.5cara install nginx dengan php5 dan dukungan Mysql Di CentOS 6.5
cara install nginx dengan php5 dan dukungan Mysql Di CentOS 6.5
stephan EL'wiin Shaarawy
Tugas 4 debbie mistikaweni 1412510982
Tugas 4 debbie mistikaweni   1412510982Tugas 4 debbie mistikaweni   1412510982
Tugas 4 debbie mistikaweni 1412510982
debbie95
Web programming
Web programmingWeb programming
Web programming
data_inovsol
ETS MPPL
ETS MPPLETS MPPL
ETS MPPL
Ferdinand Jason
Optimasi Web Server dengan Nginx by Aswin
Optimasi Web Server dengan Nginx by AswinOptimasi Web Server dengan Nginx by Aswin
Optimasi Web Server dengan Nginx by Aswin
Agate Studio
ETS MPPL NEW
ETS MPPL NEWETS MPPL NEW
ETS MPPL NEW
Ferdinand Jason
Nodejs & Loopback
Nodejs & LoopbackNodejs & Loopback
Nodejs & Loopback
Agung Setyawan
Microservices.pptx
Microservices.pptxMicroservices.pptx
Microservices.pptx
Ans Sembiring
Asas cakephp-mvc
Asas cakephp-mvcAsas cakephp-mvc
Asas cakephp-mvc
kriptonium
Rekayasa web tugas 4 0916
Rekayasa web tugas 4   0916Rekayasa web tugas 4   0916
Rekayasa web tugas 4 0916
ronald adriansyah
Tugas_pemrograman3_1100631026_Helmi_MH_
Tugas_pemrograman3_1100631026_Helmi_MH_Tugas_pemrograman3_1100631026_Helmi_MH_
Tugas_pemrograman3_1100631026_Helmi_MH_
Helmi Mahfudhatul
Perkuliahan 02 Model software engginer
Perkuliahan 02 Model software engginerPerkuliahan 02 Model software engginer
Perkuliahan 02 Model software engginer
Rakhmi Khalida, M.M.S.I
Node Java Script dasar programmer zaman now
Node Java Script dasar programmer zaman nowNode Java Script dasar programmer zaman now
Node Java Script dasar programmer zaman now
nakaniel01
#4 REST API.pptx
#4 REST API.pptx#4 REST API.pptx
#4 REST API.pptx
GDSC2
PPT Pertemuan 01 Web Developer VSGA DTS 2020.pptx
PPT Pertemuan 01 Web Developer VSGA DTS 2020.pptxPPT Pertemuan 01 Web Developer VSGA DTS 2020.pptx
PPT Pertemuan 01 Web Developer VSGA DTS 2020.pptx
iqbalaryo91
Code igneter
Code igneterCode igneter
Code igneter
maiefendi
589783148888-PresentasiFramework-CI.pptx
589783148888-PresentasiFramework-CI.pptx589783148888-PresentasiFramework-CI.pptx
589783148888-PresentasiFramework-CI.pptx
RizqiMauludin2
TD-666-01-teknik-pemrograman
TD-666-01-teknik-pemrogramanTD-666-01-teknik-pemrograman
TD-666-01-teknik-pemrograman
Tino Dwiantoro
Presentasi Kelas 11 Rekayasa Perangkat Lunak
Presentasi Kelas 11 Rekayasa Perangkat LunakPresentasi Kelas 11 Rekayasa Perangkat Lunak
Presentasi Kelas 11 Rekayasa Perangkat Lunak
Veri Husaeni
cara install nginx dengan php5 dan dukungan Mysql Di CentOS 6.5
cara install nginx dengan php5 dan dukungan Mysql Di CentOS 6.5cara install nginx dengan php5 dan dukungan Mysql Di CentOS 6.5
cara install nginx dengan php5 dan dukungan Mysql Di CentOS 6.5
stephan EL'wiin Shaarawy
Tugas 4 debbie mistikaweni 1412510982
Tugas 4 debbie mistikaweni   1412510982Tugas 4 debbie mistikaweni   1412510982
Tugas 4 debbie mistikaweni 1412510982
debbie95
Web programming
Web programmingWeb programming
Web programming
data_inovsol
Optimasi Web Server dengan Nginx by Aswin
Optimasi Web Server dengan Nginx by AswinOptimasi Web Server dengan Nginx by Aswin
Optimasi Web Server dengan Nginx by Aswin
Agate Studio
Microservices.pptx
Microservices.pptxMicroservices.pptx
Microservices.pptx
Ans Sembiring
Asas cakephp-mvc
Asas cakephp-mvcAsas cakephp-mvc
Asas cakephp-mvc
kriptonium

More from k4ndar (8)

Big data-at-detik
Big data-at-detikBig data-at-detik
Big data-at-detik
k4ndar
Introduction Laravel By Hasannuh Bz
Introduction Laravel By Hasannuh BzIntroduction Laravel By Hasannuh Bz
Introduction Laravel By Hasannuh Bz
k4ndar
Optimize Web Application Infrastructure by Rizki Nanda Agam
Optimize Web Application Infrastructure by Rizki Nanda Agam Optimize Web Application Infrastructure by Rizki Nanda Agam
Optimize Web Application Infrastructure by Rizki Nanda Agam
k4ndar
Panada: An Introduction by Iskandar Soesman
Panada: An Introduction by Iskandar SoesmanPanada: An Introduction by Iskandar Soesman
Panada: An Introduction by Iskandar Soesman
k4ndar
Yii2 by Peter Jack Kambey
Yii2 by Peter Jack KambeyYii2 by Peter Jack Kambey
Yii2 by Peter Jack Kambey
k4ndar
Git for development and deployment By Azhari Harahap
Git for development and deployment By Azhari HarahapGit for development and deployment By Azhari Harahap
Git for development and deployment By Azhari Harahap
k4ndar
Composer Panada Conference 2014 by Mulia Nasution
Composer Panada Conference 2014 by Mulia NasutionComposer Panada Conference 2014 by Mulia Nasution
Composer Panada Conference 2014 by Mulia Nasution
k4ndar
Scaling mongo db dengan replicaset dan sharding
Scaling mongo db dengan replicaset dan shardingScaling mongo db dengan replicaset dan sharding
Scaling mongo db dengan replicaset dan sharding
k4ndar
Big data-at-detik
Big data-at-detikBig data-at-detik
Big data-at-detik
k4ndar
Introduction Laravel By Hasannuh Bz
Introduction Laravel By Hasannuh BzIntroduction Laravel By Hasannuh Bz
Introduction Laravel By Hasannuh Bz
k4ndar
Optimize Web Application Infrastructure by Rizki Nanda Agam
Optimize Web Application Infrastructure by Rizki Nanda Agam Optimize Web Application Infrastructure by Rizki Nanda Agam
Optimize Web Application Infrastructure by Rizki Nanda Agam
k4ndar
Panada: An Introduction by Iskandar Soesman
Panada: An Introduction by Iskandar SoesmanPanada: An Introduction by Iskandar Soesman
Panada: An Introduction by Iskandar Soesman
k4ndar
Yii2 by Peter Jack Kambey
Yii2 by Peter Jack KambeyYii2 by Peter Jack Kambey
Yii2 by Peter Jack Kambey
k4ndar
Git for development and deployment By Azhari Harahap
Git for development and deployment By Azhari HarahapGit for development and deployment By Azhari Harahap
Git for development and deployment By Azhari Harahap
k4ndar
Composer Panada Conference 2014 by Mulia Nasution
Composer Panada Conference 2014 by Mulia NasutionComposer Panada Conference 2014 by Mulia Nasution
Composer Panada Conference 2014 by Mulia Nasution
k4ndar
Scaling mongo db dengan replicaset dan sharding
Scaling mongo db dengan replicaset dan shardingScaling mongo db dengan replicaset dan sharding
Scaling mongo db dengan replicaset dan sharding
k4ndar

Optimize php application in high traffic environment

  • 1. Optimize PHP Application in High Traffic Environment Oleh Iskandar Soesman http://kandar.info @k4ndar
  • 2. Introduction Hal yang sama bisa diimplementasikan secara general Mengembangkan suatu aplikasi harus bisa berfikir dari sudut pandang tidak hanya sebagai developer, tetapi juga sysadmin dan DBA
  • 4. Upgrade ke Versi PHP Terbaru dan Stabil PHP Core Developer selalu berusaha untuk meningatkan performa dan memperbaiki setiap bug.
  • 5. Lakukan Profiling Profiling memberikan gambaran yang lebih jelas pada bagian-bagian mana yang menjadikan bottleneck pada aplikasi. Profiling juga memberikan berapa lama waktu eksekusi aplikasi. Tentukan berapa nilai yang menjadi acuan waktu eksekusi dalam 1 kali runtime.
  • 6. Profiling Tools xdebug http://xdebug.org/ xhprof http://php.net/manual/en/book.xhprof.php zend debugger ? PHP Profiler https://github.com/steves/PHP-Profiler PHP FPM
  • 7. Gunakan Variable Secukupnya $description = strip_tags($_POST['description']); echo $description; echo strip_tags($_POST['description']);
  • 8. Hindari Penggunaan setters dan getters yang Tidak Perlu class User { public $name = ''; public function setName($name) { $this->name = $name; } public function getName() { return $this->name; } } $user = new User(); $user->setName('Arman'); echo $user->getName(); $user = new User(); $user->name = 'Arman'; echo $user->name; Men-set nilai ke dalam property selain menghemat penggunaan memory, cara ini juga mepercepat waktu development.
  • 9. Runtime Cache Cache return value suatu method/fungsi yang digunakan berulang kali dalam satu kali runtime. $runCahe = array(); function getUserInfo($userId) { global $runCahe; if( isset($runCahe[$userId]) ) return $runCahe[$userId]; $runCahe[$userId] = queryDB("select name, email from user WHERE id = $userId"); return $runCahe[$userId]; } Cara ini juga untuk mengurangi query yang sama dilakukan berulang kali ke data resource seperti DB, Cache Server dll.
  • 10. Hindari Query di dalam Loop Query yang berulang mengakibatkan request yang berulang ke database foreach ($userList as $user) { $query = 'INSERT INTO users (first_name,last_name) VALUES("' . $user['first_name'] . '", "' . $user['last_name'] . '")'; mysql_query($query); }
  • 11. Gunakan Bulk Query jika tersedia $userData = array(); foreach ($userList as $user) { $userData[] = '("' . $user['first_name'] . '", "' . $user['last_name'] . '")'; } $query = 'INSERT INTO users (first_name,last_name) VALUES' . implode(',', $userData); mysql_query($query); Proses di atas akan menghasilkan: INSERT INTO users (first_name,last_name) VALUES("John", "Doe"),("Jane", "Doe")...
  • 12. Hindari Active Record Active Record mempersempit ruang gerak developer dan DBA untuk melakukan optimasi query. Menghindari penggunaan Active Record berarti mengurangi penggunaan memory web server dalam men-konstruct query yang dilakukan pada class Active Record.
  • 13. Gunakan Asynchronous Sebisa Mungkin Proses Asynchronous memungkin dalam menjalankan suatu proses tidak perlu harus menunggu proses tersebut selesai (non blocking). pg_send_query();
  • 14. Load External Resouce Via Javascript Pada saat runtime dan aplikasi membutuhkan data dari resoursce external seperti API, kita tidak pernah mendapat jaminan resource tersebut memberikan response yang cepat. Jika hal ini terjadi, setidaknya tidak membuat runtime aplikasi kita blocking.
  • 15. The Server And Infrastructure
  • 16. PHP Engine Install hanya modul yang diperlukan.
  • 17. Opcode Cache Output dari code akan disimpan menjadi bytecode compiler dan disimpan ke dalam shared memory. Optimasi bytecode ini memungkinkan untuk mendapatkan exsekusi runtime yang lebih cepat karena instruksi proses pada low level menjadi lebih efisien. APC Zend Opcache
  • 18. Cache Object Server Simpan setiap object data yang didapat dari query ke DB ke dalam Cache Object Server. Ini kana mempercepat proses pengambilan data yang dibutuhkan secara berulang. Query pada Cache Server menggunakan key-value yang datanya disimpan di dalam memory, sehingga proses pengambilan data menjadi lebih cepat. Redis Memcache
  • 19. Gunakan search Tools dari pada search ke DB Walaupun beberpa database tools telah menyediakan feature full text search, akan lebih efisien jika proses ini dilakukan pada tools yang memang dibuat untuk melakukan pencarian. Solr Elasticsearch
  • 20. Tuning Web Server Gunakan modul yang hanya diperlukan Gunakan konfigurasi variable yang sesuai dengan kebutuhan
  • 21. Lakukan Profiling Profiling memberikan gambaran yang lebih jelas pada bagian-bagian mana yang menjadikan bottleneck pada aplikasi. Profiling juga memberikan berapa lama waktu eksekusi aplikasi. Tentukan berapa nilai yang menjadi acuan waktu eksekusi dalam 1 kali runtime.
  • 22. Profiling Tools xdebug http://xdebug.org/ xhprof http://php.net/manual/en/book.xhprof.php zend debugger ? PHP Profiler https://github.com/steves/PHP-Profiler PHP FPM
  • 23. Gunakan Variable Secukupnya $description = strip_tags($_POST['description']); echo $description; echo strip_tags($_POST['description']);
  • 24. Hindari Penggunaan setters dan getters yang Tidak Perlu