2009-10-20 37 views
30

Gần đây tôi đã trải qua một lũ lưu lượng trên một ứng dụng Facebook Tôi tạo ra (chủ yếu là vì lợi ích của giáo dục, không phải với bất kỳ mục đích tiếp thị)Kiến trúc của một ứng dụng PHP trên Amazon EC2

Không cần phải nói, tôi đã không suy nghĩ về khả năng mở rộng khi tôi tạo ứng dụng. Tôi hiện đang ở một vị trí mà máy chủ ảo ít ỏi của tôi được MediaTemple lưu trữ không hề cắt nó, và nó thực sự đi xuống đến I/O thô của máy. Kể từ khi dự án này đã được giáo dục với tôi cho đến nay, tôi figured tôi muốn lấy điều này như là một cơ hội để hiểu nền tảng Amazon EC2.

Bản thân ứng dụng được tạo bằng PHP (sử dụng Zend Framework) với chương trình phụ trợ MySQL. Tôi sử dụng ứng dụng bộ nhớ đệm bất cứ nơi nào có thể với memcached. Tôi đã dành cuối tuần chơi xung quanh với EC2, quay lên trường hợp, cài đặt các gói tôi muốn, và gắn một khối lượng EBS cho một ví dụ.

Nhưng bước hợp lý tiếp theo sẽ mang lại kết quả tốt cho khả năng mở rộng là gì? Tôi có kích hoạt một cá thể AMI cho MySQL và một cho dịch vụ Apache không? Hay tôi chỉ cần sao chép các trường hợp ra nhiều lần như tôi cần chúng và sau đó làm một số loại cân bằng tải trên mặt trước? Lý tưởng nhất, tôi muốn có một cơ sở dữ liệu tập trung vì tôi làm thống kê tổng hợp trên tất cả các hàng cơ sở dữ liệu, tuy nhiên, đây không phải là một yêu cầu khó khăn (có thể là một số giải pháp cụ thể của ứng dụng mà tôi có thể giải quyết)

Tôi biết điều này có lẽ không phải là một câu trả lời thẳng về phía trước, vì vậy các ý kiến ​​và đề xuất được hoan nghênh.

Trả lời

14

Rất nhiều câu hỏi - tất cả các câu hỏi đều tốt.

Về mặt tỷ lệ, bạn có một vài tùy chọn.

Đầu tiên là bắt đầu bằng một hộp duy nhất. Bạn có thể mở rộng quy mô - với một hộp mạnh hơn. EC2 có các trường hợp có kích thước khác nhau. Điều này liên quan đến việc di chuyển máy chủ mỗi khi bạn muốn một hộp lớn hơn.

Dễ dàng hơn là thêm máy chủ. Bạn có thể bắt đầu với một cá thể đơn cho Apache & MySQL. Sau đó, khi lưu lượng tăng lên, hãy tạo một cá thể riêng cho MySQL và trỏ ứng dụng của bạn tới cá thể mới này. Điều này tạo ra một lớp đẹp giữa ứng dụng và cơ sở dữ liệu. Có vẻ như đây là điểm khởi đầu tốt dựa trên lưu lượng truy cập của bạn.

Tiếp theo, bạn có thể sẽ cần thêm nhiều ứng dụng (máy chủ web) hoặc nhiều quyền lực cơ sở dữ liệu hơn (cụm MySQL, v.v.). Bạn có thể có bản ghi DNS của bạn trỏ đến một vài hộp phía trước chạy một số phần mềm cân bằng tải (hãy thử Pound). Các máy chủ cân bằng tải này phân phối các yêu cầu tới máy chủ web của bạn. EC2 có Elastic Load Balancing là một giải pháp thay thế cho việc quản lý bản thân bạn và có lẽ dễ dàng hơn - tôi chưa sử dụng nó một cách cá nhân.

Điều gì đó khác cần lưu ý - EC2 không có bộ nhớ liên tục. Bạn phải tự quản lý dữ liệu liên tục bằng cách sử dụng Cửa hàng khối đàn hồi. This guide là một hướng dẫn tuyệt vời về cách thực hiện việc này, với các bản sao lưu tự động.

Tôi khuyên bạn nên mua một số trường hợp được đặt trước nếu bạn quyết định EC2 là con đường phía trước. Bạn sẽ tiết kiệm được khoảng 50% trong vòng 3 năm!

Cuối cùng, bạn có thể quan tâm đến các dịch vụ như RightScale cung cấp dịch vụ quản lý với chi phí. Có sẵn các nhà cung cấp khác.

+0

