2010-04-15 31 views
15

Tôi hiện đang tạo trang web cho một dự án xã hội ở Thụy Sĩ.Cách chia tỷ lệ ứng dụng PHP (máy chủ, mysql, memcache)

Và trước khi có tràn người dùng, tôi muốn chuẩn bị ứng dụng để mở rộng quy mô.

Tôi đã tự trả lời nhiều câu hỏi nhưng một số câu hỏi còn lại.

Tôi giải thích những gì tôi muốn làm.


Đầu tiên

tại beginnning, các ứng dụng sẽ chỉ có một máy chủ (thời gian ngắn) với DNS, PHP, Mysql, dữ liệu và memcache.


Second

Sau đó, tôi sẽ chia chúng thành hai

  1. DNS, Mysql, memcache
  2. dữ liệu, PHP

Thứ ba

Đây là vấn đề, tôi không biết cách thực hiện chính xác ở đây để giữ cho ứng dụng chạy tốt.

tôi có thể làm:

  1. Mặt trận: Load Balancer, memcache, DNS
  2. Web 1: PHP, DỮ LIỆU
  3. Web 2: PHP, DỮ LIỆU
  4. Mysql

Đây sẽ là lược đồ, tất cả các phiên PHP được lưu giữ trong DB.

NHƯNG, làm cách nào để đồng bộ hóa dữ liệu? Tôi có chạy Rsync để cập nhật cho họ hay không. Tôi có đặt chúng trên một đĩa riêng biệt (đĩa mạng) để chắc chắn không? nhưng trong trường hợp này, tôi có thể làm gì trong trường hợp tải lên của người dùng?

và nếu trang web có nhiều thành công hơn và chúng tôi phải tiến hành các cấu trúc lớn hơn, liệu nó có tạo ra một số thời gian chờ về cập nhật không?

hoặc nó sẽ là một điều tốt để đi trực tiếp đến các dịch vụ web của amazon?

một số thông tin Tôi sử dụng trình mã hóa làm Khung. Tôi sử dụng linux làm máy chủ web (bản phân phối không được chọn bây giờ, nhưng phải là Debian)

Cảm ơn trước cho câu trả lời của bạn.

+0

http://stackoverflow.com/questions/189903/scaling-solutions-for-mysql-replication-clustering – zaf

+0

http://highscalability.com/ – David

+0

AWS cung cấp một số công cụ tuyệt vời để tách dịch vụ của bạn: phân phối nội dung và S3 cho các phần tử tĩnh, RDS và SimpleDB cho cơ sở dữ liệu phân tán và EC2 cho tài nguyên máy chủ có thể mở rộng. –

Trả lời

15

Theo số Wikipedia, Thụy Sĩ có 4,6 triệu người nói tiếng Đức, 1,5 triệu người nói tiếng Pháp và 0,5 triệu người nói tiếng Ý, tiếng Romansch và các ngôn ngữ khác. Vì vậy, tôi nghi ngờ bạn sẽ thấy rằng một máy chủ duy nhất sẽ phù hợp với nhu cầu của bạn. Hãy đoán tỷ lệ phần trăm dân số sẽ truy cập vào trang web của bạn mỗi tháng hoặc mỗi ngày để biết được bạn có thể đạt được bao nhiêu trước khi chạy vào các vấn đề mở rộng quy mô.

Vì vậy, tôi không nghĩ bạn cần phải lo lắng về việc chia tỷ lệ! Tiền thưởng: Thời gian bạn không lo lắng về vấn đề này, bạn có thể sử dụng để giải quyết các vấn đề khác cho người dùng của mình.

+1

Đồng ý, bạn nên luôn đo lường hiệu suất và sau đó loại bỏ tắc nghẽn khi bạn nhìn thấy chúng. Điều đó nói rằng, nó vẫn sẽ là một ý tưởng tốt để lên kế hoạch cho nhiều máy chủ web nếu trang web này sẽ phải có quy mô nhanh. Khi bạn có thể mở rộng thành hai, phần lớn hệ thống ống nước sẽ được đặt ở vị trí để mở rộng hơn nữa ... –

+0

OP cần sử dụng cụm FS và lấy các phiên ra khỏi cơ sở dữ liệu. Cần bao nhiêu truy vấn để tạo một trang cho người dùng đã đăng nhập? –

+1

-1 ... câu trả lời không chứng minh được nhu cầu/thiếu nhu cầu mở rộng quy mô, nó gợi ý giả thuyết cần được kiểm tra (nghĩa là không cần mở rộng quy mô). Có thể có các lý do khác (ngoài số lượng người dùng) yêu cầu mở rộng quy mô. –

0

Hãy nhớ rằng bạn có thể gắn kết/chia sẻ thư mục.

Bạn sẽ đồng bộ hóa dữ liệu nào?

Bạn có thể xem xét việc đặt dữ liệu trên máy cơ sở dữ liệu hoặc máy khác. Máy db thường là một ý tưởng tốt lúc đầu vì nó có khả năng có IO lớn hơn một máy chủ web thông thường.

Có thể là một ý tưởng hay khi thiết lập SAN hoặc tương tự để dữ liệu của bạn ở cùng một nơi. Nhiều bản sao của dữ liệu là một nỗi đau để giải quyết. Đi tuyến đường này có nghĩa là bạn cũng có thể đặt các tệp db ở đó.

8

Có một vài con đường chung để mở rộng quy mô các dịch vụ web lên, theo thứ tự những gì các trang web như Flickr và Facebook dường như sử dụng:

  • Chia máy chủ dựa trên khái niệm (API, đăng nhập, các tập tin media, quảng cáo, các trang tĩnh, trang động)
  • Chia cơ sở dữ liệu dựa trên các khái niệm không cần phải tham gia (đăng nhập, báo cáo dài hạn, dữ liệu trang, v.v.)
  • Biên dịch/tối ưu hóa PHP và các tài nguyên khác của bạn (sprites, compiled) css, zend)
  • Thêm bộ nhớ đệm (giao diện người dùng, mặt sau)
  • Thêm đoàn (vòng xoay, v.v.)

Nhưng trước khi chia tỷ lệ, đo lường. Đặt thử nghiệm, tính toán dung lượng của bạn và không tối ưu hóa trước khi bạn cần.

2

tôi thấy một số điều đáng ngờ:

  • Bạn có một máy chủ SQL, và bạn đang lưu trữ các phiên trong một cơ sở dữ liệu trên trang web mà bạn mong đợi khối lượng rất cao. Làm thế nào nhiều truy vấn nào mà phải mất để sản xuất một trang duy nhất nếu ai đó được đăng nhập và những gì được mong đợi chậm lại khi bạn cuối cùng sử dụng nhân rộng MySQL?

  • Nếu sử dụng cụm FS, mọi thứ được 'chỉ giữ' đồng bộ hóa. Bạn sẽ không kết thúc với xây dựng A trên máy chủ web 1 trong khi xây dựng B trên máy chủ web 2 ngắt. Nếu bạn đang thực sự mong đợi rằng lưu lượng truy cập nhiều, trong thời gian cần để tải lên một thay đổi, sau đó đồng bộ hóa tất cả các nút, bạn chỉ tức giận một ngàn người.

Tôi đã triển khai các ứng dụng chạy trên cụm bằng OCFS2 với hơn 40 nút không có vấn đề và OCFS2 không chính xác là cụm FS 'tốt nhất' có sẵn. Hãy xem Lustre và cân nhắc việc lưu phiên trên đĩa.

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