Pilih preferensi cookie Anda

Kami menggunakan cookie penting serta alat serupa yang diperlukan untuk menyediakan situs dan layanan. Kami menggunakan cookie performa untuk mengumpulkan statistik anonim sehingga kami dapat memahami cara pelanggan menggunakan situs dan melakukan perbaikan. Cookie penting tidak dapat dinonaktifkan, tetapi Anda dapat mengklik “Kustom” atau “Tolak” untuk menolak cookie performa.

Jika Anda setuju, AWS dan pihak ketiga yang disetujui juga akan menggunakan cookie untuk menyediakan fitur situs yang berguna, mengingat preferensi Anda, dan menampilkan konten yang relevan, termasuk iklan yang relevan. Untuk menerima atau menolak semua cookie yang tidak penting, klik “Terima” atau “Tolak”. Untuk membuat pilihan yang lebih detail, klik “Kustomisasi”.

Pola sumber acara - AWS Bimbingan Preskriptif

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Pola sumber acara

Niat

Dalam arsitektur berbasis peristiwa, pola sumber acara menyimpan peristiwa yang menghasilkan perubahan status di penyimpanan data. Ini membantu menangkap dan mempertahankan riwayat lengkap perubahan negara, dan mempromosikan auditabilitas, keterlacakan, dan kemampuan untuk menganalisis keadaan masa lalu.

Motivasi

Beberapa layanan mikro dapat berkolaborasi untuk menangani permintaan, dan mereka berkomunikasi melalui acara. Peristiwa ini dapat mengakibatkan perubahan status (data). Menyimpan objek peristiwa dalam urutan di mana mereka terjadi memberikan informasi berharga tentang keadaan saat ini dari entitas data dan informasi tambahan tentang bagaimana ia sampai pada keadaan itu.

Penerapan

Gunakan pola sumber acara saat:

  • Riwayat abadi dari peristiwa yang terjadi dalam aplikasi diperlukan untuk melacak.

  • Proyeksi data polyglot diperlukan dari satu sumber kebenaran (SSOT).

  • Diperlukan rekonstruksi point-in-time dari status aplikasi.

  • Penyimpanan jangka panjang status aplikasi tidak diperlukan, tetapi Anda mungkin ingin merekonstruksinya sesuai kebutuhan.

  • Beban kerja memiliki volume baca dan tulis yang berbeda. Misalnya, Anda memiliki beban kerja intensif tulis yang tidak memerlukan pemrosesan waktu nyata.

  • Change data capture (CDC) diperlukan untuk menganalisis kinerja aplikasi dan metrik lainnya.

  • Data audit diperlukan untuk semua peristiwa yang terjadi dalam suatu sistem untuk tujuan pelaporan dan kepatuhan.

  • Anda ingin menurunkan skenario bagaimana-jika dengan mengubah (menyisipkan, memperbarui, atau menghapus) peristiwa selama proses pemutaran ulang untuk menentukan kemungkinan status akhir.

