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

สถาปัตยกรรมป้อมปราการที่ AppSignal

DHH เพิ่งสร้างคำว่า "Citadel" ซึ่งท้ายที่สุดก็ทำให้เรามีวิธีที่ยอดเยี่ยมในการอ้างอิงถึงวิธีที่เราเข้าถึงเทคโนโลยีที่ AppSignal เราพูดว่า "นี่เราเอง! ของของเรามีชื่อแล้ว"

เพื่ออธิบายวิธีที่ AppSignal ใช้รูปแบบ Citadel เราจะแบ่งปันเล็กน้อยเกี่ยวกับวิธีการทำงานของระบบของเรา AppSignal เป็นผลิตภัณฑ์ตรวจสอบที่มีแอปพลิเคชันที่ผู้ใช้เผชิญและ API ที่ตัวแทนการตรวจสอบส่งข้อมูลไป ข้อมูลนี้จะถูกประมวลผลและเปลี่ยนเป็นกราฟและข้อมูลเชิงลึก

เสาหิน

แอปพลิเคชันที่ลูกค้าของเราโต้ตอบด้วยคือแอป Rails แบบเสาหิน โดยมีส่วนหน้าที่เขียนด้วย React แบ็กเอนด์เขียนด้วย Ruby ทั้งหมดและพูดคุยกับฐานข้อมูลบางส่วน (เราแยกข้อมูลจากลูกค้าหลายรายไปยังคลัสเตอร์ที่แยกจากกันเพื่อเหตุผลในการปรับขนาด) แอป Rails นี้ยังจัดการงานอื่นๆ เช่น การส่งการแจ้งเตือนไปยังบริการภายนอก

เมื่อเราเริ่มต้นแอป Rails นี้ประมวลผลข้อมูลขาเข้าจากเอเจนต์การตรวจสอบของเราด้วย เราคาดการณ์ว่าการนำเข้าข้อมูลจะกลายเป็นปัญหาคอขวด ดังนั้นเราจึงใช้แอป Sinatra ที่ทำงานบนโดเมนย่อยที่นำเข้าข้อมูลและสร้างงาน Sidekiq ที่ประมวลผลโดยแอป Rails

ความเจ็บปวดที่เพิ่มขึ้น

สถาปัตยกรรมนี้ทำงานได้ดีหลายปี เมื่อธุรกิจของเราเติบโตขึ้น เห็นได้ชัดว่างานเฉพาะของการประมวลผลข้อมูลขาเข้าจากตัวแทนจะต้องได้รับการดูแลเป็นพิเศษ เมื่อคุณตรวจสอบคำขอนับพันล้านรายการ ปัจจัยจำกัดหลักไม่ได้มากจนทำให้ Ruby ทำงานช้า (เราทุกคนรู้ดีว่าไม่ใช่ 😉) แต่วิธีที่เราออกแบบสิ่งต่าง ๆ ทำให้เกิดการล็อกฐานข้อมูลของเรามากเกินไป

ด่านหน้า

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

เราย้ายเฉพาะส่วนการประมวลผลข้อมูลขาเข้าของแอป Rails ไปยังบริการด่านหน้านี้ ระบบที่เหลือทำงานได้ดีในรูปแบบของแอปแบบเสาหิน เราเข้าใจอย่างลึกซึ้ง และเราชอบทำให้ทุกอย่างเรียบง่าย เสาหินยังคงจัดการกับตรรกะส่วนใหญ่และโต้ตอบกับคาฟคาอย่างหนัก ความปรารถนาของเราที่จะรักษาเสาหินก้อนใหญ่ของเราไว้ทำให้เราเขียนอัญมณี Kafka เพื่อให้แอปหลักสามารถสื่อสารกับด่านหน้าได้อย่างง่ายดาย

หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับวิธีการทำงานของ Kafka ที่ AppSignal โปรดดูที่การพูดคุยของ Railsconf ที่ฉันให้ไว้

ชีวิตในป้อมปราการ

สิ่งนี้นำเราไปสู่สถานการณ์ปัจจุบันที่เรามีความสุขมากในป้อมปราการของเรา ดังที่ DHH กล่าวไว้ว่า:

Majestic Monolith ตัวเดียวจับภาพส่วนใหญ่ของแอปด้วยแอปเสริมบางตัวสำหรับความต้องการเฉพาะทางสูงและหลากหลาย

ในกรณีของเรา เรามีบริการด่านหน้าเดียวสำหรับความต้องการเฉพาะทางขั้นสูงของเรา หากมี RailsConf ในปีนี้ เราจะมอบสโตรปวาเฟลพิเศษให้กับ DHH เพื่อเป็นการขอบคุณสำหรับการตั้งชื่อให้ 🍪