ทีมแอปพลิเคชันจะต้องเข้าใจว่าประสบการณ์ของลูกค้าเป็นอย่างไร สิ่งนี้เป็นจริงไม่เพียงแต่จากมุมมองทั่วไป (ในแง่ของการใช้งานและการตอบสนอง) แต่ยังเป็นแบบวันต่อวัน แบบนาทีต่อนาที
โดยเฉพาะอย่างยิ่ง เมื่อคุณทำงานกับระบบแบบกระจาย ข้อผิดพลาดเป็นสิ่งที่หลีกเลี่ยงไม่ได้ ปริมาณการใช้ไซต์มีความผันผวนตลอดทั้งวัน และการพึ่งพาระบบใดระบบหนึ่งก็อาจประสบปัญหาได้ตลอดเวลาเช่นกัน
ในบทความนี้ เราจะใช้แดชบอร์ดมหัศจรรย์เพื่อช่วยตรวจสอบและแก้ไขปัญหาประสิทธิภาพภายในแอปพลิเคชัน Ruby on Rails
แต่ก่อนที่เราจะเจาะลึกแดชบอร์ดมหัศจรรย์ เรามาดูกันว่าเราควรระวังอะไรบ้างเมื่อออกแบบแอปของเรา
สิ่งที่ต้องพิจารณาเมื่อสร้างแอป Ruby
ในฐานะเจ้าของแอปพลิเคชันหรือสมาชิกในทีม คุณจะต้องการทราบว่าแอปพลิเคชันของคุณมีปัญหาใดๆ ก่อนที่ลูกค้าจะแจ้งหรือไม่ ซึ่งจะทำให้คุณสามารถดำเนินการแก้ไขได้ทันทีและหวังว่าจะหลีกเลี่ยงการรบกวนผู้ใช้ของคุณ
มีคำถามสำคัญสองสามข้อในการสมัครที่คุณต้องตอบได้ทุกเวลา:
- เวลาตอบกลับของเพจเป็นที่ยอมรับหรือไม่ จากข้อมูลของ Google ทุกวันนี้ อะไรก็ตามที่ช้ากว่าสองวินาทีจะทำให้ลูกค้าออกจากไซต์ของคุณและไปที่อื่น
- ผู้ใช้ของคุณพบข้อผิดพลาดใดๆ หรือไม่ หากเป็นเช่นนั้น ข้อผิดพลาดประเภทใด? อัตราข้อผิดพลาดคืออะไร
- มีปัญหาด้านการปฏิบัติงานใดๆ ที่กำลังดำเนินอยู่ซึ่งส่งผลต่อการสมัครของคุณหรือไม่? นี่อาจเป็นกับเครือข่าย ที่เก็บข้อมูล หรือบริการรักษาความปลอดภัย ดังที่เราทุกคนทราบกันดีว่าผู้ให้บริการระบบคลาวด์ก็มีเหตุขัดข้องซึ่งส่งผลกระทบต่อสุขภาพของแอปพลิเคชันของเราเช่นกัน
ความสามารถในการสังเกตเป็นสิ่งสำคัญ แต่ก็มักเป็นสิ่งสุดท้ายที่วิศวกรนึกถึง นอกจากนี้ยังมีการกำหนดตารางเวลาสำหรับความพร้อมในการปฏิบัติงานอยู่แล้ว เรียกว่าสุดสัปดาห์ก่อนเปิดตัวผลิตภัณฑ์!
นอกเหนือจากเรื่องตลกแล้ว คุณต้องสร้างแอปของคุณเสียก่อนจึงจะสังเกตเห็นบางสิ่งได้ สิ่งนี้ทำให้การทดสอบประสิทธิภาพล่าช้าออกไปจนกระทั่งใกล้สิ้นสุดวงจรการพัฒนา คุณคงไม่อยากใช้เวลามากเกินไปในการทดสอบประสิทธิภาพเมื่อผลิตภัณฑ์เขียนโค้ดไม่ครบถ้วน เพราะคุณจะต้องทำทั้งหมดอีกครั้งในภายหลัง
เช่นเดียวกับการทดสอบความปลอดภัย หากคุณดำเนินการเร็วเกินไป อาจยังคงเกิดช่องโหว่หลังการทดสอบ แต่ก่อนที่ผลิตภัณฑ์จะเข้าสู่การผลิต
ดังนั้นเราจึงทราบดีว่าการตรวจสอบเป็นสิ่งสำคัญ แต่ข้อกังวลทั้งหมดเหล่านี้ถือเป็นประเด็นที่ยุติธรรม การตรวจสอบไม่ได้รับความสนใจเท่าที่ควรจนกว่าจะดำเนินการล่าช้า นั่นคือเหตุผลที่ AppSignal สร้างแดชบอร์ดมหัศจรรย์
เมจิกแดชบอร์ดใน AppSignal
AppSignal เข้าใจถึงความสำคัญของตัววัด แดชบอร์ด และประสิทธิภาพของแอปของคุณ แต่ยังรวมถึงวิศวกรที่มีเวลาน้อยที่สุดในการทำงานก่อนเปิดตัว
แดชบอร์ดมหัศจรรย์ของเราเรียกว่า "เวทมนตร์" เนื่องจากคอลเลกชันการวัดและแดชบอร์ดที่เกี่ยวข้องถูกสร้างขึ้นโดยอัตโนมัติสำหรับคุณ เพียงเมื่อคุณเชื่อมต่อแอปและส่วนประกอบที่ผสานรวม
แดชบอร์ด Magic:ตัวอย่าง Ruby บนแอป Rails
มาดูวิธีที่เราสามารถติดตามและแก้ไขปัญหาด้านประสิทธิภาพภายในแอป Ruby on Rails โดยใช้แดชบอร์ดมหัศจรรย์
แอปพลิเคชันของเราใช้โมเดลการเรียนรู้ของเครื่องอย่างง่าย (ML) สำหรับการคาดการณ์ราคาสกุลเงินดิจิทัล งานแบบอะซิงโครนัสจะอัปเดตโมเดลทุกวันด้วยข้อมูลราคาล่าสุด และปรับปรุงความแม่นยำเมื่อเวลาผ่านไป แอป Rails นี้มีทั้งหน้าเว็บและ REST API ดังที่แสดงในแผนภาพสถาปัตยกรรมด้านล่าง

