2011-07-06 20 views
20

Tôi muốn biết nếu có giải pháp tốt cho dynos autoscaling AND worker trên Heroku trong môi trường sản xuất (có thể là một giải pháp khác cho mỗi người, vì chúng khá không liên quan). Bạn/công ty đang sử dụng cái gì, liên quan đến điều này?Gems/Services for autoscaling Các dynos và công nhân của Heroku

Tôi đã tìm thấy rất nhiều tùy chọn, nhưng không có tùy chọn nào trong số đó có vẻ thực sự trưởng thành cho môi trường sản xuất. Có Heroscale, mà dường như giới thiệu một số độ trễ vì nó không chạy tại địa phương, và tôi cũng nghe nói về một số thời gian chết. Có những sửa đổi của delay_jobs, đã không được cập nhật trong một thời gian dài, và có một số vấn đề với các gói hiện tại. Ngoài ra còn có một số lựa chọn thay thế liên quan đến reque, có vẻ như không xử lý tốt một số ngoại lệ HTTP, kết quả là ứng dụng bị lỗi và những ứng dụng khác dường như cần một nhân viên luôn hoạt động để lên lịch cho các công nhân khác và cũng có thể bị một số ngoại lệ HTTP các vấn đề.

Vâng. Đến cuối cùng. Những gì đang được sử dụng, ngày nay, để tự động hóa dynos Heroku của và công nhân trên một môi trường sản xuất với Rails3?

Xin cảm ơn trước.

Trả lời

34

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.

+0

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

+0

@Fernando Bạn đã kết thúc với điều gì? – user456584

+0

@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

2

Tôi đang cố gắng tìm cách tốt để tự động chỉnh sửa dyno.

https://github.com/ddollar/heroku-autoscale thực hiện điều này nhưng có tuyên bố từ chối trách nhiệm về sự chưa trưởng thành của nó.

+0

Ohh, tôi cũng đã tìm thấy điều đó. Tôi hơi khó chịu do tuyên bố từ chối trách nhiệm đó, nhưng tôi sẽ thử lại sau :) Cảm ơn – FernandoH

+0

Có thể đáng xem xét các nhánh tại https://github.com/ddollar/heroku-autoscale/network Vui lòng chia sẻ những gì đã từng khác bạn tìm thấy bằng cách này – gunn

10

Heroku đang cung cấp một tiện ích bổ sung mới có tên AdeptScale hiện đã hết Beta.

Here is the add-on page for AdeptScale

Here is the more detailed documentation for AdeptScale

Here is the form to sign up for Heroku's Beta Program

Hy vọng rằng đây sẽ là một giải pháp mạnh mẽ cho autoscaling Heroku Dynos, như tôi không vẫn không hài lòng với các tùy chọn hiện hành.

Cập nhật (2/4/13): Tôi đã đăng ký chương trình Beta của Heroku để dùng thử tiện ích bổ sung này và nó hoạt động thực sự tốt cho tôi. Thỉnh thoảng nhân rộng với lưu lượng truy cập, nhưng chủ yếu là ngồi trên số lượng tối thiểu của dynos tôi đã thiết lập 2. Nó giảm đáng kể hóa đơn của tôi, và loại bỏ lo lắng rằng tôi có thể chậm trong thời gian sử dụng cao điểm.

Cập nhật (3/6/13): Đã thêm liên kết tới trang Đăng ký của Heroku cho chương trình beta của họ.

Cập nhật (4/14/13): Dường như tự động chia tỷ lệ đã hết Beta. Nó vẫn hoạt động rất tốt cho tôi.

+0

Bạn đã đăng ký chương trình Beta của Heroku như thế nào? – simo

+0

Đây là biểu mẫu để đăng ký: https://beta.heroku.com/signup –

3

ThuêFire.io (Dịch vụ, không phải dự án nguồn mở) giờ đây cho phép bạn sử dụng các chỉ số Relic mới để tự động mở rộng các dynos web của bạn. New Relic là một công cụ giám sát hiệu suất được cung cấp như một add-on thông qua Heroku. Họ có một cấp miễn phí và nó đủ để sử dụng với HireFire.

Bạn có thể tự động quy mô dựa trên:

  • Thời gian phản hồi
    • Đây là thời gian phản ứng bạn tìm thấy trên Dashboard New Relic. Đó là một sự kết hợp của các yếu tố khác nhau bao gồm Yêu cầu Queuing, Hiệu suất cơ sở dữ liệu, App-Layer, Router vv
  • Apdex Điểm
    • này cho phép bạn mở rộng dựa trên Điểm New Relic Apdex của bạn, cho phép bạn mở rộng dựa trên trải nghiệm người dùng/sự hài lòng, được xác định bởi điểm số này.

Bên cạnh đó, chúng tôi đã trở thành ngôn ngữ/kiến ​​thức bất khả tri. Đối với các dynos công nhân, tất cả những gì bạn cần làm để tự động mở rộng quy mô là thiết lập điểm cuối JSON tại một đường dẫn nhất định trong ứng dụng của bạn trả về một chuỗi JSON rất đơn giản có chứa kích thước hàng đợi (chúng tôi cung cấp các macro thuận tiện, nhưng không bắt buộc cho ngôn ngữ Ruby và một số hỗ trợ out-of-the-box cho các ứng dụng Django, nhưng như tôi đã nói nó hoạt động cho bất kỳ ngôn ngữ/khung công tác nào bằng cách thiết lập một điểm cuối JSON một cách thủ công - nó rất dễ dàng). Đối với dynos web, bạn có thể sử dụng Nguồn Số liệu ThuêFire với bất kỳ ngôn ngữ/khung cơ bản nào và Nguồn Số liệu Relic Mới được đề cập ở trên cho các ngôn ngữ/khung được hỗ trợ bởi Relic Mới (đây là các ngôn ngữ phổ biến như Ruby, Python, Java, v.v.).

Tuyên bố từ chối trách nhiệm: Tôi đã xây dựng RentalFire.

+1

+1 Tôi là một khách hàng hài lòng cho thuê.io cho ứng dụng heroku Rails của tôi. Michael rất nhạy cảm với các vấn đề và việc thuê lại thực hiện những gì nó nói trên tin - nó thậm chí còn hỗ trợ nhiều hàng đợi cho các dynos công nhân. –

1

tôi vừa mới viết một hệ thống tự động Heroku rộng gọi là Heroku Vector:

https://github.com/wpeterson/heroku-vector

Nó cho phép bạn mở rộng nhiều loại dynos dựa trên các nguồn lưu lượng khác nhau. Nó hiện đang hỗ trợ NewRelic trong suốt và Sidekiq số chủ đề bận rộn. Khi lưu lượng truy cập tăng hoặc giảm, nó sẽ mở rộng số lượng dynos lên hoặc xuống. Đó là một quá trình daemon có thể được chạy trong dyno của riêng mình trên Heroku hoặc ở nơi khác.

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