เหตุใดแอป Heroku พื้นฐานของฉันจึงใช้เวลาโหลดสองวินาที


106

ฉันสร้างแอป Heroku ที่เรียบง่ายสองแอปเพื่อทดสอบบริการ แต่มักใช้เวลาหลายวินาทีในการโหลดหน้านี้เมื่อฉันเยี่ยมชมครั้งแรก:

สิ่งที่ฉันทำคือสร้างแอป Sinatra ง่ายๆและใช้งานได้ ฉันไม่ได้ทำอะไรที่วุ่นวายหรือทดสอบเซิร์ฟเวอร์ Heroku ฉันจะปรับปรุงเวลาตอบสนองได้อย่างไร ตอนนี้ช้ามากและฉันไม่แน่ใจว่าจะเริ่มจากตรงไหน รหัสสำหรับโครงการอยู่บน github หากช่วยได้

คำตอบ:


184
  • หากแอปพลิเคชันของคุณไม่ได้ใช้งานสักระยะหนึ่งแอปพลิเคชันจะถูกยกเลิกการโหลด (จากหน่วยความจำเซิร์ฟเวอร์)
  • ในการเข้าชมครั้งแรกจะโหลดและยังคงโหลดจนกว่าเวลาจะผ่านไปโดยไม่มีใครเข้าถึงได้

สิ่งนี้ทำเพื่อประหยัดทรัพยากรเซิร์ฟเวอร์ หากไม่มีใครใช้แอปของคุณทำไมต้องทำให้ทรัพยากรไม่ว่างและไม่ปล่อยให้คนที่ต้องการใช้งานจริงๆ?
หากแอปของคุณมีปริมาณการใช้งานต่อเนื่องจำนวนมากแอปจะไม่ถูกยกเลิกการโหลด

มีบันทึกอย่างเป็นทางการเกี่ยวกับเรื่องนี้


53
วิธีที่ง่ายที่สุดในการแก้ไขปัญหานี้คือการเพิ่ม dynos ของคุณไป 2.
Chap

71
การปิงเซิร์ฟเวอร์ของคุณเพื่อป้องกันไม่ให้ทำงานอยู่ในรังของคุณเอง บริการเหล่านี้คุณกำลังพูดคุยเกี่ยวกับการเป็นฟรี พวกเขาจำเป็นต้องอนุรักษ์ทรัพยากร หากทุกคนส่ง Ping ไปยังเซิร์ฟเวอร์ของตนจะไม่มีการสลับออกและผู้ให้บริการจะต้องขยายขนาด เสียเงิน .... ลาก่อนบริการฟรี. ฉันคิดว่าผู้โพสต์คำตอบนี้ควรลบคำแนะนำในการ ping เซิร์ฟเวอร์
GreenAsJade

34
ฉันใช้ uptimerobot.com เพื่อ ping แอป Heroku ของฉันทุก ๆ 5 นาทีฟรี - มันบอกว่าฉันมี 200OK (และที่สำคัญกว่านั้นเมื่อฉันไม่ทำ) และมันช่วยให้แอปตอบสนอง ฉันไม่ขอโทษสำหรับเรื่องนี้ ฉันมีแอพ heroku 10 แอพซึ่งส่วนใหญ่เป็นแอพ dev หรือเดโม แต่แอพนี้ใช้งานจริง / ใช้งานจริงและแม้จะมีปริมาณการใช้งานต่ำ แต่ก็ต้องตอบสนองอย่างรวดเร็วเมื่อได้รับการร้องขอ หากนี่เป็นภัยคุกคามต่อรูปแบบธุรกิจของ Heroku พวกเขาก็จะหยุดให้เราทำ เมื่อฉันมีผู้ใช้ทั่วโลกหลายพันคนฉันจะหมุนไดโนอื่นและเริ่มจ่ายเงินสำหรับบริการที่ยอดเยี่ยม ดังนั้นเลิกกับสิ่งที่เดินทางผิด! :)
ED-209

4
ฉันอยู่กับ Tokn แอปใหม่ควรจะได้รับผู้ใช้อย่างไรหากไซต์โหลดช้ามากจนออกไปก่อนที่จะขึ้น
Deborah

3
เมื่อมองย้อนกลับไปตอนนี้การจับรังได้สำเร็จ โชคดีที่ Heroku จัดการมันอย่างดี คุณไม่สามารถมี dyno ฟรีตลอดเวลาได้อีกต่อไปเนื่องจากระดับฟรีถูก จำกัด ด้วยสถานะการออนไลน์ในขณะนี้
Jenny Shoars

15

คุณอาจต้องการตรวจสอบตัวเลือกการแคชที่คุณมีใน Heroku w / Varnish และ Memcached สิ่งเหล่านี้ยังคงอยู่โดยไม่ขึ้นกับ dynos

