SlideShare a Scribd company logo
Scaling PHP
Trần Khánh Nam
Người thuyết trình
- Trần Khánh Nam
- 3 năm kinh nghiệm làm việc với các dự án
PHP
- Từng tham gia 2 startup và hiện đang làm
việc tại Lazada
Nội dung
● Sử dụng load balancer
● Tăng tốc máy chủ của bạn
● Data cache
● Queue
● Lời kết
Sử dụng load balancer
● Chuyển hướng request đến các server của
bạn một cách đồng đều
● Giúp website có chịu được nhiều lượng truy
cập hơn và bạn có thể nâng cấp
performance của website bằng cách thêm
vào máy chủ vào hệ thống
● HAProxy là load balancer phổ biến nhất.
Scaling php
Demo load balancer
● Load balancer ở địa chỉ localhost:1000
● App server nằm ở địa chỉ localhost:1001 và
localhost:1002
● Truy cập vào load balancer, request sẽ
được chuyển hướng tới app server và phản
hồi về địa chỉ của nó và port.
Demo haproxy
Tăng tốc máy chủ website của bạn
● Sử dụng Linux
● Sử dụng phiên bản PHP mới nhất
● Loại bỏ apache và thay bằng nginx
● Sử dụng opcode cache cho PHP
Scaling php
Loại bỏ apache và thay bằng nginx
- Nginx xử lý nhanh và tiết kiệm tài nguyên hơn
apache
Sử dụng opcode cache cho PHP
● Code PHP của bạn sẽ được biên dịch thành
opcode trước khi thực thi
● Việc lưu lại lại opcode sẽ tiết kiệm thời gian
biên dịch ở các request sau
● Các opcode cache thông dụng như APC,
Zend Opcache, xCache
Data cache
Example:
$report = $redis->get('my-report');
if($report != null){
$report = get_your_report();
$redis->set('my-report',$report);
}
$pdf->render($report);
Data cache
Các chương trình datacache:
- APC
- Memcached
- Redis
Queue
● Nơi nhận các công việc không cần xử lý
ngay lập tức ( gửi email, post ảnh lên
Facebook....)
● Xử lý các tác vụ đó một cách ngầm bên
trong server của bạn.
● Các queue phổ biến như rabbitmq,
gearman, php-resque, beantalk
Queue
Demo website upload ảnh.
- Cho phép người dùng upload ảnh lên website
- Sau khi ảnh được upload xong sẽ hiện trang
thông tin hình ảnh ngay lập tức
- Việc resize ảnh là upload ảnh lên amazon S3
được thực hiện bằng 1 job queue.
Kết luận
● Tập trung tối ưu kiến trúc website của bạn
thay vì tối ưu các đoạn code của bạn.
● Open mind - luôn tìm kiếm và học hỏi các
công nghệ mới để website của bạn chạy
nhanh hơn
Trần Khánh Nam
nam.trankhanh.vn@gmail.com

More Related Content

PDF
Web performace with Adflex
PDF
Giới thiệu Embulk
PPTX
Training about hardware server.1
PPTX
Phương pháp và chiến lược đối ứng tải trong Web Application Server
PPTX
Go micro framework to build microservices
PDF
Postgresql các vấn đề thực tế
PPT
Báo cáo thực tập - Huỳnh Anh Tuấn
PPTX
Apache thrift
Web performace with Adflex
Giới thiệu Embulk
Training about hardware server.1
Phương pháp và chiến lược đối ứng tải trong Web Application Server
Go micro framework to build microservices
Postgresql các vấn đề thực tế
Báo cáo thực tập - Huỳnh Anh Tuấn
Apache thrift

What's hot (6)

PPTX
Apache http server
DOC
Lab 3 phân loại dùng nbar
 
PDF
Cấu hình Postgresql căn bản trong 20 phút
DOC
Lab 2 phân loại dùng mô hình mqc
 
PPT
19 web server
PDF
Authentication and Authorization
Apache http server
Lab 3 phân loại dùng nbar
 
Cấu hình Postgresql căn bản trong 20 phút
Lab 2 phân loại dùng mô hình mqc
 
19 web server
Authentication and Authorization
Ad

Viewers also liked (20)

