E-bebek Microservis Yapısı

Uğur Cem YÜKSEL
Ebebek Tech
Published in
6 min readSep 8, 2021

Merhabalar bu yazımda e-bebek kullanıcı yapısının monolitik mimariden microservis mimarisine geçişini. Syncron ve Asycnron süreçleri hakkında yaptığım çalışmaları anlatıcam. Öncelikle monolitik yazılım yaklaşımı ve microservis mimarisi ile başlıyalım.

Monolitik Mimari

Monolitik mimari, bir yazılım programının tasarımı için geleneksel birleşik modeldir. Monolitik, bu bağlamda, tek parça halinde oluşan anlamına gelir.

monolitik, monolithic architecture

Monolitik Mimarinin Avantajları

  • Geliştirmesi basit.
  • Test etmek basit.
  • Deploy edilmesi kolay.
  • Yatay ölçeklendirme kolay.

Monolitik bir mimari ile geliştirilmiş uygulamalar ilk fazlarında iyi çalışır. Bugün çalışmakta olan projelerin büyük çoğunluğu monolitik mimaride geliştirilmiştir.

Monolitik Mimarinin Dezavantajları

  • Büyüklük ve karmaşıklık bakımından sınırlara maruz kalır.
  • Uygulama, büyük ve karmaşıktır.
  • Uygulamada birçok bağımlılık bulunduğu için herhangi bir yerde yapılacak değişikli projenin tamamına etki edebilir. Bu yüzden geliştirmeler kolay ve hızlı bir şekilde yapılamaz.
  • Uygulamanın boyutu büyük olduğu için deploy süresi uzun olmaktadır.
  • Uygulama tek paket halinde çıktığı için her yeni versiyonda ugulamanın tamamı deploy olmalıdır.
  • Güvenlik zaafiyeti bulunması durumunda bütün projeyi etkileyebilir.
  • Projede oluşan bir bug bütün projenin hep deployment sürecinde hemde çalışırken büyük problemlere sebep olabilir.
  • Güncel teknolojiye geçiş aşamasında modüller arasında bağlılık fazla olduğu için ve Framework’teki değişiklik bütün projeyi etkileyeceği için çok fazla güncellenme yapılamaz.

Mikroservis Mimarisi

Microservice mimarisi, tek bir uygulama geliştirirken modüler bir yapıda her biri küçük servis olarak düşünülmesi gereken ve her bir servisinde kendi işini ve iletişimini yürütebilen, çok karmaşık olmayan ve başka servislere bağımlılığı az olan mekanizmalara sahip bir yaklaşımdır.

mikroservis, microservice architecture

Mikroservisler Mimarisinin Getirileri

  • Uygulamayı, geliştirilmesi çok daha hızlı, anlaşılması ve bakımı çok daha kolay, yönetilebilirdir.
  • Her servis, tek bir iş için kullanılır.
  • Mikroservisler birbirinden bağımsız olarak deploy edilebilir.
  • Servis bazlı deployment yapılabildiği için hızlıdır.
  • Her servisin ihtiyaç duydukları kaynakları ayrı bir şekilde belirleyip kolay bir şekilde ölçeklendirelebilir ve genişletilebilir. Bu da bütün sistem için değil gerekli olan sisteme kaynak ayırmaya olanak sağlar.

Mikroservisler Mimarisinin Sakıncaları

  • Mikroservisler sistemi dağıtık bir sistem (distributed system) olduğundan dolayı sisteme bir karmaşıklık katar.
  • Bölümlendirilmiş veritabanı mimarisine sahiptir. Mikroservisler tabanlı bir uygulamada birden fazla business entity’yi güncelleyen servis etkileşimleri birden fazla servisin sahip olduğu birden fazla veritabanı şemasında güncellemeye ihtiyaç duyabilir.
  • Mikroservis projelerinin test edilmesi monolitik uygulamadakinden çok daha karmaşıktır.

E-bebek için neden Mikroservis mimarisi gerekli ?