ตัวอย่างเช่นหากคุณมีหน้าแรกที่ไม่มีการเปลี่ยนแปลงคุณสามารถแคชเป็นระยะเวลานานใน Varnish ได้โดยการเพิ่มส่วนหัว Cache-Control ในการตอบกลับ จากนั้นผู้ใช้ของคุณจะไม่ประสบปัญหาการโหลดจนกว่าพวกเขาจะต้องการ "ทำอะไรบางอย่าง" แทนที่จะมาถึง


4

คุณควรตรวจสอบคำตอบของ Tom Robinson เรื่อง "Scalability: How Does Heroku Work?" บน Quora: http://www.quora.com/Scalability/How-does-Heroku-work

Heroku แบ่งทรัพยากรเซิร์ฟเวอร์ระหว่างลูกค้า / แอปพลิเคชันต่างๆมากมาย แอปของคุณได้รับการจัดสรรพลังการประมวลผล พาร์ติชัน Heroku ตามความต้องการทรัพยากร เมื่อคุณมีแอปพลิเคชั่นยอดนิยมที่ต้องการพลังงานมากขึ้นคุณสามารถจ่ายเงินสำหรับ 'dynos' (คอนเทนเนอร์แอปพลิเคชัน) เพิ่มเติมจากนั้นจะได้รับชิ้นส่วนที่ใหญ่ขึ้นเพื่อตอบแทน

ในกรณีของคุณคุณกำลังใช้งานแอปฟรีที่มีคนเพียงไม่กี่คนที่กำลังเยี่ยมชม / ใช้งาน ดังนั้น Heroku จึงลดทรัพยากรที่คุณได้รับโดยการยกเลิกการโหลดแอปของคุณ - วางไว้ในโหมดไฮเบอร์เนตเป็นหลักจนกว่าจะมีการร้องขอไปยังที่อยู่ของคุณ เมื่อเป็นเช่นนั้นและแอปของคุณไม่ทำงานเป็นเวลานานจึงต้องใช้เวลาในการโหลดซ้ำ

เพิ่ม dyno พิเศษ 1 รายการเพื่อป้องกันไม่ให้แอปของคุณเข้าสู่โหมดสลีปหากเวลาในการรีโหลดนั้นสำคัญ


3

ฉันกำลังมีปัญหาเดียวกัน ฉันติดตั้งแอพ Rails 3 (1.9.2) เมื่อคืนและมันช้า ฉันรู้ว่า 1.9.2 / Rails 3 อยู่ในรุ่นเบต้าบน Heroku แต่ตั๋วสนับสนุนบอกว่าควรใช้คำแนะนำที่พวกเขาส่งมาให้ฉัน

ฉันเข้าใจดีว่าคำขอครั้งแรกหลังจากใช้เวลานานใช้เวลานานที่สุด มีเหตุผล. แต่การโหลดหน้าเว็บที่ไม่ได้เชื่อมต่อกับ DB โดยใช้เวลา 10 วินาทีในบางครั้งก็ค่อนข้างแย่

อย่างไรก็ตามคุณอาจต้องการลองสิ่งที่ฉันกำลังจะทำ นั่นคือโปรไฟล์แอปของฉันและดูว่าใช้เวลาในเครื่องนานแค่ไหน หากใช้เวลา 400ms แสดงว่ามีบางอย่างผิดปกติ แต่ถ้าฉันได้รับ 50ms ในพื้นที่และยังใช้เวลา 10 วินาทีใน Heroku แสดงว่ามีบางอย่างผิดปกติ

เห็นได้ชัดว่าการแคชช่วยได้ แต่คุณจะได้รับเพียง 5MB ฟรีและอีกครั้งกับคนเพียงคนเดียวที่ใช้ไซต์นี้ไม่ควรช้าขนาดนั้น


1

ฉันมีปัญหาเดียวกันกับทุกแอพที่ฉันใส่ผ่านบัญชีฟรีของ heroku ขณะนี้มีตัวเลือกในการเพิ่ม dynos เพื่อไม่ให้แอปของคุณถูกถ่ายออกในขณะที่ไม่มีการใช้งานสักระยะหนึ่งคุณสามารถลองใช้ redis หรือ memcached สำหรับการแคช แต่ฉันใช้วิธีแก้ปัญหาที่แฮ็กสำหรับโครงการขนาดเล็กของฉันโดยพื้นฐานแล้วฉันได้สร้างเครื่องขูดเว็บวางไว้ในลูปที่ไม่มีที่สิ้นสุดด้วยการนอนหลับและเว็บไซต์นั้นมีเวลาตอบสนองที่ดีกว่ามาก (ฉันเดาว่ามันไม่ได้ถูกถ่ายออกเพราะสคริปต์)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.