Mikroservis mimarisi, event-driven architecture ve dağıtık sistemler konusu
1. Mikroservis Mimarisi
Mikroservis mimarisi, tek bir büyük uygulamayı (monolitik uygulama) küçük, bağımsız ve birbiriyle haberleşen servisler bütününe dönüştürme yaklaşımıdır. Her bir servis, belirli bir işlevselliği yerine getirir ve kendi veritabanına sahip olabilir.
Temel Özellikleri:
- Bağımsızlık: Her mikroservis bağımsız olarak geliştirilebilir, test edilebilir, konuşlandırılabilir ve ölçeklenebilir. Bu, bir servisteki değişikliklerin diğer servisleri etkilememesini sağlar.
- Küçük ve Özelleşmiş: Her servis belirli bir iş alanına odaklanır ve basit bir sorumluluğu vardır.
- Hafif Haberleşme: Mikroservisler genellikle RESTful API’ler, gRPC veya mesaj kuyrukları aracılığıyla haberleşirler.
- Dağıtık Yönetim: Her servis farklı teknolojiler ve diller kullanılarak geliştirilebilir, bu da geliştirme ekiplerine esneklik sağlar.
- Özerklik: Her servis kendi veritabanına sahip olabilir ve kendi verilerini yönetir.
- Hata İzolasyonu: Bir servisteki hata, tüm sistemi çökertmek yerine sadece o servisi etkiler.
Avantajları:
- Çeviklik: Hızlı geliştirme ve konuşlandırma imkanı.
- Ölçeklenebilirlik: Servisler bağımsız olarak ölçeklenebilir.
- Esneklik: Farklı teknolojiler kullanma özgürlüğü.
- Hata Toleransı: Bir servisteki hata diğerlerini etkilemez.
- Daha İyi Takım Yapısı: Küçük ekipler belirli servislere odaklanabilir.
Dezavantajları:
- Karmaşıklık: Dağıtık sistemlerin yönetimi daha karmaşıktır (izleme, hata ayıklama, güvenlik).
- Dağıtık Veri Yönetimi: Veri tutarlılığını sağlamak zor olabilir.
- İletişim Gecikmesi: Servisler arası iletişimde gecikmeler yaşanabilir.
- Operasyonel Yük: Daha fazla servis yönetmek daha fazla operasyonel yük demektir.
Örnek Senaryo:
Bir e-ticaret uygulamasını düşünelim. Mikroservis mimarisi ile bu uygulama şu servislere bölünebilir:
- Ürün Kataloğu Servisi: Ürün bilgilerini yönetir.
- Sepet Servisi: Kullanıcıların sepetlerini yönetir.
- Ödeme Servisi: Ödeme işlemlerini gerçekleştirir.
- Sipariş Servisi: Siparişleri yönetir.
- Kullanıcı Hesapları Servisi: Kullanıcı hesaplarını yönetir.
2. Event-Driven Architecture (EDA)
Event-driven architecture (olay güdümlü mimari), servislerin olaylar (events) aracılığıyla haberleştiği bir yazılım mimarisidir. Bir servis bir olay yayınlar ve diğer servisler bu olaya abone olarak tepki verir.
Temel Kavramlar:
- Event (Olay): Bir sistemde meydana gelen önemli bir durum değişikliğini temsil eder. Örneğin, “Sipariş Oluşturuldu”, “Ödeme Başarılı”, “Ürün Stokta Kalmadı” gibi.
- Event Producer (Olay Üreticisi): Olayları oluşturan ve yayınlayan servistir.
- Event Consumer (Olay Tüketicisi): Olaylara abone olan ve bunlara tepki veren servistir.
- Event Bus/Message Broker (Olay Veriyolu/Mesaj Brokerı): Olayların yayınlandığı ve tüketicilere yönlendirildiği merkezi bir bileşendir. (Örn: Apache Kafka, RabbitMQ, Amazon SQS)
Çalışma Prensibi:
- Bir servis (üretici) bir olay oluşturur ve bunu olay veriyoluna yayınlar.
- Olay veriyolu, olaya abone olan tüm servislere (tüketicilere) olayı iletir.
- Tüketiciler olayı alır ve gerekli işlemleri gerçekleştirir.
Avantajları:
- Gevşek Bağlantı (Loose Coupling): Servisler birbirleriyle doğrudan bağlantılı değildir, bu da daha esnek ve bağımsız bir sistem sağlar.
- Ölçeklenebilirlik: Servisler bağımsız olarak ölçeklenebilir.
- Gerçek Zamanlı Tepki: Olaylar gerçek zamanlı olarak işlenebilir.
- Esneklik: Yeni servisler eklemek veya mevcut servisleri değiştirmek kolaydır.
- Denetlenebilirlik: Olaylar kaydedilerek sistemdeki değişiklikler izlenebilir.
Dezavantajları:
- Karmaşıklık: Olay akışlarını yönetmek ve hata ayıklamak zor olabilir.
- Olay Tutarlılığı: Dağıtık ortamlarda olayların tutarlılığını sağlamak zor olabilir (eventual consistency).
- Mesaj Sırası: Bazı durumlarda mesajların belirli bir sırada işlenmesi gerekebilir.
Örnek Senaryo:
Bir e-ticaret uygulamasında EDA kullanımı:
- Sipariş Servisi: Yeni bir sipariş oluşturulduğunda “Sipariş Oluşturuldu” olayını yayınlar.
- Ödeme Servisi: Bu olaya abone olur, ödeme işlemini başlatır ve “Ödeme Başarılı” veya “Ödeme Başarısız” olaylarını yayınlar.
- Stok Servisi: “Sipariş Oluşturuldu” olayına abone olur ve ürün stoklarını günceller.
- Kargo Servisi: “Ödeme Başarılı” olayına abone olur ve kargo sürecini başlatır.
3. Dağıtık Sistemler
Dağıtık sistemler, birden fazla bilgisayarın (düğüm) bir ağ üzerinden haberleşerek tek bir amaca hizmet ettiği sistemlerdir. Bu bilgisayarlar fiziksel olarak aynı yerde veya farklı coğrafi konumlarda olabilirler.
Temel Özellikleri:
- Eş Zamanlılık (Concurrency): Birden fazla işlem aynı anda çalışabilir.
- Hata Toleransı (Fault Tolerance): Bir veya birden fazla düğümün arızalanması durumunda sistemin çalışmaya devam edebilmesi.
- Ölçeklenebilirlik (Scalability): Artan yükü karşılamak için sisteme daha fazla kaynak (düğüm) eklenebilmesi.
- Şeffaflık (Transparency): Kullanıcıların sistemin dağıtık yapısından haberdar olmaması.
- Kaynak Paylaşımı (Resource Sharing): Bilgisayarların kaynaklarını (CPU, bellek, disk) paylaşabilmesi.
Zorlukları:
- Veri Tutarlılığı (Data Consistency): Dağıtık verilerin tutarlılığını sağlamak zordur.
- Hata Yönetimi (Fault Management): Dağıtık hataları tespit etmek, teşhis etmek ve gidermek zordur.
- İletişim Gecikmesi (Communication Latency): Bilgisayarlar arası iletişimde gecikmeler yaşanabilir.
- Güvenlik (Security): Dağıtık sistemlerin güvenliğini sağlamak karmaşıktır.
- Senkronizasyon (Synchronization): İşlemlerin senkronize edilmesi zordur.
Dağıtık Sistem Örnekleri:
- Bulut Bilişim Platformları (AWS, Azure, GCP)
- Büyük Veri İşleme Sistemleri (Hadoop, Spark)
- Dağıtık Veritabanları (Cassandra, MongoDB)
- Blok Zinciri (Blockchain)
- İçerik Dağıtım Ağları (CDN)
Mikroservisler, Event-Driven Architecture ve Dağıtık Sistemlerin İlişkisi:
- Mikroservis mimarisi genellikle dağıtık sistemler üzerinde uygulanır.
- Event-driven architecture, mikroservisler arasındaki iletişimi sağlamak için kullanılan yaygın bir yaklaşımdır.
- Dağıtık sistemlerin zorlukları (veri tutarlılığı, hata yönetimi vb.) mikroservis mimarisinde de geçerlidir.
Özet Tablo:
Özellik | Mikroservis Mimarisi | Event-Driven Architecture | Dağıtık Sistemler |
Amaç | Uygulamayı küçük, bağımsız servislere bölmek | Servisler arası gevşek bağlantı ve asenkron iletişim | Birden fazla bilgisayarın birlikte çalışmasını sağlamak |
Temel Bileşenler | Bağımsız servisler, API’ler, veritabanları | Olaylar, üreticiler, tüketiciler, olay veriyolu | Düğümler (bilgisayarlar), ağ, dağıtık veri yapıları |
Avantajları | Çeviklik, ölçeklenebilirlik, esneklik | Gevşek bağlantı, gerçek zamanlı tepki, ölçeklenebilirlik | Ölçeklenebilirlik, hata toleransı, kaynak paylaşımı |
Dezavantajları | Karmaşıklık, dağıtık veri yönetimi, iletişim gecikmesi | Karmaşıklık, olay tutarlılığı, mesaj sırası | Veri tutarlılığı, hata yönetimi, iletişim gecikmesi |