Windows build (netcore3.1):
Windows build (NetFramework 461):
Linux Build (NetCore3.1):
Node JS (NetCore3.1):
Node JS (NetFramework 461):
Ambrosia adalah pendekatan independen bahasa pemrograman untuk menulis dan menggunakan aplikasi terdistribusi yang sangat kuat. Ambrosia secara dramatis menurunkan biaya pengembangan dan penyebaran dan waktu untuk dipasarkan dengan secara otomatis memberikan pemulihan dan ketersediaan tinggi.
Aplikasi berorientasi pusat data saat ini, yang mencakup layanan paling populer yang berjalan di cloud saat ini, terdiri dari tumpukan perangkat lunak terdistribusi yang sangat kompleks. Misalnya, mereka biasanya menggabungkan hub peristiwa atau kafka ke input dan interaksi jurnal yang kuat untuk pemulihan, mencatat informasi penting ke toko-toko seperti gumpalan Azure untuk debuggability, dan menggunakan mekanisme yang sangat mahal seperti transaksi terdistribusi, dan fungsi stateless dengan back-end yang distribusikan, di ujung-ujung persisten, di ujung yang persisten, di ujung-ujung persisten, di ujung yang persisten, di ujung yang persisten, di ujung yang persisten, di ujung yang persisten, di ujung yang persisten, di ujung yang persisten, di ujung yang persisten, di ujung yang persisten, di ujung yang persisten, di ujung tanpa kewajiban, Pesan untuk memastikan dengan tepat setelah eksekusi kode layanan.
Sebaliknya, Ambrosia secara otomatis memberikan pemulihan pemulihan, ketersediaan tinggi, debuggability, peningkatan kemampuan, dan tepatnya eksekusi, tanpa mengharuskan pengembang untuk menenun bersama sistem yang kompleks, atau menggunakan mekanisme yang terlalu mahal.
Untuk mempelajari lebih lanjut tentang implementasi dan kinerja Ambrosia, Anda dapat membaca kertas VLDB kami.
Kami mengundang pengembang yang ingin membangun atau berkontribusi pada Ambrosia untuk bergabung dengan komunitas Gitter kami.
Konsep Ambrosia
Cara kerjanya
Fitur
Mulai cepat untuk pengembang aplikasi
Mulai cepat untuk kontributor Ambrosia
Referensi
Dependensi
Dukungan bahasa
Penggunaan
Komunikasi yang Aman Antara Layanan
Perbandingan dengan
Ketahanan virtual adalah mekanisme dalam lingkungan pemrograman dan eksekusi (yang mungkin didistribusikan), biasanya menggunakan log, yang mengeksploitasi sifat deterministik dan serializabilitas aplikasi untuk secara otomatis menutupi kegagalan.
Kami menggunakan istilah ketahanan virtual untuk menggambarkan mekanisme dalam ambrosia yang memungkinkan pemrogram untuk menulis aplikasi mereka dengan cara yang tidak sadar, menghapus kebutuhan bagi penulis aplikasi untuk menulis logika untuk pemulihan atau perlindungan negara. Sistem pemrosesan data, yang biasanya mengekspresikan kueri mereka dalam varian SQL, telah memberikan ketahanan virtual penulis kueri selama beberapa dekade. Sistem peta-reduce, yang tidak perlu menggunakan SQL, juga memberikan kemampuan ini. Perhatikan bahwa dalam semua kasus ini, fitur ini memanfaatkan kemampuan untuk diputar ulang secara deterministik, seperti ambrosia.
Untuk mencapai ketahanan virtual melalui Ambrosia, aplikasi harus menegakkan kontrak berikut: Dari beberapa keadaan awal, setiap pelaksanaan permintaan yang sama dalam urutan yang sama menghasilkan kondisi akhir yang sama , serta permintaan keluar yang sama dalam urutan yang sama .
Blok bangunan dasar Ambrosia adalah abadi , objek terdistribusi yang dapat diandalkan yang berkomunikasi melalui RPC. Immortal mendefinisikan serangkaian keadaan persisten dan satu set penangan RPC yang beroperasi pada negara itu. Sebuah contoh dari abadi adalah entitas bernama yang mempertahankan negara dan mengeksekusi penangan RPC sesuai dengan definisi Immortal. Aplikasi Ambrosia sering memiliki banyak contoh abadi yang sama; Misalnya, aplikasi dapat mendefinisikan satu "pekerjaan" yang abadi untuk menjalankan pekerjaan pemrosesan data dan menjalankan beberapa contoh pekerjaan yang beroperasi pada set data yang berbeda.
Gambar di bawah ini menguraikan arsitektur dasar aplikasi Ambrosia, menunjukkan dua layanan Ambrosia yang berkomunikasi, yang disebut Immortals. Kotak dalam dalam gambar mewakili kode yang dapat berjalan di 2 proses terpisah, atau dalam kasus C#, dapat berjalan dalam satu proses terintegrasi. Setiap contoh yang abadi ada sebagai objek perangkat lunak dan utas kontrol yang berjalan di dalam proses aplikasi. Contoh abadi berkomunikasi dengan instance abadi lainnya melalui koordinator abadi , yang secara khusus mencatat RPC instance dan merangkum jaringan tingkat rendah yang diperlukan untuk mengirim RPC. Posisi permintaan dalam log menentukan urutan di mana mereka diserahkan ke proses aplikasi untuk dieksekusi dan kemudian mengeksekusi ulang setelah pemulihan.
Selain itu, ikatan ambrosia spesifik bahasa menyediakan serializer negara. Untuk menghindari memutar ulang dari awal layanan selama pemulihan, koordinator abadi sesekali memeriksa status abadi, yang mencakup status aplikasi. Cara serialisasi ini disediakan dapat bervariasi dari bahasa ke bahasa, atau bahkan di antara binding untuk bahasa yang sama.
Berikut adalah daftar fitur yang disediakan Ambrosia kepada pengembang aplikasi dan penggalian:
Tentukan layanan baru untuk dijalankan di Ambrosia
Menerapkan layanan di Ambrosia
Contoh Layanan Debug
Aktif aktif
Peningkatan Langsung, Uji Peningkatan
RPC
RPC asinkron (alpha)
Mulailah dengan salah satu sampel kami untuk mendapatkan layanan dan berjalan di Ambrosia.
Bangun koordinator abadi Ambrosia dan generator kode klien C# dengan skrip bash ini:
./build_dotnetcore_bindist.sh
Diberikan .NET Core SDK, ini akan berfungsi pada Windows, Mac OS, atau Linux. Setelah itu, Anda memiliki distribusi biner Ambrosia yang dibangun di dalam direktori ./bin
di dalam salinan kerja Anda.
Lihat juga panduan berkontribusi kami.
Ambrosia saat ini membutuhkan langganan Azure untuk menulis log ke penyimpanan yang direplikasi. Di masa depan, kami mengantisipasi abstrak komponen ini untuk dapat menggunakan opsi penyimpanan lain untuk log.
Ambrosia saat ini mendukung C# pada .NET Core dan .NET Framework. Pada rilis 2.0.0.0, Ambrosia juga mendukung Node.js menggunakan TypeScript. Kami berharap dapat menambahkan dukungan untuk bahasa lain di masa depan.
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
Baca tentang cara mengamankan komunikasi antara komponen terdistribusi yang digunakan pada ambrosia di sini.