SAP(“Systems Analysis and Program Development”) temel olarak kurumsal kaynak planlaması için kullanılmaktadır. SAP programı şirket yöneticilerinin işlerini kolaylaştırmak için ve daha hızlı bir şekilde karar almalarını sağlamak için programlanmıştır.

e-bebek e-ticaret alt yapısı olarak SAP firmasının geliştirdiği Hybris’i kullanmaktadır.

Hybris monolitik mimaride bir yazılım olduğu için SAP veya Hybris tarafında oluşacak problemlerde kullanıcının tek bir sistemde oluşması veya hiç oluşmaması gibi problemler oluşabilmektedir. Bu süreci daha efektif bir şekilde yürütebilmek için Hybris ve SAP tarafında ortak kullanılan bir customer mikroservisine ihtiyaç duyulmaktadır. Bu ihtiyaç doğrultusunda gerekli uygulamalar ve alt yapı için gerekli teknolojiler belirlendi.

Hybris, SAP ve CRM arasındaki müşteri oluşturma sürecini sırasında syncron bir süreç bulunuyor. CRM e-bebek tarafından müşterilere daha iyi hizmet verebilmek ve müşteri izin(email-sms) yönetimini için geliştirilen bir uygulamadır. Bu süreç mağazadan(SAP) veya e-bebek(Hybris) üzerinden oluşturulan bir kullanıcının bütün sistemlerde oluşturulması ve kullanıcıya hem mağaza hem de e-bebek web sitesi üzerinden bir üyelik sistemi sunuyor.

Hybris ve SAP deki syncron süreçlerin bir nedeni ise sipariş oluşturulurken SAP tarafında kullanıcı oluşturulmadıysa sipariş oluşturulamaması. Hybris de sipariş oluşturmak için SAP tarafından erpId bilgisinin verilemesi gerekmekte. SAP tarafında kullanıcı oluşturulamaz ise müşteri alışveriş yaparken hata alabilmekte. Bu hatalı yapıyı kaldırmak için mikroservisteki asyncron süreç geliştirilmiştir. Bu mimariyi makalemin ilerleyen kısmında anlatıcam.

Mikroservis mimarisinde kullandığımız teknolojiler

• Java 16

• Spring Boot 2

Couchbase (Couchbase, ödüllü bir dağıtılmış NoSQL bulut veritabanıdır. Bulut, şirket içi, hibrit, dağıtılmış bulut ve uç bilgi işlem dağıtımlarında benzersiz çok yönlülük, performans, ölçeklenebilirlik ve finansal değer sunar.)

Apache Kafka (Binlerce şirket tarafından kullanılan yüksek performanslı veri akışı , akış analitiği, veri entegrasyonu ve görev açısından kritik uygulamalar için kullanılan açık kaynaklı(open source), dağıtılmış bir olay akışı platformudur. )

Docker(Docker, tekrarlayan, sıradan yapılandırma görevlerini ortadan kaldırır ve geliştirme yaşam döngüsü boyunca hızlı, kolay ve taşınabilir uygulama geliştirme için kullanan bir açık kaynak kodlu linux tabanlı OS platformudur.)

Consul(Consul, ağ yapılandırmalarını otomatikleştirmek, hizmetleri keşfetmek ve herhangi bir bulut veya çalışma zamanında güvenli bağlantı sağlamak için bir hizmet ağı çözümüdür.)

Portainer(Portainer, Kubernetes ve Docker ortamlarının merkezi yapılandırmasını, yönetimini ve güvenliğini sağlayarak kullanıcılarınıza hızlı, kolay ve güvenli bir şekilde sunmanıza olanak sağlayan açık kaynak kodlu bir platformdur.)

Zipkin(Zipkin, dağıtılmış bir izleme sistemidir. Hizmet mimarilerindeki gecikme sorunlarını gidermek için gereken zamanlama verilerinin toplanmasına yardımcı olur. Özellikle bu verilerin hem toplanmasını hem de aranmasını içerir.)

Grafana(Her veritabanı için açık kaynaklı analitik ve izleme çözümüdür.)

Yazımda bulunan teknolojileri daha sonra ayrıntılı bir şekilde anlatacağım.

