Mengubah pola desain umpan di Azure Cosmos DB
BERLAKU UNTUK: NoSQL
Umpan perubahan Azure Cosmos DB memungkinkan pemrosesan himpunan data besar yang efisien yang memiliki volume penulisan yang tinggi. Mengubah umpan juga menawarkan cara alternatif untuk mengkueri seluruh set data guna mengidentifikasi apa yang telah berubah. Artikel ini berfokus pada pola desain umpan perubahan umum, tradeoff desain, dan batasan umpan perubahan.
Azure Cosmos DB sangat cocok untuk aplikasi IoT, permainan, ritel, dan pengelogan operasional. Pola desain umum dalam aplikasi ini adalah menggunakan perubahan pada data untuk memicu tindakan lain. Contoh tindakan ini meliputi:
- Memicu pemberitahuan atau panggilan ke API saat item disisipkan, diperbarui, atau dihapus.
- Pemrosesan stream real-time untuk IoT atau pemrosesan analitik real-time pada data operasional.
- Pergerakan data seperti menyinkronkan dengan cache, mesin pencari, gudang data, atau penyimpanan dingin.
Umpan perubahan di Azure Cosmos DB memudahkan Anda untuk membangun solusi yang efisien dan dapat diskalakan untuk setiap pola ini, seperti yang ditunjukkan pada gambar berikut:
Komputasi dan pemberitahuan peristiwa
Umpan perubahan Azure Cosmos DB menyederhanakan skenario yang perlu memicu pemberitahuan atau mengirim panggilan ke API berdasarkan peristiwa tertentu. Anda dapat menggunakan prosesor umpan perubahan untuk secara otomatis melakukan polling kontainer Anda untuk perubahan lalu memanggil API eksternal setiap kali ada tulis, perbarui, atau hapus.
Anda juga bisa secara selektif memicu notifikasi atau mengirim panggilan ke API berdasarkan kriteria tertentu. Misalnya, jika Anda membaca dari umpan perubahan dengan menggunakan Azure Functions, Anda dapat memasukkan logika ke dalam fungsi untuk mengirim pemberitahuan hanya jika kondisi terpenuhi. Meskipun kode Azure Function akan dijalankan untuk setiap perubahan, pemberitahuan akan dikirim hanya jika kondisi terpenuhi.
Pemrosesan stream real-time
Umpan perubahan Azure Cosmos DB dapat digunakan untuk pemrosesan stream real-time untuk IoT atau pemrosesan analitik real-time pada data operasional. Misalnya, Anda mungkin menerima dan menyimpan data peristiwa dari perangkat, sensor, infrastruktur, dan aplikasi, lalu memproses peristiwa ini secara real time dengan menggunakan Spark. Gambar berikut menunjukkan bagaimana Anda dapat menerapkan arsitektur lambda dengan menggunakan umpan perubahan Azure Cosmos DB:
Dalam banyak kasus, implementasi pemrosesan stream pertama kali menerima data masuk dalam volume tinggi ke dalam antrean pesan sementara seperti Azure Event Hubs atau Apache Kafka. Umpan perubahan adalah alternatif yang bagus karena kemampuan Azure Cosmos DB mendukung tingkat penyerapan data yang tinggi secara berkelanjutan dengan latensi baca dan tulis yang rendah. Keuntungan dari umpan perubahan Azure Cosmos DB selama antrean pesan mencakup:
Keberlanjutan data
Data yang ditulis ke Azure Cosmos DB muncul di umpan perubahan. Data disimpan dalam umpan perubahan hingga dihapus jika Anda membaca dengan menggunakan mode versi terbaru. Antrean pesan biasanya memiliki periode retensi maksimum. Misalnya, Azure Event Hubs menawarkan retensi data maksimum 90 hari.
Kemampuan kueri
Selain membaca dari umpan perubahan kontainer Azure Cosmos DB, Anda dapat menjalankan kueri SQL pada data yang disimpan di Azure Cosmos DB. Umpan perubahan bukan duplikasi data yang sudah ada dalam kontainer, melainkan, itu hanya mekanisme yang berbeda untuk membaca data. Oleh karena itu, jika Anda membaca data dari umpan perubahan, data selalu konsisten dengan kueri kontainer Azure Cosmos DB yang sama.
Ketersediaan tinggi
Azure Cosmos DB menawarkan ketersediaan baca dan tulis sampai 99,999%. Tidak seperti banyak antrean pesan, data Azure Cosmos DB dapat dengan mudah didistribusikan dan dikonfigurasi secara global dengan tujuan waktu pemulihan (RTO) nol.
Setelah memproses item di umpan perubahan, Anda dapat membuat tampilan materialisasi dan mempertahankan nilai agregat kembali di Azure Cosmos DB. Jika Anda menggunakan Azure Cosmos DB untuk membangun game, misalnya, Anda dapat menggunakan umpan perubahan untuk menerapkan papan peringkat real-time berdasarkan skor dari game yang telah selesai.
Pergerakan data
Anda juga bisa membaca dari umpan perubahan untuk pergerakan data real-time.
Sebagai contoh, umpan perubahan membantu Anda menjalankan tugas berikut secara efisien:
Perbarui cache, indeks pencarian, atau gudang data dengan data yang disimpan di Azure Cosmos DB.
Lakukan migrasi zero-downtime ke akun Azure Cosmos DB lain atau ke kontainer Azure Cosmos DB lain yang memiliki kunci partisi logis yang berbeda.
Mengimplementasikan penjenjangan dan pengarsipan tingkat data aplikasi. Misalnya, Anda dapat menyimpan "hot data" di Azure Cosmos DB dan memindah "cold data" ke sistem penyimpanan lain seperti Azure Blob Storage.
Ketika Anda harus mendenormalisasi data di seluruh partisi dan kontainer, Anda dapat membaca dari umpan perubahan kontainer Anda sebagai sumber untuk replikasi data ini. Replikasi data real time dengan umpan perubahan hanya dapat menjamin konsistensi akhir. Anda dapat memantau seberapa jauh prosesor umpan perubahan tertinggal dalam memproses perubahan dalam kontainer Azure Cosmos DB Anda.
Sumber peristiwa
Pola sumber peristiwa melibatkan penggunaan penyimpanan hanya tambahkan untuk merekam serangkaian tindakan lengkap pada data tersebut. Umpan perubahan Azure Cosmos DB adalah pilihan yang bagus sebagai penyimpanan data pusat dalam arsitektur sumber peristiwa di mana semua penyerapan data dimodelkan sebagai tulis (tidak ada pembaruan atau penghapusan). Dalam hal ini, setiap tulis ke Azure Cosmos DB adalah "peristiwa", jadi ada catatan lengkap peristiwa sebelumnya di umpan perubahan. Penggunaan umum peristiwa yang diterbitkan oleh penyimpanan peristiwa pusat adalah untuk mempertahankan tampilan materialisasi atau untuk berintegrasi dengan sistem eksternal. Karena tidak ada batas waktu untuk retensi dalam mode versi terbaru umpan perubahan, Anda dapat memutar ulang semua peristiwa sebelumnya dengan membaca dari awal umpan perubahan kontainer Azure Cosmos DB Anda. Anda bahkan dapat memiliki beberapa konsumen umpan perubahan berlangganan umpan perubahan kontainer yang sama.
Azure Cosmos DB adalah penyimpanan data pusat berkelanjutan khusus tambahan yang bagus dalam pola sumber peristiwa karena kekuatannya dalam skalabilitas horizontal dan ketersediaan tinggi. Selain itu, prosesor umpan perubahan menawarkan jaminan "setidaknya sekali" , memastikan bahwa Anda tidak ketinggalan memproses peristiwa apa pun.
Batasan saat ini
Umpan perubahan memiliki beberapa mode yang masing-masing memiliki batasan penting yang harus Anda pahami. Ada beberapa area yang perlu dipertimbangkan ketika Anda merancang aplikasi yang menggunakan umpan perubahan dalam mode versi terbaru atau semua versi dan mode penghapusan.
Pembaruan perantara
Dalam mode versi terbaru, hanya perubahan terbaru untuk item tertentu yang disertakan dalam umpan perubahan. Saat memproses perubahan, Anda membaca versi item terbaru yang tersedia. Jika ada beberapa pembaruan untuk item yang sama dalam waktu singkat, dimungkinkan untuk melewatkan pemrosesan pembaruan menengah. Jika Anda ingin memutar ulang pembaruan individual sebelumnya ke item, Anda dapat memodelkan pembaruan ini sebagai serangkaian penulisan sebagai gantinya atau menggunakan semua versi dan mode penghapusan.
Menghapus
Mode versi terbaru umpan perubahan tidak mengambil penghapusan. Jika Anda menghapus item dari kontainer, item juga akan dihapus dari umpan perubahan. Metode paling umum untuk menangani penghapusan adalah menambahkan penanda lunak pada item yang sedang dihapus. Anda dapat menambahkan properti yang disebut deleted
dan mengaturnya true
pada saat penghapusan. Pembaruan dokumen ini muncul di umpan perubahan. Anda dapat mengatur Time to Live (TTL) pada item ini sehingga dapat dihapus secara otomatis nanti.
Retensi
Umpan perubahan dalam mode versi terbaru memiliki retensi tak terbatas. Selama item ada di kontainer Anda, item tersedia di umpan perubahan.
Urutan terjamin
Semua mode umpan perubahan memiliki urutan yang dijamin dalam nilai kunci partisi, tetapi tidak di seluruh nilai kunci partisi. Anda harus memilih kunci partisi yang memberi Anda jaminan urutan yang bermakna.
Misalnya, pertimbangkan aplikasi ritel yang menggunakan pola desain sumber peristiwa. Dalam aplikasi ini, tindakan pengguna yang berbeda adalah setiap "peristiwa," yang dimodelkan sebagai penulisan ke Azure Cosmos DB. Bayangkan jika beberapa peristiwa terjadi dalam urutan berikut:
- Pelanggan menambahkan Item A ke kedai belanja mereka.
- Pelanggan menambahkan Item B ke kedai belanja mereka.
- Pelanggan menghapus Item A dari kelir belanja mereka.
- Pelanggan cek keluar dan konten kelir belanja dikirim.
Tampilan terwujud dari isi keranjang belanja saat ini dipertahankan untuk setiap pelanggan. Aplikasi ini harus memastikan bahwa peristiwa ini diproses sesuai urutan terjadi. Misalnya, jika checkout kelir akan diproses sebelum penghapusan Item A, kemungkinan Item A akan dikirim ke pelanggan, dan bukan item yang diinginkan pelanggan sebagai gantinya, Item B. Untuk menjamin bahwa keempat peristiwa ini diproses sesuai urutan kemunculannya, peristiwa tersebut harus berada dalam nilai kunci partisi yang sama. Jika Anda memilih username
(setiap pelanggan memiliki nama pengguna yang unik) sebagai kunci partisi, Anda dapat menjamin bahwa peristiwa ini muncul di umpan perubahan dalam urutan yang sama di mana mereka ditulis ke Azure Cosmos DB.
Contoh
Berikut adalah beberapa contoh kode umpan perubahan dunia nyata untuk mode versi terbaru yang melampaui cakupan sampel yang disediakan:
- Pengenalan umpan perubahan
- Kasus penggunaan IoT berpusat di sekitar umpan perubahan
- Kasus penggunaan IoT berpusat di sekitar umpan perubahan