Ürün Yorumları Projesi - Bir CQRS implementasyonu

Mehmet Utku Tatlıdede
LCW Digital
Published in
2 min readOct 17, 2021

Ürün yorumları internet üzerinden alış veriş yaparken satın alma kararlarımızı etkileyen önemli bir özellik halini almış durumda. Olumlu olumsuz yorumları okumak benim için de kendi müşeri deneyimimde önemli bir parça.

Ürün ratingleri

Projemiz uzun zamandır gündemde olamasına rağmen nasıl ilerleneceği konusunda bazı belirsizlikler olduğu için beklemede idi. Sonunda inhouse olarak geliştirilmesine karar verildiğinde bizim için tamamen ayrı bir domain olarak sisteme eklenecek, hem dönüşümü devam ettireceğimiz hem de kullanıcı deneyimine önemli bir katkı sunabileceğimiz tam bir win — win durumu oluştu.

Şu ana kadar ilk servislerimizi canlıya almış hatırı sayılır bir yükü de karşıladığımızı görmüştük. bu sebeple her ürün görüntüleme işleminde yapılacak çağrı yükü konusunda içimiz rahat olarak ilerledik. Yine de canlıya alım öncesinden yaptıgımız yük testlerinden farklı dersler de çıkardık. buradaki iyileştirmeleri de Pars.Core a dahil ettigimizi için zamanla yayılmasınıda sağlamış olduk.

Gelelim CQRS bu işin neresinde konusuna. Command Query Responsibility Segragation özünde yazan kısım ile okuyan kısımların sorululuklarının ayrı olduğunu sistemimizi tasarlarken okuma ve yazma işlemini ayrı ayrı modellememiz gerektiğidir. Martin Fowler’in makalesini de henüz okumadı iseniz incelemenizi tavsiye ederim. Releational db de bir ürün ve ilişkili ürün yorumları olarak iki tablo ve joinler ile ürün yorumlarını tutuyoruz ancak iş okumaya gelince relational db den okumak yerine ürün ve ürüne ait yorumları tek bir dokumandan joinlere gerek kalmadan tek seferde okuyabiliyoruz. Tam da bu sebeple Okuma ve yazma veri modellerimizi ayrıdık. Sitemizde gözüken yorumlar elastic search üzerinden listeleniyor. Böylece reletaional db üzerinde çok az yük oluşturarak read işlemlerimizi performanslı Elastic Search üzerinden yönetimiş oluyoruz.

Pattern bize read write işlemlerimizi ayırmamızı söylediği için ürün yorumları domainimizde iki micro servis konumlandırdık. Tahmin edeceğiniz gibi biri command diğeri de query API. Query API Elastic Search Cluster üzerindeki read işlemlerini yapan ve Mobil App ve Web UI tarafından yoğun sorgulanan servislerimizi içeriyor. Command API görece daha az kullanılıyor ve yoğun dönemlerde Query API autoscale olurken Command API ‘ın pek kıpırdadığını görmüyoruz.

Ürün yorumları projesi sayesinde yeni gelecek projelerin de yeni yapıda implement edilmesini önü tamamen açılmış oldu. Diğer tarafan bu tip bir proje domain ekiplerimizde ilk kez ele alınacak ise platform ekibimizden yazılımcı arkadaşlar ile peer ederek çalışmayı yürüterek hem süreci hızlandırdık hem de dönüşüm işini domain ekiplerine indirmiş olduk. Her domainde başarılı bir örneğiniz olması ve en az bir dönüşüm elçiniz olması dönüşümü başarmak için olmaz ise olmazdır.

Ürün detay safasında yorumların detaylarına ulaşabilirsiniz

--

--