Tại sao các ứng dụng Heroku cơ bản của tôi mất hai giây để tải?


100

Tôi đã tạo hai ứng dụng Heroku rất đơn giản để thử nghiệm dịch vụ, nhưng thường mất vài giây để tải trang khi tôi truy cập chúng lần đầu:

Tất cả những gì tôi đã làm là tạo một ứng dụng Sinatra đơn giản và triển khai nó. Tôi chưa làm bất cứ điều gì để gây rối hoặc kiểm tra các máy chủ Heroku. Tôi có thể làm gì để cải thiện thời gian phản hồi? Hiện tại nó rất chậm và tôi không biết phải bắt đầu từ đâu. Mã cho các dự án có trên github nếu điều đó hữu ích.

Câu trả lời:


175
  • Nếu ứng dụng của bạn không được sử dụng trong một thời gian, nó sẽ được tải xuống (từ bộ nhớ máy chủ).
  • Trong lần truy cập đầu tiên, nó được tải và vẫn được tải cho đến khi một thời gian trôi qua mà không có ai truy cập vào nó.

Điều này được thực hiện để tiết kiệm tài nguyên máy chủ. Nếu không có ai sử dụng ứng dụng của bạn, tại sao lại để tài nguyên bận rộn và không để người thực sự cần sử dụng chúng?
Nếu ứng dụng của bạn có nhiều lưu lượng truy cập liên tục, ứng dụng đó sẽ không bao giờ được tải xuống.

Có một lưu ý chính thức về điều này.


51
Cách dễ nhất để khắc phục điều này là tăng số dynos của bạn lên 2.
Chap

5
@diegopau Tôi đã tìm thấy một ứng dụng hay ( wekkars.com ) thực hiện chính xác những gì bạn cần. Hiện tại, nó dường như đang ở giai đoạn thử nghiệm nhưng nó hoạt động hoàn hảo ở đây.
SteenhouwerD Ngày

68
Ping máy chủ của bạn để giữ nó không hoạt động là nhồi nhét trong tổ của bạn. Những dịch vụ bạn đang nói đến là miễn phí . Họ cần bảo tồn tài nguyên. Nếu mọi người ping máy chủ của họ, không ai bị hoán đổi và nhà cung cấp phải mở rộng quy mô. Điều đó tốn tiền .... tạm biệt dịch vụ miễn phí. Tôi nghĩ người đăng câu trả lời này nên xóa đề xuất ping máy chủ.
GreenAsJade

32
Tôi sử dụng uptimerobot.com để ping ứng dụng Heroku của mình 5 phút một lần miễn phí - nó cho tôi biết tôi có 200OK (và quan trọng hơn là khi tôi không có) và nó giữ cho ứng dụng luôn phản hồi. Tôi không xin lỗi vì điều này; Tôi có 10 ứng dụng heroku, hầu hết đều là ứng dụng dành cho nhà phát triển hoặc demo, nhưng ứng dụng này đặc biệt là ứng dụng trực tiếp / sản xuất và mặc dù lưu lượng truy cập thấp nhưng nó cần phản hồi nhanh chóng khi được yêu cầu. Nếu đây là một mối đe dọa đối với mô hình kinh doanh của Heroku thì họ sẽ ngăn chúng tôi làm điều đó. Khi tôi có hàng nghìn người dùng toàn cầu, tôi sẽ tạo ra một dyno khác và bắt đầu trả tiền cho một dịch vụ tuyệt vời. Vì vậy, bỏ cuộc với điều tội lỗi-chuyến đi! :)
ED-209

3
Tôi với Tokn. Các ứng dụng mới sẽ thu hút người dùng như thế nào nếu trang web tải quá chậm khiến họ rời đi trước khi khởi động?
Deborah,

14

Bạn cũng có thể muốn điều tra các tùy chọn bộ nhớ đệm mà bạn có trên Heroku w / Varnish và Memcached. Chúng tồn tại độc lập với dynos.

Ví dụ: nếu bạn có trang chủ không thay đổi, bạn có thể lưu vào bộ nhớ cache trong thời gian dài trong Varnish bằng cách thêm tiêu đề Cache-Control vào phản hồi. Sau đó, người dùng của bạn sẽ không gặp phải tải trọng cho đến khi họ muốn "làm điều gì đó" thay vì khi họ đến nơi.


4

Bạn nên xem câu trả lời của Tom Robinson cho "Khả năng mở rộng: Heroku hoạt động như thế nào?" trên Quora: http://www.quora.com/Scalability/How-does-Heroku-work

Heroku chia tài nguyên máy chủ cho nhiều khách hàng / ứng dụng khác nhau. Ứng dụng của bạn là các khối sức mạnh tính toán được phân bổ. Phân vùng Heroku dựa trên nhu cầu tài nguyên. Khi bạn có một ứng dụng phổ biến đòi hỏi nhiều năng lượng hơn, bạn có thể trả tiền cho nhiều 'dynos' (vùng chứa ứng dụng) hơn và sau đó đổi lại sẽ nhận được một phần lớn hơn của chiếc bánh.

Tuy nhiên, trong trường hợp của bạn, bạn đang chạy một ứng dụng miễn phí mà rất ít người - nếu có ngoài bạn - đang truy cập / sử dụng. Do đó, Heroku cắt giảm tài nguyên bạn nhận được bằng cách dỡ ứng dụng của bạn - về cơ bản là đặt nó ở chế độ ngủ đông - cho đến khi có yêu cầu gửi đến địa chỉ của bạn. Khi điều đó xảy ra và ứng dụng của bạn đã chạy không tải trong một thời gian dài, cần có thời gian để tải lại.

Thêm 1 dyno bổ sung để giữ cho ứng dụng của bạn không bị ngủ, nếu thời gian tải lại là quan trọng.


3

Tôi đang gặp vấn đề tương tự. Tôi đã triển khai ứng dụng Rails 3 (1.9.2) vào đêm qua và nó rất chậm. Tôi biết rằng 1.9.2 / Rails 3 đang ở trong BETA trên Heroku nhưng phiếu hỗ trợ nói rằng nó sẽ ổn bằng cách sử dụng một số hướng dẫn mà họ đã gửi cho tôi.

Tôi hiểu rằng yêu cầu đầu tiên sau một thời gian dài là yêu cầu lâu nhất. Có ý nghĩa. Nhưng việc tải các trang thậm chí không kết nối với DB đôi khi chỉ mất 10 giây là khá tệ.

Dù sao, bạn có thể muốn thử những gì tôi sẽ làm. Đó là hồ sơ ứng dụng của tôi và xem nó mất bao lâu cục bộ. Nếu nó mất 400ms thì có gì đó không ổn. Nhưng nếu tôi nhận được 50ms cục bộ và nó vẫn mất 10 giây trên Heroku thì chắc chắn có điều gì đó không ổn.

Rõ ràng, bộ nhớ đệm sẽ hữu ích nhưng bạn chỉ nhận được 5MB miễn phí và một lần nữa, với MỘT người sử dụng trang web, nó sẽ không quá chậm.

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.