Windows Build (NetCore3.1):
Windows Build (Netframework 461):
Linux Build (NetCore3.1):
العقدة JS (NetCore3.1):
Node JS (Netframework 461):
Ambrosia هو نهج مستقل لغة البرمجة لتأليف ونشر التطبيقات الموزعة القوية للغاية. Ambrosia يقلل بشكل كبير من تكاليف التطوير والنشر والوقت للتسويق من خلال توفير الاسترداد تلقائيًا وارتفاع التوفر.
تتألف التطبيقات الموجهة لمركز البيانات اليوم ، والتي تشمل أكثر الخدمات شيوعًا التي تعمل في السحابة اليوم ، من مداخن برامج معقدة للغاية وموزعة. على سبيل المثال ، يقومون عادةً بدمج مركز الأحداث أو Kafka لمجلة الإدخال والتفاعلات المليئة بالاسترداد بشكل قوي ، وتسجيل المعلومات المهمة لمخازن مثل Azure Blobs من أجل التصريف ، واستخدام آليات باهظة الثمن للغاية مثل المعاملات الموزعة ، والوظائف عديمة الجنسية مع عوامل خلفية مستمرة موزعة ، في في ذلك في من أجل التأكد من تنفيذ رمز الخدمة بالضبط.
في المقابل ، يمنح Ambrosia تلقائيًا المبرمجين إلى استرداد المبرمجين ، وارتفاع التوفر ، وقابلية التصريف ، وقابلية الترقية ، وبمجرد التنفيذ بالضبط ، دون مطالبة المطورين ببعض هذه الأنظمة المعقدة ، أو استخدام آليات باهظة الثمن بشكل مفرط.
لمعرفة المزيد حول تنفيذ Ambrosia وأدائها ، يمكنك قراءة ورقة VLDB الخاصة بنا.
ندعو المطورين الذين يرغبون في البناء أو المساهمة في أمبروسيا للانضمام إلى مجتمعنا.
مفاهيم أمبروسيا
كيف تعمل
سمات
بداية سريعة لمطوري التطبيقات
بداية سريعة للمساهمين في أمبروسيا
مرجع
التبعيات
دعم اللغة
الاستخدام
التواصل الآمن بين الخدمات
مقارنة
المرونة الافتراضية هي آلية في بيئة البرمجة والتنفيذ (ربما موزعة) ، والتي تستخدم عادةً سجلًا ، والذي يستغل الطبيعة الحتمية والسلسلة للتسلسل للتطبيق لإخفاء الفشل تلقائيًا.
نحن نستخدم مصطلح المرونة الافتراضية لوصف الآلية في أمبروسيا التي تسمح للمبرمجين بكتابة تطبيقاتهم بطريقة غافلة عن الفشل ، وإزالة الحاجة إلى كتاب التطبيق لكتابة المنطق للاسترداد أو حماية الدولة. قدمت أنظمة معالجة البيانات ، التي تعبر عادة عن استفساراتها في متغيرات SQL ، مرونة كتاب الاستعلام الخاصة بهم لعقود. توفر أنظمة Reduce Map ، التي لا تستخدم SQL بالضرورة ، هذه القدرة. لاحظ أنه في كل هذه الحالات ، تعمل هذه الميزة على الاستفادة من القدرة على إعادة التشغيل بشكل حتمي ، مثل Ambrosia.
من أجل تحقيق المرونة الافتراضية من خلال أمبروسيا ، يجب أن تدعم الطلبات العقد التالي: من بعض الحالة الأولية ، فإن أي تنفيذ للطلبات نفسها في نفس الترتيب ينتج عنه نفس الحالة النهائية ، وكذلك نفس الطلبات الصادرة في نفس الترتيب .
اللبنات الأساسية للأمبروسيا هي الخالدة ، وهي كائنات موزعة موثوقة تتواصل من خلال RPCs. يحدد الخالد مجموعة من الحالة المستمرة ومجموعة من معالجات RPC التي تعمل على تلك الحالة. مثال على الخالد هو كيان مسمى يحافظ على الحالة وينفذ معالجات RPC وفقًا لتعريف Immortal. غالبًا ما يحتوي تطبيق Ambrosia على مثيلات متعددة من نفس الخالدة ؛ على سبيل المثال ، قد يحدد التطبيق "وظيفة" واحدة خالدة لتشغيل وظيفة معالجة البيانات وتشغيل مثيلات متعددة من هذه الوظيفة التي تعمل على مجموعات بيانات مختلفة.
يوضح الشكل أدناه الهندسة المعمارية الأساسية لتطبيق أمبروسيا ، مما يدل على توصيل خدمات أمبروسيا ، تسمى الخالدين. تمثل الصناديق الداخلية في الشكل رمزًا يمكن تشغيله في عمليتين منفصلتين ، أو في حالة C#، يمكن تشغيله في عملية متكاملة واحدة. كل مثيل من الخالد موجود ككائن برنامج وموضوع تحكم يعمل داخل عملية التطبيق. يتواصل مثيل خالد مع مثيلات خالدة أخرى من خلال المنسق الخالد ، والذي يقوم بتسجيل RPCs للمثال ويغلف الشبكات المنخفضة المستوى المطلوبة لإرسال RPCs. يحدد موضع الطلبات في السجل الترتيب الذي يتم تقديمه إلى عملية تقديم الطلب للتنفيذ ثم إعادة التنفيذ عند الاسترداد.
بالإضافة إلى ذلك ، يوفر ملزمة Ambrosia المحددة للغة مسلسلًا للدولة. لتجنب إعادة التشغيل من بداية الخدمة أثناء الاسترداد ، يقوم المنسق الخالد أحيانًا بالتفتيش على حالة الخالد ، والتي تشمل حالة التطبيق. يمكن أن تختلف الطريقة التي يتم بها توفير هذا التسلسل من لغة إلى أخرى ، أو حتى بين الارتباطات لنفس اللغة.
فيما يلي قائمة بالميزات التي توفرها Ambrosia لمطوري التطبيقات والناشر:
حدد خدمة جديدة لتشغيلها على أمبروسيا
نشر الخدمات على أمبروسيا
مثيل خدمة التصحيح
نشط نشط
تعيش ترقيات واختبار ترقيات
RPC
RPC غير متزامن (ألفا)
ابدأ بإحدى عيناتنا للحصول على خدمة وتشغيلها على أمبروسيا.
قم ببناء منسق Ambrosia Immortal و C# 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
اقرأ عن كيفية تأمين الاتصالات بين المكونات الموزعة التي تم نشرها على أمبروسيا هنا.