สถาปัตยกรรมและความสามารถของ Tarantool Data Grid

สถาปัตยกรรมและความสามารถของ Tarantool Data Grid

ในปี 2017 เราชนะการแข่งขันเพื่อพัฒนาธุรกรรมหลักในธุรกิจการลงทุนของ Alfa-Bank และเริ่มทำงาน (ที่ HighLoad++ 2018 พร้อมรายงานเกี่ยวกับหลักของธุรกิจการลงทุน พูด Vladimir Drynkin หัวหน้าฝ่ายธุรกรรมหลักของธุรกิจการลงทุนของ Alfa Bank) ระบบนี้ควรจะรวบรวมข้อมูลธุรกรรมจากแหล่งต่างๆ ในรูปแบบต่างๆ นำข้อมูลมาอยู่ในรูปแบบเดียว จัดเก็บและให้สิทธิ์ในการเข้าถึงข้อมูล

ในระหว่างกระบวนการพัฒนา ระบบได้พัฒนาและได้รับฟังก์ชันการทำงาน และเมื่อถึงจุดหนึ่ง เราก็ตระหนักว่าเรากำลังตกผลึกบางสิ่งที่มากกว่าแค่แอปพลิเคชันซอฟต์แวร์ที่สร้างขึ้นเพื่อแก้ไขช่วงงานที่กำหนดไว้อย่างเคร่งครัด: เราประสบความสำเร็จ ระบบสำหรับการสร้างแอพพลิเคชั่นแบบกระจายพร้อมพื้นที่จัดเก็บข้อมูลถาวร. ประสบการณ์ที่เราได้รับเป็นพื้นฐานของผลิตภัณฑ์ใหม่ - ตารางข้อมูล Tarantool (ทีดีจี).

ฉันต้องการพูดคุยเกี่ยวกับสถาปัตยกรรม TDG และโซลูชันที่เราพบในระหว่างกระบวนการพัฒนา แนะนำคุณเกี่ยวกับฟังก์ชันการทำงานหลัก และแสดงให้เห็นว่าผลิตภัณฑ์ของเราสามารถเป็นพื้นฐานสำหรับการสร้างโซลูชันที่สมบูรณ์ได้อย่างไร

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

สถาปัตยกรรมและความสามารถของ Tarantool Data Grid

เชื่อมต่อ

Connector มีหน้าที่ในการสื่อสารกับโลกภายนอก หน้าที่ของมันคือการยอมรับคำขอ แยกวิเคราะห์ และหากสำเร็จ ให้ส่งข้อมูลสำหรับการประมวลผลไปยังตัวประมวลผลอินพุต เรารองรับรูปแบบ HTTP, SOAP, Kafka, FIX สถาปัตยกรรมนี้ช่วยให้คุณเพิ่มการรองรับรูปแบบใหม่ได้อย่างง่ายดาย โดยจะรองรับ IBM MQ ในเร็วๆ นี้ หากการแยกวิเคราะห์คำขอล้มเหลว ตัวเชื่อมต่อจะส่งกลับข้อผิดพลาด มิฉะนั้นจะตอบกลับว่าคำขอได้รับการประมวลผลสำเร็จแล้ว แม้ว่าจะมีข้อผิดพลาดเกิดขึ้นในระหว่างการประมวลผลต่อไปก็ตาม สิ่งนี้ทำขึ้นโดยเฉพาะเพื่อทำงานกับระบบที่ไม่รู้วิธีทำซ้ำคำขอ - หรือในทางกลับกันก็ทำอย่างต่อเนื่องเกินไป เพื่อไม่ให้ข้อมูลสูญเสียคิวการซ่อมแซม: วัตถุจะเข้าไปก่อนและหลังจากลบการประมวลผลสำเร็จแล้วเท่านั้น ผู้ดูแลระบบสามารถรับการแจ้งเตือนเกี่ยวกับออบเจ็กต์ที่เหลืออยู่ในคิวการซ่อมแซม และหลังจากกำจัดข้อผิดพลาดของซอฟต์แวร์หรือฮาร์ดแวร์ล้มเหลวแล้ว ให้ลองอีกครั้ง

