PHP Back-end

Back-end là một khái niệm phức tạp và đa dạng. Nhiều người mới thường
tự sướng bằng việc cho rằng công nghệ mà họ biết dùng có thể dùng để
xử lý back-end tốt hơn PHP. Trên thực tế, bạn cần hiểu cách khái niệm
back-end nó là cái gì và công việc nào thì nhiều bạn mới biết là đã
nên thủ dâm tinh thần sớm đến như vậy chưa.

PHP được dùng để xử lý toàn bộ cho tầng front end và tầng customer
facing nên việc nó rõ ràng và chẳng cần bàn cãi. Nhưng tầng back-end
thì lại rất đa dạng và nhiều khi chẳng mấy liên quan đến ứng dụng web
mà người ta dùng. Ví dụ:

+ Cache warming định kì 5 phút 1 lần và replicate cho tất cả các
server. Cái này thì viết bằng gì cũng được. Chất lượng code chẳng cần
tốt. Tốn bộ nhớ tí cũng không sao. Khác với tầng customer facing là
tầng đối mặt với mọi vấn đề và tất cả các loại request. Chất lượng
không tốt không tối ưu là dễ đi.
+ Maintaince server định kì: cứ 2 phút thì gọi shell, phân tích log và
gửi thông báo
+ Tổng hợp dữ liệu từ mức thô sang dữ liệu phân tích hay tổng kết:
cách này cũng thực hiện định kì, không phải đối mặt với nhiều kiểu
request và liên tục. Nhưng tốc độ xử lý tĩnh của nó phải nhanh. Lợi
thế của PHP là ở khả năng xử lý động hiệu quả chứ không phải là khả
năng xử lý tĩnh nhanh. Đó là lợi thế của bác Java và bác C/C++. Đôi
khi công việc là tính toán từ dữ liệu thô, sàng lọc dữ liệu,
indexing …
+ Xử lý file hay sinh report: cũng tương tự như trên
+ Messaging
+ Web mining và normalize nó vào database để PHP đọc.

Những công việc dạng này có tính đa dạng, yêu cầu chất lượng và độ
phức tạp rất khác nhau. Thằng ngân hàng thì đòi hỏi chính xác đến ms
còn thằng khác thì chậm 5-10 phút cũng không sao. Vậy nên bác PHP dù
có thể không tối ưu nhưng được dùng bình thường ở tầng này mà chẳng ai
chê trách gì. Hơn thế nữa, do đặc điểm của tầng này có tính re-use lại
thư viện và các practice thừa kế theo hệ thống là rất rất cao nên dễ
hiểu là chỗ này dùng Perl, chỗ kia dùng Python, chỗ nọ dùng Java, chỗ
kia kìa lại dùng bash shell là đủ. Còn nếu bác nào bảo là em cần đọc 1
file 4-5GB vào bộ nhớ để xử lý thì chào PHP đi để ra về. Vấn đề này
lão Wez mãi không fix 😀 Em thì em nghĩ là bác nào làm cái file to như
kiểu thế rõ ràng là yếu kinh nghiệm. Thời này không ai mà dại không
làm sharding cả. Nhưng vấn đề là yêu cầu oái ăm đó có gặp thường xuyên
không? Vậy nên chúng ta không nên tự ru ngủ bằng việc đặt mỹ từ “tính
toán phức tạp” để ngáng đường PHP. Vấn đề là phức tạp đến đâu và tốc
độ nhanh đến thế nào? 😀

Nói chung tầng PHP có xu hướng xử lý phân tán với chu kì sống ngắn còn
tầng back-end có xu hướng xử lý hội tụ kiểu như xử lý queue với chu kì
sống dài. Hiện giờ toàn bộ core C của PHP không có xu hướng tập trung
vào tối ưu các thuật toán mà có độ tính toán phức tạp mà giới computer
science khoái nên có vẻ như nhiều người không thấy được sức mạnh ở
tầng back-end của PHP. Hơn thế nữa, nhiều người còn phải chờ đến PHP
5.3 (đang là bản dev) thì PHP mới tối ưu hơn cho các ứng dụng chạy lâu
dài (nhiều ngày, nhiều tháng) và có sử dụng cyclic dependency về mặt
bộ nhớ.

Ở công ty tớ, tớ cũng dùng PHP để xử lý back-end ở mức high
concurrency cho data nhanh chẳng kém Java. Vấn đề là kinh nghiệm và kĩ
năng đến đâu nữa mà thôi. Trên Linux, multi-threading không làm cho
PHP và Java khác biệt 😀 Thế nhưng thường thì Java có các công nghệ,
thư viện xử lý các loại công việc hậu trường này nhiều hơn và proven
hơn nên đa phần tớ dùng Java. Chẳng ai ngó vào tầng đó cả 😀

Lại nói về biến ở mức ứng dụng thường phổ biến ở các công nghệ chạy
trên máy ảo hay container. PHP có không? Về mặt hình thức là không.
Trên thực chất dùng APC hay eAccelarator là có ngay. Bất lợi là gì mà
PHP Core Team không đưa nó vào? Vấn đề scalibility khi dùng trên
shared hosting và khả năng abuse nó. Mục đích của PHP là luôn duy trì
bộ nhớ thấp và sự công bằng về bộ nhớ cho các client trong khi tối ưu
phần core để việc dịch và chạy các file PHP ít tốn CPU nhất để đảm bảo
việc có hay không có biến application không thành vấn đề. PHP process
là một cái gì đó tạo ra dễ và nhẹ hơn nhiều so với Java process.
Erlang còn nhẹ hơn. 😀 Vậy nên việc không có biến ở mức application là
cực kì sáng suốt. PHP không phải chỉ là container-based. PHP còn phục
vụ như một module cho các webserver, CGI và FastCGI

Advertisements

1 Comment »

  1. 1

    cảm ơn về bài viết


RSS Feed for this entry

Trả lời

Please log in using one of these methods to post your comment:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Đăng xuất / Thay đổi )

Connecting to %s

%d bloggers like this: