Menguraikan monolit menjadi layanan mikro dengan menggunakan CQRS dan sumber acara - AWS Prescriptive Guidance

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

Menguraikan monolit menjadi layanan mikro dengan menggunakan CQRS dan sumber acara

Rodolfo Jr. Cerrada, Dmitry Gulin, dan Tabby Ward, Amazon Web Services

Ringkasan

Pola ini menggabungkan dua pola, menggunakan pola pemisahan tanggung jawab permintaan perintah (CQRS) dan pola sumber peristiwa. Pola CQRS memisahkan tanggung jawab model perintah dan kueri. Pola sumber acara memanfaatkan komunikasi berbasis peristiwa asinkron untuk meningkatkan pengalaman pengguna secara keseluruhan.

Anda dapat menggunakan layanan CQRS dan Amazon Web Services (AWS) untuk memelihara dan menskalakan setiap model data secara independen sambil memfaktorkan ulang aplikasi monolit Anda ke dalam arsitektur layanan mikro. Kemudian Anda dapat menggunakan pola sumber acara untuk menyinkronkan data dari database perintah ke database kueri.

Pola ini menggunakan kode contoh yang menyertakan file solusi (*.sln) yang dapat Anda buka menggunakan versi terbaru Visual Studio. Contoh ini berisi kode Reward API untuk menampilkan cara kerja CQRS dan sumber acara di aplikasi AWS tanpa server dan tradisional atau lokal.

Untuk mempelajari lebih lanjut tentang CQRS dan sumber acara, lihat bagian Informasi tambahan.

Prasyarat dan batasan

Prasyarat

  • Akun AWS yang aktif

  • Amazon CloudWatch

  • Tabel Amazon DynamoDB

  • Amazon DynamoDB Streams

  • Kunci akses AWS Identity and Access Management (IAM) dan kunci rahasia; untuk informasi selengkapnya, lihat video di bagian Sumber daya terkait

  • AWS Lambda

  • Keakraban dengan Visual Studio

  • Keakraban dengan AWS Toolkit for Visual Studio; untuk informasi selengkapnya, lihat video demo AWS Toolkit for Visual Studio di bagian Sumber daya terkait

Versi produk

Batasan

  • Kode contoh untuk aplikasi lokal tradisional (ASP.NET Core Web API dan objek akses data) tidak disertakan dengan database. Namun, ia datang dengan objek CustomerData dalam memori, yang bertindak sebagai database tiruan. Kode yang diberikan cukup bagi Anda untuk menguji polanya.

Arsitektur

Tumpukan teknologi sumber

  • Proyek API Web Inti ASP.NET

  • Server Web IIS

  • Objek akses data

  • Model CRUD

Arsitektur sumber

Dalam arsitektur sumber, model CRUD berisi antarmuka perintah dan kueri dalam satu aplikasi. Misalnya kode, lihat CustomerDAO.cs (terlampir).

Koneksi antara aplikasi, antarmuka layanan, model CRUD pelanggan, dan database.

Tumpukan teknologi target

  • Amazon DynamoDB

  • Amazon DynamoDB Streams

  • AWS Lambda

  • (Opsional) Amazon API Gateway

  • (Opsional) Layanan Pemberitahuan Sederhana Amazon (Amazon SNS)

Arsitektur target

Dalam arsitektur target, antarmuka perintah dan kueri dipisahkan. Arsitektur yang ditunjukkan dalam diagram berikut dapat diperluas dengan API Gateway dan Amazon SNS. Untuk informasi selengkapnya, lihat bagian Informasi tambahan.

Aplikasi yang terhubung dengan layanan mikro Customer Command dan Customer Query tanpa server.
  1. Fungsi Command Lambda melakukan operasi tulis, seperti membuat, memperbarui, atau menghapus, pada database.

  2. Fungsi Query Lambda melakukan operasi baca, seperti dapatkan atau pilih, pada database.

  3. Fungsi Lambda ini memproses aliran DynamoDB dari database Command dan memperbarui database Query untuk perubahan.

Alat