โปรเซสเซอร์อินพุต

ตัวประมวลผลอินพุตจะจัดประเภทข้อมูลที่ได้รับตามคุณลักษณะเฉพาะและเรียกตัวประมวลผลที่เหมาะสม ตัวจัดการคือโค้ด Lua ที่ทำงานบนแซนด์บ็อกซ์ ดังนั้นจึงไม่สามารถส่งผลกระทบต่อการทำงานของระบบได้ ในขั้นตอนนี้ ข้อมูลสามารถถูกลดขนาดลงเป็นรูปแบบที่ต้องการได้ และหากจำเป็น ก็สามารถเริ่มงานจำนวนเท่าใดก็ได้ซึ่งสามารถใช้ตรรกะที่จำเป็นได้ ตัวอย่างเช่น ในผลิตภัณฑ์ MDM (การจัดการข้อมูลหลัก) ที่สร้างขึ้นบน Tarantool Data Grid เมื่อเพิ่มผู้ใช้ใหม่ เพื่อไม่ให้การประมวลผลคำขอช้าลง เราจึงเปิดตัวการสร้างบันทึกทองเป็นงานแยกต่างหาก แซนด์บ็อกซ์รองรับคำขออ่าน เปลี่ยนแปลง และเพิ่มข้อมูล ช่วยให้คุณสามารถดำเนินการฟังก์ชันบางอย่างกับทุกบทบาทของประเภทพื้นที่จัดเก็บและการรวมผลลัพธ์ (แมป/ลด)

ตัวจัดการสามารถอธิบายได้ในไฟล์:

sum.lua

local x, y = unpack(...)
return x + y

จากนั้นจึงประกาศในการกำหนดค่า:

functions:
  sum: { __file: sum.lua }

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

พื้นที่จัดเก็บ

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

{
    "name": "User",
    "type": "record",
    "logicalType": "Aggregate",
    "fields": [ 
        { "name": "id", "type": "string"}, 
        {"name": "first_name", "type": "string"}, 
        {"name": "last_name", "type": "string"} 
    ], 
    "indexes": ["id"] 
}

ตามคำอธิบายนี้ DDL (Data Definition Language) จะถูกสร้างขึ้นโดยอัตโนมัติสำหรับ Tarantula DBMS และ GraphQL สคีมาสำหรับการเข้าถึงข้อมูล

รองรับการจำลองข้อมูลแบบอะซิงโครนัส (มีแผนจะเพิ่มการจำลองแบบซิงโครนัส)

โปรเซสเซอร์เอาท์พุต

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

มาตราส่วน

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

คุณสมบัติข้อมูล

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

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

งาน

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

สถาปัตยกรรมและความสามารถของ Tarantool Data Grid

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

คนตัดไม้

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

บริการ

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

บริการอธิบายไว้ในไฟล์กำหนดค่า:

services:
   sum:
      doc: "adds two numbers"
      function: sum
      return_type: int
      args:
         x: int
         y: int

GraphQL API ถูกสร้างขึ้นโดยอัตโนมัติและบริการจะพร้อมสำหรับการโทร:

query {
   sum(x: 1, y: 2) 
}

นี่จะเรียกตัวจัดการ sumซึ่งจะส่งคืนผลลัพธ์:

3

แบบสอบถามโปรไฟล์และตัวชี้วัด

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

สถาปัตยกรรมและความสามารถของ Tarantool Data Grid

โดยปกติแล้ว ระบบจะจัดเตรียมหน่วยวัดภายในที่สามารถรวบรวมได้โดยใช้ Prometheus และแสดงภาพโดยใช้ Grafana

ปรับใช้