หลังจากที่เราปรับใช้แอป Rails ของเราแล้ว แดชบอร์ดเวทย์มนตร์จะถูกสร้างขึ้นโดยอัตโนมัติสำหรับเว็บเซิร์ฟเวอร์ Rails Puma และงานอะซิงโครนัส Sidekiq การผสานรวมอื่นๆ ที่รองรับสำหรับแดชบอร์ดเวทย์มนตร์ ได้แก่ MongoDB และ Erlang VM
คุณสามารถใช้แดชบอร์ด Puma magic เพื่อประเมินประสิทธิภาพตามเธรด ความจุพูล และพนักงานของ puma แดชบอร์ดเวทมนตร์ Sidekiq ติดตามความยาวคิว เวลาแฝงของคิว ระยะเวลางาน สถานะงาน และการใช้หน่วยความจำ
แดชบอร์ด Magic จะถูกตรวจพบและสร้างตามการใช้ตัววัดตามเหตุการณ์ เช่น การรันงาน Sidekiq รวมถึงการซักถามอย่างละเอียด คุณสมบัติการตรวจสอบอย่างละเอียดทำให้คุณสามารถลงทะเบียนบล็อกหรือคลาส Ruby เพื่อส่งตัววัดแบบกำหนดเองไปยัง AppSignal แดชบอร์ด Magic ให้การผสานรวมที่พร้อมใช้งานทันทีสำหรับส่วนประกอบที่รองรับ แต่คุณสามารถใช้กลไกนี้เพื่อส่งตัววัดแบบกำหนดเองของคุณไปยัง AppSignal ได้
ตัวอย่างของการซักถามรายนาทีแบบกำหนดเอง
การผสานรวม Sidekiq มีอยู่แล้วภายใน แต่ลองจินตนาการว่าคุณต้องการติดตามกลไกงานเบื้องหลังที่เป็นกรรมสิทธิ์ คุณสามารถใช้ตัวอย่างคลาสต่อไปนี้ คลาสโพรบได้รับการเชื่อมต่อซึ่งใช้ในการเรียกแต่ละครั้งเพื่อรับเมทริกที่ต้องการ
โทรไปที่ Appsignal::Minutely.probes.register รับพารามิเตอร์สองตัว — ชื่อของโพรบและการนำไปปฏิบัติ ซึ่งสามารถเป็นแลมบ์ดาหรือคลาสที่ใช้เมธอดการโทรได้
การกำหนดค่าและข้อกำหนดของระบบสำหรับ AppSignal
เพียงใช้ AppSignal กับแอปพลิเคชัน Rails ของคุณเพื่อรับแดชบอร์ดมหัศจรรย์ หากคุณยังไม่ได้ติดตั้ง AppSignal ให้รวม appsignal gem ไว้ใน Gemfile ของคุณและรันการติดตั้งแบบบันเดิล
จากนั้นเรียกใช้ appsignal install คำสั่งเพื่อกำหนดค่าสภาพแวดล้อมของคุณ การกำหนดค่านี้สามารถจัดเก็บไว้ในไฟล์กำหนดค่าหรือตัวแปรสภาพแวดล้อม และเชื่อมต่อแอปพลิเคชันของคุณกับบัญชี AppSignal และแดชบอร์ด
หลังจากที่คุณติดตั้งและใช้งานเซิร์ฟเวอร์ของคุณ คุณจะเห็นอีเมลสองสามฉบับที่คล้ายกับข้อความต่อไปนี้