Alat

  • Amazon DynamoDB - Amazon DynamoDB adalah layanan database NoSQL yang dikelola sepenuhnya yang memberikan kinerja yang cepat dan dapat diprediksi dengan skalabilitas yang mulus.

  • Amazon DynamoDB Streams - DynamoDB Streams menangkap urutan urutan waktu modifikasi tingkat item dalam tabel DynamoDB apa pun. Kemudian menyimpan informasi ini dalam log hingga 24 jam. Enkripsi saat istirahat mengenkripsi data dalam DynamoDB streams.

  • AWS Lambda — AWS Lambda adalah layanan komputasi yang mendukung menjalankan kode tanpa menyediakan atau mengelola server. Lambda menjalankan kode Anda hanya saat diperlukan dan menskalakan secara otomatis, dari beberapa permintaan per hari hingga ribuan per detik. Anda hanya membayar untuk waktu komputasi yang Anda gunakan—tidak ada biaya saat kode Anda tidak berjalan.

  • AWS Management Console — AWS Management Console adalah aplikasi web yang terdiri dari koleksi luas konsol layanan untuk mengelola layanan AWS.

  • Visual Studio 2019 Community Edition — Visual Studio 2019 adalah lingkungan pengembangan terintegrasi (IDE). Edisi Komunitas gratis untuk kontributor sumber terbuka. Dalam pola ini, Anda akan menggunakan Visual Studio 2019 Community Edition untuk membuka, mengkompilasi, dan menjalankan kode contoh. Untuk melihat saja, Anda dapat menggunakan editor teks atau Kode Visual Studio.

  • AWS Toolkit for Visual Studio — AWS Toolkit for Visual Studio adalah plugin untuk Visual Studio IDE. AWS Toolkit for Visual Studio memudahkan Anda mengembangkan, men-debug, dan menerapkan aplikasi.NET yang menggunakan layanan AWS.

Kode

Kode contoh terlampir. Untuk petunjuk tentang penerapan kode contoh, lihat bagian Epik.

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Buka solusinya.

  1. Unduh contoh kode sumber (CQRS-ES Code.zip) dari bagian Lampiran, dan ekstrak file.

  2. Di Visual Studio IDE, pilih File, Open, Project Solution, dan navigasikan ke folder tempat Anda mengekstrak kode sumber.

  3. Pilih AWS.apg.cqrses.sln, lalu pilih Buka. Seluruh solusi dimuat ke Visual Studio.

Pengembang aplikasi

Bangun solusinya.

Buka menu konteks (klik kanan) untuk solusinya, lalu pilih Build Solution. Ini akan membangun dan mengkompilasi semua proyek dalam solusi. Itu harus berhasil dikompilasi.

Visual Studio Solution Explorer harus menunjukkan struktur direktori.

  • CQRS On-Premises Code Sampleberisi contoh penggunaan CQRS di tempat.

  • CQRS AWS Serverlessberisi semua kode contoh CQRS dan sumber peristiwa menggunakan layanan tanpa server AWS.

Pengembang aplikasi
TugasDeskripsiKeterampilan yang dibutuhkan

Berikan kredensyal.

Jika Anda belum memiliki kunci akses, lihat video di bagian Sumber daya terkait.

  1. Di Solution Explorer, perluas CQRS AWS Serverless, lalu perluas folder solusi Build.

  2. Perluas proyek AWS.apg.cqrses.Build dan lihat file. Program.cs

  3. Gulir ke atas Program.cs dan cariProgram().

  4. Ganti YOUR ACCESS KEY dengan kunci akses akun Anda, dan ganti YOUR SECRET KEY dengan kunci rahasia akun Anda. Perhatikan bahwa dalam lingkungan produksi, Anda tidak akan melakukan hardcode kunci Anda. Sebagai gantinya, Anda dapat menggunakan AWS Secrets Manager untuk menyimpan dan mengambil kredensialnya.

Pengembang aplikasi, Insinyur data, DBA

Bangun proyek.

Untuk membangun proyek, buka menu konteks (klik kanan) untuk proyek AWS.apg.cqrses.Build, lalu pilih Build.

Pengembang aplikasi, Insinyur data, DBA

Bangun dan isi tabel.

Untuk membuat tabel dan mengisinya dengan data benih, buka menu konteks (klik kanan) untuk proyek AWS.apg.cqrses.Build, lalu pilih Debug, Start New Instance.

Pengembang aplikasi, Insinyur data, DBA

Verifikasi konstruksi tabel dan data.

Untuk memverifikasi, navigasikan ke AWS Explorer, dan perluas Amazon DynamoDB. Ini harus menampilkan tabel. Buka setiap tabel untuk menampilkan contoh data.

Pengembang aplikasi, Insinyur data, DBA
TugasDeskripsiKeterampilan yang dibutuhkan

Membangun proyek CQRS.

  1. Buka solusinya, dan arahkan ke folder Services/CQRS/Tests solusi CQRS AWS.

  2. Di AWS.APG.CQRSES. CQRSLambda.Tests proyek, buka BaseFunctionTest.cs, dan ganti AccessKeydan SecretKeydengan kunci IAM yang Anda buat.

  3. Simpan perubahan.

  4. Untuk mengkompilasi dan membangun proyek pengujian, buka menu konteks (klik kanan) untuk proyek, lalu pilih Build.

Pengembang aplikasi, Insinyur uji

Bangun proyek sumber acara.

  1. Arahkan ke folder solusi Services/Event Sumber/Pengujian AWS CQRS

  2. Di AWS.APG.CQRSES. EventSourceLambda.Tests proyek, buka BaseFunctionTest.cs, dan ganti AccessKeydan SecretKeydengan kunci IAM yang Anda buat. 

  3. Simpan perubahan.

  4. Untuk mengkompilasi dan membangun proyek pengujian, buka menu konteks (klik kanan) untuk proyek, lalu pilih Build.

Pengembang aplikasi, Insinyur uji

Jalankan tes.

Untuk menjalankan semua pengujian, pilih View, Test Explorer, lalu pilih Run All Tests In View. Semua tes harus lulus, yang ditunjukkan oleh ikon tanda centang hijau. 

Pengembang aplikasi, Insinyur uji
TugasDeskripsiKeterampilan yang dibutuhkan

Publikasikan fungsi Lambda pertama.

  1. Di Solution Explorer, buka menu konteks (klik kanan) untuk AWS.APG.CQRSES. CommandCreateLambda project, lalu pilih Publish to AWS Lambda.

  2. Pilih profil yang ingin Anda gunakan dan Wilayah AWS tempat Anda ingin menerapkan fungsi Lambda, dan nama fungsi.

  3. Untuk bidang yang tersisa, pertahankan nilai default, dan pilih Berikutnya.

  4. Dalam daftar dropdown Nama Peran, pilih. AWSLambdaFullAccess

  5. Untuk memberikan kunci akun Anda, pilih Tambah, dan masukkan AcessKey sebagai variabel dan kunci akses Anda sebagai nilai. Kemudian pilih Tambah lagi, masukkan SecretKey sebagai variabel dan kunci rahasia Anda sebagai nilainya.

  6. Untuk bidang yang tersisa, pertahankan nilai default, dan pilih Unggah. Setelah fungsi uji Lambda diunggah, itu muncul di Visual Studio secara otomatis.

  7. Ulangi langkah 1-6 untuk proyek-proyek berikut:

    • AWS.APG.CQRSES. CommandDeleteLambda

    • AWS.APG.CQRSES. CommandUpdateLambda

    • AWS.APG.CQRSES. CommandAddRewardLambda

    • AWS.APG.CQRSES. CommandRedeemRewardLambda

    • AWS.APG.CQRSES. QueryCustomerListLambda

    • AWS.APG.CQRSES. QueryRewqardLambda

Pengembang aplikasi, DevOps insinyur

Verifikasi fungsi upload.

(Opsional) Anda dapat memverifikasi bahwa fungsi berhasil dimuat dengan menavigasi ke AWS Explorer dan memperluas AWS Lambda. Untuk membuka jendela pengujian, pilih fungsi Lambda (klik dua kali).