PPTX
PHP Performance with APC + Memcached
PPT
Tối ưu hóa việc ghi dữ liệu với Gearman
PDF
Low Latency Logging with RabbitMQ (PHP London - 4th Sep 2014)
PPT
Gearman and asynchronous processing in PHP applications
PPTX
Distributed RDBMS: Data Distribution Policy: Part 1 - What is a Data Distribu...
PPTX
Gearman, Supervisor and PHP - Job Management with Sanity!
KEY
Scale like a pro with Gearman
PDF
Distributed RDBMS: Challenges, Solutions & Trade-offs
PDF
Gearman for MySQL
PPTX
Creating a WebSocket-Chat-Application with Jetty Embedded - Techcamp 2014
PPTX
3 lesiones deportivas
PPT
Dc roundtablesmall webservices_2002
PDF
Cloud mz cto_roundtable
PPT
Mobile 2000
PPTX
Påske - Krim
DOC
Manisha Garg_Resume modified
PPTX
Evaluation Part 1
PPT
Cc1 cancer derma
DOCX
Nagaraj
PHP Performance with APC + Memcached
Tối ưu hóa việc ghi dữ liệu với Gearman
Low Latency Logging with RabbitMQ (PHP London - 4th Sep 2014)
Gearman and asynchronous processing in PHP applications
Distributed RDBMS: Data Distribution Policy: Part 1 - What is a Data Distribu...
Gearman, Supervisor and PHP - Job Management with Sanity!
Scale like a pro with Gearman
Distributed RDBMS: Challenges, Solutions & Trade-offs
Gearman for MySQL
Creating a WebSocket-Chat-Application with Jetty Embedded - Techcamp 2014
3 lesiones deportivas
Dc roundtablesmall webservices_2002
Cloud mz cto_roundtable
Mobile 2000
Påske - Krim
Manisha Garg_Resume modified
Evaluation Part 1
Cc1 cancer derma
Nagaraj
Ad

Similar to Scaling php (20)

PPT
Reveal the Power of Php
PPT
09 web course_-_php_nang_cao
PDF
PHP.pdf
PDF
Slide 01-Web Application Overview (1).pdf
PPT
Php03 php trong-laptrinhwebdong
PDF
B7_1_Tổng Quan PHP P1.pdfhelllllllllllllloooo
PDF
Web course php co ban
PDF
Web201 slide 1
PDF
Hướng Dẫn Php
PPT
Lập trình viên PHP
PPTX
Tại sao nên chọn ngôn ngữ php
PDF
Hướng dẫn lập trình web với PHP
PDF
php_nangcao [compatibility mode]
PDF
Code igniter v1
PDF
PDF
PHP có thể làm gì? 9 Thứ thú vị có thể làm với PHP
PDF
Lap trinh web dong voi php my sql
PDF
Lap trinh web dong voi php my sql
PDF
Hỏi tình hình bk tiny bktiny-hdsd
PDF
Tai lieu-laptrinh ph-pvamysql - bachkhoaaptech.com
Reveal the Power of Php
09 web course_-_php_nang_cao
PHP.pdf
Slide 01-Web Application Overview (1).pdf
Php03 php trong-laptrinhwebdong
B7_1_Tổng Quan PHP P1.pdfhelllllllllllllloooo
Web course php co ban
Web201 slide 1
Hướng Dẫn Php
Lập trình viên PHP
Tại sao nên chọn ngôn ngữ php
Hướng dẫn lập trình web với PHP
php_nangcao [compatibility mode]
Code igniter v1
PHP có thể làm gì? 9 Thứ thú vị có thể làm với PHP
Lap trinh web dong voi php my sql
Lap trinh web dong voi php my sql
Hỏi tình hình bk tiny bktiny-hdsd
Tai lieu-laptrinh ph-pvamysql - bachkhoaaptech.com