Masalah dan pertimbangan

  • Kontrol konkurensi optimis: Pola ini menyimpan setiap peristiwa yang menyebabkan perubahan status dalam sistem. Beberapa pengguna atau layanan dapat mencoba memperbarui data yang sama secara bersamaan, menyebabkan tabrakan peristiwa. Tabrakan ini terjadi ketika peristiwa yang saling bertentangan dibuat dan diterapkan pada saat yang sama, yang menghasilkan status data akhir yang tidak sesuai dengan kenyataan. Untuk mengatasi masalah ini, Anda dapat menerapkan strategi untuk mendeteksi dan menyelesaikan tabrakan peristiwa. Misalnya, Anda dapat menerapkan skema kontrol konkurensi optimis dengan menyertakan pembuatan versi atau dengan menambahkan stempel waktu ke acara untuk melacak urutan pembaruan.

  • Kompleksitas: Menerapkan sumber acara memerlukan pergeseran pola pikir dari operasi CRUD tradisional ke pemikiran yang didorong oleh peristiwa. Proses replay, yang digunakan untuk mengembalikan sistem ke keadaan semula, dapat menjadi rumit untuk memastikan idempotensi data. Penyimpanan acara, cadangan, dan snapshot juga dapat menambah kompleksitas tambahan.

  • Konsistensi akhir: Proyeksi data yang berasal dari peristiwa pada akhirnya konsisten karena latensi dalam memperbarui data dengan menggunakan pola pemisahan tanggung jawab permintaan perintah (CQRS) atau tampilan terwujud. Ketika konsumen memproses data dari toko acara dan penerbit mengirim data baru, proyeksi data atau objek aplikasi mungkin tidak mewakili keadaan saat ini.

  • Query: Mengambil data saat ini atau agregat dari log peristiwa bisa lebih rumit dan lebih lambat dibandingkan dengan database tradisional, terutama untuk kueri kompleks dan tugas pelaporan. Untuk mengurangi masalah ini, sumber acara sering diimplementasikan dengan pola CQRS.

  • Ukuran dan biaya toko acara: Toko acara dapat mengalami pertumbuhan eksponensial dalam ukuran karena peristiwa terus berlanjut, terutama dalam sistem yang memiliki throughput acara tinggi atau periode retensi yang diperpanjang. Oleh karena itu, Anda harus mengarsipkan data acara secara berkala ke penyimpanan hemat biaya untuk mencegah toko acara menjadi terlalu besar.

  • Skalabilitas toko acara: Toko acara harus secara efisien menangani volume tinggi dari operasi tulis dan baca. Menskalakan toko acara bisa menjadi tantangan, jadi penting untuk memiliki penyimpanan data yang menyediakan pecahan dan partisi.

  • Efisiensi dan optimasi: Pilih atau rancang toko acara yang menangani operasi tulis dan baca secara efisien. Toko acara harus dioptimalkan untuk volume acara yang diharapkan dan pola kueri untuk aplikasi. Menerapkan mekanisme pengindeksan dan kueri dapat mempercepat pengambilan peristiwa saat merekonstruksi status aplikasi. Anda juga dapat mempertimbangkan untuk menggunakan database toko acara khusus atau pustaka yang menawarkan fitur pengoptimalan kueri.

  • Snapshots: Anda harus mencadangkan log peristiwa secara berkala dengan aktivasi berbasis waktu. Memutar ulang peristiwa pada cadangan data yang berhasil terakhir diketahui akan mengarah pada point-in-time pemulihan status aplikasi. Tujuan titik pemulihan (RPO) adalah jumlah waktu maksimum yang dapat diterima sejak titik pemulihan data terakhir. RPO menentukan apa yang dianggap sebagai hilangnya data yang dapat diterima antara titik pemulihan terakhir dan gangguan layanan. Frekuensi snapshot harian data dan toko acara harus didasarkan pada RPO untuk aplikasi.

  • Sensitivitas waktu: Peristiwa disimpan dalam urutan terjadinya. Oleh karena itu, keandalan jaringan merupakan faktor penting untuk dipertimbangkan ketika Anda menerapkan pola ini. Masalah latensi dapat menyebabkan status sistem yang salah. Gunakan antrian first in, first out (FIFO) dengan at-most-once pengiriman untuk membawa acara ke toko acara.

  • Kinerja pemutaran ulang acara: Memutar ulang sejumlah besar peristiwa untuk merekonstruksi status aplikasi saat ini dapat memakan waktu. Upaya optimasi diperlukan untuk meningkatkan kinerja, terutama saat memutar ulang peristiwa dari data yang diarsipkan.

  • Pembaruan sistem eksternal: Aplikasi yang menggunakan pola sumber acara dapat memperbarui penyimpanan data di sistem eksternal, dan mungkin menangkap pembaruan ini sebagai objek peristiwa. Selama tayangan ulang acara, ini mungkin menjadi masalah jika sistem eksternal tidak mengharapkan pembaruan. Dalam kasus seperti itu, Anda dapat menggunakan bendera fitur untuk mengontrol pembaruan sistem eksternal.

  • Kueri sistem eksternal: Ketika panggilan sistem eksternal sensitif terhadap tanggal dan waktu panggilan, data yang diterima dapat disimpan di penyimpanan data internal untuk digunakan selama pemutaran ulang.

  • Versi acara: Saat aplikasi berkembang, struktur peristiwa (skema) dapat berubah. Menerapkan strategi pembuatan versi untuk acara untuk memastikan kompatibilitas mundur dan maju diperlukan. Ini dapat melibatkan termasuk bidang versi dalam payload acara dan menangani versi acara yang berbeda dengan tepat selama pemutaran ulang.