Pengembang aplikasi, DevOps insinyur

Uji fungsi Lambda.

  1. Masukkan data permintaan, atau salin contoh data permintaan dari Data uji di bagian Informasi tambahan. Pastikan Anda memilih data yang untuk fungsi yang Anda uji.

  2. Untuk menjalankan pengujian, pilih Invoke. Respons dan kesalahan apa pun ditampilkan di kotak teks Respons, dan log ditampilkan di kotak teks Log atau di CloudWatch Log.

  3. Untuk memverifikasi data, di AWS Explorer, pilih tabel DynamoDB (klik dua kali).

Semua proyek Lambda CQRS ditemukan di bawah folder dan solusi. CQRS AWS Serverless\CQRS\Command Microservice  CQRS AWS Serverless\CQRS\Command Microservice Untuk direktori solusi dan proyek, lihat Direktori kode sumber di bagian Informasi tambahan.

Pengembang aplikasi, DevOps insinyur

Publikasikan fungsi yang tersisa.

Ulangi langkah sebelumnya untuk proyek-proyek berikut:

  • AWS.APG.CQRSES. CommandDeleteLambda

  • AWS.APG.CQRSES. CommandUpdateLambda

  • AWS.APG.CQRSES. CommandAddRewardLambda

  • AWS.APG.CQRSES. CommandRedeemRewardLambda

  • AWS.APG.CQRSES. QueryCustomerListLambda

  • AWS.APG.CQRSES. QueryRewqardLambda

Pengembang aplikasi, DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Publikasikan penangan acara Pelanggan dan Hadiah Lambda.

Untuk mempublikasikan setiap event handler, ikuti langkah-langkah dalam epik sebelumnya.

Proyek-proyek berada di bawah folder CQRS AWS Serverless\Event Source\Reward Event solusi CQRS AWS Serverless\Event Source\Customer Event dan. Untuk informasi selengkapnya, lihat Direktori kode sumber di bagian Informasi tambahan.

Pengembang aplikasi

Lampirkan pendengar acara Lambda sumber acara.

  1. Masuk ke AWS Management Console menggunakan akun yang sama yang Anda gunakan saat memublikasikan project Lambda.

  2. Untuk Wilayah, pilih US East 1 atau Wilayah tempat Anda menerapkan fungsi Lambda di epik sebelumnya.

  3. Arahkan ke layanan Lambda.

  4. Pilih fungsi EventSourceCustomer Lambda.

  5. Pilih Tambahkan Pemicu.

  6. Dalam daftar dropdown konfigurasi Trigger, pilih DynamoDB.

  7. Dalam daftar dropdown tabel DynamoDB, pilih. cqrses-customer-cmd

  8. Dalam daftar dropdown posisi awal, pilih Trim horizon dari. Trim horizon berarti bahwa pemicu DynamoDB akan mulai membaca pada catatan aliran terakhir (tidak dipangkas), yang merupakan catatan tertua di pecahan.

  9. Pilih kotak centang Aktifkan pemicu.

  10. Untuk bidang yang tersisa, pertahankan nilai default, dan pilih Tambah.

Setelah pendengar berhasil dilampirkan ke tabel DynamoDB, itu akan ditampilkan di halaman desainer Lambda.

Pengembang aplikasi

Publikasikan dan lampirkan fungsi EventSourceReward Lambda.

Untuk mempublikasikan dan melampirkan fungsi EventSourceReward Lambda, ulangi langkah-langkah dalam dua cerita sebelumnya, pilih cqrses-reward-cmddari daftar dropdown tabel DynamoDB.

Pengembang aplikasi
TugasDeskripsiKeterampilan yang dibutuhkan

Uji aliran dan pemicu Lambda.

  1. Di Visual Studio, navigasikan ke AWS Explorer.

  2. Perluas AWS Lambda, dan pilih CommandRedeemRewardfungsinya (klik dua kali). Di jendela fungsi yang terbuka, Anda dapat menguji fungsinya.

  3. Di kotak teks Permintaan, masukkan data permintaan dalam format JavaScript Object Notation (JSON). Untuk permintaan contoh, lihat Menguji data di bagian Informasi tambahan.

  4. Pilih Panggil.

