Chúng tôi đã gặp phải điều này một thời gian trước và tôi đã dành khá nhiều thời gian để làm điều này với sự thất vọng lớn lao của tôi. Tôi sẽ cố gắng để dính vào điểm nổi bật. Có một số giải pháp tẩy trắng Heroku có vẻ thoạt nhìn ngay từ cái nhìn đầu tiên.
Ví dụ đã được đưa ra heroku-autoscaler thực sự là để tự động hóa dynos và là giải pháp duy nhất có thể yêu cầu thực hiện điều này (và chắc chắn không làm tốt). Hầu hết những người khác sẽ chỉ yêu cầu bồi thường cho người lao động tự động cho bạn. Vì vậy, chúng ta hãy tập trung vào đó đầu tiên. Các bộ tự động bạn sẽ xem xét cho người lao động phụ thuộc vào những gì bạn đang thực sự sử dụng cho công nhân nền của bạn, ví dụ: delayed_job, resque. Đó là những libs xử lý nền phổ biến nhất mà mọi người sử dụng, vì vậy các bộ lọc tự động sẽ cố gắng móc vào một trong số chúng. Bạn có thể sử dụng những thứ như:
Một số các công việc trên Cedar ngăn xếp một số có thể cần một chút tinh chỉnh. Vấn đề với tất cả chúng là nó giống như cố kéo mình ra khỏi đầm lầy bằng tóc của chính bạn. Chúng ta hãy thuê lửa như một ví dụ (có lẽ đây là một trong những ví dụ tốt nhất). Nó sửa đổi delay_job để các nhân viên có thể nhìn vào hàng đợi và quay lên nhiều công nhân hơn nếu cần, nếu không có thêm công việc nào trong hàng đợi, tất cả các công nhân sẽ đóng cửa nhau. Có một số vấn đề:
- nếu bạn muốn thực hiện công việc trên hàng đợi được thực hiện trong tương lai chứ không phải lúc này, bạn sẽ không may mắn.Một công nhân bắt đầu khi công việc vào hàng đợi, nhưng vì công việc sẽ được thực thi trong tương lai, công nhân sẽ đóng cửa và sẽ không khởi động trừ khi một công việc khác đi vào hàng đợi (đó là điều duy nhất nhắc nhở công nhân khởi động)
- bạn mất khả năng thử lại công việc thất bại, mặc định có thể bị trì hoãn, nhưng phải mất một lúc trước khi công việc thất bại được thử lại (và dần dần lâu hơn) nếu không thành công nhiều lần, nhưng công nhân sẽ tắt trong thời gian trễ này và không có gì để nhắc họ khởi động lại (về bản chất đây là vấn đề tương tự như trong trường hợp đầu tiên)
Điều giải quyết vấn đề này là phải có một công nhân chạy liên tục do đó theo dõi hàng đợi định kỳ và có thể thực hiện công việc khi cần thiết hoặc thậm chí quay nhiều công nhân hơn. Nhưng nếu bạn làm điều đó, bạn không tiết kiệm được bất kỳ khoản tiền nào (bạn có một nhân viên hoạt động liên tục 24/7 và phải trả tiền cho điều đó) và đó là toàn bộ tiền đề đằng sau các bộ nạp tự động trên heroku. Về bản chất, nếu bạn chỉ thỉnh thoảng có xử lý nền để làm, hoặc bạn có các công việc nền có khả năng thất bại nhưng thành công khi thử lại hoặc bạn có các công việc nền không cần thực thi ngay lập tức, không có thư viện autoscaling bạn có thể sử dụng sẽ làm việc cho bạn.
Dưới đây là một giải pháp thay thế. Người đã viết Hirefire, sau đó tách nó thành một webapp (Hirefire app), bản chất của nó là giám sát bên ngoài công nhân Heroku/dynos của bạn cho bạn và quay lên/tắt công nhân dynos khi cần thiết. Đây là phiên bản beta miễn phí nhưng giờ đây chi phí tiền, ít hơn số tiền bạn trả để chạy nhân viên 24/7 nhưng vẫn không đáng kể nếu bạn chỉ cần một vài công việc nền sau một thời gian. Dù bằng cách nào thì đây cũng là cách duy nhất để đảm bảo cơ sở hạ tầng công việc nền của bạn thực hiện những gì bạn muốn (tốt và đưa giải pháp của riêng bạn có nghĩa là có một máy như một ví dụ EC2 nơi bạn có thể đặt một số kịch bản sẽ ping ứng dụng heroku của bạn và quay up/tắt công nhân khi cần thiết - một nỗ lực không tầm thường).
Ứng dụng Thuê bây giờ cũng cung cấp khả năng tự động sửa đổi dynos của bạn cho bạn, nó thực hiện điều này dựa trên việc tìm kiếm độ trễ của hàng đợi yêu cầu heroku của bạn. Tuy nhiên tôi thấy rằng điều này đã không hoạt động tốt, có lẽ nếu bạn đang ở gần trung tâm dữ liệu Amazon, nơi ứng dụng heroku của bạn thực sự sống (chúng tôi không), bạn có thể có trải nghiệm khác. Tuy nhiên, đối với chúng tôi nó không cần thiết quay lên một loạt các dynos và sẽ không bao giờ quay chúng xuống bất kể tôi đã chỉnh sửa các cài đặt như thế nào. Bạn có thể đặt nó xuống thực tế rằng nó là một phiên bản beta nó có thể đã được cải thiện kể từ đó, nhưng đó là kinh nghiệm mà tôi đã có.
Câu chuyện dài ngắn, nếu bạn muốn tự động chia sẻ công nhân của mình, hãy sử dụng ứng dụng Thuê xe, bạn sẽ tiết kiệm được ít tiền hơn bạn tưởng, nhưng nó vẫn là lựa chọn rẻ nhất. Nếu bạn muốn autoscale dynos bạn về cơ bản ra khỏi may mắn. Đây chỉ là một trong những hạn chế mà bạn sống với sự tiện lợi của một nền tảng như Heroku.
Cảm ơn rất nhiều, câu trả lời tuyệt vời. Tôi sẽ cung cấp cho Hirefire một đi sau, và nếu tôi tìm thấy bất kỳ giải pháp tốt khác, tôi sẽ thông báo ở đây quá. – FernandoH
@Fernando Bạn đã kết thúc với điều gì? – user456584
@skorks, tôi đã thử heroku-autoscaler một lúc. Nó hoạt động nhưng không hoàn hảo và tôi cảm thấy không tốt lắm với thứ gì đó có thể mở rộng tài nguyên khiến tôi tốn kém. Cuối cùng tôi đã từ bỏ quy mô tự động thông qua những điều này .. Bạn đang cân nhắc việc sử dụng bất kỳ cái nào trong số này? Cho rằng tôi đã thử nó hơn một năm trước đây, có thể có giải pháp tốt hơn ngày nay, xin vui lòng cho tôi biết nếu bạn tìm thấy bất kỳ! – FernandoH