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

เพิ่มประสิทธิภาพการตรวจสอบประสิทธิภาพ Ruby App ด้วย Magic Dashboards

ทีมแอปพลิเคชันต้องเข้าใจว่าประสบการณ์ลูกค้าของพวกเขาเป็นอย่างไร นี่เป็นจริงไม่เพียงจากมุมมองทั่วไป (ในแง่ของ usability และ responsiveness) แต่ยังในฐานะรายวัน นาทีต่อนาที

โดยเฉพาะเมื่อคุณทำงานกับ distributed systems ข้อผิดพลาดเป็นเรื่องไม่หลีกเลี่ยง Traffic ของเว็บไซต์ผันผวนตลอดวัน และ dependencies ใดๆ ของระบบก็อาจเจอปัญหาได้ตลอดเวลา

ในบทความนี้ เราจะใช้ magic dashboards เพช่วยตรวจสอบและแก้ไขปัญหาประสิทธิภาพภายในแอปพลิเคชัน Ruby on Rails

แต่ก่อนที่เราจะลงลึกใน magic dashboards มาดูว่าควรคำนึงถึงอะไรเมื่อออกแบบแอปของเรา

สิ่งที่ควรพิจารณาเมื่อสร้าง Ruby App

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

มีคำถามสำคัญเกี่ยวกับแอปพลิเคชันบางข้อที่คุณต้องสามารถตอบได้ตลอดเวลา:

  • Page response time ยอมรับได้ไหม? ตาม Google วันนี้อะไรที่ช้ากว่าสองวินาทีจะทำให้ลูกค้าออกจากไซต์ของคุณและไปที่อื่น
  • ผู้ใช้ของคุณกำลังประสบข้อผิดพลาดไหม? หากใช่ ข้อผิดพลาดประเภทไหน? อัตราข้อผิดพลาดเท่าไหร่?
  • มีปัญหาการดำเนินงานที่ดำเนินอยู่ส่งผลต่อแอปพลิเคชันของคุณไหม? นี่อาจเป็นกับ network, storage, หรือ security services เราทุกคนรู้ว่า cloud providers มี outages ที่ส่งผลต่อสุขภาพของแอปพลิเคชันของเราด้วย

Observability เป็นกุญแจ แต่บ่อยครั้งเป็นสิ่งสุดท้ายที่วิศวกรคิดถึง นอกจากนี้ มีเวลาที่สร้างไว้ในตารางเวลาสำหรับ operational readiness มันเรียกว่า weekend ก่อน product launch!

เล่นๆ หน่อย คุณต้องสร้างแอปก่อนก่อนที่จะมีบางอย่างให้สังเกต นี่เล่นให้ล่าช้าการทดสอบประสิทธิภาพจนใกล้สิ้นสุด development lifecycle คุณไม่อยากใช้เวลามากเกินไปใน performance testing เมื่อ product ยังไม่ code-complete เพราะคุณจะต้องทำมันใหม่ทั้งหมดภายหลัง

สิ่งเดียวกันจริงสำหรับ security testing หากคุณทำมันเร็วเกินไป ช่องโหว่อาจยังถูกนำเข้าหลังทดสอบ แต่ก่อน product เข้า production

ดังนั้น เรารู้ว่า monitoring สำคัญ แต่กังวลเหล่านี้เป็นจุดที่ถูกต้อง Monitoring ไม่ได้รับความสนใจที่สมควรจนช่วงท้ายของกระบวนการ นั่นคือเหตุผลที่ AppSignal สร้าง magic dashboards

Magic Dashboards ใน AppSignal

AppSignal เข้าใจความสำคัญของ metrics, dashboards, และประสิทธิภาพแอปของคุณ — แต่ยังเข้าใจว่า engineers มีเวลาน้อยมากในการทำงานบนสิ่งเหล่านี้ก่อน launch

Magic dashboards ของเราถูกเรียกว่า "magic" เพราะ metrics collection และ dashboards ที่เกี่ยวข้องถูกสร้างโดยอัตโนมัติสำหรับคุณ เพียงเมื่อคุณเชื่อมต่อแอปและ integrated components