Pengembang aplikasi

Validasi, menggunakan tabel query reward DynamoddB.

  1. Buka cqrses-reward-querymeja.

  2. Periksa poin pelanggan yang menukarkan hadiah. Poin yang ditukarkan harus dikurangi dari total poin agregat pelanggan.

Pengembang aplikasi

Validasi, menggunakan CloudWatch Log.

  1. Arahkan ke CloudWatch dan pilih Grup log.

  2. Grup/aws/lambda/EventSourceRewardlog berisi log untuk EventSourceReward pemicu. Semua panggilan Lambda dicatat, termasuk pesan yang Anda tempatkan context.Logger.LogLine dan Console.Writeline dalam kode Lambda.

Pengembang aplikasi

Validasi EventSourceCustomer pemicunya.

Untuk memvalidasi EventSourceCustomer pemicu, ulangi langkah-langkah dalam epik ini, menggunakan tabel dan CloudWatch log pelanggan masing-masing EventSourceCustomer pemicu.

Pengembang aplikasi

Sumber daya terkait

Referensi

Video

Informasi tambahan

CQRS dan sumber acara

CQRS

Pola CQRS memisahkan model operasi konseptual tunggal, seperti objek akses data tunggal CRUD (create, read, update, delete) model, ke dalam model operasi perintah dan query. Model perintah mengacu pada operasi apa pun, seperti membuat, memperbarui, atau menghapus, yang mengubah status. Model query mengacu pada setiap operasi yang mengembalikan nilai.

Arsitektur dengan antarmuka layanan, model CRUD, dan database.
  1. Model CRUD Pelanggan mencakup antarmuka berikut:

    • Create Customer()

    • UpdateCustomer()

    • DeleteCustomer()

    • AddPoints()

    • RedeemPoints()

    • GetVIPCustomers()

    • GetCustomerList()

    • GetCustomerPoints()

Karena kebutuhan Anda menjadi lebih kompleks, Anda dapat beralih dari pendekatan model tunggal ini. CQRS menggunakan model perintah dan model kueri untuk memisahkan tanggung jawab untuk menulis dan membaca data. Dengan begitu, data dapat dikelola dan dikelola secara independen. Dengan pemisahan tanggung jawab yang jelas, peningkatan untuk setiap model tidak memengaruhi yang lain. Pemisahan ini meningkatkan pemeliharaan dan kinerja, dan mengurangi kompleksitas aplikasi saat tumbuh.

Aplikasi dipisahkan menjadi model perintah dan kueri, berbagi database tunggal.

  1. Antarmuka dalam model Customer Command:

    • Create Customer()

    • UpdateCustomer()

    • DeleteCustomer()

    • AddPoints()

    • RedeemPoints()

  2. Antarmuka dalam model Customer Query:

    • GetVIPCustomers()

    • GetCustomerList()

    • GetCustomerPoints()

    • GetMonthlyStatement()

Misalnya kode, lihat Direktori kode sumber.

Pola CQRS kemudian memisahkan database. Decoupling ini mengarah pada independensi total setiap layanan, yang merupakan bahan utama arsitektur microservice.

Database terpisah untuk model perintah dan kueri.

Dengan menggunakan CQRS di AWS Cloud, Anda dapat mengoptimalkan setiap layanan lebih lanjut. Misalnya, Anda dapat mengatur pengaturan komputasi yang berbeda atau memilih antara layanan mikro tanpa server atau berbasis kontainer. Anda dapat mengganti caching lokal dengan Amazon. ElastiCache Jika memiliki publish/subscribe pesan lokal, Anda dapat menggantinya dengan Amazon Simple Notification Service (Amazon SNS). Selain itu, Anda dapat memanfaatkan pay-as-you-go harga dan beragam layanan AWS yang Anda bayar hanya untuk apa yang Anda gunakan.