Điều này nghe giống như các bước đầu tiên chính xác của tôi để thực hiện. Câu hỏi: có thể kết nối với một số phiên bản EBS không? Tôi nghĩ tôi có thể lưu trữ thư mục/var/www trên máy chủ apache trên EBS và dữ liệu mysql trên máy chủ mysql trên EBS. –

+0

Thật không may là không. Hãy nghĩ về một EBS như một đĩa cứng, nó chỉ có thể được gắn vào một cá thể tại một thời điểm. Bạn có thể sao chép chúng, nhưng EBS nhân bản không nhận được bất kỳ thay đổi hoặc dữ liệu mới nào. Nhiệm vụ của bạn là viết một kịch bản tự động thiết lập các cá thể mới - kiểm tra mã của bạn từ lật đổ, thiết lập apache, thông báo cho bộ cân bằng tải sẵn sàng nhận các yêu cầu. Các dịch vụ như RightScale làm cho phần này dễ dàng hơn, tôi tin. –

10

Bước đầu tiên là tách mối quan tâm. Tôi muốn chia ra với một máy chủ MySQL riêng biệt và có thể là một hộp memcached chuyên dụng, tùy thuộc vào mức độ tải của bạn.Sau đó, tôi sẽ giám sát việc sử dụng bộ nhớ và CPU trên mỗi hộp và xem nơi bạn có thể tối ưu hóa khi có thể. Điều này có thể được thực hiện bằng cách quay các hộp Media Temple mới. Tôi cũng đề xuất Slicehost để có phương án thay thế rẻ hơn, thân thiện với nhà phát triển hơn.

Một số chi tiết kinh phí thấp triển khai PHP tối ưu hóa:

  • Sử dụng một máy chủ web hiệu quả hơn như nginx để xử lý tập tin tĩnh phục vụ và sau đó đảo ngược các yêu cầu ứng dụng proxy để một trường hợp Apache riêng
  • Thực hiện PHP với FastCGI trên đầu trang của nginx bằng cách sử dụng một cái gì đó như PHP-FPM, loại bỏ hoàn toàn Apache. Đây có thể là một lựa chọn tuyệt vời nếu nhu cầu Apache của bạn không mở rộng vượt xa mod_rewrite và các mô-đun Apache đơn giản hơn.

Nếu bạn thích cách tiếp cận cao cấp hơn, tự thực hiện, bạn có thể muốn xem Scalr (code at Google Code). Đó là giá trị xem video trên trang web của họ. Nó cung cấp một môi trường lưu trữ có thể mở rộng bằng cách sử dụng Amazon EC2. Công nghệ này là mã nguồn mở, do đó bạn có thể tải xuống và triển khai nó trên máy chủ quản lý của riêng bạn. (Hộp Media Temple của bạn, có lẽ?) Scalr có sẵn AMIs (thiết bị EC2) có sẵn cho một số trường hợp sử dụng phổ biến.

  • web: Sử dụng nginx và nhiều khả năng của mình: Phần mềm cân bằng tải, tập tin tĩnh phục vụ, vv Bạn muốn có lẽ chỉ có một trong số này, và nó có lẽ sẽ thực hiện một số loại kết nối đến EBS của Amazon, hoặc giải pháp lưu trữ liên tục, như đã đề cập bởi dcaunt.
  • ứng dụng: Máy chủ ứng dụng với Apache và PHP. Bạn có thể có nhiều trong số này, và họ sẽ được tạo ra tự động nếu tải nhiều hơn cần thiết để được xử lý. Loại máy chủ này sẽ giữ bản sao của ứng dụng ZF của bạn.
  • db: Máy chủ cơ sở dữ liệu với MySQL. Một lần nữa, bạn có thể sẽ có nhiều trong số này, và nhiều trường hợp nô lệ sẽ được tạo tự động nếu tải nhiều hơn cần thiết để được xử lý.
  • memcached: Máy chủ ghi nhớ chuyên dụng mà bạn có thể sử dụng để có bộ nhớ đệm tập trung, quản lý phiên, v.v. qua tất cả các trường hợp ứng dụng của bạn.

Tùy chọn Scalr có thể sẽ mất thêm một số thay đổi cấu hình, nhưng nếu bạn cảm thấy quy mô của bạn cần tăng tốc nhanh, có thể đáng để bạn bỏ thời gian và công sức.

+0

Scalr trông rất thú vị. Nó có lẽ là một bước trên các nhu cầu mà tôi có, mặc dù. Tôi có thể sẽ bắt đầu với đề xuất đầu tiên của bạn và đi từ đó –

+0

Rất vui vì tôi có thể trợ giúp – patcoll

Các vấn đề liên quan