{"id":14485,"date":"2026-08-07T15:44:11","date_gmt":"2026-08-07T08:44:11","guid":{"rendered":"https:\/\/crocodic.com\/?p=14485"},"modified":"2026-08-07T15:44:13","modified_gmt":"2026-08-07T08:44:13","slug":"event-driven-architecture-fondasi-sistem-real-time","status":"publish","type":"post","link":"https:\/\/crocodic.com\/en\/event-driven-architecture-fondasi-sistem-real-time\/","title":{"rendered":"Event-Driven Architecture: Fondasi Sistem Real-Time"},"content":{"rendered":"<p>Banyak sistem enterprise bekerja dengan pola yang sederhana.<\/p>\n\n\n\n<p>Aplikasi A membutuhkan informasi dari aplikasi B. Aplikasi A mengirim request. Aplikasi B memprosesnya. Aplikasi A menunggu response sebelum melanjutkan proses berikutnya.<\/p>\n\n\n\n<p>Pola tersebut dikenal sebagai&nbsp;<strong>request-response<\/strong>&nbsp;dan masih sangat tepat untuk banyak kebutuhan.<\/p>\n\n\n\n<p>Masalah mulai muncul ketika perusahaan memiliki banyak sistem dan perubahan harus diketahui oleh banyak aplikasi secara cepat.<\/p>\n\n\n\n<p>Bayangkan sebuah order baru dibuat.<\/p>\n\n\n\n<p>Informasi tersebut mungkin perlu diketahui oleh:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Sistem inventori.<\/li>\n\n\n\n<li>Warehouse.<\/li>\n\n\n\n<li>Finance.<\/li>\n\n\n\n<li>CRM.<\/li>\n\n\n\n<li>Loyalty system.<\/li>\n\n\n\n<li>Notification service.<\/li>\n\n\n\n<li>Analytics.<\/li>\n\n\n\n<li>Fraud detection.<\/li>\n\n\n\n<li>AI agent.<\/li>\n<\/ul>\n\n\n\n<p>Jika setiap sistem harus terus menerus bertanya:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u201cApakah ada order baru?\u201d<\/p>\n<\/blockquote>\n\n\n\n<p>arsitektur menjadi semakin penuh dependency dan request yang sebenarnya tidak diperlukan.<\/p>\n\n\n\n<p>Pendekatan lain adalah membuat sistem mengumumkan:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>\u201cOrder baru telah dibuat.\u201d<\/strong><\/p>\n<\/blockquote>\n\n\n\n<p>Aplikasi yang membutuhkan informasi tersebut dapat bereaksi secara independen.<\/p>\n\n\n\n<p>Inilah prinsip utama&nbsp;<strong>Event-Driven Architecture<\/strong>.<\/p>\n\n\n\n<p>Microsoft mendefinisikan event-driven architecture sebagai pola di mana event producer menghasilkan event, event consumer merespons event tersebut, dan event channel atau broker menjadi penghubung di antara keduanya. Producer dan consumer tidak perlu saling mengetahui secara langsung. (<a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/architecture\/guide\/architecture-styles\/event-driven\">Microsoft Azure Architecture Center<\/a>)<\/p>\n\n\n\n<p>Dengan kata lain:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Sistem real-time bukan sistem yang terus bertanya apakah sesuatu berubah. Sistem seharusnya mengetahui ketika perubahan terjadi.<\/strong><\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">Apa yang Dimaksud Event?<\/h2>\n\n\n\n<p>Event adalah fakta bahwa sesuatu telah terjadi.<\/p>\n\n\n\n<p>Contohnya:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>OrderCreated<\/code><\/li>\n\n\n\n<li><code>PaymentConfirmed<\/code><\/li>\n\n\n\n<li><code>StockUpdated<\/code><\/li>\n\n\n\n<li><code>CustomerRegistered<\/code><\/li>\n\n\n\n<li><code>DocumentUploaded<\/code><\/li>\n\n\n\n<li><code>ShipmentDelivered<\/code><\/li>\n\n\n\n<li><code>MachineTemperatureChanged<\/code><\/li>\n<\/ul>\n\n\n\n<p>Perhatikan penggunaan bentuk lampau.<\/p>\n\n\n\n<p>Event bukan perintah.<\/p>\n\n\n\n<p><code>CreateOrder<\/code>&nbsp;merupakan command.<\/p>\n\n\n\n<p><code>OrderCreated<\/code>&nbsp;merupakan event.<\/p>\n\n\n\n<p>Perbedaannya penting.<\/p>\n\n\n\n<p>Command mengatakan:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u201cLakukan sesuatu.\u201d<\/p>\n<\/blockquote>\n\n\n\n<p>Event mengatakan:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u201cSesuatu sudah terjadi.\u201d<\/p>\n<\/blockquote>\n\n\n\n<p>Setelah sebuah event diterbitkan, producer tidak harus mengetahui siapa yang akan menggunakannya.<\/p>\n\n\n\n<p>Misalnya sistem order menerbitkan&nbsp;<code>OrderCreated<\/code>.<\/p>\n\n\n\n<p>Warehouse dapat mulai menyiapkan barang.<\/p>\n\n\n\n<p>CRM memperbarui aktivitas pelanggan.<\/p>\n\n\n\n<p>Analytics mencatat transaksi.<\/p>\n\n\n\n<p>Notification service mengirim konfirmasi.<\/p>\n\n\n\n<p>Fraud detection melakukan pemeriksaan.<\/p>\n\n\n\n<p>Sistem order tidak harus memanggil kelima layanan tersebut satu per satu.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Request-Response vs Event-Driven<\/h2>\n\n\n\n<p>Keduanya bukan pilihan yang saling menggantikan.<\/p>\n\n\n\n<p>Sistem enterprise biasanya menggunakan kombinasi keduanya.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Request-Response<\/th><th>Event-Driven<\/th><\/tr><\/thead><tbody><tr><td>Pengirim meminta sesuatu<\/td><td>Producer mengumumkan sesuatu telah terjadi<\/td><\/tr><tr><td>Biasanya synchronous<\/td><td>Biasanya asynchronous<\/td><\/tr><tr><td>Pengirim mengetahui penerima<\/td><td>Producer tidak perlu mengetahui consumer<\/td><\/tr><tr><td>Menunggu response<\/td><td>Producer dapat melanjutkan proses<\/td><\/tr><tr><td>Cocok untuk query dan tindakan langsung<\/td><td>Cocok untuk perubahan state dan downstream reaction<\/td><\/tr><tr><td>Konsistensi lebih mudah dipahami<\/td><td>Dapat menggunakan eventual consistency<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Contohnya, ketika pengguna membuka halaman pelanggan:<\/p>\n\n\n\n<p><code>GET \/customers\/123<\/code><\/p>\n\n\n\n<p>request-response sangat tepat karena aplikasi membutuhkan jawaban saat itu juga.<\/p>\n\n\n\n<p>Namun ketika pelanggan memperbarui alamat, sistem dapat menerbitkan:<\/p>\n\n\n\n<p><code>CustomerAddressUpdated<\/code><\/p>\n\n\n\n<p>Event tersebut kemudian digunakan billing, delivery, CRM, atau data platform tanpa membuat aplikasi customer memanggil semuanya secara langsung.<\/p>\n\n\n\n<p>Google Cloud menjelaskan bahwa event-driven architecture memungkinkan layanan berkomunikasi secara asynchronous melalui event sehingga producer dan consumer dapat berjalan lebih independen. (<a href=\"https:\/\/cloud.google.com\/discover\/what-is-event-driven-architecture\">Google Cloud<\/a>)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Tiga Komponen Utama<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1. Event Producer<\/h3>\n\n\n\n<p>Sistem yang menghasilkan event.<\/p>\n\n\n\n<p>Contohnya:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>ERP.<\/li>\n\n\n\n<li>CRM.<\/li>\n\n\n\n<li>Mobile application.<\/li>\n\n\n\n<li>IoT sensor.<\/li>\n\n\n\n<li>Payment system.<\/li>\n\n\n\n<li>Custom enterprise software.<\/li>\n<\/ul>\n\n\n\n<p>Producer sebaiknya hanya bertanggung jawab menyatakan fakta yang memang terjadi pada domainnya.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. Event Broker atau Channel<\/h3>\n\n\n\n<p>Event tidak selalu dikirim langsung dari producer ke consumer.<\/p>\n\n\n\n<p>Biasanya terdapat infrastructure seperti:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Message broker.<\/li>\n\n\n\n<li>Event bus.<\/li>\n\n\n\n<li>Queue.<\/li>\n\n\n\n<li>Streaming platform.<\/li>\n<\/ul>\n\n\n\n<p>Lapisan ini menerima dan mendistribusikan event.<\/p>\n\n\n\n<p>Contoh teknologi yang umum digunakan meliputi Kafka, RabbitMQ, Amazon EventBridge, Google Pub\/Sub, atau Azure Event Grid.<\/p>\n\n\n\n<p>Teknologi spesifik bukan keputusan pertama.<\/p>\n\n\n\n<p>Yang lebih penting adalah memahami pola komunikasi dan jaminan delivery yang dibutuhkan.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3. Event Consumer<\/h3>\n\n\n\n<p>Consumer mendengarkan event tertentu lalu menjalankan tindakan.<\/p>\n\n\n\n<p>Satu event dapat memiliki banyak consumer.<\/p>\n\n\n\n<p>Producer tidak harus berubah ketika consumer baru ditambahkan.<\/p>\n\n\n\n<p>Ini merupakan salah satu keuntungan terbesar event-driven architecture:&nbsp;<strong>loose coupling<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Kenapa Loose Coupling Penting?<\/h2>\n\n\n\n<p>Bayangkan order service memanggil lima sistem secara langsung:<\/p>\n\n\n\n<p><strong>Order \u2192 Inventory \u2192 Finance \u2192 CRM \u2192 Notification \u2192 Analytics<\/strong><\/p>\n\n\n\n<p>Jika salah satu sistem lambat atau down, proses order dapat ikut terhambat.<\/p>\n\n\n\n<p>Selain itu, order service harus mengetahui API dan dependency seluruh sistem tersebut.<\/p>\n\n\n\n<p>Ketika perusahaan menambahkan loyalty service baru, order service harus diubah lagi.<\/p>\n\n\n\n<p>Dalam event-driven architecture:<\/p>\n\n\n\n<p><strong>Order Service \u2192 OrderCreated Event<\/strong><\/p>\n\n\n\n<p>Kemudian:<\/p>\n\n\n\n<p><strong>Inventory \u2190 Event<\/strong><br><strong>Finance \u2190 Event<\/strong><br><strong>CRM \u2190 Event<\/strong><br><strong>Notification \u2190 Event<\/strong><br><strong>Analytics \u2190 Event<\/strong><\/p>\n\n\n\n<p>Order service hanya mengetahui event yang diterbitkan.<\/p>\n\n\n\n<p>AWS menjelaskan bahwa EDA menggunakan layanan yang decoupled sehingga producer dapat menerbitkan perubahan tanpa mengetahui consumer mana yang akan merespons. Pendekatan ini membantu scalability dan memungkinkan komponen berkembang secara lebih independen. (<a href=\"https:\/\/aws.amazon.com\/what-is\/eda\/\">AWS<\/a>)<\/p>\n\n\n\n<p>Prinsip ini sangat relevan ketika enterprise memiliki banyak aplikasi dan integrasi.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Event-Driven Architecture Bukan Sama dengan Microservices<\/h2>\n\n\n\n<p>Event-driven architecture sering digunakan bersama microservices.<\/p>\n\n\n\n<p>Tetapi keduanya tidak sama.<\/p>\n\n\n\n<p>Sebuah modular monolith dapat menerbitkan event.<\/p>\n\n\n\n<p>Legacy system juga dapat menghasilkan event melalui integration layer.<\/p>\n\n\n\n<p>Sebaliknya, microservices dapat tetap menggunakan request-response sepenuhnya.<\/p>\n\n\n\n<p>Jangan memecah aplikasi menjadi puluhan microservices hanya karena ingin menerapkan event-driven architecture.<\/p>\n\n\n\n<p>Tujuannya adalah mengurangi dependency yang memang menjadi masalah, bukan menambah distributed system tanpa alasan bisnis.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Queue dan Event Streaming Bukan Hal yang Sama<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Message Queue<\/h3>\n\n\n\n<p>Queue cocok ketika satu pekerjaan perlu diproses oleh salah satu worker.<\/p>\n\n\n\n<p>Contohnya:<\/p>\n\n\n\n<p><code>GenerateInvoice<\/code><\/p>\n\n\n\n<p>Beberapa worker dapat mengambil pekerjaan dari queue, tetapi satu pesan biasanya diproses oleh satu consumer.<\/p>\n\n\n\n<p>Queue berguna untuk:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Background processing.<\/li>\n\n\n\n<li>Job distribution.<\/li>\n\n\n\n<li>Buffer workload.<\/li>\n\n\n\n<li>Retry.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Event Streaming<\/h3>\n\n\n\n<p>Pada event streaming, event disimpan dalam log yang dapat dibaca beberapa consumer.<\/p>\n\n\n\n<p>Consumer bahkan dapat membaca ulang event lama.<\/p>\n\n\n\n<p>Microsoft menjelaskan bahwa event streaming menyediakan durable event log sehingga consumer dapat bergabung kemudian atau melakukan replay untuk recovery dan reprocessing. (<a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/architecture\/guide\/architecture-styles\/event-driven\">Microsoft Azure Architecture Center<\/a>)<\/p>\n\n\n\n<p>Streaming relevan untuk:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Analytics.<\/li>\n\n\n\n<li>Fraud detection.<\/li>\n\n\n\n<li>IoT.<\/li>\n\n\n\n<li>Activity tracking.<\/li>\n\n\n\n<li>Data pipeline.<\/li>\n\n\n\n<li>Real-time monitoring.<\/li>\n\n\n\n<li>High-volume transaction event.<\/li>\n<\/ul>\n\n\n\n<p>Tidak semua sistem membutuhkan Kafka atau event streaming.<\/p>\n\n\n\n<p>Queue sederhana sering sudah cukup.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Eventual Consistency: Trade-Off yang Harus Dipahami<\/h2>\n\n\n\n<p>Event-driven architecture biasanya asynchronous.<\/p>\n\n\n\n<p>Artinya, setelah order dibuat, seluruh sistem mungkin tidak langsung memiliki state terbaru pada milidetik yang sama.<\/p>\n\n\n\n<p>Contohnya:<\/p>\n\n\n\n<p>09:00:00 \u2014 order dibuat.<br>09:00:01 \u2014 inventory diperbarui.<br>09:00:03 \u2014 CRM diperbarui.<br>09:00:05 \u2014 analytics menerima event.<\/p>\n\n\n\n<p>Selama beberapa detik, data dapat berbeda.<\/p>\n\n\n\n<p>Kondisi ini disebut&nbsp;<strong>eventual consistency<\/strong>.<\/p>\n\n\n\n<p>Microsoft mencatat bahwa eventual consistency merupakan salah satu trade-off utama EDA karena setiap consumer memproses event dengan kecepatannya sendiri.<\/p>\n\n\n\n<p>Karena itu, perusahaan perlu menentukan:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Data mana yang benar-benar membutuhkan strong consistency?<\/p>\n<\/blockquote>\n\n\n\n<p>Saldo pembayaran mungkin membutuhkan kontrol yang jauh lebih ketat daripada update dashboard analytics.<\/p>\n\n\n\n<p>Jangan menjadikan seluruh sistem asynchronous jika proses bisnis membutuhkan keputusan langsung dan konsisten.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Risiko yang Sering Diabaikan<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Duplicate Event<\/h3>\n\n\n\n<p>Consumer dapat menerima event lebih dari sekali.<\/p>\n\n\n\n<p>Karena itu, proses penting sebaiknya&nbsp;<strong>idempotent<\/strong>.<\/p>\n\n\n\n<p>Jika event&nbsp;<code>PaymentConfirmed<\/code>&nbsp;diterima dua kali, sistem tidak boleh membuat dua invoice atau mengirim barang dua kali.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Event Ordering<\/h3>\n\n\n\n<p>Event dapat datang tidak sesuai urutan.<\/p>\n\n\n\n<p>Misalnya:<\/p>\n\n\n\n<p><code>OrderCancelled<\/code><\/p>\n\n\n\n<p>tiba sebelum consumer selesai memproses:<\/p>\n\n\n\n<p><code>OrderCreated<\/code>.<\/p>\n\n\n\n<p>Untuk proses tertentu, ordering perlu dirancang secara eksplisit.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Failed Consumer<\/h3>\n\n\n\n<p>Producer sudah berhasil menerbitkan event, tetapi consumer gagal memprosesnya.<\/p>\n\n\n\n<p>Sistem membutuhkan:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Retry.<\/li>\n\n\n\n<li>Dead-letter queue.<\/li>\n\n\n\n<li>Alert.<\/li>\n\n\n\n<li>Recovery procedure.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Event Schema Berubah<\/h3>\n\n\n\n<p>Event adalah contract.<\/p>\n\n\n\n<p>Jika field dihapus atau artinya berubah, banyak consumer dapat rusak.<\/p>\n\n\n\n<p>Versioning dan backward compatibility tetap dibutuhkan seperti pada API.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Sulit Debugging<\/h3>\n\n\n\n<p>Pada request-response, perjalanan request relatif mudah diikuti.<\/p>\n\n\n\n<p>Dalam event-driven system, satu event dapat menghasilkan banyak event berikutnya.<\/p>\n\n\n\n<p>Karena itu, correlation ID, distributed tracing, logging, dan observability menjadi sangat penting.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Real-Time Tidak Selalu Dibutuhkan<\/h2>\n\n\n\n<p>Salah satu kesalahan umum adalah menganggap real-time selalu lebih baik.<\/p>\n\n\n\n<p>Padahal real-time menambah:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Infrastructure.<\/li>\n\n\n\n<li>Monitoring.<\/li>\n\n\n\n<li>Operational complexity.<\/li>\n\n\n\n<li>Failure scenario.<\/li>\n\n\n\n<li>Cost.<\/li>\n\n\n\n<li>Data consistency challenge.<\/li>\n<\/ul>\n\n\n\n<p>Laporan keuangan bulanan tidak membutuhkan event processing dalam milidetik.<\/p>\n\n\n\n<p>Master data tertentu mungkin cukup diperbarui setiap beberapa menit.<\/p>\n\n\n\n<p>Batch processing tetap masuk akal untuk banyak kebutuhan.<\/p>\n\n\n\n<p>Event-driven architecture lebih relevan ketika:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Perubahan harus segera diketahui.<\/li>\n\n\n\n<li>Banyak sistem perlu merespons satu kejadian.<\/li>\n\n\n\n<li>Volume transaksi tinggi.<\/li>\n\n\n\n<li>Producer tidak boleh tergantung pada consumer.<\/li>\n\n\n\n<li>Workload berubah secara signifikan.<\/li>\n\n\n\n<li>Sistem memerlukan asynchronous processing.<\/li>\n\n\n\n<li>Event historis memiliki nilai analitik.<\/li>\n<\/ul>\n\n\n\n<p>Microsoft bahkan memperingatkan bahwa EDA kurang tepat ketika tim belum memiliki pengalaman mengoperasikan distributed asynchronous systems, karena debugging, monitoring, dan recovery memiliki karakter berbeda dari arsitektur synchronous.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Event-Driven Architecture dan AI Agent<\/h2>\n\n\n\n<p>EDA menjadi menarik ketika AI agent mulai masuk ke workflow operasional.<\/p>\n\n\n\n<p>Contohnya:<\/p>\n\n\n\n<p><code>LargeOrderCreated<\/code><\/p>\n\n\n\n<p>Event tersebut dapat memicu AI agent untuk:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Mengumpulkan histori pelanggan.<\/li>\n\n\n\n<li>Memeriksa pola transaksi.<\/li>\n\n\n\n<li>Membaca aturan perusahaan.<\/li>\n\n\n\n<li>Membuat risk summary.<\/li>\n\n\n\n<li>Mengirim rekomendasi kepada approver.<\/li>\n<\/ol>\n\n\n\n<p>Atau:<\/p>\n\n\n\n<p><code>MachineAnomalyDetected<\/code><\/p>\n\n\n\n<p>dapat memicu agent untuk:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Membaca sensor history.<\/li>\n\n\n\n<li>Membandingkan maintenance record.<\/li>\n\n\n\n<li>Membuka maintenance ticket.<\/li>\n\n\n\n<li>Memberikan rekomendasi kepada engineer.<\/li>\n<\/ol>\n\n\n\n<p>AWS bahkan menempatkan event-driven architecture sebagai salah satu fondasi penting untuk serverless AI karena event dapat menjadi trigger bagi layanan atau agent tanpa menciptakan tight coupling. (<a href=\"https:\/\/docs.aws.amazon.com\/prescriptive-guidance\/latest\/agentic-ai-serverless\/event-driven-architecture.html\">AWS Prescriptive Guidance<\/a>)<\/p>\n\n\n\n<p>Namun, agent sebaiknya tidak selalu langsung melakukan tindakan kritis.<\/p>\n\n\n\n<p>Event dapat memicu analisis AI, sementara transaksi sensitif tetap menggunakan workflow deterministik dan approval.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Event-Driven Architecture dan API-First<\/h2>\n\n\n\n<p>API dan event bekerja sangat baik bersama.<\/p>\n\n\n\n<p>Gunakan&nbsp;<strong>API<\/strong>&nbsp;ketika sistem membutuhkan sesuatu.<\/p>\n\n\n\n<p>Gunakan&nbsp;<strong>event<\/strong>&nbsp;ketika sistem ingin mengumumkan sesuatu.<\/p>\n\n\n\n<p>Contohnya:<\/p>\n\n\n\n<p>Customer service menggunakan API:<\/p>\n\n\n\n<p><code>GET \/orders\/123<\/code><\/p>\n\n\n\n<p>untuk mengetahui status order saat ini.<\/p>\n\n\n\n<p>Ketika status berubah, order service menerbitkan:<\/p>\n\n\n\n<p><code>OrderStatusChanged<\/code><\/p>\n\n\n\n<p>agar sistem lain dapat merespons.<\/p>\n\n\n\n<p>Karena itu, enterprise architecture yang matang biasanya bukan:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>API atau event?<\/p>\n<\/blockquote>\n\n\n\n<p>Melainkan:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Interaksi mana yang harus synchronous dan mana yang lebih tepat asynchronous?<\/strong><\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">Checklist Kesiapan Event-Driven Architecture<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Area<\/th><th>Pertanyaan utama<\/th><\/tr><\/thead><tbody><tr><td>Event<\/td><td>Perubahan bisnis apa yang benar-benar penting?<\/td><\/tr><tr><td>Producer<\/td><td>Sistem mana yang menjadi sumber event?<\/td><\/tr><tr><td>Consumer<\/td><td>Siapa yang perlu merespons?<\/td><\/tr><tr><td>Latency<\/td><td>Seberapa cepat respons dibutuhkan?<\/td><\/tr><tr><td>Delivery<\/td><td>Apa yang terjadi jika event gagal dikirim?<\/td><\/tr><tr><td>Duplicate<\/td><td>Apakah consumer idempotent?<\/td><\/tr><tr><td>Ordering<\/td><td>Apakah urutan event penting?<\/td><\/tr><tr><td>Schema<\/td><td>Bagaimana contract dan versioning dikelola?<\/td><\/tr><tr><td>Consistency<\/td><td>Apakah eventual consistency dapat diterima?<\/td><\/tr><tr><td>Security<\/td><td>Data apa yang boleh masuk ke event?<\/td><\/tr><tr><td>Observability<\/td><td>Bisakah perjalanan event ditelusuri?<\/td><\/tr><tr><td>Recovery<\/td><td>Bisakah event diproses ulang?<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Kesimpulan<\/h2>\n\n\n\n<p>Event-Driven Architecture membantu perusahaan membangun sistem yang merespons perubahan tanpa menciptakan dependency langsung antara setiap aplikasi.<\/p>\n\n\n\n<p>Producer mengumumkan event.<\/p>\n\n\n\n<p>Consumer memilih event yang relevan.<\/p>\n\n\n\n<p>Message broker atau event stream menghubungkan keduanya.<\/p>\n\n\n\n<p>Hasilnya adalah arsitektur yang lebih fleksibel untuk integration, high-volume processing, automation, IoT, analytics, dan AI.<\/p>\n\n\n\n<p>Namun, event-driven architecture bukan solusi universal.<\/p>\n\n\n\n<p>Perusahaan harus siap mengelola duplicate event, ordering, retry, schema evolution, observability, dan eventual consistency.<\/p>\n\n\n\n<p>Sistem terbaik biasanya menggabungkan beberapa pola.<\/p>\n\n\n\n<p>Request-response digunakan ketika jawaban dibutuhkan langsung.<\/p>\n\n\n\n<p>Queue digunakan untuk pekerjaan asynchronous.<\/p>\n\n\n\n<p>Event streaming digunakan ketika banyak consumer membutuhkan histori event.<\/p>\n\n\n\n<p>Perspektif yang lebih tepat bukan:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>\u201cBagaimana membuat seluruh sistem real-time?\u201d<\/strong><\/p>\n<\/blockquote>\n\n\n\n<p>Melainkan:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>\u201cPerubahan bisnis apa yang cukup penting sehingga sistem lain perlu mengetahuinya saat perubahan itu terjadi?\u201d<\/strong><\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">Bangun Sistem yang Lebih Responsif Bersama Crocodic<\/h2>\n\n\n\n<p>Crocodic membantu perusahaan merancang sistem enterprise yang dapat beradaptasi dengan pertumbuhan transaksi, integrasi, automation, dan kebutuhan real-time.<\/p>\n\n\n\n<p>Melalui layanan&nbsp;<a href=\"https:\/\/crocodic.com\/en\/enterprise-system-upgrade\/\">Enterprise System Upgrade<\/a>, sistem yang sudah berjalan dapat diperkuat melalui API integration, asynchronous processing, automation, scalability, dan integration layer tanpa selalu dibangun ulang dari awal.<\/p>\n\n\n\n<p>Untuk kebutuhan sistem baru,&nbsp;<a href=\"https:\/\/crocodic.com\/en\/custom-enterprise-software\/\">Custom Enterprise Software<\/a>&nbsp;memungkinkan arsitektur dibentuk sesuai workflow, volume transaksi, data, role pengguna, dan kebutuhan integration perusahaan.<\/p>\n\n\n\n<p>Event-driven architecture dapat menjadi bagian dari fondasi tersebut ketika perubahan bisnis perlu diketahui banyak sistem secara cepat tanpa menciptakan ketergantungan point-to-point.<\/p>\n\n\n\n<p>Tujuannya bukan membuat arsitektur paling kompleks.<\/p>\n\n\n\n<p>Tujuannya adalah membuat sistem dapat merespons perubahan bisnis dengan cara yang tetap dapat dikembangkan dan dikendalikan.<\/p>\n\n\n\n<p><strong><a href=\"https:\/\/crocodic.com\/en\/\">Diskusikan arsitektur integrasi dan kebutuhan real-time system perusahaan Anda bersama Crocodic<\/a>.<\/strong><\/p>","protected":false},"excerpt":{"rendered":"<p>Banyak sistem enterprise bekerja dengan pola yang sederhana. Aplikasi A membutuhkan informasi dari aplikasi B. Aplikasi A mengirim request. Aplikasi B memprosesnya. Aplikasi A menunggu response sebelum melanjutkan proses berikutnya. Pola tersebut dikenal sebagai&nbsp;request-response&nbsp;dan masih sangat tepat untuk banyak kebutuhan. Masalah mulai muncul ketika perusahaan memiliki banyak sistem dan perubahan harus diketahui oleh banyak aplikasi [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":14057,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"footnotes":""},"categories":[1499],"tags":[],"class_list":["post-14485","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-it-investment-strategy"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/crocodic.com\/en\/wp-json\/wp\/v2\/posts\/14485","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/crocodic.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/crocodic.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/crocodic.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/crocodic.com\/en\/wp-json\/wp\/v2\/comments?post=14485"}],"version-history":[{"count":1,"href":"https:\/\/crocodic.com\/en\/wp-json\/wp\/v2\/posts\/14485\/revisions"}],"predecessor-version":[{"id":14486,"href":"https:\/\/crocodic.com\/en\/wp-json\/wp\/v2\/posts\/14485\/revisions\/14486"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/crocodic.com\/en\/wp-json\/wp\/v2\/media\/14057"}],"wp:attachment":[{"href":"https:\/\/crocodic.com\/en\/wp-json\/wp\/v2\/media?parent=14485"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/crocodic.com\/en\/wp-json\/wp\/v2\/categories?post=14485"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/crocodic.com\/en\/wp-json\/wp\/v2\/tags?post=14485"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}