6 ระบบการเข้าคิวสำหรับนักพัฒนาแบ็กเอนด์

คุณกำลังมองหาระบบการเข้าคิวอยู่หรือไม่? หรือบางทีคุณกำลังมองหาสิ่งที่ดีกว่า นี่คือข้อมูลทั้งหมดที่คุณต้องการ!


ระบบการจัดคิวเป็นความลับที่ดีที่สุดในการพัฒนาแบ็กเอนด์.

โดยไม่พยายามเขียนบทกวีเพื่อยกย่องระบบการจัดคิวฉันจะบอกว่าผู้พัฒนาแบ็กเอนด์รุ่นน้องกลายเป็นผู้พัฒนาแบ็กเอนด์ระดับกลางหลังจากที่เขาเรียนรู้ที่จะรวมคิวเข้ากับระบบ คิวปรับปรุงประสบการณ์ของลูกค้า (เราจะดูวิธี) ลดความซับซ้อนและปรับปรุงความน่าเชื่อถือในระบบ.

แน่นอนว่าสำหรับเว็บแอปง่าย ๆ ที่มีปริมาณการใช้งานเกือบเป็นศูนย์และเว็บไซต์โบรชัวร์คิวอาจเป็นภาพรวม (หรือเป็นไปไม่ได้เลยที่จะติดตั้งหากคุณอยู่ในสภาพแวดล้อมแบบโฮสติ้งที่ใช้ร่วมกันโดยทั่วไป) ระบบและแอพขนาดใหญ่เป็นไปไม่ได้โดยไม่ต้องเข้าคิว.

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

ระบบการเข้าคิวคืออะไร?

มาเริ่มด้วยการทำความเข้าใจว่าคิวคืออะไร.

คิวเป็นโครงสร้างข้อมูลในวิทยาการคอมพิวเตอร์ที่เลียนแบบและคิวโลกแห่งความจริงที่เราเห็นรอบตัวเรา ตัวอย่างเช่นหากคุณไปที่เคาน์เตอร์จำหน่ายตั๋วคุณจะสังเกตเห็นว่าคุณจะต้องยืนที่ท้ายคิวในขณะที่บุคคลที่เริ่มคิวจะได้รับตั๋วก่อน นี่คือสิ่งที่เราเรียกว่าปรากฏการณ์“ มาก่อนได้ก่อน” ในสาขาวิทยาการคอมพิวเตอร์เป็นไปได้ที่จะเขียนโปรแกรมที่เก็บงานของพวกเขาในลักษณะนี้โดยการประมวลผลทีละคนในแบบมาก่อนได้ก่อน.

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

ทำไมคุณต้องมีระบบเข้าคิว?

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

การประมวลผลพื้นหลัง

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

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

การประมวลผลแบบขนาน

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

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

ในระบบการเข้าคิวสถานการณ์นี้สามารถหลีกเลี่ยงได้โดยการตั้งค่าผู้ปฏิบัติงานหลายคนซึ่งแต่ละคนสามารถเลือกงานได้ (มี 100 รายงานที่ต้องทำในแต่ละครั้ง) และทำงานในแบบคู่ขนานเพื่อทำงานให้เสร็จเร็วกว่ามาก.

การกู้คืนจากความล้มเหลว

โดยทั่วไปเราไม่คิดว่าความล้มเหลวในฐานะนักพัฒนาเว็บ เราคิดว่าเซิร์ฟเวอร์และ API ที่เราใช้นั้นออนไลน์อยู่เสมอ แต่ความจริงก็คือความแตกต่าง – เครือข่ายขัดข้องเป็นเรื่องธรรมดาเกินไปและ API ที่ยอดเยี่ยมที่คุณพึ่งพาอาจไม่ทำงานเนื่องจากปัญหาด้านโครงสร้างพื้นฐาน (ก่อนที่คุณจะพูดว่า “ไม่ใช่ฉัน!” อย่าลืม ไฟดับขนาดใหญ่ของ Amazon S3) ดังนั้นกลับไปที่ตัวอย่างการรายงานหากส่วนหนึ่งของการสร้างรายงานของคุณต้องการให้คุณเชื่อมต่อกับ API การชำระเงินและการเชื่อมต่อนั้นไม่ทำงานเป็นเวลา 2 นาทีจะเกิดอะไรขึ้นกับ 200 รายงานที่ล้มเหลว?

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

