Heroku: Web dyno so với worker dyno? Tôi cần bao nhiêu / tỷ lệ nào?


82

Tôi tò mò không biết sự khác biệt giữa web và công nhân dynos trên Heroku là gì. Họ đưa ra lời giải thích một câu trên trang định giá của họ, nhưng điều này khiến tôi bối rối. Làm thế nào để tôi biết có bao nhiêu để chọn trong số mỗi? Có một tỷ lệ tôi nên nhắm tới không? Tôi còn khá mới với công cụ này, vì vậy ai đó có thể giải thích sâu hơn, hoặc có thể bằng cách nào đó tôi có thể tính toán tôi cần bao nhiêu và loại dynos nào không?

Ngoài ra, tôi bối rối về ý nghĩa của chúng đối với số giờ cho mỗi dyno.

http://www.heroku.com/pricing

Tôi cũng đã xảy ra bài báo này. Là một trong những giải pháp được đề xuất của họ, họ cho biết là tăng lượng dynos. Họ đang đề cập đến loại dyno nào ở đây?

http://devcenter.heroku.com/articles/backlog-too-deep

Câu trả lời:


58

Dấu hiệu tốt nhất của bạn nếu bạn cần thêm dynos (còn gọi là quy trình trên Cedar) là nhật ký heroku của bạn. Đảm bảo bạn nâng cấp lên ghi nhật ký mở rộng (miễn phí) để có thể điều chỉnh nhật ký của mình.

Bạn đang tìm kiếm các mục nhập heroku.router và giá trị bạn quan tâm nhất là giá trị hàng đợi - nếu giá trị này liên tục lớn hơn 0 thì đó là một dấu hiệu tốt bạn cần thêm nhiều dynos hơn. Về cơ bản, điều này có nghĩa là có nhiều yêu cầu đến hơn quá trình của bạn có thể xử lý nên chúng đang được xếp hàng đợi. Nếu chúng được xếp hàng đợi quá lâu mà không trả lại bất kỳ dữ liệu nào, chúng sẽ bị hết thời gian chờ.

Tôi e rằng không có tỷ lệ lý tưởng nào cả, bạn có thể có một ứng dụng thực hiện 100 yêu cầu mỗi giây cần nhiều quy trình web nhưng không sử dụng công nhân. Bạn chỉ cần các quy trình của nhân viên nếu bạn đang xử lý ở chế độ nền như gửi email, v.v.

ps Backlog quá sâu sẽ là một quá trình web Dyno gây ra nó.

CẬP NHẬT: Vào ngày 26 tháng 3 năm 2013 Heroku đã loại bỏ các trường hàng đợi và chờ khỏi đăng xuất.

hàng đợi và trường chờ đã bị xóa khỏi thông báo nhật ký bộ định tuyến. Ngoài ra, bộ định tuyến Heroku không còn đặt tiêu đề HTTP X-Heroku-Dynos-In-Use, X-Heroku-Queue-Depth và X-Heroku-Queue-Wait-Time cho các yêu cầu đến.


12
Để xem xét Heroku Router nhật ký, thựcheroku logs -p router --tail
Nathan Hurst

1
Tôi không thấy giá trị hàng đợi Tôi thấy dyno = web.1 connect = 2ms service = 4ms status = 200 bytes = 43
Jaqx

8
Tại sao họ lại loại bỏ chúng?
Attilio

6
Bạn vẫn có thể nhận được thông tin này bằng cách bật tiện ích bổ sung Heroku Labs log-runtime-metrics. Chạy lệnh sau để làm như vậy heroku labs:enable log-runtime-metrics,. Đọc thêm tại đây: devcenter.heroku.com/articles/log-runtime-metrics
Jeremy Fox,

3
stackoverflow.com/a/19965981/1233555 - Heroku đã chuyển sang định tuyến ngẫu nhiên, vì vậy một số dynos có thể có hàng đợi xếp chồng lên nhau trong khi các dynos khác miễn phí. Tránh điều này bằng cách đảm bảo rằng tất cả các yêu cầu được xử lý rất nhanh chóng trong trình duyệt web của bạn.
ChrisPhoenix

15

Dynos về cơ bản là các quy trình chạy trên phiên bản của bạn. Với ngăn xếp Cedar mới, chúng có thể được thiết lập để thực thi bất kỳ lệnh shell tùy ý nào. Đối với các ứng dụng web, bạn thường có một quy trình gọi là "web" chịu trách nhiệm phản hồi các yêu cầu HTTP từ người dùng. Tất cả các quy trình khác trước đây được gọi là "công nhân". Những thứ này chạy liên tục trong nền cho những thứ như cron, hàng đợi xử lý và bất kỳ tính toán nặng nào mà bạn không muốn ràng buộc các quy trình web của mình. Bạn cũng có thể chia tỷ lệ từng loại quy trình, để nhiều quy trình của từng loại sẽ được khởi động để đồng thời bổ sung. Số lượng mỗi cái mà bạn sử dụng thực sự phụ thuộc vào nhu cầu của ứng dụng của bạn và tải mà ứng dụng nhận được. Bạn có thể sử dụng các công cụ như plugin New Relic để theo dõi những điều này.