Magic Dashboards: ตัวอย่างแอป Ruby on Rails

มาค้นหาว่าเราสามารถตรวจสอบและแก้ไขปัญหาประสิทธิภาพภายในแอป Ruby on Rails โดยใช้ magic dashboards ได้อย่างไร

แอปพลิเคชันของเราใช้ machine learning (ML) model เรียบง่ายสำหรับ cryptocurrency price prediction Asynchronous job อัปเดต model ทุกวันด้วยข้อมูลราคาล่าสุด และปรับปรุงความแม่นยำตามเวลา Rails app นี้มีทั้ง web pages และ REST API ตามที่แสดงใน architecture diagram ด้านล่าง

เพิ่มประสิทธิภาพการตรวจสอบประสิทธิภาพ Ruby App ด้วย Magic Dashboards

หลังจากเรา deploy Rails app Magic dashboards ถูกสร้างโดยอัตโนมัติสำหรับ Rails Puma web server และ Sidekiq asynchronous jobs Integrations อื่นๆ ที่รองรับ magic dashboards รวมถึง MongoDB และ Erlang VM

คุณสามารถใช้ Puma magic dashboard ประเมินประสิทธิภาพโดยอิงจาก threads, pool capacity, และ puma workers Sidekiq magic dashboard ตรวจสอบ queue length, queue latency, job duration, job status, และ memory usage

Magic dashboards ถูกตรวจจับและสร้างโดยอิงจาก event-based metrics เช่น Sidekiq job run รวมถึง minutely probes ฟีเจอร์ minutely probe ช่วยให้คุณลงทะเบียน Ruby block หรือ class เพื่อส่ง custom metrics ไป AppSignal Magic dashboards ให้ out-of-the-box integration สำหรับ supported components แต่คุณสามารถใช้กลไกนี้ส่ง custom metrics ของคุณไป AppSignal

ตัวอย่าง Custom Minutely Probes

Sidekiq integration built-in แล้ว แต่จินตนาการว่าคุณต้องการ monitor proprietary background job mechanism คุณสามารถใช้ class ตัวอย่างนี้ Probe class ได้รับ connection ที่จากนั้นใช้ในแต่ละ call เพื่อได้ metrics ที่ต้องการ

 

การเรียก Appsignal::Minutely.probes.register รับสองพารามิเตอร์ — ชื่อสำหรับ probe และ implementation ซึ่งสามารถเป็น lambda หรือ class ที่ implement call method

การกำหนดค่าและ System Requirements สำหรับ AppSignal

เพียงใช้ AppSignal กับแอป Rails ของคุณเพื่อได้ magic dashboards หากคุณยังไม่ติดตั้ง AppSignal ให้ include appsignal gem ใน Gemfile และรัน bundle install

 

จากนั้นรันคำสั่ง appsignal install เพื่อกำหนดค่าสภาพแวดล้อม การกำหนดค่านี้สามารถจัดเก็บใน config file หรือ environment variables และเชื่อมต่อแอปพลิเคชันของคุณกับบัญชี AppSignal และ dashboards ของคุณ

 

หลังจากคุณติดตั้งและรันเซิร์ฟเวอร์ คุณจะเห็นอีเมลบางส่วนคล้ายกับนี้

เพิ่มประสิทธิภาพการตรวจสอบประสิทธิภาพ Ruby App ด้วย Magic Dashboards

System requirements สำหรับตัวอย่างนี้คือ:

  • AppSignal gem 2.9.0 หรือสูงกว่า ซึ่งรวมการสนับสนุน minutely probe
  • Puma integration - ต้องการ version 3.11.4 หรือสูงกว่า
  • Sidekiq integration - ต้องการ Redis gem 3.3.5 หรือสูงกว่า สำหรับ integration นี้ แนะนำ AppSignal gem 2.9.5 หรือสูงกว่า

การทดสอบประสิทธิภาพ Price Prediction API ของเรา

ตัวอย่างแอปพลิเคชันข้างต้นใช้ neural network เรียบง่ายที่ implement ด้วย Ruby FANN gem เพื่อทำนายราคา Bitcoin ของวันพรุ่งนี้ Percentage price changes จากสิบวันล่าสุดถูกใช้เป็น inputs ของ model