เมื่อมองไปทางอื่นเราจะมาดูตัวเลือกทั่วไปบางอย่างระหว่างแบ็กเอนด์ / ระบบในวันนี้.

Redis

Redis เรียกได้ว่าเป็นที่เก็บคีย์ – ค่าที่เพิ่งเก็บอัพเดตและดึงข้อมูลสตริงโดยที่ไม่มีความรู้เกี่ยวกับโครงสร้างของข้อมูล ในขณะที่อาจเป็นจริงก่อนหน้านี้วันนี้ Redis มีโครงสร้างข้อมูลที่มีประสิทธิภาพและมีประโยชน์สูงเช่นรายการชุดที่เรียงลำดับและแม้แต่ระบบ Pub-Sub ทำให้เป็นที่ต้องการอย่างมากสำหรับการใช้งานคิว.

ข้อดีของ Redis คือ:

  • ฐานข้อมูลในหน่วยความจำสมบูรณ์ทำให้การอ่าน / เขียนเร็วขึ้น.
  • มีประสิทธิภาพสูง: สามารถรองรับการอ่าน / เขียนมากกว่า 100,000 ครั้งต่อวินาทีได้อย่างง่ายดาย.
  • รูปแบบการคงอยู่ที่มีความยืดหยุ่นสูง คุณสามารถใช้ประสิทธิภาพสูงสุดในราคาที่สูญเสียข้อมูลที่เป็นไปได้ในกรณีที่เกิดข้อผิดพลาดหรือตั้งค่าในโหมดอนุรักษ์นิยมอย่างสมบูรณ์เพื่อเสียสละประสิทธิภาพเพื่อความมั่นคง.
  • รองรับกลุ่มออกจากกล่อง

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

การเรียนรู้ Redis มันง่าย.

RabbitMQ

มีความแตกต่างเล็กน้อยระหว่าง Redis และ RabbitMQ, ดังนั้นขอให้พวกเขาออกไปให้พ้นก่อน.

ก่อนอื่น RabbitMQ มีบทบาทที่พิเศษกว่าและมีความชัดเจนมากขึ้นดังนั้นมันจึงสร้างขึ้นเพื่อสะท้อนถึงการส่งข้อความ กล่าวอีกนัยหนึ่งจุดที่น่าสนใจของมันคือการทำหน้าที่เป็นตัวกลางระหว่างสองระบบซึ่งไม่ใช่กรณีของ Redis ซึ่งทำหน้าที่เป็นฐานข้อมูล ด้วยเหตุนี้ RabbitMQ จึงมีสิ่งอำนวยความสะดวกเพิ่มเติมอีกสองสามอย่างที่ขาดหายไปใน Redis: การกำหนดเส้นทางข้อความการลองใหม่การกระจายโหลด ฯลฯ.

หากคุณคิดเกี่ยวกับเรื่องนี้คิวงานอาจถูกมองว่าเป็นระบบการส่งข้อความซึ่งผู้จัดตารางงานพนักงานและงาน“ ผู้ส่ง” สามารถนึกถึงหน่วยงานที่มีส่วนร่วมในการส่งข้อความ.

RabbitMQ มีข้อดีดังต่อไปนี้:

  • abstractions ที่ดีกว่าสำหรับการส่งผ่านข้อความลดระดับการทำงานของแอปพลิเคชันหากการส่งข้อความเป็นสิ่งที่คุณต้องการ.
  • ยืดหยุ่นต่อความล้มเหลวและไฟดับมากขึ้น (มากกว่า Redis เป็นอย่างน้อยตามค่าเริ่มต้น).
  • สนับสนุนคลัสเตอร์และสหพันธรัฐสำหรับการปรับใช้แบบกระจาย.
  • เครื่องมือที่มีประโยชน์สำหรับการจัดการและตรวจสอบการปรับใช้ของคุณ.
  • สนับสนุนภาษาการเขียนโปรแกรมที่ไม่เกี่ยวกับภาษาเลย.
  • ปรับใช้กับเครื่องมือที่คุณเลือก (นักเทียบท่า, เชฟ, หุ่นเชิดและอื่น ๆ ).

เมื่อใดที่จะใช้ RabbitMQ ฉันว่ามันเป็นตัวเลือกที่ยอดเยี่ยมเมื่อคุณรู้ว่าคุณต้องใช้การส่งข้อความแบบอะซิงโครนัส แต่ไม่พร้อมที่จะจัดการกับความซับซ้อนที่สูงตระหง่านของตัวเลือกการจัดคิวอื่น ๆ ในรายการนี้ (ดูด้านล่าง).

ActiveMQ

หากคุณเข้าสู่พื้นที่ขององค์กร (หรือสร้างแอปที่มีการกระจายและมีขนาดใหญ่) และคุณไม่ต้องการที่จะพลิกโฉมวงล้อตลอดเวลา (และทำผิดพลาดไปตลอดทาง), ActiveMQ มีค่าดู.

นี่คือจุดที่ ActiveMQ พัฒนาขึ้น:

  • มันนำมาใช้ใน Java และดังนั้นจึงมีการรวม Java เรียบร้อยจริงๆ (ตามมาตรฐาน JMS).
  • รองรับหลายโปรโตคอล: AMQP, MQTT, STOMP, OpenWire และอื่น ๆ.
  • รองรับการรักษาความปลอดภัยการกำหนดเส้นทางข้อความหมดอายุการวิเคราะห์ ฯลฯ ออกจากกล่อง.
  • รองรับการอบสำหรับรูปแบบการส่งข้อความยอดนิยมช่วยประหยัดเวลาและข้อผิดพลาดที่มีค่าใช้จ่ายสูง.

ไม่ได้หมายความว่า ActiveMQ นั้นมีให้สำหรับ Java เท่านั้น มันมีไคลเอนต์สำหรับ Python, C / C ++, Node, .Net และระบบนิเวศอื่น ๆ ดังนั้นจึงไม่น่ากังวลสำหรับการล่มสลายที่อาจเกิดขึ้นในอนาคต นอกจากนี้ ActiveMQ นั้นสร้างขึ้นบนมาตรฐานแบบเปิดที่สมบูรณ์และการสร้างไคลเอนต์ที่มีน้ำหนักเบาของคุณเองนั้นควรจะง่าย.

ทุกสิ่งที่พูดและทำโปรดทราบว่า ActiveMQ เป็นเพียงนายหน้าและไม่ได้มีแบ็กเอนด์ คุณยังต้องใช้แบ็กเอนด์ที่รองรับเพื่อจัดเก็บข้อความ ฉันรวมไว้ที่นี่เพราะไม่ได้เชื่อมโยงกับภาษาการเขียนโปรแกรมเฉพาะ (เช่นโซลูชันยอดนิยมอื่น ๆ เช่น Celery, Sidekiq ฯลฯ )

Amazon MQ

Amazon MQ สมควรได้รับการกล่าวถึงอย่างรวดเร็ว แต่สำคัญที่นี่ หากคุณคิดว่า ActiveMQ เป็นโซลูชั่นที่สมบูรณ์แบบสำหรับความต้องการของคุณ แต่ไม่ต้องการจัดการกับอาคารและเพื่อบำรุงรักษาโครงสร้างพื้นฐานด้วยตัวเอง Amazon MQ เสนอบริการที่มีการจัดการให้ทำ รองรับโปรโตคอลทั้งหมดที่ ActiveMQ ทำ – ไม่มีความแตกต่างของคุณสมบัติเลย – เนื่องจากใช้ ActiveMQ เองภายใต้พื้นผิว.

ข้อดีคือเป็นบริการที่มีการจัดการดังนั้นคุณไม่จำเป็นต้องกังวลเกี่ยวกับสิ่งอื่นนอกจากใช้งาน ทำให้เหมาะสมยิ่งขึ้นสำหรับการปรับใช้ที่อยู่ใน AWS เนื่องจากคุณสามารถใช้ประโยชน์จากบริการและข้อเสนออื่น ๆ ได้โดยตรงจากภายในการปรับใช้ของคุณ (ตัวอย่างเช่นการถ่ายโอนข้อมูลที่เร็วขึ้น).

Amazon SQS

