Mendesain model data untuk infrastruktur modern membutuhkan perubahan mendasar dalam berpikir. Diagram Hubungan Entitas (ERD) tradisional berjalan baik untuk arsitektur monolitik, di mana satu instance basis data mengelola semua transaksi. Namun, seiring sistem berkembang menjadi lingkungan terdistribusi, aturan integritas data dan pemetaan hubungan berubah secara signifikan. Panduan ini mengeksplorasi pola ERD lanjutan yang secara khusus dirancang untuk sistem transaksi terdistribusi yang kompleks. Kami akan meninjau bagaimana memodelkan konsistensi, mengelola status di antara layanan, serta memvisualisasikan ketergantungan tanpa bergantung pada produk perangkat lunak tertentu.
Dalam konteks terdistribusi, batas antara kepemilikan data menjadi tidak tetap. Sebuah entitas mungkin ada di beberapa penyimpanan logis, yang mengharuskan definisi jelas tentang bagaimana hubungan dipertahankan. Dokumen ini menyediakan pendekatan terstruktur untuk memodelkan kompleksitas ini.

🧠 Dampak Arsitektur Terdistribusi terhadap Pemodelan Data
Sebelum masuk ke pola-pola tertentu, sangat penting untuk memahami batasan yang diberlakukan oleh batas jaringan. Dalam pengaturan monolitik, batasan kunci asing menjamin integritas referensial. Dalam sistem terdistribusi, latensi jaringan dan kemungkinan pemisahan jaringan berarti konsistensi langsung sering kali tidak mungkin atau terlalu mahal.
- Pemisahan Jaringan: Teorema CAP menentukan bahwa dalam kejadian pemisahan jaringan, Anda harus memilih antara Konsistensi dan Ketersediaan.
- Kepemilikan Data:Layanan harus memiliki data mereka sendiri untuk mencegah keterikatan erat. Ini membatasi hubungan kunci asing langsung di antara batas layanan.
- Batas Transaksi:Transaksi global yang melintasi beberapa basis data umumnya tidak disarankan karena risiko kinerja dan keandalan.
Ketika membuat ERD untuk lingkungan ini, diagram harus mencerminkan hubungan logis, bukan hanya batasan fisik. Representasi visual perlu menyampaikan di mana data berada dan bagaimana sinkronisasi dilakukan.
🔗 Mengelola Integritas Referensial Tanpa Kunci Asing
Dalam sistem transaksi terdistribusi, kunci asing fisik sering tidak ada. Sebaliknya, hubungan logis ditegakkan melalui logika aplikasi atau peristiwa asinkron. ERD harus menangkap hubungan logis ini dengan jelas.
1. Referensi Identifikasi Logis
Alih-alih batasan kunci fisik, model menggunakan identifikasi unik. Saat menggambar diagram, tunjukkan bahwa hubungan tersebut merupakan tautan logis.
- Gunakan garis putus-putus untuk mewakili ketergantungan logis.
- Beri label hubungan sebagai ‘Referensi’ alih-alih ‘Batasan’.
- Tentukan tipe data dari ID untuk memastikan keamanan tipe dalam skema.
2. Referensi Lembut
Penghapusan permanen berisiko dalam sistem terdistribusi. Pola umum melibatkan penandaan rekaman sebagai dihapus alih-alih menghapusnya. ERD harus mencakup bidang status.
- Sertakan sebuah
is_activeataustatuskolom. - Dokumentasikan siklus hidup entitas dalam catatan diagram.
- Jelaskan bagaimana rekaman yang terpisah ditangani selama kejadian penghapusan.
3. Pemodelan Konsistensi Akhir
Ketika data direplikasi di antara layanan, konsistensi tidak segera terjadi. ERD harus memvisualisasikan keterlambatan replikasi.
- Tandai entitas yang merupakan salinan hanya-baca.
- Bedakan antara “Sumber Kebenaran” dan “Versi yang Dicache”.
- Tunjukkan mekanisme yang digunakan untuk menyinkronkan perubahan (misalnya, Change Data Capture).
⚡ Pemodelan Pola Saga
Pola Saga merupakan fondasi dari transaksi terdistribusi. Pola ini mengelola operasi yang berjalan lama dengan memecah transaksi menjadi urutan transaksi lokal. Setiap transaksi lokal memperbarui data dalam layanan tertentu dan memicu langkah berikutnya.
1. Mewakili Mesin Status
Karena Saga bergantung pada status, ERD harus secara eksplisit memodelkan transisi status dari proses tersebut.
- Buat sebuah
SagaInstanceentitas. - Tentukan status seperti
DIMULAI,SEDANG MENYELESAIKAN,SEDANG MENGKOMPENSASI, danSELESAI. - Hubungkan Instance Saga dengan entitas bisnis tertentu yang dipengaruhi.
2. Transaksi Kompensasi
Jika suatu langkah gagal, Saga harus membatalkan langkah-langkah sebelumnya. Diagram harus menunjukkan hubungan terbalik.
- Dokumentasikan tindakan kompensasi untuk setiap langkah.
- Pastikan tabel
SagaLogmenangkap riwayat semua langkah. - Tampilkan jalur pembatalan sebagai garis hubungan terpisah.
3. Pemicu Peristiwa
Saga sering didorong oleh peristiwa. ERD perlu menunjukkan bagaimana peristiwa memicu perubahan status.
- Sertakan sebuah
Log Peristiwatabel. - Peta peristiwa ke transisi status Saga tertentu.
- Tunjukkan layanan mana yang mengonsumsi peristiwa mana.
📊 Membandingkan Pola Konsistensi
Memahami pertukaran antara berbagai model konsistensi sangat penting untuk desain ERD yang akurat. Tabel di bawah ini menjelaskan karakteristik dari pola-pola umum.
| Pola | Tingkat Konsistensi | Kompleksitas ERD | Kasus Penggunaan Terbaik |
|---|---|---|---|
| Dua Fase Komitmen | Kuat | Rendah | Koordinasi layanan internal |
| Orkestrasi Saga | Akhirnya | Tinggi | Proses bisnis yang berjalan lama |
| Koreografi Saga | Akhirnya | Sedang | Microservices yang terhubung longgar |
| Model Baca CQRS | Akhirnya | Sedang | Beban kerja baca tinggi |
| Sumber Peristiwa | Kuat (Per Agregat) | Tinggi | Jejak audit dan pemulihan status |
🔄 Pemisahan Tanggung Jawab Perintah dan Query (CQRS)
CQRS memisahkan model baca dan tulis. Ini berarti ERD untuk sisi tulis akan berbeda secara signifikan dari ERD untuk sisi baca.
1. Desain Model Tulis
Model tulis berfokus pada integritas data dan aturan bisnis.
- Normalisasi data untuk mengurangi redundansi.
- Terapkan aturan validasi ketat pada pembuatan.
- Pertahankan skema yang kaku untuk mencegah kesalahan logis.
2. Desain Model Baca
Model baca berfokus pada kinerja dan kecepatan query.
- Denormalisasi data untuk menghindari join.
- Sertakan bidang yang telah digabung sebelumnya untuk query umum.
- Struktur tabel berdasarkan kebutuhan antarmuka pengguna daripada logika.
3. Mekanisme Sinkronisasi
ERD harus menunjukkan bagaimana model tulis memperbarui model baca.
- Gunakan entitas proyeksi untuk memetakan aliran.
- Dokumentasikan penundaan antara ketersediaan tulis dan baca.
- Sertakan proses rekonsiliasi untuk pergeseran data.
🗂️ Sharding dan Kunci Partisi
Skalabilitas sering membutuhkan pembagian data di antara beberapa node. ERD harus mencerminkan bagaimana data didistribusikan untuk memastikan pencarian yang efisien.
1. Mengidentifikasi Kunci Sharding
Kunci sharding menentukan node mana yang menyimpan data.
- Tandai kunci sharding dengan jelas dalam definisi entitas.
- Pastikan kunci ini sering digunakan dalam query.
- Hindari kunci yang menyebabkan distribusi data tidak merata.
2. Hubungan Antar-Shard
Hubungan yang melintasi shard mahal. ERD harus menyoroti ini.
- Gunakan notasi khusus untuk tautan antar-shard.
- Minimalkan jumlah hubungan yang melintasi batas shard.
- Pertimbangkan denormalisasi untuk menghindari join antar-shard.
3. Indeks Global vs. Lokal
Strategi pengindeksan berbeda tergantung pada model pembagian data.
- Indeks lokal efisien untuk kueri pada satu shard.
- Indeks global memerlukan pemindaian semua shard, yang memengaruhi kinerja.
- Dokumentasikan indeks mana yang lokal dan mana yang global.
📜 Sumber Acara dan Status yang Tidak Dapat Diubah
Sumber acara menyimpan status entitas sebagai urutan acara. Ini mengubah cara ERD merepresentasikan entitas itu sendiri.
1. Penyimpanan Acara
Entitas utama menjadi Log Acara.
- Buat sebuah
EventStreamtabel. - Simpan metadata seperti
event_id,timestamp, danaggregate_id. - Pastikan payload disimpan sebagai data terstruktur.
2. Agregat
Agregat adalah entitas utama yang memicu acara.
- Hubungkan ID Agregat dengan Aliran Acara.
- Jangan menyimpan status saat ini sebagai kolom.
- Bangun kembali status dengan memutar ulang acara dari log.
3. Pengambilan Cuplikan
Untuk mengoptimalkan kinerja, cuplikan dari status saat ini dapat disimpan.
- Buat sebuah
Snapshottabel. - Hubungkan cuplikan dengan ID Agregat.
- Dokumentasikan nomor versi untuk snapshot.
🛡️ Kesalahan Umum dan Pola Buruk
Bahkan dengan pola canggih, kesalahan bisa terjadi. Mengenali pola buruk membantu menjaga kesehatan sistem.
- Keterikatan Keras:Hindari merujuk entitas dari layanan lain secara langsung. Gunakan ID alih-alih.
- Ketergantungan Siklik:Pastikan Entity A tidak tergantung pada Entity B jika Entity B tergantung pada Entity A.
- Normalisasi Berlebihan:Pada sistem yang banyak membaca, normalisasi berlebihan menyebabkan kinerja menurun.
- Mengabaikan Zona Waktu:Sistem terdistribusi beroperasi secara global. Simpan timestamp dalam UTC.
- Kehilangan Idempotensi:Pastikan operasi dapat diulang tanpa efek samping.
🔄 Evolusi Skema dan Versi
Sistem terdistribusi berkembang lebih cepat daripada monolit. ERD harus mendukung perubahan skema tanpa merusak layanan yang sudah ada.
1. Kompatibilitas Mundur
Perubahan pada skema tidak boleh merusak konsumen.
- Hanya tambahkan bidang, jangan pernah menghapus atau mengganti nama bidang yang sudah ada secara langsung.
- Tandai bidang sebagai usang secara bertahap seiring waktu.
- Versikan kontrak API bersamaan dengan skema.
2. Strategi Migrasi
Menangani migrasi data di lingkungan produksi memerlukan kehati-hatian.
- Gunakan pola perluasan dan kontraksi untuk penyebaran.
- Pastikan skema lama tetap dapat dibaca selama transisi.
- Dokumentasikan rencana pengembalian untuk migrasi yang gagal.
🖼️ Memvisualisasikan Ketergantungan Antar-Layanan
ERD standar menunjukkan tabel dalam satu basis data. ERD terdistribusi harus menunjukkan layanan.
1. Batas Layanan
Kelompokkan tabel berdasarkan layanan yang memiliki mereka.
- Gunakan wadah yang berbeda untuk setiap layanan.
- Beri label pada container dengan nama layanan.
- Tampilkan aliran data antar container menggunakan panah.
2. Aliran Data
Tunjukkan bagaimana data bergerak antar layanan.
- Gunakan garis padat untuk pemanggilan sinkron.
- Gunakan garis putus-putus untuk kejadian asinkron.
- Beri label pada arah aliran data.
3. Titik Integrasi
Identifikasi di mana layanan berinteraksi.
- Soroti gateway API dalam diagram.
- Tandai broker pesan sebagai perantara.
- Dokumentasikan protokol yang digunakan untuk setiap integrasi.
🏁 Pertimbangan Akhir untuk Perancang Sistem
Merancang untuk transaksi terdistribusi adalah latihan dalam mengelola kompleksitas. ERD adalah alat untuk menyampaikan kompleksitas ini kepada tim. Harus menunjukkan lebih dari sekadar tabel; harus menunjukkan logika sistem.
- Fokus pada hubungan logis daripada keterbatasan fisik.
- Dokumentasikan jaminan konsistensi untuk setiap hubungan.
- Rencanakan skenario kegagalan dalam model data.
- Jaga diagram tetap diperbarui seiring perkembangan sistem.
Dengan mengikuti pola-pola ini, Anda menciptakan gambaran kerja yang mendukung ketersediaan tinggi dan integritas data. Diagram menjadi dokumen hidup yang membimbing pengembangan dan pemeliharaan.