E-bebek SYNCRON Mikroservis Mimarisi

Mikroservis mimarisini syncron ve asycron çalışıcak şekilde parametrik bir yapıda kurduk. Kullanıcı birden fazla sistemde oluşturulabileceği için hangi sistem tarafından isteklerin atılacağını tutacağımız source ve target sistem parametrelerini ekledik böylece request geldiğinde hangi sistem tarafından oluşturulduğunu görebilecek ve hata oluşması durumunda gelen hatayı daha iyi bir şekilde handle edebilecektik.

Hybris ya da SAP üzerinden bir customer oluşturulduğunda mikroservis yapımıza bir request atılır. Bu requestte gelen sistemin bilgisi bulunuyor. Gelen request api gateway tarafından ilgili producera yollanır. Örnek olarak Hybris tarafından oluşturulan kullanıcı Hybris-customer-producera geldikten sonra customer-servis ile couchbase databesinde oluşturulur ardından SAP consumera yollanır. Burada gelen request ile SAP tarafında bir kullanıcı oluşturulur. SAP tarafından oluşturulan kullanıcıya ait bilgiler tekrar gelen response ile alınır ve couchbasedeki ilgili data güncellenir. SAP tarafında customer oluştuktan sonra CRM uygulamasına aynı şekilde bir request yollanır aynı işlem CRM için gerçekleştikten sonra notification servisini request atılır. Buraya gelen bilgi doğrultusunda oluşturulan kullanıcının bilgileri doğrultusunda SMS veya E-mail yoluyla kullanıcının oluştuğu bilgisi müşteriye gönderilir. Bu syncron bir süreç olduğu için herhangi bir sitemde bir sorun oluştuğunda customer oluşturulamıyacaktır.

E-bebek ASYNCRON Mikroservis Mimarisi

Asyncron süreçte syncron sürece ek olarak kafka kullanıyoruz. Kafka kullanmamızın sebebi hızlı olması ve asyncron olarak kafka topiclerini dinleye consumerlar ile birbirinden bağımsız bir şekilde süreci yürütüyor olabilmemiz.

Örnek olarak Hybris tarafından bir kullanıcı oluşturulduğu zaman bu süreçte ilk önce request api gateway tarafından ilgili servisin producerına istek atmaktadır. Hybris-create-customer producerına gelen request ile hybris-create-customere topicini yazılıyor. Bu topici dinleyen customer servis requesti aldıktan sonra başarılı bir şekilde kullanıcı oluşturduktan sonra couchbase databesine yazıyor ve ardından hybris-create-customer-success-for-sap ve hybris-create-customer-success-for-crm topiclerine yazıyor. Bu servisleri dinleyen SAP Consumer ve CRM consumer paralel olarak kendi sistemlerinde customer oluşturup notify-topiclerine yazıyor. Notify topicilerini dinleyen customer servisi gelen responlardaki dataları couchbase databesindeki ilgili bucketlara yazıyor. İlgili mimariyi aşağıdaki resimden inceleyebilirsiniz.

Eğer customer serviste hata(connection timeout, vb..) alınırsa kaynak(source) sistem bilgisi ile ilgili topiclere yazılıyor. Customer servis ilgili retry bucketlarındaki requestleri 5 kere tekrar dendikten sonra couchbasede en son hangi sistemden geldiği bilgisi ile couchbase databasesine yazmakta. Her işlemde oluşan transactionlar ile Error-Screen angular ile geliştirilen önyüze düşmektedir. Böylece herhangi bir sistemin çökmesi veya ulaşılamaz hale gelmesi durumunda diğer servisler çalışır durumda olacak ve hata alan uygulama düzeldiği zaman error-screenden tetiklenip tekrar hata alan sistemde işlenebilecek durumda olucaktır. Eğer kullanıcı SAP ve Hybris tarafında hatasız bir şekilde oluşturulursa create-notify topicine yazılıcaktır. Bu topici dinleyen notify-servisi kullanıcın verdiği izinler doğrultusunda SMS ve email ile kullanıcıya bilgi verip couchbase databesinde ilgili bilgiyi yazacaktır.

--

--