เราไม่สามารถคาดหวังให้อเมซอนนั่งเงียบ ๆ เมื่อพูดถึงโครงสร้างพื้นฐานที่สำคัญได้หรือไม่ ��

และเราก็มี Amazon SQS, ซึ่งเป็นบริการคิวที่เรียบง่ายโฮสต์ (ค่อนข้างแท้จริง) โดย AWS ยักษ์ที่รู้จักกันดี ความแตกต่างที่ลึกซึ้งเป็นสิ่งสำคัญอีกครั้งโปรดทราบว่า SQS ไม่มีแนวคิดในการส่งข้อความ เช่นเดียวกับ Redis มันเป็นแบ็กเอนด์ที่ง่ายสำหรับการยอมรับและกระจายงานในคิว.

ดังนั้นเมื่อใดที่คุณต้องการใช้ Amazon SQS นี่คือสาเหตุบางประการ:

  • คุณเป็นแฟน AWS และจะไม่แตะต้องอะไรอีก (โดยสุจริตมีคนมากมายที่นั่นและฉันคิดว่าไม่มีอะไรผิดปกติกับเรื่องนี้).
  • คุณต้องการโซลูชันที่โฮสต์เพื่อให้แน่ใจว่าอัตราความล้มเหลวเป็นศูนย์และไม่มีงานใดสูญหาย.
  • คุณไม่ต้องการสร้างคลัสเตอร์และต้องตรวจสอบด้วยตัวเอง หรือแย่กว่านั้นคือต้องสร้างเครื่องมือตรวจสอบเมื่อคุณสามารถใช้เวลานั้นเพื่อทำการพัฒนาที่มีประสิทธิผล.
  • คุณมีการลงทุนจำนวนมากในแพลตฟอร์ม AWS และยังคงล็อคอินอย่างเหมาะสม.
  • คุณต้องการระบบการจัดคิวที่เน้นความเรียบง่ายโดยไม่มีสิ่งใดที่เกี่ยวข้องกับการส่งข้อความโปรโตคอลและอะไรก็ตาม.

โดยสรุปแล้ว Amazon SQS เป็นตัวเลือกที่ดีสำหรับทุกคนที่ต้องการรวมคิวงานไว้ในระบบของพวกเขาและไม่ต้องกังวลเกี่ยวกับการติดตั้ง / ตรวจสอบสิ่งต่าง ๆ ด้วยตนเอง.

Beanstalkd

Beanstalkd ได้รับรอบเป็นเวลานานและเป็นแบ็กเอนด์ทดสอบการต่อสู้รวดเร็วและง่ายต่อการเข้าคิวงาน มีบางลักษณะของ Beanstalkd ที่ทำให้แตกต่างจาก Redis มาก:

  • เป็นระบบจัดคิวงานอย่างเคร่งครัดและไม่มีอะไรอื่น คุณผลักงานไปหางานซึ่งจะถูกดึงโดยคนงานในภายหลัง ดังนั้นหากแอปพลิเคชันของคุณต้องการแม้แต่การส่งข้อความคุณก็ต้องการหลีกเลี่ยง Beanstalkd.
  • ไม่มีโครงสร้างข้อมูลขั้นสูงเช่นชุดคิวลำดับความสำคัญ ฯลฯ.
  • Beanstalkd คือสิ่งที่เรียกว่าคิวแบบเข้าก่อนออกก่อน (FIFO) ไม่มีวิธีการจัดงานตามลำดับความสำคัญ.
  • ไม่มีตัวเลือกสำหรับการทำคลัสเตอร์.

ทั้งหมดนี้กล่าวว่า Beanstalkd ทำเพื่อระบบที่ราบรื่นและรวดเร็วสำหรับโครงการง่าย ๆ ที่อาศัยอยู่บนเซิร์ฟเวอร์เดียว สำหรับหลาย ๆ คนมันเร็วกว่าและเสถียรกว่า Redis ดังนั้นถ้าคุณมี ปัญหา ด้วย Redis ที่คุณไม่สามารถแก้ไขได้ไม่ว่าอะไรจะเกิดขึ้นและความต้องการของคุณนั้นง่าย Beanstalkd ก็คุ้มค่าที่จะลอง.

ข้อสรุป

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

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

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map