Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

เหตุใดเราจึงต้องการเซิร์ฟเวอร์แอปพลิเคชันใน Ruby (เหมือนพูม่า)

อะไรคือ “Puma” ที่เริ่มทำงานเมื่อคุณทำ rails server ?

เป็นเซิร์ฟเวอร์แอป!

ให้ฉันอธิบายว่าแอปพลิเคชันเซิร์ฟเวอร์คืออะไร &เหตุใดเราจึงต้องการด้วยตัวอย่าง

ทำความเข้าใจเซิร์ฟเวอร์แอป

สมมติว่าคุณเริ่มสร้างเว็บแอปพลิเคชันใหม่ใน Ruby

และก่อนที่คุณจะเขียนโค้ดใดๆ…

คุณต้องการให้โหลดในเบราว์เซอร์ของคุณ แม้ว่าเพียงเพื่อดูหน้า “ยินดีต้อนรับ” เริ่มต้น

เปิดบราวเซอร์แล้วชี้ไปที่ localhost:3000 หรืออาจจะเป็น localhost:4567 หากคุณกำลังใช้ซินาตรา

แล้วจะเกิดอะไรขึ้น

เบราว์เซอร์ของคุณเชื่อมต่อกับ localhost , บนพอร์ต 3000 โดยที่แอปพลิเคชันเซิร์ฟเวอร์ Ruby เช่น Puma รออยู่

localhost ชี้ไปที่ที่อยู่ IP พิเศษ 127.0.0.1 ซึ่งหมายถึงคอมพิวเตอร์ของคุณเสมอ

ตอนนี้ :

งานของ Puma หรือเซิร์ฟเวอร์แบบแร็คอื่น ๆ (เช่น Thin / Unicorn) คือการจัดการคำขอของเบราว์เซอร์และส่งต่อไปยังแอปพลิเคชันของคุณผ่านอินเทอร์เฟซทั่วไป

เรากำลังพูดถึงอินเทอร์เฟซใด

แร็ค

ฉันอธิบายรายละเอียดเกี่ยวกับแร็คในบทความอื่น

กลับมาที่พูม่า

เหตุใดเราจึงใช้เซิร์ฟเวอร์แอป แทนที่จะให้ Rails จัดการคำขอโดยตรง

เป็นคำถามที่ดีมาก

เราทำสิ่งนี้เพราะช่วยให้มีหลักการออกแบบซอฟต์แวร์พื้นฐาน

คลายความกังวล!

ทำความเข้าใจการแยกความกังวล

งาน Rails และงานในใบสมัครของคุณคือให้บริการตามคำขอของผู้ใช้

ตัวอย่างเช่น :

  • สร้างบัญชีใหม่
  • ตรวจสอบว่าข้อมูลรับรองการเข้าสู่ระบบถูกต้องหรือไม่
  • แสดงหน้าผลิตภัณฑ์ที่คุณสามารถซื้อช็อกโกแลตแท่งโกโก้ 100%

ไม่ว่าแอปของคุณจะทำอะไร

  • Rails นำเสนอเมนูของสิ่งที่ผู้ใช้สามารถทำได้ แต่ก็เป็นพ่อครัวด้วยเช่นกัน
  • พูม่าเป็นบริกร รับออร์เดอร์และส่งไปที่ครัว

การมีสิ่งต่างๆ ในลักษณะนี้จะช่วยให้ทุกคนทำดีที่สุดได้

ไม่เพียงแค่นั้น…

นอกจากนี้ยังช่วยให้คุณเปลี่ยนเชฟเป็น Sinatra หรือพนักงานเสิร์ฟเป็น Thin!

“เมื่อข้อกังวลถูกแยกออกจากกัน ระดับอิสระที่สูงขึ้นสำหรับการใช้โมดูลซ้ำ ตลอดจนการพัฒนาและอัปเกรดที่เป็นอิสระ”
วิกิพีเดีย

ขึ้นอยู่กับสถานการณ์และความชอบของคุณ