ข้อกำหนดของระบบสำหรับตัวอย่างนี้คือ:
- AppSignal gem 2.9.0 หรือสูงกว่า ซึ่งรวมถึงการสนับสนุนการตรวจสอบอย่างละเอียด
- การผสานรวม Puma - ต้องใช้เวอร์ชัน 3.11.4 หรือสูงกว่า
- การบูรณาการ Sidekiq - ต้องใช้ Redis gem 3.3.5 หรือสูงกว่า สำหรับการผสานรวมนี้ ขอแนะนำให้ใช้ AppSignal gem 2.9.5 หรือสูงกว่า
การทดสอบประสิทธิภาพ API การทำนายราคาของเรา
แอปพลิเคชันตัวอย่างข้างต้นใช้โครงข่ายประสาทเทียมอย่างง่ายที่ใช้งานโดยใช้ Ruby FANN gem เพื่อทำนายราคา Bitcoin ในวันถัดไป เปอร์เซ็นต์การเปลี่ยนแปลงราคาจากสิบวันที่ผ่านมาจะถูกใช้เป็นอินพุตของโมเดล
REST API ไม่ใช้พารามิเตอร์ใดๆ เนื่องจากขณะนี้คาดการณ์ราคาสำหรับวันพรุ่งนี้เท่านั้น ผลลัพธ์จะเป็นเอกสาร JSON แบบธรรมดา ดังที่แสดงด้านล่าง
งาน Sidekiq จะได้รับราคาตลาดในช่วงเริ่มต้นของแต่ละวันและอัปเดตโมเดล ML งานนี้ได้รับการกำหนดเวลาให้ทำงานทุกๆ ห้านาที ทำให้สามารถติดตามการหยุดทำงานหรือข้อผิดพลาดได้อย่างรวดเร็ว
คุณสามารถค้นหาโค้ดทั้งหมดได้จากบทความนี้ใน GitHub โปรดทราบว่าไม่มีสิ่งใดในบทความนี้หรือซอฟต์แวร์ที่ถือเป็นคำแนะนำในการลงทุน ปรึกษาที่ปรึกษาทางการเงินก่อนตัดสินใจลงทุนเกี่ยวกับสกุลเงินดิจิทัล ป>
เราจะใช้ JMeter เพื่อจำลองโหลดบน REST API สำหรับการทดสอบประสิทธิภาพ สิ่งนี้ช่วยให้เราสามารถสร้างปริมาณการใช้งานและประเมินประสิทธิภาพโดยใช้แดชบอร์ดมหัศจรรย์ของเรา การทดสอบครั้งแรกของเราใช้ไคลเอนต์ 5 ตัวพร้อมกัน โดยแต่ละไคลเอนต์ส่งคำขอ 100 รายการ
สถิติแสดงช่วงเวลาตอบสนองที่ค่อนข้างสูง โดยมีค่าเฉลี่ยอยู่ที่ 342ms แต่ P99 อยู่ที่ 852ms ดูเหมือนว่าเราจะทำได้ดีกว่านี้

