Praktik terbaik Pemrograman Scala atau Clojure

11

Saya melakukan banyak pengkodean belajar mandiri, mendapat beberapa pengalaman dengan Model Pemrograman Paralel: Aktor, Memori Transaksional Perangkat Lunak, Aliran Data.

Ketika saya mencoba menerapkan arsitektur ini ke kehidupan nyata - ke dalam aplikasi web beban tinggi - model apa pun tidak mendukung daya tahan dan kegigihan untuk data. Tugas kehidupan nyata mengharuskan untuk menyimpan data pada akhirnya. Ini berarti bahwa saya masih harus menggunakan DB dan menjebak sinkronisasi DB, kemungkinan skalabilitas botol, dll.

Adakah yang tahu contoh arsitektur yang bagus (src atau teks atau diagram atau cetak biru) yang menggunakan Akka Aktor atau Memori Transaksi Perangkat Lunak dan menerapkan kegigihan pada akhirnya?

Setiap contoh / ide bagus untuk Memori Transaksional, Aktor, Dataflow, Tuple spasi dalam aplikasi kehidupan nyata dipersilahkan.

agas
sumber
Apakah Anda membutuhkan akka dan stm?
om-nom-nom
Tampaknya tidak biasa bahwa Anda menganggap kegigihan sebagai "pada akhirnya". Saya percaya "menjebak sinkronisasi DB, kemungkinan skalabilitas, dll." adalah masalah justru karena mereka berada di tengah-tengah hal, bukan akhir.
Dan Burton
Setuju bahwa kegigihan terjadi lebih sering daripada pada akhirnya
@Stas Bagaimana pertanyaan terkait dengan (1) Scala dan Clojure, (2) praktik terbaik? Apa yang saya baca adalah (1) agnostik-bahasa dan (2) hanya terkait dengan konkurensi (khususnya Daya Tahan / Ketekunan).
sakisk

Jawaban:

5

Aktor / model STM dan kegigihan basis data agak ortogonal - Anda dapat dengan mudah memilikinya tanpa yang lain, dan saya pikir ada bahaya untuk membingungkan keduanya.

Mencapai Durabilitas (D dalam ACID) sangat kompleks dalam pengaturan transaksional, dan khususnya dalam pengaturan terdistribusi di mana Anda memiliki aktor / proses yang dikoordinasikan oleh penyampaian pesan. Anda masuk ke masalah pelik seperti Masalah Jenderal Bizantium .

Akibatnya, saya pikir akan selalu ada beberapa tingkat menyesuaikan solusi untuk memenuhi persyaratan kegigihan spesifik Anda. Tidak ada solusi "satu ukuran untuk semua".

Layak untuk dilihat (perspektif Clojure):

mikera
sumber
5

Model aktor bekerja dengan cantik dengan Command / Query Responsibility Segregation (CQRS) , karena pesan ke aktor yang melakukan manipulasi data dapat digunakan sebagai padanan "Command".

Jadi, apa hubungannya dengan masalah kegigihan Anda? Nah, Anda bekerja pada memori, dan menulis semua perintah ke log, yang merupakan operasi yang lebih murah karena hanya ditambahkan, dan membuang snapshot dari waktu ke waktu untuk mengurangi waktu yang diperlukan untuk memuat ulang basis data jika diperlukan (ditambah memungkinkan untuk pulihkan ruang yang digunakan oleh log).

Ini adalah teknik yang cukup umum. Lihatlah VoltDB dan Redis untuk inspirasi lebih lanjut.

Daniel C. Sobral
sumber
4

Rich Hickey memiliki gagasan baru bernama Datomic. Ini adalah pendekatan baru untuk kegigihan, pemisahan penyimpanan, manajemen transaksi, dan permintaan. Ini didasarkan pada catatan abadi dan menggunakan bahasa permintaan yang disebut Datalog (berbagi fitur dengan Prolog). Tujuan utamanya adalah untuk memungkinkan distribusi dan penyebaran cloud dengan mudah. Itu bergantung pada penyimpanan sebagai layanan (jadi bukan satu implementasi konkret, tetapi longgar ditambah melalui API over-the-wire).

Di Clojure kita memiliki STM yang memberi kita ACI, D hilang. Datomic menambahkan D.

Marko Topolnik
sumber