เซิร์ฟเวอร์แอปพลิเคชันเทียบกับเว็บเซิร์ฟเวอร์ (Nginx &Apache)

ณ จุดนี้คุณอาจสงสัยว่า…

เว็บเซิร์ฟเวอร์อย่าง Apache หรือ Nginx ต่างจากเซิร์ฟเวอร์ Ruby อย่างไร

เหตุใดเราจึงใช้เซิร์ฟเวอร์ทั้งสองนี้ไม่ได้

มีความแตกต่างกันมาก

Nginx เป็นเว็บเซิร์ฟเวอร์ทั่วไป มันจัดการคำขอ &หากมีไฟล์ที่ตรงกันสำหรับคำขอนั้น มันจะส่งคืนไฟล์นั้น

แต่ Nginx ไม่รู้อะไรเกี่ยวกับแร็คเลย หรือทับทิม

นั่นเป็นเหตุผลที่เราต้องการ Puma หรือเว็บเซิร์ฟเวอร์ที่เข้ากันได้กับแร็คอื่น ๆ

อย่างไรก็ตาม…

การใช้ Nginx ในการผลิตยังคงมีประโยชน์

Nginx สามารถจัดการการเชื่อมต่อได้อย่างมีประสิทธิภาพมากขึ้น &มันสามารถให้บริการสินทรัพย์คงที่ (ไฟล์ css &js) โดยไม่ต้องส่งต่อคำขอไปยังแอปพลิเคชันของคุณ

ทำความเข้าใจกับพูม่า

ตอนนี้เราเข้าใจแล้วว่าแอปพลิเคชันเซิร์ฟเวอร์คืออะไรและเหตุใดจึงมีประโยชน์

เราสามารถดู Puma เอง .

ทำไมคุณถึงต้องการเลือก Puma เหนือเซิร์ฟเวอร์อื่น ๆ

ก่อน :

เป็นเซิร์ฟเวอร์แนะนำของ Heroku

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

เช่นกัน :

Puma เป็นแบบมัลติเธรด ซึ่งมักส่งผลให้ใช้หน่วยความจำน้อยลง

“ระบบปฏิบัติการทำงานในนามของโปรแกรมแบบมัลติเธรดน้อยกว่าที่ทำงานสำหรับโปรแกรมหลายกระบวนการ สิ่งนี้แปลเป็นประสิทธิภาพที่เพิ่มขึ้นสำหรับโปรแกรมแบบมัลติเธรด”
การเขียนโปรแกรม PThreads

เซิร์ฟเวอร์ใดเร็วกว่ากัน

เรียกใช้แอป Rack อย่างง่ายด้วยคำสั่งนี้:

rackup -s thin rack-simple.ru 2>1 &>/dev/null

ทดสอบแล้ว :

wrk -d 20 https://localhost:9292

ฉันได้รับผลการเปรียบเทียบเหล่านี้ :

  • คำขอ Webrick 229.97/วินาที
  • บาง 773.20 คำขอ/วินาที
  • Puma 2035.34 คำขอ/วินาที

จากสามข้อนี้ ดูเหมือนว่า Puma จะให้ประสิทธิภาพที่ดีที่สุดแก่คุณ

แต่นั่นไม่สำคัญหรอกว่าคุณมีคิวรี SQL ที่ช้า หรือคุณกำลังวนลูปผ่านอาร์เรย์ที่มีองค์ประกอบนับล้านในทุกคำขอ

สรุป

คุณได้เรียนรู้เกี่ยวกับแอปพลิเคชันเซิร์ฟเวอร์ใน Ruby เช่น Puma &Thin ดังนั้นตอนนี้คุณจึงเข้าใจมากขึ้นว่าทำไมเราจึงใช้เซิร์ฟเวอร์เหล่านี้

เหตุใดเราจึงต้องการเซิร์ฟเวอร์แอปพลิเคชันใน Ruby (เหมือนพูม่า)

คุณจะใช้อันไหนสำหรับโครงการต่อไปของคุณ

ขอบคุณที่อ่าน! 🙂