2010-10-01 20 views
14

Tôi đã làm việc trong lần khởi động [đầu tiên] của tôi trong một tháng, và trong khi đó có lẽ ít nhất là một tháng nữa so với bản phát hành alpha, tôi muốn biết cách triển khai đúng cách. Trang web sẽ có số lượng tải ban đầu cao (mạng + CPU) cho người dùng mới, vì vậy tôi đang nghĩ đến việc có một máy chủ/hàng đợi riêng cho quá trình ban đầu này, do đó nó không làm chậm trang web cho người dùng hiện tại.Làm cách nào để triển khai trang web [Ruby on Rails] theo cách có thể mở rộng?

Dựa trên nghiên cứu của tôi cho đến nay, tôi hiện đang hướng tới nginx + haproxy + unicorn/thin + memcached + mysql và triển khai trên Linode. Tuy nhiên, tôi không có kinh nghiệm trước đây trong bất kỳ điều nào ở trên; do đó tôi hy vọng sẽ khai thác trải nghiệm của cộng đồng.

  • Kiến trúc trên có vẻ hợp lý không? Bất kỳ đề xuất/bài viết/sách mà bạn muốn giới thiệu?
  • Linode có phải là lựa chọn tốt không? Heroku/EY có vẻ quá đắt đối với tôi (ít nhất là cho đến khi tôi có đủ doanh thu), nhưng tôi có thiếu lựa chọn nào khác tốt hơn không? MediaTemple?
  • Bất kỳ đề xuất tốt nào về cấu trúc cân bằng tải? Tôi vẫn đang đọc về điều này.
  • Tốt hơn là có 2 trường hợp máy chủ Rails riêng biệt trên 2 dòng mã riêng biệt hoặc chạy 1 thể hiện trên một dòng công suất hai lần (về RAM/lưu trữ/băng thông)? Tôi nên bắt đầu với bao nhiêu Linodes?
  • Tôi nên chọn loại phân phối Linux nào? (Linode cung cấp 8 cái khác nhau - http://www.linode.com/faq.cfm) Có bất kỳ lợi thế/nhược điểm tương đối nào giữa chúng cho một trang Rails không?

Tôi xin lỗi nếu có bất kỳ câu hỏi nào của tôi là ngu ngốc hoặc mâu thuẫn; xin vui lòng ghi nó vào sự thiếu kinh nghiệm của tôi.

Trả lời

18

Kiến trúc

Bạn đang đi đúng hướng. Cá nhân tôi thích Passenger hơn mỏng/kỳ lân (có chạy nginx để backends mỏng trong một thời gian dài) chỉ để thuận tiện, nhưng thiết lập đề xuất của bạn là khá chuẩn. Nếu bạn đang sử dụng Ruby 1.8.7, tôi khuyên bạn nên xem xét REE + Passenger để tiết kiệm bộ nhớ khung.

Hosting & Load Balancing

Linode là tuyệt vời, và tôi sử dụng chúng cho hầu như mọi thứ tôi có thể, nhưng bạn sẽ cần phải nhận thức được giới hạn RAM. Mỗi quá trình Rails sử dụng một lượng RAM không đáng kể, và bạn sẽ muốn tránh làm cho máy bị hoán đổi. Lập kế hoạch chạy đủ các cá thể Rails trên mỗi máy để phân bổ bộ nhớ của bạn chiếm khoảng 90% bộ nhớ trên Linode. Bạn có thể muốn một Linode khác dành riêng cho cơ sở dữ liệu của bạn, mặc dù bạn có thể bắt đầu với cả hai trên cùng một máy; chỉ cần chuẩn bị để tách MySQL khi bạn phát triển. Bạn có thể thiết lập liên lạc giữa Linodes trong cùng một trung tâm dữ liệu trên các IP riêng tư, không tính vào hạn ngạch băng thông của bạn.

Chiến lược mở rộng của bạn nên càng ngang càng tốt, vì vậy tôi khuyên bạn nên nhận Linode thứ hai và thêm nó vào hồ bơi haproxy của bạn khi bạn cần thêm mã lực - Linode tính phí 20 USD cho RAM 512MB hoặc bạn có thể có được toàn bộ 'Nother Linode (với CPU, RAM, HDD và hạn ngạch băng thông) cho cùng một $ 20. Có vẻ như không có trí tuệ!). Trong trường hợp của Rails, một cá thể là một cá thể là một cá thể, do đó, nó thực sự không quan trọng nếu nó trên cùng một máy ảo hay không, miễn là thời gian để kết nối với máy cơ sở dữ liệu của bạn hoặc những gì không nhiều hay ít giống nhau. Bạn có thể chạy 10 Linode mỗi lần chạy 10 Rails xử lý apiece mà không có nhiều vấn đề.Linode cũng cung cấp khả năng chuyển đổi IP, vì vậy nếu Linode chính của bạn (với haproxy) đi xuống, nó có thể không tự động chuyển sang Linode thứ cấp, sau đó bạn có thể chạy haproxy, và sẵn sàng hoạt động với cùng công suất đầu tiên.

Distribution

Thành thực mà nói, đây là tùy thuộc vào bạn! Nhiều người đi với bản phân phối Ubuntu hoặc Redhat (CentOS/Fedora) - tôi thích CentOS - nhưng nó thực sự chỉ là những gì bạn cảm thấy thoải mái nhất. Nếu bạn không có bản phân phối yêu thích, tôi khuyên bạn nên thử dùng Ubuntu/CentOS, vì chúng có xu hướng khá thân thiện với người mới bắt đầu và có hỗ trợ cộng đồng cực kỳ mạnh mẽ.

Có thể bạn sẽ muốn chọn bản phân phối 32 bit trừ khi bạn có lý do thuyết phục để chọn bản phân phối 64 bit; Các tệp thực thi 64 bit đòi hỏi nhiều RAM hơn các đối tác 32 bit của chúng và vì RAM có thể là tài nguyên quý giá nhất của bạn, nên bạn có thể lưu nó ở nơi bạn có thể.

+0

Cảm ơn câu trả lời chi tiết của bạn. Một vài câu hỏi tiếp theo cho bạn: - (1) Tôi đang sử dụng Ruby 1.9.2. REE vẫn có lợi thế trong trường hợp đó? (2) Lợi thế của hành khách cung cấp trên Thin là gì? –

+0

Hành khách tự động quản lý cụm quy trình của bạn. Với mỏng, bạn phải quản lý từng phần phụ trợ theo cách thủ công. Hành khách cũng tận dụng chức năng sao chép-ghi-ghi của REE để chia sẻ bộ nhớ khung trên các phiên bản phụ trợ, giúp bạn tiết kiệm RAM. Nó cũng khá đơn giản để cài đặt và cấu hình. –