การปรับปรุงประสิทธิภาพของแอป Rails ด้วย Puma Magic Dashboard
แดชบอร์ด Puma magic ของเรามีกราฟของความจุเธรดพูล และเราจะเห็นว่ากราฟนั้นแตะศูนย์ในระหว่างการทดสอบการทำงาน นี่จะอธิบายว่าทำไมบางคำขอจึงใช้เวลานานกว่าคำขออื่นๆ ดังนั้นเราจะเพิ่มจำนวนเธรด puma เป็น 10 รายการ
โปรดทราบว่าเราไม่ได้ทำอะไรเลยเพื่อสร้างแดชบอร์ดหรือกราฟนี้ AppSignal สร้างสิ่งนี้ให้เราโดยอัตโนมัติ

หลังจากรันการทดสอบด้วยจำนวนเธรด puma ที่เพิ่มขึ้น เวลาตอบสนองจะสอดคล้องกันมากขึ้น และแดชบอร์ดยืนยันว่าความจุของพูลยังอยู่ในระดับที่ยอมรับได้

ตอนนี้ได้เวลาหมุนหน้าปัดแล้ว จำนวนไคลเอ็นต์ที่ทำงานพร้อมกันของ JMeter เพิ่มขึ้นเป็น 50 รายการ โดยมีเวลาเพิ่มขึ้น 5 วินาที การทดสอบนี้แสดงเวลาตอบสนองที่ไม่ดีและข้อผิดพลาด API จำนวนหนึ่ง แดชบอร์ด Puma magic จะแสดงเธรด puma ที่มีอยู่ถึงศูนย์อีกครั้ง
เมื่อดูโค้ด API เราพบว่าโมเดลกำลังถูกโหลดจากฐานข้อมูลในแต่ละครั้ง สิ่งนี้ไม่ได้มีประสิทธิภาพมากนัก ดังนั้นเราจึงเปลี่ยนงาน Sidekiq ไม่เพียงแต่คว้าราคารายวันใหม่ แต่ยังเรียกใช้โมเดล ML และบันทึกการคาดการณ์ในฐานข้อมูลด้วย
เราปรับใช้การเปลี่ยนแปลงนี้
ประสิทธิภาพของ API ที่ดีขึ้นด้วย Magic Dashboard ของ Sidekiq
ตอนนี้เรามาดูแดชบอร์ดมายากล Sidekiq ของเรากันดีกว่า ขออภัย มีข้อบกพร่องในโค้ด แต่อย่างน้อยเราก็สามารถระบุและแก้ไขได้อย่างรวดเร็ว

ด้วย Sidekiq PriceUpdateJob ขณะนี้ใช้งานได้ API ได้รับการแก้ไขเพื่อให้ดึงข้อมูลราคาที่คาดการณ์จากฐานข้อมูลเท่านั้น ซึ่งจะช่วยปรับปรุงประสิทธิภาพของ API แต่เรายังคงเห็นข้อผิดพลาดของ API บางอย่างและเวลาตอบสนองที่ยาวนาน
กลับไปที่ Puma Magic Dashboard
การดูแดชบอร์ดเน้นย้ำว่าเรายังไม่ได้กำหนดค่า Puma ให้ใช้พนักงานเพิ่มเติม พนักงาน Puma เป็นกระบวนการระดับ OS ที่สามารถเรียกใช้หลายเธรดได้ จำนวนเธรดทั้งหมดคำนวณจากจำนวนคนทำงานคูณด้วยจำนวนเธรดสูงสุด ขั้นแรก เราใช้คนงาน 2 คน แต่เธรดที่มีอยู่ยังคงหมดลง ดังนั้นเราจะเพิ่มจำนวนคนงานเป็น 4 คน

