Windows Build (NetCore3.1):
Windows Build (NetFramework 461):
Linux Build (NetCore3.1):
Node JS (NetCore3.1):
Node JS (NetFramework 461):
Ambrosia เป็นแนวทางที่เป็นอิสระจากการเขียนโปรแกรมภาษาสำหรับการเขียนและการปรับใช้แอปพลิเคชันแบบกระจายที่มีประสิทธิภาพสูง Ambrosia ลดต้นทุนการพัฒนาและการปรับใช้และเวลาในการตลาดอย่างมากโดยให้การกู้คืนและความพร้อมใช้งานสูงโดยอัตโนมัติ
แอปพลิเคชันที่มุ่งเน้นดาต้าเซ็นเตอร์ในปัจจุบันซึ่งรวมถึงบริการที่ได้รับความนิยมมากที่สุดที่ทำงานในคลาวด์ในปัจจุบันประกอบด้วยสแต็คซอฟต์แวร์แบบกระจายที่ซับซ้อนสูง ตัวอย่างเช่นพวกเขามักจะรวม Event Hub หรือ Kafka เพื่อป้อนข้อมูลวารสารและการโต้ตอบที่แข็งแกร่งสำหรับการกู้คืนบันทึกข้อมูลสำคัญไปยังร้านค้าเช่น Azure blobs สำหรับความสามารถในการ debuggability และใช้กลไกที่มีราคาแพงมากเช่นธุรกรรมแบบกระจายและฟังก์ชั่นไร้สัญชาติ เพื่อให้แน่ใจว่าเมื่อดำเนินการรหัสบริการ
ในทางตรงกันข้าม Ambrosia จะช่วยให้โปรแกรมเมอร์กู้คืนได้โดยอัตโนมัติความพร้อมใช้งานสูงความสามารถในการ debugg ความสามารถในการอัพเกรดและเมื่อดำเนินการอย่างแน่นอนโดยไม่ต้องให้นักพัฒนาสานต่อระบบที่ซับซ้อนเช่นนี้หรือใช้กลไกที่มีราคาแพงเกินไป
หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการใช้งานและประสิทธิภาพของ Ambrosia คุณสามารถอ่านกระดาษ VLDB ของเราได้
เราขอเชิญชวนนักพัฒนาที่ต้องการสร้างหรือมีส่วนร่วมใน Ambrosia เพื่อเข้าร่วมชุมชน Gitter ของเรา
แนวคิดของ Ambrosia
มันทำงานอย่างไร
คุณสมบัติ
เริ่มต้นอย่างรวดเร็วสำหรับนักพัฒนาแอปพลิเคชัน
การเริ่มต้นอย่างรวดเร็วสำหรับผู้มีส่วนร่วมของ Ambrosia
อ้างอิง
การพึ่งพาอาศัยกัน
การสนับสนุนภาษา
การใช้งาน
การสื่อสารที่ปลอดภัยระหว่างบริการ
เปรียบเทียบกับ
เสมือนจริงความยืดหยุ่น เป็นกลไกในการเขียนโปรแกรมและการกระจาย) (อาจกระจาย) สภาพแวดล้อมและการดำเนินการโดยทั่วไปใช้บันทึกซึ่งใช้ประโยชน์จากธรรมชาติที่กำหนดอีกครั้งและความสามารถในการต่อเนื่องของแอปพลิเคชันเพื่อปกปิดความล้มเหลวโดยอัตโนมัติ
เราใช้คำว่าความยืดหยุ่นเสมือนจริงเพื่ออธิบายกลไกใน Ambrosia ที่อนุญาตให้โปรแกรมเมอร์เขียนแอปพลิเคชันของพวกเขาในความล้มเหลวที่ไม่สนใจลบความจำเป็นสำหรับนักเขียนแอปพลิเคชันเพื่อเขียนตรรกะสำหรับการกู้คืนหรือการป้องกันสถานะ ระบบประมวลผลข้อมูลซึ่งโดยทั่วไปจะแสดงการสืบค้นในตัวแปร SQL ได้ให้ความยืดหยุ่นเสมือนจริงของนักเขียนแบบสอบถามมานานหลายทศวรรษ ระบบการลดแผนที่ซึ่งไม่จำเป็นต้องใช้ SQL ยังให้ความสามารถนี้ด้วย โปรดทราบว่าในทุกกรณีเหล่านี้คุณลักษณะนี้ใช้ประโยชน์จากความสามารถในการกำหนดซ้ำเช่น Ambrosia
เพื่อให้บรรลุความยืดหยุ่นเสมือนจริงผ่านทาง Ambrosia แอปพลิเคชันจะต้องรักษาสัญญาต่อไปนี้: จากสถานะเริ่มต้นบางอย่างการดำเนินการใด ๆ ของคำขอเดียวกันในลำดับเดียวกันผลลัพธ์ใน สถานะสุดท้าย ทั้งสองเช่นเดียวกับ คำขอขาออกเดียวกันในลำดับเดียวกัน .
หน่วยการสร้างพื้นฐานของ Ambrosia เป็น อมตะ วัตถุกระจายที่เชื่อถือได้ซึ่งสื่อสารผ่าน RPCs อมตะกำหนดชุดของสถานะถาวรและชุดของตัวจัดการ RPC ที่ทำงานในสถานะนั้น ตัวอย่าง ของอมตะเป็นนิติบุคคลที่มีชื่อที่รักษาสถานะและดำเนินการตัวจัดการ RPC ตามคำจำกัดความของอมตะ แอปพลิเคชัน Ambrosia มักจะมีหลายอินสแตนซ์ของอมตะเดียวกัน ตัวอย่างเช่นแอปพลิเคชันอาจกำหนด "งาน" เดียวที่เป็นอมตะสำหรับการใช้งานการประมวลผลข้อมูลและเรียกใช้หลายอินสแตนซ์ของงานที่ทำงานในชุดข้อมูลที่แตกต่างกัน
รูปด้านล่างแสดงถึงสถาปัตยกรรมพื้นฐานของแอปพลิเคชัน Ambrosia โดยแสดงบริการ Ambrosia สองรายการที่เรียกว่า Immortals กล่องด้านในในรูปที่แสดงถึงรหัสซึ่งสามารถเรียกใช้ใน 2 กระบวนการแยกต่างหากหรือในกรณีของ C#สามารถทำงานในกระบวนการรวมเดียว แต่ละอินสแตนซ์ของอมตะมีอยู่เป็นวัตถุซอฟต์แวร์และเธรดการควบคุมที่ทำงานอยู่ภายในกระบวนการแอปพลิเคชัน อินสแตนซ์อมตะสื่อสารกับอินสแตนซ์อมตะอื่น ๆ ผ่าน ผู้ประสานงานอมตะ ซึ่งบันทึก RPCs ของอินสแตนซ์และห่อหุ้มเครือข่ายระดับต่ำที่จำเป็นในการส่ง RPCs ตำแหน่งของการร้องขอในบันทึกกำหนดลำดับที่พวกเขาจะถูกส่งไปยังกระบวนการสมัครเพื่อดำเนินการแล้วดำเนินการอีกครั้งเมื่อกู้คืน
นอกจากนี้การเชื่อมโยงภาษาเฉพาะของภาษา Ambrosia ยังให้ serializer ของรัฐ เพื่อหลีกเลี่ยงการเล่นซ้ำจากจุดเริ่มต้นของการบริการในระหว่างการกู้คืนผู้ประสานงานอมตะบางครั้งจุดตรวจสอบสถานะของอมตะซึ่งรวมถึงสถานะแอปพลิเคชัน วิธีการให้อนุกรมนี้อาจแตกต่างกันไปในแต่ละภาษาหรือแม้กระทั่งท่ามกลางการผูกมัดสำหรับภาษาเดียวกัน
นี่คือรายการของคุณสมบัติที่ Ambrosia มอบให้กับนักพัฒนาแอปพลิเคชันและผู้ติดตั้ง:
กำหนดบริการใหม่เพื่อทำงานบน Ambrosia
ปรับใช้บริการบน Ambrosia
อินสแตนซ์บริการตรวจแก้จุดบกพร่อง
ใช้งานอยู่
การอัพเกรดสดทดสอบการอัพเกรด
RPC
RPC แบบอะซิงโครนัส (อัลฟ่า)
เริ่มต้นด้วยหนึ่งในตัวอย่างของเราเพื่อให้บริการและทำงานบน Ambrosia
สร้าง Ambrosia Immortal Coordinator และ C# code Code Generator ด้วยสคริปต์ Bash นี้:
./build_dotnetcore_bindist.sh
ด้วย. NET Core SDK สิ่งนี้จะทำงานบน Windows, Mac OS หรือ Linux หลังจากนั้นคุณมีการกระจายไบนารี Ambrosia ที่สร้างขึ้นภายในไดเรกทอรี ./bin
ภายในสำเนาการทำงานของคุณ
ตรวจสอบคู่มือการสนับสนุนของเราด้วย
ขณะนี้ Ambrosia ต้องการการสมัครสมาชิก Azure เพื่อเขียนบันทึกไปยังที่เก็บข้อมูลซ้ำ ในอนาคตเราคาดว่าจะสรุปส่วนประกอบนี้เพื่อให้สามารถใช้ตัวเลือกการจัดเก็บอื่น ๆ สำหรับบันทึก
ปัจจุบัน Ambrosia รองรับ C# ทั้งใน. NET Core และ. NET Framework จากการเปิดตัว 2.0.0.0, Ambrosia ยังรองรับ Node.js โดยใช้ typeScript เราหวังว่าจะเพิ่มการสนับสนุนสำหรับภาษาอื่น ๆ ในอนาคต
Usage: dotnet Ambrosia.dll RegisterInstance [OPTIONS] Options: -i, --instanceName=VALUE The instance name [REQUIRED]. -rp, --receivePort=VALUE The service receive from port [REQUIRED]. -sp, --sendPort=VALUE The service send to port. [REQUIRED] -l, --log=VALUE The service log path. -cs, --createService=VALUE [A - AutoRecovery | N - NoRecovery | Y - AlwaysRecover]. -ps, --pauseAtStart Is pause at start enabled. -npl, --noPersistLogs Is persistent logging disabled. -lts, --logTriggerSize=VALUE Log trigger size (in MBs). -aa, --activeActive Is active-active enabled. -cv, --currentVersion=VALUE The current version #. -uv, --upgradeVersion=VALUE The upgrade version #. -h, --help show this message and exit Usage: dotnet Ambrosia.dll AddReplica [OPTIONS] Options: -r, --replicaNum=VALUE The replica # [REQUIRED]. -i, --instanceName=VALUE The instance name [REQUIRED]. -rp, --receivePort=VALUE The service receive from port [REQUIRED]. -sp, --sendPort=VALUE The service send to port. [REQUIRED] -l, --log=VALUE The service log path. -cs, --createService=VALUE [A - AutoRecovery | N - NoRecovery | Y - AlwaysRecover]. -ps, --pauseAtStart Is pause at start enabled. -npl, --noPersistLogs Is persistent logging disabled. -lts, --logTriggerSize=VALUE Log trigger size (in MBs). -aa, --activeActive Is active-active enabled. -cv, --currentVersion=VALUE The current version #. -uv, --upgradeVersion=VALUE The upgrade version #. -h, --help show this message and exit Usage: dotnet Ambrosia.dll DebugInstance [OPTIONS] Options: -i, --instanceName=VALUE The instance name [REQUIRED]. -rp, --receivePort=VALUE The service receive from port [REQUIRED]. -sp, --sendPort=VALUE The service send to port. [REQUIRED] -l, --log=VALUE The service log path. -c, --checkpoint=VALUE The checkpoint # to load. -cv, --currentVersion=VALUE The version # to debug. -tu, --testingUpgrade Is testing upgrade. -h, --help show this message and exit
อ่านเกี่ยวกับวิธีการรักษาความปลอดภัยการสื่อสารระหว่างส่วนประกอบกระจายที่ปรับใช้กับ Ambrosia ที่นี่