อะไรคือ “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 ดังนั้นตอนนี้คุณจึงเข้าใจมากขึ้นว่าทำไมเราจึงใช้เซิร์ฟเวอร์เหล่านี้
คุณจะใช้อันไหนสำหรับโครงการต่อไปของคุณ
ขอบคุณที่อ่าน! 🙂