ประสิทธิภาพของ API ของเราตอนนี้ดีมาก เวลาตอบสนองโดยเฉลี่ยคือ 419ms และไม่มีข้อผิดพลาด API

แดชบอร์ดเวทย์มนตร์ยืนยันว่ายังคงมีความจุของเธรดอยู่

แดชบอร์ดมหัศจรรย์ของ AppSignal ให้ข้อมูลเชิงลึกทันทีเกี่ยวกับความสามารถของเว็บเซิร์ฟเวอร์ Puma แดชบอร์ด Sidekiq และ Active Worker ให้ข้อมูลเชิงลึกที่คล้ายกันเกี่ยวกับงานอะซิงโครนัสของแอปพลิเคชันของเรา
สิ่งที่เราได้เรียนรู้จาก Magic Dashboards
ในระหว่างการทดสอบประสิทธิภาพแอปพลิเคชัน Rails ของเรา แดชบอร์ดมายากล Puma ช่วยให้เราระบุได้อย่างง่ายดายว่าจำนวนเธรดไม่เพียงพอสำหรับระดับปริมาณงานที่เราต้องการ โดยจะแสดงความจุเธรดพูล จำนวนผู้ปฏิบัติงานในช่วงเวลาหนึ่ง และจำนวนเธรดทั้งหมด
แม้ว่างาน Sidekiq จะไม่มีปัญหาด้านประสิทธิภาพใดๆ แต่ Magic Dashboard ก็ช่วยให้เราระบุได้อย่างรวดเร็วว่ามีข้อผิดพลาดหลังจากการปรับใช้ ซึ่งเราสามารถแก้ไขและปรับใช้ใหม่ได้อย่างรวดเร็ว ความสามารถในการตรวจสอบทั้งหมดนี้ตั้งค่าให้เราโดยอัตโนมัติโดย AppSignal
คุณลักษณะแดชบอร์ดของ AppSignal สำหรับแอป Ruby และ Rails
แดชบอร์ดใน AppSignal มีเนมสเปซ เช่น แอปพลิเคชัน "เว็บ" หรืองาน "เบื้องหลัง" ดังนั้นคุณจึงสามารถสร้างมุมมองการตรวจสอบแอปพลิเคชันของคุณได้มากมาย แดชบอร์ดสรุปในตัวแสดงภาพรวมของสถานภาพแอปพลิเคชันของคุณ รวมถึงปริมาณงาน เวลาตอบสนอง และข้อผิดพลาดล่าสุด
โปรดทราบว่า เช่นเดียวกับแดชบอร์ดอื่นๆ คุณสามารถแก้ไขกราฟและเมตริกที่แสดง รวมถึงเปลี่ยนเลย์เอาต์และการกำหนดค่าของกราฟที่เลือกได้
การตรวจจับความผิดปกติเป็นคุณสมบัติที่ทรงพลัง ช่วยให้คุณสามารถกำหนดเกณฑ์ที่จะส่งการแจ้งเตือนเมื่อค่าเมตริกเกินหรือต่ำกว่าค่าที่กำหนด เช่น หน่วยความจำว่างหรืออัตราข้อผิดพลาด
สรุป:ตรวจสอบแอป Ruby ของคุณวันนี้ด้วย AppSignal
ความสามารถในการสังเกตและประสิทธิภาพมีความสำคัญต่อความสำเร็จของแอปพลิเคชันของเรา อย่างไรก็ตาม เรามักจะรอจนถึงนาทีสุดท้ายเพื่อจัดการกับหัวข้อเหล่านี้
แดชบอร์ดมหัศจรรย์ของ AppSignal มอบตัววัด แดชบอร์ด และข้อมูลเชิงลึกที่พร้อมใช้งานได้ทันทีที่ตั้งค่าโดยอัตโนมัติ สิ่งนี้ช่วยให้คุณปรับแต่งประสิทธิภาพของแอปพลิเคชันของคุณได้อย่างรวดเร็วและเข้าสู่สถานะความพร้อมในการปฏิบัติงาน
อ่านเพิ่มเติมเกี่ยวกับ AppSignal สำหรับ Ruby
ไว้คราวหน้า ขอให้สนุกกับการเขียนโค้ด!