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

ปรับขนาดระบบของคุณอย่างมีประสิทธิภาพ:การแยกกระบวนการและ Redis สำหรับการส่งข้อความประสิทธิภาพสูง

ปรับขนาดระบบของคุณอย่างมีประสิทธิภาพ:การแยกกระบวนการและ Redis สำหรับการส่งข้อความประสิทธิภาพสูง

โดย ปราโมโน วินาตา

คุณเคยประสบปัญหาในการพยายามจัดการกับกระบวนการเดียวที่มีขนาดใหญ่หรือหนักมากหรือไม่? หากเป็นเช่นนั้น ฉันสามารถช่วยคุณหาวิธีจัดการได้ดีขึ้น

ในบทความนี้ ฉันจะแบ่งปันว่าขณะนี้ฉันจัดการข้อความเดียวที่มีขนาดใหญ่เกินกว่าจะประมวลผลในกระบวนการเดียวได้อย่างไร ฉันได้แบ่งออกเป็นส่วนต่างๆ ซึ่งส่งผลให้มีกระบวนการแยกกัน

ฉันจะไม่ลงรายละเอียดทางเทคนิคมากนัก แต่จะพูดถึงกระบวนการทางสถาปัตยกรรมมากกว่า
ฉันจะพูดคุยเล็กน้อยเกี่ยวกับการใช้งานแคชและ pubsub แต่ฉันจะไม่ลงรายละเอียดเกี่ยวกับการนำไปใช้งาน ฉันจะมุ่งเน้นไปที่รูปแบบแทน

ปัญหา

ปรับขนาดระบบของคุณอย่างมีประสิทธิภาพ:การแยกกระบวนการและ Redis สำหรับการส่งข้อความประสิทธิภาพสูง _รูปภาพโดย [Unsplash](https://unsplash.com/@dsmacinnes?utm_source=ghost&utm_medium=referral&utm_campaign=api-credit">Danielle MacInnes / ฉันไม่ใช่ผู้สร้างไดอะแกรมที่เก่ง แต่สิ่งนี้น่าจะเข้าใจได้

เพื่อให้เข้าใจง่ายขึ้นด้วยคำพูด ลองนึกภาพบริการสองบริการที่แยกจากกัน บริการ A และบริการ B โดยมีบริการผับซับอยู่ตรงกลาง

หากคุณไม่แน่ใจว่าบริการ pubsub คืออะไร ลองจินตนาการว่าเป็นนายหน้าที่ช่วยให้ข้อความจากบริการหนึ่งไปถึงอีกบริการหนึ่งได้

จากนั้นบริการ A จะเผยแพร่ข้อความ จากนั้นบริการ B จะดำเนินการผ่าน pubsub หลังจากเสร็จสิ้นกระบวนการแล้ว จะดำเนินการอีกขั้นตอนหนึ่งเพื่อทำเครื่องหมายว่าข้อความได้รับการประมวลผลแล้ว

ง่ายพอใช่มั้ย

เพียงแต่ว่าในบางกรณีเมื่อข้อความมีขนาดใหญ่เกินไป ก็จะไม่สามารถเผยแพร่ข้อความได้สำเร็จ เนื่องจากข้อจำกัดของบริการ pubsub

เอาล่ะ นี่น่าจะทำให้คุณเห็นภาพรวมของปัญหาที่ฉันพบ แล้วฉันจะแก้ไขปัญหานี้ได้อย่างไร? ในส่วนถัดไป ฉันจะอธิบายวิธีแก้ปัญหาของฉันให้คุณทราบ

แนวทางแรกของฉัน

ปรับขนาดระบบของคุณอย่างมีประสิทธิภาพ:การแยกกระบวนการและ Redis สำหรับการส่งข้อความประสิทธิภาพสูง _รูปภาพโดย [Unsplash](https://unsplash.com/@dose?utm_source=ghost&utm_medium=referral&utm_campaign=api-credit">สื่อปริมาณ / ระบบ/กระบวนการที่อัปเดตของฉัน

ดังที่คุณเห็นจากแผนภาพ ข้อความจะถูกแบ่งออกเป็นข้อความเล็กๆ หลายข้อความ วิธีการแยกและส่วนใดของข้อความที่ต้องแยกอาจแตกต่างกันไปตามแต่ละกรณีและขั้นตอน

ในกรณีของฉัน ข้อความของฉันมีรายการอยู่จริงๆ ดังนั้นฉันจึงสามารถแยกออกเป็นแต่ละรายการได้

สมมุติว่ามี 10 รายการ. ก่อนหน้านี้จะเผยแพร่ทั้งหมด 10 รายการในข้อความเดียว แต่หลังจากแบ่งข้อความแล้ว ระบบจะเปลี่ยนข้อความนั้นเป็น 10 ข้อความ

ส่งผลให้กระบวนการเดียวกลายเป็นหลายกระบวนการรวมกัน การเผยแพร่ครั้งเดียวจะเปลี่ยนเป็นการเผยแพร่ 10 ครั้ง ซึ่งจะทำให้กระบวนการเดียวนั้นกลายเป็น 10 กระบวนการ

นี่อาจดูไม่เหมาะเมื่อคุณมองแบบนั้น แต่นี่เป็นทางออกที่ดีที่สุดที่ฉันคิดขึ้นมา และแน่นอนว่ามันใช้ได้ผล

แค่นี้ก็แยกออกแล้วเหรอ?

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

ไม่ต้องกังวล – ไม่ใช่ว่าฉันลืมมัน ฉันตั้งใจทิ้งมันไว้สำหรับตอนต่อไป

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

วิธีจัดการกับกระบวนการตกแต่งขั้นสุดท้าย

ปรับขนาดระบบของคุณอย่างมีประสิทธิภาพ:การแยกกระบวนการและ Redis สำหรับการส่งข้อความประสิทธิภาพสูง _รูปภาพโดย [Unsplash](https://unsplash.com/@tumbao1949?utm_source=ghost&utm_medium=referral&utm_campaign=api-credit">James Wainscoat / การเพิ่ม Redis เพื่อทำเครื่องหมายกระบวนการของเรา

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

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

สรุป

โดยสรุป ฉันแบ่งข้อความออกเป็นหลายข้อความซึ่งจะถูกประมวลผลทั้งหมดพร้อมกันในหลายกระบวนการ ในการจัดการกระบวนการข้อความ ฉันใช้แคช Redis

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

ขอบคุณที่อ่านบทความของฉันจนจบ! ฉันหวังเป็นอย่างยิ่งว่าคุณจะเพลิดเพลินและพบว่าบทความของฉันน่าสนใจและที่สำคัญที่สุดคือมีประโยชน์

เรียนรู้การเขียนโค้ดฟรี หลักสูตรโอเพ่นซอร์สของ freeCodeCamp ช่วยให้ผู้คนมากกว่า 40,000 คนได้งานในตำแหน่งนักพัฒนา เริ่มต้น