Tarantool Data Grid สามารถปรับใช้จากแพ็คเกจ RPM หรือไฟล์เก็บถาวรโดยใช้ยูทิลิตี้จากการแจกจ่ายหรือ Ansible นอกจากนี้ยังมีการรองรับ Kubernetes (ตัวดำเนินการ Tarantool Kubernetes).

แอปพลิเคชันที่ใช้ตรรกะทางธุรกิจ (การกำหนดค่า ตัวจัดการ) จะถูกโหลดลงในคลัสเตอร์ Tarantool Data Grid ที่ปรับใช้ในรูปแบบของไฟล์เก็บถาวรผ่าน UI หรือใช้สคริปต์ผ่าน API ที่เราจัดเตรียมไว้ให้

การใช้งานตัวอย่าง

แอปพลิเคชันใดบ้างที่สามารถสร้างได้โดยใช้ Tarantool Data Grid ที่จริงแล้ว งานทางธุรกิจส่วนใหญ่เกี่ยวข้องกับการประมวลผล การจัดเก็บ และการเข้าถึงโฟลว์ข้อมูล ดังนั้น หากคุณมีข้อมูลจำนวนมากที่ต้องจัดเก็บและเข้าถึงอย่างปลอดภัย ผลิตภัณฑ์ของเราสามารถช่วยคุณประหยัดเวลาในการพัฒนาได้มากและมุ่งเน้นไปที่ตรรกะทางธุรกิจของคุณ

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

  1. หุ่นยนต์ที่รวบรวมข้อมูลจากโอเพ่นซอร์สจะเป็นแหล่งข้อมูลของเรา คุณสามารถแก้ไขปัญหานี้ได้โดยใช้วิธีแก้ปัญหาสำเร็จรูปหรือการเขียนโค้ดในภาษาใดก็ได้
  2. ถัดไป Tarantool Data Grid จะยอมรับและบันทึกข้อมูล หากรูปแบบข้อมูลจากแหล่งที่มาต่างกัน คุณสามารถเขียนโค้ดใน Lua ที่จะทำการแปลงเป็นรูปแบบเดียวได้ ในขั้นตอนก่อนการประมวลผล คุณจะสามารถกรองข้อเสนอที่ซ้ำกันหรืออัปเดตข้อมูลเพิ่มเติมเกี่ยวกับตัวแทนที่ทำงานในตลาดในฐานข้อมูลได้
  3. ตอนนี้ คุณมีโซลูชันที่ปรับขนาดได้ในคลัสเตอร์ที่สามารถเติมข้อมูลและทำการเลือกข้อมูลได้แล้ว จากนั้นคุณสามารถใช้ฟังก์ชันใหม่ได้ เช่น เขียนบริการที่จะขอข้อมูลและให้ข้อเสนอที่ได้เปรียบที่สุดต่อวัน ซึ่งจะต้องใช้สองสามบรรทัดในไฟล์การกำหนดค่าและรหัส Lua เล็กน้อย

ทำอะไรต่อไป

ลำดับความสำคัญของเราคือการปรับปรุงความง่ายในการพัฒนาโดยใช้ ตารางข้อมูล Tarantool. ตัวอย่างเช่น นี่คือ IDE ที่รองรับการสร้างโปรไฟล์และตัวจัดการการดีบักที่ทำงานในแซนด์บ็อกซ์

เรายังให้ความสำคัญกับประเด็นด้านความปลอดภัยเป็นอย่างมาก ขณะนี้เรากำลังอยู่ระหว่างการรับรองโดย FSTEC ของรัสเซีย เพื่อยืนยันการรักษาความปลอดภัยระดับสูง และตรงตามข้อกำหนดสำหรับการรับรองผลิตภัณฑ์ซอฟต์แวร์ที่ใช้ในระบบข้อมูลข้อมูลส่วนบุคคลและระบบข้อมูลของรัฐบาล

ที่มา: will.com

เพิ่มความคิดเห็น