Implementasi

Arsitektur tingkat tinggi

Perintah dan acara

Dalam aplikasi layanan mikro berbasis peristiwa terdistribusi, perintah mewakili instruksi atau permintaan yang dikirim ke layanan, biasanya dengan maksud memulai perubahan statusnya. Layanan memproses perintah ini dan mengevaluasi validitas dan penerapan perintah ke keadaan saat ini. Jika perintah berjalan dengan sukses, layanan merespons dengan memancarkan peristiwa yang menandakan tindakan yang diambil dan informasi status yang relevan. Misalnya, dalam diagram berikut, layanan pemesanan merespons perintah Book ride dengan memancarkan acara yang dipesan Ride.

Perintah dan acara dalam pola sumber acara

Toko acara

Peristiwa masuk ke repositori atau penyimpanan data yang tidak dapat diubah, hanya ditambahkan, diurutkan secara kronologis yang dikenal sebagai toko acara. Setiap perubahan status diperlakukan sebagai objek peristiwa individu. Objek entitas atau penyimpanan data dengan keadaan awal yang diketahui, keadaan saat ini, dan point-in-time tampilan apa pun dapat direkonstruksi dengan memutar ulang peristiwa dalam urutan kemunculannya.

Toko acara bertindak sebagai catatan sejarah dari semua tindakan dan perubahan negara, dan berfungsi sebagai sumber kebenaran tunggal yang berharga. Anda dapat menggunakan toko acara untuk mendapatkan up-to-date status akhir sistem dengan meneruskan peristiwa melalui prosesor replay, yang menerapkan peristiwa ini untuk menghasilkan representasi akurat dari status sistem terbaru. Anda juga dapat menggunakan toko acara untuk menghasilkan point-in-time perspektif status dengan memutar ulang peristiwa melalui prosesor replay. Dalam pola sumber peristiwa, status saat ini mungkin tidak sepenuhnya diwakili oleh objek peristiwa terbaru. Anda dapat memperoleh keadaan saat ini dengan salah satu dari tiga cara:

  • Dengan menggabungkan peristiwa terkait. Objek peristiwa terkait digabungkan untuk menghasilkan status saat ini untuk kueri. Pendekatan ini sering digunakan bersama dengan pola CQRS, di mana peristiwa digabungkan dan ditulis ke dalam penyimpanan data hanya-baca.

  • Dengan menggunakan tampilan yang terwujud. Anda dapat menggunakan sumber peristiwa dengan pola tampilan terwujud untuk menghitung atau meringkas data peristiwa dan mendapatkan status data terkait saat ini.

  • Dengan memutar ulang acara. Objek acara dapat diputar ulang untuk melakukan tindakan untuk menghasilkan keadaan saat ini.

Diagram berikut menunjukkan Ride booked acara yang disimpan di toko acara.

Menggunakan toko acara dalam pola sumber acara

Toko acara menerbitkan acara yang disimpannya, dan acara dapat disaring dan diarahkan ke prosesor yang sesuai untuk tindakan selanjutnya. Misalnya, peristiwa dapat dirutekan ke prosesor tampilan yang merangkum status dan menunjukkan tampilan yang terwujud. Peristiwa diubah ke format data penyimpanan data target. Arsitektur ini dapat diperluas untuk memperoleh berbagai jenis penyimpanan data, yang mengarah pada persistensi data polyglot.

Diagram berikut menjelaskan peristiwa dalam aplikasi pemesanan perjalanan. Semua peristiwa yang terjadi dalam aplikasi disimpan di toko acara. Peristiwa yang disimpan kemudian disaring dan diarahkan ke konsumen yang berbeda.

Contoh implementasi tingkat tinggi untuk pola sumber acara