REST API ไม่รับพารามิเตอร์ใดๆ เนื่องจากตอนนี้มันทำนายราคาสำหรับพรุ่งนี้เพียงอย่างเดียว Output เป็น JSON document เรียบง่าย ตามที่แสดงด้านล่าง

 

Sidekiq job ได้ market price ที่ต้นของแต่ละวันและอัปเดต ML model Job นี้ scheduled รันทุก 5 นาที ทำให้มันสามารถตามทัน outages หรือ errors ได้เร็ว

คุณสามารถหาโค้ดทั้งหมดจากบทความนี้บน GitHub โปรดทราบว่าไม่มีสิ่งใดในบทความนี้หรือซอฟต์แวร์เป็นคำแนะนำการลงทุน ปปรึกษาที่ปรึกษาด้านการเงินก่อนตัดสินใจลงทุนเกี่ยวกับ cryptocurrency

เราจะใช้ JMeter เพื่อจำลอง load บน REST API สำหรับ performance testing นี่ช่วยให้เราสร้าง traffic และประเมินประสิทธิภาพโดยใช้ magic dashboards ของเรา Test แรกใช้ 5 concurrent clients แต่ละตัวทำ 100 requests

สถ계แสดง range ที่ค่อนข้างสูงใน response time โดยเฉลี่ย 342ms แต่ P99 คือ 852ms ดูเหมือนเราทำได้ดีกว่านี้

เพิ่มประสิทธิภาพการตรวจสอบประสิทธิภาพ Ruby App ด้วย Magic Dashboards

ปรับปรุงประสิทธิภาพ Rails App ด้วย Puma Magic Dashboard

Puma magic dashboard ของเรารวม graph ของ thread pool capacity และเราเห็นว่ามันสัมผัสศูนย์ระหว่าง test run นี่อาจอธิบายว่าทำไมบาง requests ใช้เวลานานกว่าอื่นๆ ดังนั้นเราจะเพิ่มจำนวน puma threads เป็น 10

จำไว้ เราไม่ได้ทำอะไรเพื่อสร้าง dashboard หรือ graph นี้ AppSignal สร้างมันให้เราโดยอัตโนมัติ

เพิ่มประสิทธิภาพการตรวจสอบประสิทธิภาพ Ruby App ด้วย Magic Dashboards

หลังจากรัน test ด้วย puma thread count ที่เพิ่มขึ้น response times สม่ำเสมอมากขึ้น และ dashboard ยืนยันว่า pool capacity อยู่ในระดับที่ยอมรับได้

เพิ่มประสิทธิภาพการตรวจสอบประสิทธิภาพ Ruby App ด้วย Magic Dashboards

ตอนนี้ถึงเวลาเพิ่มระดับ จำนวน JMeter concurrent clients เพิ่มเป็น 50 พร้อม ramp-up time 5 วินาที Test นี้แสดง poor response time และ API errors จำนวนหนึ่ง Puma magic dashboard อีกครั้งแสดง available puma threads ถึงศูนย์

ดูที่ API code เราพบว่า model ถูก load จากฐานข้อมูลทุกครั้ง นี่ไม่ได้ efficient ดังนั้นเราเปลี่ยน Sidekiq job ให้ไม่แค่ดึง daily price ใหม่ แต่ยังรัน ML model และบันทึก prediction ในฐานข้อมูล

เรา deploy การเปลี่ยนแปลงนี้

API Performance ที่ดีขึ้นด้วย Sidekiq Magic Dashboard

ตอนนี้มาตรวจสอบ Sidekiq magic dashboard ของเรา น่าเสียดายมี bug ในโค้ด แต่อย่างน้อยเราสามารถระบุและแก้ไขได้เร็ว

เพิ่มประสิทธิภาพการตรวจสอบประสิทธิภาพ Ruby App ด้วย Magic Dashboards

