2016-03-31 27 views
6

Tôi không có nhiều kinh nghiệm với heroku, và thậm chí ít hơn với phoenix, vì vậy đây có thể là một câu hỏi ngu ngốc ... nhưng muốn đảm bảo rằng tôi đang lựa chọn tốt trên hosting :)Mở rộng phoenix trên heroku

Từ những gì tôi hiểu, cách bạn mở rộng phoenix là thêm một máy chủ khác, khởi chạy một nút khác và kết nối chúng, sau đó để BEAM/OTP làm việc để xử lý cân bằng tải công việc. Trên heroku, dynos thực sự không thể nói chuyện với nhau qua mạng cục bộ, điều mà tôi hiểu là thứ mà BEAM yêu cầu phải nhóm. Vì vậy, việc thêm dynos sẽ dẫn đến một mô hình tỷ lệ "truyền thống" hơn, nơi bạn có một kết nối cân bằng tải cân bằng bên ngoài giữa các nút không được kết nối, với db là trạng thái chia sẻ.

Câu hỏi của tôi ở đây là tác động lớn đến mức nào? Có phải nó chỉ là một vấn đề khi bạn đang đạt mức tải/quy mô nghiêm trọng, hay nó có nghĩa là chi tiêu nhiều tiền hơn cho cơ sở hạ tầng thì cần thiết?

Trả lời

7

Bạn sẽ có được hiệu suất tốt nhất trên một máy chủ có hỗ trợ clustering, nhưng Phoenix có một hệ thống PubSub bộ chuyển đổi chính xác cho các triển khai như Heroku: https://github.com/phoenixframework/phoenix_pubsub

Một dòng thay đổi cấu hình và mix.exs DEPS nhập cảnh và bạn' sẽ có các kênh đa kênh trên heroku thông qua bộ điều hợp Redis của chúng tôi.

+0

- Trong Phoenix 1.2 có bộ điều hợp PG2 được đặt theo mặc định cho PubSub; bất kỳ lý do gì để sử dụng Redis so với mặc định hiện tại trên Heroku? Cảm ơn! – Svilen

2

Đây là câu hỏi rất cởi mở, vì vậy tôi chắc chắn câu trả lời của tôi sẽ không được toàn diện.

Trong trường hợp của bạn, câu hỏi quan trọng nhất là: Tôi có sử dụng kênh Phoenix không?

Nếu bạn sử dụng HTTP cũ đơn giản, nó có thể chủ yếu là không quốc tịch. Có rất nhiều phương pháp để mô phỏng kết nối trạng thái như lưu trữ các phiên trong cookie. Vào cuối ngày, nó không quan trọng nếu các máy chủ phụ trợ của bạn được kết nối với nhau, bởi vì mỗi máy chủ đang thực hiện tính toán độc lập. Cân bằng tải của bạn có thể ngẫu nhiên chọn bất kỳ máy chủ nào và nó sẽ luôn hoạt động. Tính năng tuyệt vời này của http cho phép giao thức này mở rộng rất tốt. Bạn chắc chắn có thể sử dụng Heroku trong kịch bản đó và nó sẽ hoạt động tốt.

Nếu bạn sử dụng kênh Phoenix, mọi thứ trở nên phức tạp. Bạn vẫn muốn có thể kết nối với bất kỳ máy chủ nào, nhưng có thể bạn sẽ gửi tin nhắn cho người dùng khác theo thời gian thực và chúng có thể được kết nối với các máy chủ khác. Phoenix giải quyết vấn đề này cho bạn bằng cách nhóm sử dụng BEAM và điều này sẽ khó khăn đối với Heroku. Hoặc thậm chí là không thể.

Tóm lại: đây không phải là câu hỏi có quy mô nhỏ/quy mô lớn. Đó là một câu hỏi về các tính năng. Các kênh mở rộng sẽ yêu cầu phân cụm, mở rộng quy mô HTTP cũ sẽ không đồng bộ.

+0

Nó không phải là một chi phí lớn instantiating một ứng dụng Phoenix cho mỗi dyno (đó là bassicaly những gì sẽ xảy ra)? Ngay cả đối với một HTTP cũ đơn giản? –

+0

Nó không phải là một chi phí lớn. Nếu bạn so sánh các ứng dụng Phoenix và Rails tương tự, Phoenix sẽ có bộ nhớ CPU và CPU thấp hơn. Vì vậy, nếu bạn đang chạy ra khỏi tài nguyên trên một dyno, chỉ cần quay một số khác. – tkowal

+0

Tôi nghĩ rằng đó là một điều rất nhạy cảm, với https://github.com/phoenixframework/phoenix_pubsub_redis cảm ơn câu trả lời tuyệt vời cho một câu hỏi không tuyệt vời :) –

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