Scaling php

  • 2. Người thuyết trình - Trần Khánh Nam - 3 năm kinh nghiệm làm việc với các dự án PHP - Từng tham gia 2 startup và hiện đang làm việc tại Lazada
  • 3. Nội dung ● Sử dụng load balancer ● Tăng tốc máy chủ của bạn ● Data cache ● Queue ● Lời kết
  • 4. Sử dụng load balancer ● Chuyển hướng request đến các server của bạn một cách đồng đều ● Giúp website có chịu được nhiều lượng truy cập hơn và bạn có thể nâng cấp performance của website bằng cách thêm vào máy chủ vào hệ thống ● HAProxy là load balancer phổ biến nhất.
  • 6. Demo load balancer ● Load balancer ở địa chỉ localhost:1000 ● App server nằm ở địa chỉ localhost:1001 và localhost:1002 ● Truy cập vào load balancer, request sẽ được chuyển hướng tới app server và phản hồi về địa chỉ của nó và port.
  • 8. Tăng tốc máy chủ website của bạn ● Sử dụng Linux ● Sử dụng phiên bản PHP mới nhất ● Loại bỏ apache và thay bằng nginx ● Sử dụng opcode cache cho PHP
  • 10. Loại bỏ apache và thay bằng nginx - Nginx xử lý nhanh và tiết kiệm tài nguyên hơn apache
  • 11. Sử dụng opcode cache cho PHP ● Code PHP của bạn sẽ được biên dịch thành opcode trước khi thực thi ● Việc lưu lại lại opcode sẽ tiết kiệm thời gian biên dịch ở các request sau ● Các opcode cache thông dụng như APC, Zend Opcache, xCache
  • 12. Data cache Example: $report = $redis->get('my-report'); if($report != null){ $report = get_your_report(); $redis->set('my-report',$report); } $pdf->render($report);
  • 13. Data cache Các chương trình datacache: - APC - Memcached - Redis
  • 14. Queue ● Nơi nhận các công việc không cần xử lý ngay lập tức ( gửi email, post ảnh lên Facebook....) ● Xử lý các tác vụ đó một cách ngầm bên trong server của bạn. ● Các queue phổ biến như rabbitmq, gearman, php-resque, beantalk
  • 15. Queue Demo website upload ảnh. - Cho phép người dùng upload ảnh lên website - Sau khi ảnh được upload xong sẽ hiện trang thông tin hình ảnh ngay lập tức - Việc resize ảnh là upload ảnh lên amazon S3 được thực hiện bằng 1 job queue.
  • 16. Kết luận ● Tập trung tối ưu kiến trúc website của bạn thay vì tối ưu các đoạn code của bạn. ● Open mind - luôn tìm kiếm và học hỏi các công nghệ mới để website của bạn chạy nhanh hơn

Editor's Notes

  • #2: chào mọi người php là một ngôn ngữ script rất nổi tiếng bởi dễ sử dụng php thường dùng để viết cho ác website nhỏ tuy nhiên php vẫn có thể sử dụng để viết cho các website lớn như facebook, flickr, wikipedia. chỉ cần bạn biết cách sử dụng một cách hợp lý, và biết cash tối ưu kiến trúc cho các website php thì php hoàn toàn có thể scale để đáp ứng nhu cầu cho hàng triệu người.
  • #3: Về bản thân mình, mình tên là trần khánh nam Toàn bộ website lazada được viết bằng php
  • #5: Việc đầu tiên bạn cần làm khi muốn scale một website là sử dụng 1 load balancer. Load balancer là gì ? Load balancer là trung tâm của hệ thống của bạn, nó nhận các request và phân phối một cách đồng đều các request này đến các server của bạn - nơi các đoạn code php của bạn sẽ được thực thi. Càng nhiều server đặt dưới sự quản lý của load balancer thì hệ thống của bạn sẽ xử lý được càng nhiều request HAProxy là giải pháp load balancer hiệu quả và mạnh mẽ nhất, haproxy được viết bằng C và có khả năng xử lý tới 100.000 request mỗi giây.
  • #7: HAProxy đã được cài đặt ngay trên máy của mình. Mình sẽ viết 1 script để gửi request về địa chỉ localhost:1000 Và kết quả là bạn sẽ thấy là lần lượt 2 app server do nhận được điều hướng từ haproxy nên sẽ trả về phản hồi.
  • #9: Sau đây thì mình sẽ trình bày về việc tăng tốc máy chủ nơi chứa website, nơi nhận request từ người dùng và thực thi các đoạn code PHP của bạn. Đây là nơi dễ tối ưu hóa nhất bởi bạn chỉ cần cài đặt đúng phiên bản phần mềm
  • #10: Ngôn ngữ PHP vốn là mang tiếng chậm tuy nhiên các phiên bản gần đây cho thấy PHP đã được cải tiến rất nhiều. Nếu bạn vẫn đang sử dụng PHP 5.3 thì bạn nên cân nhắc để sử dụng phiên bản 5.4 hoặc 5.5. Benchmark cho thấy phiên bản 5.4 đã giảm gần như 1 nửa lượng bộ nhớ tiêu thụ và tăng số request / trên mỗi giây.
  • #11: Bất cứ ai học php cũng sẽ đều nghe đến LAMP stack, và đó là Linux, Apache, Mysql và PHP. Rất tiếc là trong các công nghệ kể trên thì Apache không đáp ứng được yêu cầu, sự ra đời của nginx đã mang đến cho công đồng PHP một webserver tốt hơn nhiều Tại sao lại nhanh và tiết kiệm hơn ?
  • #12: Tại sao lại cần sử dụng opcache: Thật ra đoạn code của bạn khi đưoc server đọc sẽ không được thực thi ngay mà nó phải được qua quá trình biên dịch thành một dạng gọi là opcache. Điều này cũng giống như các ngôn ngữ khác như java và .NET. Khi ở dạng opcode thì trình thông dịch PHP mới có thể đọc và thực thi đoạn code của bạn. Quá trình biên dịch này tốn khá nhiều thời gian. Để tiết kiệm thời gian biên dịch này thì ta có các chương trình như APC, Zend Opcache, xcache. Chỉ đơn giản là cài đặt 1 trong số các chương trình này thì đã có thể tăng tốc website của bạn lên từ 200 đến 300% mà không cần phải cấu hình gì thêm.
  • #13: Nếu bạn chưa biết thì mình giới thiệu qua về data cache Lấy dữ liệu từ database luôn luôn là nút thắt lớn nhất đối với bất kỳ ứng dụng nào. Việc lưu dữ liệu vào một data cache như memcached hoặc redis là cách để tiết kiệm request tới database một cách hiệu quả nhất. Lần sau nếu người dùng cần đến lấy dữ liệu đó lần nữa bạn chỉ việc lấy ra từ cache mà không cần phải chạy lại hàm để lấy dữ liệu cho report một lần nữa. Dữ liệu trong cache được lưu trữ ở RAM của server do vậy có tốc độ cực kỳ nhanh. Các chương trình data cache như là APC, Memcached, và Redis. Mình không đề cập đến APC bởi nó chỉ cache dữ liệu ở trong php process và không chia sẽ được với các php process khác trên cùng 1 server. Còn lại 2 cái nổi tiếng là memcached và redis. ta nhắc đến 2 memcached là bộ data cache lâu đời nhất và được sử dụng tại facebook, twitter.... memcached có điểm yếu là mỗi khi server cache bị ngừng hoạt động thì bạn mất hết mọi dữ liệu.
  • #14: Các chương trình data cache như là APC, Memcached, và Redis. APC thì là bộ cache nhanh nhất bởi vì nó lưu trữ cache data cùng với các process của php, và do vậy nó không thể chia sẽ dữ liệu được với các process khác. 2 process php khác nhau trên cùng 1 máy chủ cũng không thể lấy được data của nhau. Ngoài ra dữ liệu được lưu vào apc sẽ bị mất nếu server ngừng hoạt động. memcached là bộ data cache có khả năng phân tán lâu đời nhất và được sử dụng tại facebook, twitter.... tức là website của bạn nằm ở 1 máy chủ khác vẫn có thể truy tới server memcache và lấy dữ liệu. memcached có điểm yếu là mỗi khi server cache bị ngừng hoạt động thì bạn mất hết mọi dữ liệu. Redis là bộ cache mới nhất và cũng tương tự như memcached, tuy nhiên Redis hỗ trợ nhiều loại dữ liêu hơn gồm: keyvalue, list, set, sorted set. Dữ liệu của Redis được lưu đồng thời vào ổ đĩa cứng và mỗi khi server bị khởi động lại nó sẽ tự động đưa đưa dữ liệu vào Ram.