ด้วย Sidekiq PriceUpdateJob ที่ทำงานแล้ว API ถูกปรับให้แค่ต้องดึง predicted price จากฐานข้อมูล นี่ปรับปรุง API performance แต่เรายังเห็น API errors บางอย่างและ response times ที่ยาว

กลับไปที่ Puma Magic Dashboard

一眼看 dashboard 突出显示 我们还没有配置 Puma 使用额外的 workers。一个 Puma worker 是一个可以运行多个线程的 OS 级进程。总线程数计算为 workers 数量乘以最大线程数。首先我们使用 2 workers,但可用线程仍然耗尽。所以我们将增加到 4 workers。

เพิ่มประสิทธิภาพการตรวจสอบประสิทธิภาพ Ruby App ด้วย Magic Dashboards

API performance ของเราตอนนี้ดีมาก Average response time คือ 419ms และไม่มี API errors

เพิ่มประสิทธิภาพการตรวจสอบประสิทธิภาพ Ruby App ด้วย Magic Dashboards

Magic dashboard ยืนยันว่ายังมี thread capacity ว่างอยู่

เพิ่มประสิทธิภาพการตรวจสอบประสิทธิภาพ Ruby App ด้วย Magic Dashboards

Magic dashboards ของ AppSignal ให้ข้อมูลเชิงลึกทันทีเกี่ยวกับ capacity ของ Puma web server Sidekiq และ Active Worker dashboards ให้ข้อมูลเชิงลึกคล้ายกันสำหรับ asynchronous jobs ของแอปพลิเคชันของเรา

สิ่งที่เราเรียนรู้จาก Magic Dashboards

ระหว่าง performance testing แอป Rails ของเรา Puma magic dashboard ช่วยให้เราระบุได้อย่างง่ายดายว่าจำนวน threads ไม่เพียงพอสำหรับ throughput level ที่เราต้องการ มันแสดง thread pool capacity, จำนวน workers ตามเวลา และจำนวน threads ทั้งหมด

ในขณะที่ Sidekiq job ไม่มีปัญหาประสิทธิภาพ Magic dashboard ช่วยให้เราระบุได้เร็วว่ามี error หลัง deploy ซึ่งเราสามารถแก้ไขและ redeploy ได้รวดเร็ว ทุกความสามารถในการตรวจสอบเหล่านี้ถูกตั้งค่าให้เราโดยอัตโนมัติโดย AppSignal

Dashboard Features ของ AppSignal สำหรับแอป Ruby และ Rails

Dashboards ใน AppSignal มี namespaces เช่น "web" application หรือ "background" jobs ดังนั้นคุณสามารถสร้าง monitoring views หลายมุมมองของแอปพลิเคชันได้ Built-in summary dashboard แสดงภาพรวมสุขภาพแอปพลิเคชันของคุณ รวมถึง throughput, response time, และ latest errors

สังเกตว่าเหมือนกับ dashboard ใดๆ คุณสามารถ edit graphs และ metrics ที่แสดงได้ รวมถึงเปลี่ยน layout และ configuration ของ selected graphs

Anomaly detection เป็นฟีเจอร์ทรงพลัง มันอนุญาตให้คุณกำหนด thresholds ที่ส่งการแจ้งเตือนเมื่อค่า metric ไปเกินหรือต่ำกว่าค่าที่กำหนด เช่น free memory หรือ error rate

สรุป: ตรวจสอบ Ruby App ของคุณวันนี้ด้วย AppSignal

Observability และ performance เป็นสิ่งสำคัญสำหรับความสำเร็จของแอปพลิเคชันของเรา อย่างไรก็ตาม เราบ่อยครั้งรอจนถึงนาทีสุดท้ายถึงจะจัดการกับหัวข้อเหล่านี้

Magic dashboards ของ AppSignal ให้ extensive out-of-the-box metrics, dashboards, และ insights ที่ตั้งค่าโดยอัตโนมัติ นี่ช่วยให้คุณปรับแต่งประสิทธิภาพแอปพลิเคชันได้อย่างรวดเร็วและถึงสถานะ operational readiness

อ่านเพิ่มเติมเกี่ยวกับ AppSignal for Ruby

直到下次,快乐编码!