Trong PHP, làm thế nào để bạn viết mã với khả năng mở rộng trong tâm trí?


8

Tôi biết đây có thể là một câu hỏi chung, nhưng chính xác thì điều gì sẽ mở rộng cho tất cả người dùng mà bạn sẽ gặp, ngay cả khi không phải trong vài tháng tới? Tôi đã thực hiện một số nghiên cứu và hầu hết những gì được thực hiện là phía máy chủ, với bộ nhớ cache và các công cụ tương tự khác. Bất kỳ điểm theo đúng hướng sẽ hữu ích.

Câu trả lời:


24

"Ngay cả khi không trong vài tháng tới" có vẻ như tối ưu hóa sớm. Đừng làm vậy:

  • Nó không đáng. Nhiều người, khi nhận ra một dự án, tin rằng dự án của họ sẽ là Facebook thứ hai. Sau đó, họ phát hành nó, và sau đó họ nhận thấy rằng mười khách truy cập mỗi tháng là điều tốt nhất họ có thể làm. Dành ít tiền và thời gian để tối ưu hóa cho khả năng mở rộng hơn nữa và suy nghĩ nhiều hơn về chính dự án sẽ giúp ích.

  • Nó giống như với các nút cổ chai và hồ sơ: bạn luôn có ấn tượng rằng bạn biết rất rõ nút thắt ở đâu, và trong hầu hết các trường hợp, bạn phát hiện ra rằng mình đã sai khi định hình. Làm ứng dụng của bạn đầu tiên. Xem nó được sử dụng như thế nào. Hồ sơ nó. Thu thập dữ liệu BI. Thu thập các số liệu hiệu suất. Phân tích nó. Kiểm tra nếu phân tích của bạn là đúng. Đưa ra dự đoán về tương lai, dựa trên phân tích của bạn, sau đó tối ưu hóa cho khả năng mở rộng những gì bạn thực sự cần để tối ưu hóa.

Ví dụ, một ứng dụng web có thể mở rộng phải có thể được lưu trữ trên một số máy chủ. Dự án cuối cùng tôi đã thực hiện cho khách hàng của mình dự định có thể mở rộng. Có một lựa chọn: hoặc chúng tôi dành thêm 1,5 tháng để ứng dụng web hoạt động trên nhiều máy chủ hoặc khách hàng mua máy chủ chất lượng cao (chỉ một máy) và ứng dụng web chỉ được lưu trữ trên máy này. Mua một máy chủ đắt tiền sẽ rẻ hơn nhiều, tính cả chi phí trực tiếp (giá của máy chủ so với giá 1,5 tháng làm việc) và tiết kiệm dài hạn (tiêu thụ điện năng của một máy chủ chất lượng cao so với mức tiêu thụ điện năng thấp -end máy chủ). Bây giờ ứng dụng này đã chạy được vài tháng và theo các số liệu, nếu một ngày nào đó sẽ xảy ra sự cố với khả năng mở rộng, thì nó sẽ quan tâm đến cơ sở dữ liệu trước tiên.

Bây giờ, một ứng dụng có thể mở rộng ít nhiều trên một số điểm:

  • Cơ sở dữ liệu: theo kinh nghiệm cá nhân của tôi, hầu hết các vấn đề liên quan đến khả năng mở rộng đều đến từ cơ sở dữ liệu. Hy vọng rằng, có rất nhiều cách để làm cho cơ sở dữ liệu có thể mở rộng cho mọi công cụ cơ sở dữ liệu cấp ngành và thậm chí trước đó, có rất nhiều cách để cải thiện cấu trúc cơ sở dữ liệutối ưu hóa các truy vấn . Bộ nhớ đệm cũng giúp.

  • Mạng: băng thông có thể là một vấn đề thực sự trong một số cấu hình và đôi khi bạn không thể làm bất cứ điều gì về nó mà không phải trả chi phí. Để tránh bị chặn ở cấp độ này, bạn có thể tối ưu hóa thiết kế trực quan của trang web để có ít hình ảnh hơn hoặc hình ảnh nén tốt hơn , tối ưu hóa bố cục của trang, giảm các yêu cầu HTTP (thông qua các họa tiết CSS ), giảm số lượng HTML mã được gửi (thông qua AJAX ), v.v. Nén HTTP là điều bắt buộc. Bộ nhớ đệm trình duyệt cũng vậy, nhưng số liệu của bạn có thể cho thấy nhiều khách hàng có bộ đệm trống.

  • Sử dụng CPU và bộ nhớ: việc chuyển một ứng dụng được lưu trữ bởi một số máy chủ cũng có thể gây khó khăn, cả về mức độ cơ sở hạ tầng (phần cứng) và cấp độ ứng dụng (phần mềm). Để tránh điều này, hãy sử dụng bộ nhớ đệm mở rộng và hồ sơ ứng dụng, loại bỏ dần các nút thắt cổ chai .


Cảm ơn rât nhiều. Hiện tại tôi không phát triển cho điều đó trong tâm trí. Thật trùng hợp, tôi thực sự sẽ chỉ thu thập thông tin để xem mọi thứ đi đâu. Tôi chỉ tò mò những gì người khác biết, nhưng cảm ơn vì lời khuyên!
Andy

Tôi hiểu rồi. Tôi đã sửa đổi câu trả lời để giải quyết tốt hơn mối quan tâm của bạn.
Arseni Mourzenko

5

Khả năng mở rộng là rất nhiều ngôn ngữ bất khả tri, vì vậy không có điều cụ thể về PHP cho nó. Yếu tố chính là phải tách rời các hệ thống con, giao tiếp qua các giao thức bất khả tri ngôn ngữ (ví dụ: nếu bạn phải gọi dịch vụ web từ mã PHP của mình, đừng sử dụng PHP serialize, mà là JSON, ngay cả khi cả hai thành phần hiện đang được triển khai trong PHP). Điều này sẽ cho phép bạn thay thế các thành phần bằng các lựa chọn thay thế khác, có thể được phát triển trong các công nghệ khác.

Bạn có thể tìm thấy nhiều ví dụ về các kiến trúc có thể mở rộng được triển khai bằng PHP trên blog highscalability.com


Tôi thấy những gì bạn đang nói, vì vậy về cơ bản phân chia công việc lên. Tôi đánh giá cao lời khuyên.
Andy

Tôi nhìn vào tài liệu php trên serialization. Tôi không quá quen thuộc với nó. Mục đích của nó là gì nếu bạn không phiền tôi hỏi?
Andy

Tôi sẽ không liên kết các bài đăng cụ thể vì chúng có thể bị sai lệch, nhưng chỉ cần thực hiện một số tìm kiếm trên SOA (Kiến trúc hướng dịch vụ) và Hệ thống phân tán. Các thư viện và hướng dẫn về PHP đang thiếu trên internet. Cách dễ nhất để bắt đầu là với cơ sở hạ tầng Nhắn tin và Thiết kế hướng sự kiện.
andho

2
@Andy: mục đích của serializelà để tuần tự hóa trạng thái của đối tượng thành chuỗi. Từ đồng nghĩa cho việc xê-ri hóa được sử dụng trong các ngôn ngữ khác là marshẩy hoặc ngâm. Vấn đề với kiểu tuần tự hóa đó là, đó là ngôn ngữ cụ thể. Đó là lý do tại sao các tiêu chuẩn được xác định rõ như JSON tốt hơn cho việc truyền dữ liệu đến các dịch vụ web.
vartec

Ồ vâng, tôi đã thực sự tự hỏi làm thế nào tôi sẽ lưu trữ phía máy chủ thông tin nhất định, và tôi đoán điều này sẽ giúp tôi về điều đó. Để chắc chắn, giả sử tôi muốn lưu trữ phía máy chủ thông tin cookie, cách tôi sẽ làm là sử dụng tuần tự hóa? Cảm ơn rât nhiều!
Andy

1

Lo lắng về khả năng mở rộng bây giờ có lẽ không đáng: nếu dự án của bạn cất cánh và đạt điểm từ nơi bạn không thể mở rộng quy mô bằng cách thêm phần cứng, bạn sẽ có đủ tiền mặt để tài trợ cho các biện pháp kỹ lưỡng hơn; nếu không, thì bất kỳ nỗ lực nào bạn thực hiện bây giờ đều lãng phí thời gian và tài nguyên của bạn.

Điều đó nói rằng, có một vài điều bạn có thể và nên làm để duy trì ứng dụng của mình và nếu bạn làm theo các hướng dẫn này, việc bao thanh toán trong khả năng mở rộng sẽ dễ dàng hơn nhiều trong trò chơi sau này. Một giải pháp lý tưởng sẽ cho phép bạn trao đổi toàn bộ mã lưu trữ dữ liệu chỉ với những thay đổi tối thiểu đối với logic chương trình và không có thay đổi nào đối với mã trình bày.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.