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.
5.
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
9.
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
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
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.
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
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.
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.
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
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.
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 ?
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.
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.
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.