CQRS mencakup manfaat berikut:

  • Penskalaan independen — Setiap model dapat memiliki strategi penskalaan yang disesuaikan untuk memenuhi persyaratan dan permintaan layanan. Mirip dengan aplikasi berkinerja tinggi, memisahkan baca dan tulis memungkinkan model untuk menskalakan secara independen untuk memenuhi setiap permintaan. Anda juga dapat menambah atau mengurangi sumber daya komputasi untuk mengatasi permintaan skalabilitas dari satu model tanpa mempengaruhi yang lain.

  • Pemeliharaan independen - Pemisahan model kueri dan perintah meningkatkan pemeliharaan model. Anda dapat membuat perubahan kode dan penyempurnaan ke satu model tanpa mempengaruhi yang lain.

  • Keamanan — Lebih mudah menerapkan izin dan kebijakan untuk memisahkan model untuk dibaca dan ditulis.

  • Bacaan yang dioptimalkan - Anda dapat menentukan skema yang dioptimalkan untuk kueri. Misalnya, Anda dapat menentukan skema untuk data agregat dan skema terpisah untuk tabel fakta.

  • Integrasi — CQRS cocok dengan model pemrograman berbasis acara.

  • Kompleksitas terkelola - Pemisahan menjadi model kueri dan perintah cocok untuk domain yang kompleks.

Saat menggunakan CQRS, ingatlah peringatan berikut:

  • Pola CQRS hanya berlaku untuk bagian tertentu dari aplikasi dan bukan seluruh aplikasi. Jika diterapkan pada domain yang tidak sesuai dengan pola, dapat mengurangi produktivitas, meningkatkan risiko, dan menimbulkan kompleksitas.

  • Pola ini bekerja paling baik untuk model yang sering digunakan yang memiliki operasi baca dan tulis ketidakseimbangan.

  • Untuk aplikasi read-heavy, seperti laporan besar yang membutuhkan waktu untuk diproses, CQRS memberi Anda opsi untuk memilih database yang tepat dan membuat skema untuk menyimpan data agregat Anda. Ini meningkatkan waktu respons membaca dan melihat laporan dengan memproses data laporan hanya satu kali dan membuangnya dalam tabel agregat.

  • Untuk aplikasi berat tulis, Anda dapat mengonfigurasi database untuk operasi penulisan dan memungkinkan layanan mikro perintah untuk menskalakan secara independen ketika permintaan untuk menulis meningkat. Sebagai contoh, lihat AWS.APG.CQRSES.CommandRedeemRewardLambda dan AWS.APG.CQRSES.CommandAddRewardLambda layanan mikro.

Sumber acara

Langkah selanjutnya adalah menggunakan sumber acara untuk menyinkronkan database kueri saat perintah dijalankan. Misalnya, pertimbangkan peristiwa-peristiwa berikut:

  • Poin hadiah pelanggan ditambahkan yang mengharuskan total atau poin hadiah gabungan pelanggan dalam database kueri diperbarui.

  • Nama belakang pelanggan diperbarui dalam database perintah, yang mengharuskan informasi pelanggan pengganti dalam database kueri diperbarui.

Dalam model CRUD tradisional, Anda memastikan konsistensi data dengan mengunci data hingga menyelesaikan transaksi. Dalam sumber acara, data disinkronkan melalui penerbitan serangkaian acara yang akan dikonsumsi oleh pelanggan untuk memperbarui data masing-masing.

Pola sumber peristiwa memastikan dan mencatat serangkaian tindakan lengkap yang diambil pada data dan menerbitkannya melalui serangkaian peristiwa. Peristiwa ini mewakili serangkaian perubahan pada data yang harus diproses oleh pelanggan acara tersebut agar catatan mereka diperbarui. Peristiwa ini dikonsumsi oleh pelanggan, menyinkronkan data pada database pelanggan. Dalam hal ini, itulah database query.

Diagram berikut menunjukkan sumber peristiwa yang digunakan dengan CQRS di AWS.