1
"Dynos về cơ bản là các quy trình chạy trên phiên bản của bạn." Đây là một tuyên bố không chính xác. Dyno tồn tại trên các trường hợp khác nhau.
Neil Middleton

9

Một số người đã đề cập rằng không có tỷ lệ xác định và tỷ lệ nhân viên web so với nhân viên 'nền' mà bạn muốn phụ thuộc vào cách bạn thiết kế ứng dụng của mình - điều đó chính xác. Tuy nhiên, tôi nghĩ có thể hữu ích khi thêm rằng theo nguyên tắc chung, bạn muốn nhân viên web của mình - và do đó, các hành động của bộ điều khiển mà họ đang phục vụ - nhanh như chớp và rất nhẹ, để giảm độ trễ trong thời gian phản hồi từ các hành động của trình duyệt. Nếu có một số hành động trình duyệt yêu cầu nhiều hơn, chẳng hạn như khoảng nửa giây thời gian thực để phân phát, thì bạn có thể sẽ muốn kiến ​​trúc một loại hệ thống nào đó đẩy phần lớn hành động đó vào một hàng đợi.

Sau đó, bạn sẽ thiết kế (các) dyno nhân viên ngoại tuyến sẽ phục vụ hàng đợi này. Chúng có thể mất nhiều thời gian hơn vì không có phản hồi HTTP nào đang chờ xử lý trên đầu ra của chúng. Có lẽ trang bạn đã hiển thị từ yêu cầu trình duyệt ban đầu đã đẩy hành động sẽ phân phát một số Javascript bắt đầu một chuỗi kiểm tra xem liệu yêu cầu đã hoàn tất sau mỗi 5 giây hay chưa, hoặc một cái gì đó dọc theo những dòng đó.

Tôi vẫn không thể cung cấp cho bạn một tỷ lệ để làm việc với cùng một lý do mà những người khác đã đưa ra, nhưng hy vọng điều này sẽ giúp bạn quyết định cách kiến ​​trúc ứng dụng của mình. (Tôi cũng nên nói rằng đây chỉ là một thiết kế trong số rất nhiều thiết kế hợp lệ.)


3

https://stackoverflow.com/a/19965981/1233555 - Heroku đã chuyển sang định tuyến ngẫu nhiên, vì vậy một số dynos có thể có hàng đợi xếp chồng lên nhau (trong khi chúng phục vụ một yêu cầu dài) trong khi các dynos khác thì miễn phí. Tránh điều này bằng cách đảm bảo rằng tất cả các yêu cầu được xử lý rất nhanh chóng trong trình duyệt web của bạn. Điều này sẽ làm giảm số lượng dynos web bạn cần, đồng thời yêu cầu nhiều thợ dynos hơn.

Bạn cũng cần quan tâm đến ứng dụng web của mình hỗ trợ đồng thời, điều mà chỉ một số cấu hình Rails làm được - hãy thử Unicorn hoặc mã được viết cẩn thận (đối với I / O không chặn EventMachine) với Thin.

Bạn có thể phải thử, thay vì tính toán, để xem bạn cần bao nhiêu dynos mỗi loại. Đảm bảo New Relic của họ báo cáo hàng đợi dyno - xem liên kết ở trên.


1

Câu trả lời ngắn gọn là bạn cần càng nhiều càng tốt để giữ cho hàng đợi của mình không còn.

Như John mô tả, nếu bạn bắt đầu thấy một hàng đợi trong nhật ký của mình thì bạn cần thêm dynos. Nếu bạn bắt đầu thấy hàng đợi nền của mình quá dài (cách bạn nhận được thông tin này phụ thuộc vào những gì bạn đã triển khai) thì bạn cần thêm nhân công.

Không có tỷ lệ vì nó phụ thuộc rất nhiều vào thiết kế và cách sử dụng ứng dụng của bạn.


1
Được rồi cảm ơn. Tôi giả định với dynos bạn có nghĩa là web dynos. Ngoài ra, làm cách nào để kiểm tra hàng đợi trong nhật ký của tôi? Cụ thể hơn, những gì tôi yêu cầu là làm cách nào để xác định xem mọi thứ có chồng chất lên nhau khi tôi đọc nhật ký của mình hay không? Tôi là một nhà phát triển Rails nên tôi thường xử lý việc chạy một máy chủ cục bộ và đọc các nhật ký đó, nhưng tôi không chắc mình sẽ biết cách xác định một hàng đợi nếu tôi thấy một hàng đợi.
varatis

1
câu trả lời của tôi mô tả cách xác định kích thước hàng đợi - đuôi bạn đăng nhập trên heroku và tìm kiếm các mục nhập bộ định tuyến và hàng đợi = giá trị. Nhật ký cục bộ của bạn sẽ không giúp bạn - bạn cần phải sử dụng heroku logs -ftừ dòng lệnh.
John Beynon

1
@JohnBeynon Ok, cảm ơn. Không nhận ra điều này cho đến khi đọc lại sau này.
varatis
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.