มีเทคนิคทุกชนิดสำหรับการประมวลผลธุรกรรมที่มีประสิทธิภาพสูงและหนึ่งในบทความของ Fowler นั้นเป็นเพียงหนึ่งในหลาย ๆ เทคนิคที่มีเลือดไหลออกมา แทนที่จะแสดงเทคนิคมากมายที่อาจจะใช่หรือไม่เหมาะสมกับสถานการณ์ของทุกคนฉันคิดว่าเป็นการดีกว่าที่จะพูดคุยเกี่ยวกับหลักการพื้นฐานและวิธีที่ LMAX พูดถึงพวกเขาเป็นจำนวนมาก
สำหรับระบบประมวลผลธุรกรรมระดับสูงคุณต้องการทำสิ่งต่อไปนี้ให้มากที่สุด:
ลดเวลาที่ใช้ในชั้นเก็บข้อมูลที่ช้าที่สุด จากเร็วที่สุดไปช้าที่สุดบนเซิร์ฟเวอร์สมัยใหม่คุณมี: CPU / L1 -> L2 -> L3 -> RAM -> Disk / LAN -> WAN การกระโดดจากแม้กระทั่งดิสก์แม่เหล็กที่ทันสมัยที่สุดไปจนถึง RAM ที่ช้าที่สุดคือมากกว่า 1,000 เท่าสำหรับการเข้าถึงต่อเนื่อง การเข้าถึงแบบสุ่มยิ่งแย่ลง
ลดหรือขจัดเวลาที่ใช้ในการรอคอย นี่หมายถึงการแบ่งปันให้น้อยที่สุดเท่าที่จะเป็นไปได้และหากต้องแบ่งปันให้รัฐ
กระจายภาระงาน ซีพียูไม่ได้เร็วขึ้นมากในช่วงหลายปีที่ผ่านมา แต่มันมีขนาดเล็กลงและ 8 คอร์นั้นค่อนข้างพบได้ทั่วไปบนเซิร์ฟเวอร์ นอกเหนือจากนั้นคุณยังสามารถกระจายงานผ่านเครื่องหลายเครื่องซึ่งเป็นแนวทางของ Google สิ่งที่ดีเกี่ยวกับเรื่องนี้คือมันชั่งทุกอย่างรวมถึง I / O
ตาม Fowler, LMAX ใช้วิธีการต่อไปนี้เพื่อแต่ละเหล่านี้:
รักษาสถานะทั้งหมดในหน่วยความจำตลอดเวลา เอ็นจิ้นฐานข้อมูลส่วนใหญ่จะทำเช่นนี้จริง ๆถ้าฐานข้อมูลทั้งหมดสามารถพอดีกับหน่วยความจำ แต่พวกเขาไม่ต้องการปล่อยให้สิ่งใดเกิดขึ้นซึ่งเป็นที่เข้าใจได้บนแพลตฟอร์มการซื้อขายแบบเรียลไทม์ เพื่อดึงสิ่งนี้ออกไปโดยไม่เพิ่มความเสี่ยงมากนักพวกเขาต้องสร้างการสำรองข้อมูลจำนวนมากที่มีน้ำหนักเบาและโครงสร้างพื้นฐานการเฟลโอเวอร์
ใช้คิวที่ปลอดการล็อค ("disruptor") สำหรับกระแสข้อมูลเหตุการณ์ที่ป้อนเข้า ตรงกันข้ามกับความทนทานแบบดั้งเดิมคิวข้อความที่แตกหักไม่ได้ล็อคฟรีและในความเป็นจริงมักจะเกี่ยวข้องกับความเจ็บปวดช้าทำธุรกรรมกระจาย
ไม่มาก. LMAX ขว้างอันนี้ไว้ใต้รถบัสตามปริมาณงานที่ต้องพึ่งพาอาศัยซึ่งกันและกัน ผลลัพธ์ของการเปลี่ยนแปลงพารามิเตอร์สำหรับคนอื่น นี่เป็นข้อแม้ที่สำคัญและเป็นสิ่งที่ฟาวเลอร์เรียกร้องอย่างชัดเจน พวกเขาจะทำให้บางคนใช้เห็นพ้องในการสั่งซื้อเพื่อให้สามารถล้มเหลว แต่ทั้งหมดของตรรกะทางธุรกิจที่มีการประมวลผลในหัวข้อเดียว
LMAX ไม่ได้เป็นเพียงแนวทางเดียวของ OLTP ระดับสูง และถึงแม้ว่ามันจะยอดเยี่ยมในตัวของมันเอง แต่คุณไม่จำเป็นต้องใช้เทคนิคการตกเลือดเพื่อที่จะดึงประสิทธิภาพออกมา
จากหลักการข้างต้นทั้งหมด # 3 น่าจะเป็นสิ่งที่สำคัญที่สุดและมีประสิทธิภาพมากที่สุดเพราะจริงๆแล้วฮาร์ดแวร์มีราคาถูก หากคุณสามารถแบ่งปริมาณงานได้อย่างถูกต้องในช่วงครึ่งโหลและหลายสิบเครื่องดังนั้นท้องฟ้าจึงเป็นข้อ จำกัด สำหรับเทคนิคการคำนวณแบบขนานทั่วไป คุณจะประหลาดใจที่ปริมาณงานที่คุณสามารถดึงออกได้โดยไม่ต้องใช้อะไรเลยนอกจากคิวข้อความและผู้จัดจำหน่ายรอบ ๆ โรบิน เห็นได้ชัดว่ามันไม่ได้มีประสิทธิภาพเท่ากับ LMAX - จริง ๆ แล้วไม่ได้ปิด - แต่ปริมาณงานความหน่วงและความคุ้มค่าเป็นความกังวลที่แยกจากกันและที่นี่เรากำลังพูดถึงปริมาณผลผลิตโดยเฉพาะ
หากคุณมีความต้องการพิเศษแบบเดียวกันกับที่ LMAX ทำ - โดยเฉพาะอย่างยิ่งสถานะที่ใช้ร่วมกันซึ่งสอดคล้องกับความเป็นจริงทางธุรกิจซึ่งต่างจากตัวเลือกการออกแบบที่เร่งรีบ - ฉันขอแนะนำให้ลองใช้ส่วนประกอบของพวกเขาเพราะฉันไม่ได้เห็นอะไรมาก อื่นที่เหมาะสมกับความต้องการเหล่านั้น แต่ถ้าเรากำลังพูดถึงความสามารถในการปรับขนาดได้สูงฉันก็อยากแนะนำให้คุณทำการวิจัยเพิ่มเติมเกี่ยวกับระบบกระจายเพราะมันเป็นวิธีมาตรฐานที่องค์กรส่วนใหญ่ใช้ในปัจจุบัน (Hadoop และโครงการที่เกี่ยวข้อง ESB และสถาปัตยกรรมที่เกี่ยวข้อง, CQRS ซึ่งฟาวเลอร์ กล่าวถึงและอื่น ๆ )
SSD จะกลายเป็นเกมเปลี่ยน arguably พวกเขาอยู่แล้ว ตอนนี้คุณสามารถมีพื้นที่เก็บข้อมูลถาวรที่มีเวลาเข้าถึง RAM ใกล้เคียงกันและถึงแม้ว่า SSD ระดับเกรดเซิร์ฟเวอร์จะมีราคาแพงมาก แต่ราคาจะลดลงในที่สุดเมื่ออัตราการยอมรับเพิ่มขึ้น มันได้รับการวิจัยอย่างกว้างขวางและผลลัพธ์ที่ได้นั้นน่าเหลือเชื่อและจะดีขึ้นเมื่อเวลาผ่านไปดังนั้นแนวคิด "การเก็บทุกอย่างในความทรงจำ" ทั้งหมดจึงมีความสำคัญน้อยกว่าที่เคยเป็น ดังนั้นอีกครั้งฉันจะพยายามมุ่งเน้นที่การทำงานพร้อมกันเมื่อใดก็ตามที่เป็นไปได้