Arsitektur layanan mikro untuk CQRS dan pola sumber acara menggunakan layanan tanpa server AWS.
  1. Fungsi Command Lambda melakukan operasi tulis, seperti membuat, memperbarui, atau menghapus, pada database.

  2. Fungsi Query Lambda melakukan operasi baca, seperti dapatkan atau pilih, pada database.

  3. Fungsi Lambda ini memproses aliran DynamoDB dari database Command dan memperbarui database Query untuk perubahan. Anda juga dapat menggunakan fungsi ini juga untuk mempublikasikan pesan ke Amazon SNS sehingga pelanggannya dapat memproses data.

  4. (Opsional) Pelanggan acara Lambda memproses pesan yang diterbitkan oleh Amazon SNS dan memperbarui database Kueri.

  5. (Opsional) Amazon SNS mengirimkan pemberitahuan email tentang operasi tulis.

Di AWS, database kueri dapat disinkronkan oleh DynamoDB Streams. DynamoDB menangkap urutan modifikasi tingkat item yang diurutkan waktu dalam tabel DynamoBDB dalam waktu nyaris nyata dan tahan lama menyimpan informasi dalam waktu 24 jam.

Mengaktifkan DynamoDB Streams memungkinkan database untuk mempublikasikan urutan peristiwa yang memungkinkan pola sumber peristiwa. Pola sumber acara menambahkan pelanggan acara. Aplikasi pelanggan acara mengkonsumsi acara dan memprosesnya tergantung pada tanggung jawab pelanggan. Pada diagram sebelumnya, pelanggan acara mendorong perubahan ke database Query DynamoDB untuk menjaga data tetap disinkronkan. Penggunaan Amazon SNS, broker pesan, dan aplikasi pelanggan acara membuat arsitektur dipisahkan.

Sumber acara mencakup manfaat berikut:

  • Konsistensi untuk data transaksional

  • Jejak audit yang andal dan riwayat tindakan, yang dapat digunakan untuk memantau tindakan yang diambil dalam data

  • Memungkinkan aplikasi terdistribusi seperti microservices untuk menyinkronkan data mereka di seluruh lingkungan

  • Publikasi acara yang andal setiap kali negara berubah

  • Rekonstruksi atau pemutaran ulang keadaan masa lalu

  • Entitas yang digabungkan secara longgar yang bertukar peristiwa untuk migrasi dari aplikasi monolitik ke layanan mikro

  • Pengurangan konflik yang disebabkan oleh pembaruan bersamaan; sumber acara menghindari persyaratan untuk memperbarui objek secara langsung di penyimpanan data

  • Fleksibilitas dan ekstensibilitas dari memisahkan tugas dan acara

  • Pembaruan sistem eksternal

  • Manajemen beberapa tugas dalam satu acara

Saat menggunakan sumber acara, ingatlah peringatan berikut:

  • Karena ada beberapa keterlambatan dalam memperbarui data antara database pelanggan sumber, satu-satunya cara untuk membatalkan perubahan adalah dengan menambahkan acara kompensasi ke toko acara.

  • Menerapkan sumber acara memiliki kurva pembelajaran karena gaya pemrogramannya yang berbeda.

Data uji

Gunakan data pengujian berikut untuk menguji fungsi Lambda setelah penerapan berhasil.

CommandCreate Pelanggan

{ "Id":1501, "Firstname":"John", "Lastname":"Done", "CompanyName":"AnyCompany", "Address": "USA", "VIP":true }

CommandUpdate Pelanggan

{ "Id":1501, "Firstname":"John", "Lastname":"Doe", "CompanyName":"Example Corp.", "Address": "Seattle, USA", "VIP":true }

CommandDelete Pelanggan

Masukkan ID pelanggan sebagai data permintaan. Misalnya, jika ID pelanggan adalah 151, masukkan 151 sebagai data permintaan.

151

QueryCustomerList

Ini kosong. Ketika dipanggil, itu akan mengembalikan semua pelanggan.

CommandAddReward

Ini akan menambah 40 poin untuk pelanggan dengan ID 1 (Richard).

{ "Id":10101, "CustomerId":1, "Points":40 }

CommandRedeemReward

Ini akan mengurangi 15 poin untuk pelanggan dengan ID 1 (Richard).

{ "Id":10110, "CustomerId":1, "Points":15 }

QueryReward

Masukkan ID pelanggan. Misalnya, masukkan 1 untuk Richard, 2 untuk Arnav, dan 3 untuk Shirley.

2

Direktori kode sumber

Gunakan tabel berikut sebagai panduan untuk struktur direktori solusi Visual Studio. 

Direktori solusi Contoh Kode Lokal CQRS

Direktori solusi dengan layanan Command dan Query diperluas.

Model CRUD pelanggan

Contoh Kode Lokal CQRS\ Model CRUD\ Proyek AWS.APG.CQRSES.DAL

Versi CQRS dari model CRUD Pelanggan

  • Perintah pelanggan: CQRS On-Premises Code Sample\CQRS Model\Command Microservice\AWS.APG.CQRSES.Command proyek

  • Permintaan pelanggan: CQRS On-Premises Code Sample\CQRS Model\Query Microservice\AWS.APG.CQRSES.Query proyek

Layanan mikro Command dan Query

Layanan mikro Command berada di bawah folder CQRS On-Premises Code Sample\CQRS Model\Command Microservice solusi:

  • AWS.APG.CQRSES.CommandMicroserviceProyek API ASP.NET Core bertindak sebagai titik masuk di mana konsumen berinteraksi dengan layanan.

  • AWS.APG.CQRSES.Command.NET Core adalah objek yang menampung objek dan antarmuka yang berhubungan dengan perintah.

Layanan mikro kueri ada di bawah folder CQRS On-Premises Code Sample\CQRS Model\Query Microservice solusi:

  • AWS.APG.CQRSES.QueryMicroserviceProyek API ASP.NET Core bertindak sebagai titik masuk di mana konsumen berinteraksi dengan layanan.

  • AWS.APG.CQRSES.Query.NET Core adalah objek yang menampung objek dan antarmuka terkait kueri.

Direktori solusi kode tanpa server CQRS AWS

Direktori solusi yang menampilkan layanan mikro dan sumber acara diperluas.

Kode ini adalah versi AWS dari kode lokal yang menggunakan layanan tanpa server AWS.

Dalam C# .NET Core, setiap fungsi Lambda diwakili oleh satu proyek .NET Core. Dalam contoh kode pola ini, ada proyek terpisah untuk setiap antarmuka dalam model perintah dan kueri.

CQRS menggunakan layanan AWS

Anda dapat menemukan direktori solusi root untuk CQRS menggunakan layanan tanpa server AWS ada di folder. CQRS AWS Serverless\CQRS Contohnya mencakup dua model: Pelanggan dan Hadiah.

Perintah Lambda berfungsi untuk Pelanggan dan Hadiah berada di bawah CQRS\Command Microservice\Customer dan CQRS\Command Microservice\Reward folder. Mereka berisi proyek Lambda berikut:

  • Perintah pelanggan:CommandCreateLambda,CommandDeleteLambda, dan CommandUpdateLambda

  • Perintah hadiah: CommandAddRewardLambda dan CommandRedeemRewardLambda

Fungsi Lambda kueri untuk Pelanggan dan Hadiah ditemukan di bawah folder CQRS\Query Microservice\Customer danCQRS\QueryMicroservice\Reward. Mereka berisi proyek QueryCustomerListLambda dan QueryRewardLambda Lambda.

Proyek uji CQRS

Proyek pengujian ada di bawah CQRS\Tests folder. Proyek ini berisi skrip pengujian untuk mengotomatiskan pengujian fungsi Lambda CQRS.

Sumber acara menggunakan layanan AWS

Penangan peristiwa Lambda berikut diprakarsai oleh aliran DynamoDB Pelanggan dan Reward untuk memproses dan menyinkronkan data dalam tabel kueri.

  • Fungsi EventSourceCustomer Lambda dipetakan ke aliran cqrses-customer-cmd DynamoDB tabel Pelanggan ().

  • Fungsi EventSourceReward Lambda dipetakan ke aliran cqrses-reward-cmd DynamoDB tabel Reward ().

Lampiran

Untuk mengakses konten tambahan yang terkait dengan dokumen ini, unzip file berikut: attachment.zip