Peristiwa perjalanan dapat digunakan untuk menghasilkan penyimpanan data hanya-baca dengan menggunakan CQRS atau pola tampilan terwujud. Anda dapat memperoleh status perjalanan saat ini, pengemudi, atau pemesanan dengan menanyakan toko baca. Beberapa peristiwa, seperti Location changed atauRide completed, dipublikasikan ke konsumen lain untuk diproses pembayaran. Ketika perjalanan selesai, semua acara perjalanan diputar ulang untuk membangun riwayat perjalanan untuk tujuan audit atau pelaporan.

Pola sumber peristiwa sering digunakan dalam aplikasi yang memerlukan point-in-time pemulihan, dan juga ketika data harus diproyeksikan dalam format yang berbeda dengan menggunakan satu sumber kebenaran. Kedua operasi ini memerlukan proses pemutaran ulang untuk menjalankan acara dan mendapatkan status akhir yang diperlukan. Prosesor replay mungkin juga memerlukan titik awal yang diketahui — idealnya bukan dari peluncuran aplikasi, karena itu tidak akan menjadi proses yang efisien. Kami menyarankan Anda mengambil snapshot reguler dari status sistem dan menerapkan sejumlah kecil peristiwa untuk mendapatkan status. up-to-date

Implementasi menggunakan layanan AWS

Dalam arsitektur berikut, Amazon Kinesis Data Streams digunakan sebagai toko acara. Layanan ini menangkap dan mengelola perubahan aplikasi sebagai peristiwa, dan menawarkan solusi streaming data throughput tinggi dan real-time. Untuk menerapkan pola sumber acara di AWS, Anda juga dapat menggunakan layanan seperti Amazon EventBridge dan Amazon Managed Streaming for Apache Kafka (Amazon MSK) berdasarkan kebutuhan aplikasi Anda.

Untuk meningkatkan daya tahan dan mengaktifkan audit, Anda dapat mengarsipkan peristiwa yang ditangkap oleh Kinesis Data Streams di Amazon Simple Storage Service (Amazon S3). Pendekatan penyimpanan ganda ini membantu menyimpan data peristiwa historis dengan aman untuk tujuan analisis dan kepatuhan di masa mendatang.

Menerapkan pola sumber acara dengan layanan AWS

Alur kerja terdiri dari langkah-langkah berikut:

  1. Permintaan pemesanan perjalanan dilakukan melalui klien seluler ke titik akhir Amazon API Gateway.

  2. Layanan mikro perjalanan (fungsi Ride service Lambda) menerima permintaan, mengubah objek, dan menerbitkan ke Kinesis Data Streams.

  3. Data peristiwa di Kinesis Data Streams disimpan di Amazon S3 untuk tujuan kepatuhan dan riwayat audit.

  4. Peristiwa diubah dan diproses oleh fungsi Ride event processor Lambda dan disimpan dalam database Amazon Aurora untuk memberikan tampilan terwujud untuk data perjalanan.

  5. Acara perjalanan yang telah selesai disaring dan dikirim untuk diproses pembayaran ke gateway pembayaran eksternal. Ketika pembayaran selesai, acara lain dikirim ke Kinesis Data Streams untuk memperbarui database Ride.

  6. Ketika perjalanan selesai, acara perjalanan diputar ulang ke fungsi Ride service Lambda untuk membangun rute dan sejarah perjalanan.

  7. Informasi perjalanan dapat dibaca melaluiRide data service, yang dibaca dari database Aurora.

API Gateway juga dapat mengirim objek acara langsung ke Kinesis Data Streams tanpa fungsi LambdaRide service. Namun, dalam sistem yang kompleks seperti layanan ride hailing, objek acara mungkin perlu diproses dan diperkaya sebelum tertelan ke dalam aliran data. Untuk alasan ini, arsitektur memiliki Ride service yang memproses peristiwa sebelum mengirimnya ke Kinesis Data Streams.

Referensi blog

PrivasiSyarat situsPreferensi cookie
© 2025, Amazon Web Services, Inc. atau afiliasinya. Semua hak dilindungi undang-undang.