Merhaba arkadaşlar,

Bu makalemde günümüzde son derece popüler olan microservice mimarisindeki distributed transaction sorunlarına çözüm getiren 2PC (Two Phase Commit) Pattern’inden bahsedeceğim.

Distributed Transaction Nedir?

Microservice mimarisinde, monolithic sistemlerden ayrı olarak servisler ve veritabanları birbirinden ayrıştırılmıştır. Yani, transaction yönetimi monolithic uygulamalardakinden farklı olarak servis ve veritabanları dağıtıldığı için basit şekilde transaction açıp yönetmek pek mümkün değildir.

Transaction yönetimini monolith bir uygulamada şemaya dökersek;

Örneğimizde;

Bir kullanıcı monolithic bir sistemde bir Put Order işlemini gerçekleştirirse; sistem birden çok veritabanı tablosu üzerinde çalışan tek transaction oluşturur ve işlem başarılı ise commit ile akış tamamlanır. Herhangi bir adım başarısız olursa; işlem geri alınabilir (rollback). …


CQRS, ana odağı write (yazma) ve read (okuma) sorumluluklarının ayrıştırılmasına dayanan bir mimari tasarım modelidir. CQRS mimarisi, CQS ilkesi baz alınarak kurulmuştur. CQS’in ana fikrinden bahsetmek gerekirse; bir metot objenin durumunu değiştirmelidir ya da geriye bir sonuç dönmelidir, ancak 2 işlemi birden yapmamalıdır. (Detaylı bilgi için bknz.)

Uygulamalarınızda CQRS mimari modeline göre oluşturursanız; uygulamanızın performansını, ölçeklenebilirliğini ve güvenliğini en üst düzeye çıkarabilirsiniz.

Bu yaklaşımda metotlar 2 farklı modele ayrılmalıdır:

  • Commands: Objenin veya sistemin durumunu değiştirir.
  • Queries: Sadece sonucu geriye döner herhangi bir objenin veya sistemin durumunu değiştirmez.

Commands

Yeni bir veri eklemek ya da var olan veri üzerinde güncelleme yapmak için…


NoSQL; MsSQL, MySQL, PostgreSQL gibi ilişkisel veritabanı sistemlerine (RDMBS) alternatif olarak üretilmiş bir veritabanı sistemidir. Bu veritabanı çözümü, bize ilişkisel olmayan, esnek yapılı, büyük verili ve çok sayıda aktif kullanıcılı sistemlerde yüksek performans ve yönetim kolaylığı sunar.

Couchbase, document ve key-value tabanlı, memory-first yapısına sahip bir NoSQL veritabanı çözümüdür. Verileri JSON olarak tutar ve N1QL sorgulama diline sahiptir.

Couchbase Linkedin, EBay, Paypal gibi şirketler tarafından kullanılır. Couchbase dışında MongoDB, Cassandra, HBase gibi farklı NoSQL veritabanları da günümüzde sıkça kullanılmaktadır.

Kurulum ve Konfigurasyon (Installation & Configuration)

Couchbase’i Docker üzerinden ayağa kaldırarak başlayalım. İlk olarak

docker pull couchbase komutu ile Couchbase Server Image’imizi çekelim ve

docker run -d…


Merhaba arkadaşlar bu makalemde Asp.Net Core projemizde Elasticsearch ve Serilog kullanarak merkezi bir loglama sisteminin nasıl kurulacağından bahsedeceğim.

Kısaca kullanacağımız teknolojilerden bahsetmek gerekirse,

Elasticsearch: İçerik arama, veri analizi, sorgulamalar ve öneriler gibi işlemlerde özellikle performans kabiliyetleri, güçlü ve esnek olmasından dolayı tercih edilen full-text search arama motorudur. Java ile geliştirilmiştir ve Lucene altyapılıdır.

Kibana: ElasticSearch için açık kaynaklı bir veri görselleştirme arayüzüdür. Elasticsearch üzerindeki data’ları sorgulayabilir ve grafikler oluşturabilirsiniz.

Serilog: Asp.Net Core’da log’lamayı kolaylaştıran eklentidir. Çeşitli şekillerde log’lama yapabiliriz. Elasticsearch, SQL vs.

Peki bu sistemi tasarlarken ve oluştururken neden Elasticsearch kullandım?

  • Ücretsiz ve açık kaynak kodlu olması,
  • Restfull Api’ye sahip…


Merhaba arkadaşlar,

Bu makalemde Docker-Compose ve Docker Stack içerisinde kullandığımız YAML’den bahsedip örnek bir Docker-Compose dosyası oluşturup satır satır inceleyip makaleme son vereceğim.

Önemli Bilgi !!! Tüm docker-compose komutlarını docker-compose.yml ile aynı dizinde çalıştırmanız gereklidir. Komutları dizinin farklı seviyelerinden çalıştıramazsınız.

  • YAML Nedir ?

YAML, hem insan tarafından kolaylıkla okunabilen hem de sayısal olarak kolaylıkla işleme alınabilen ve tüm programlama dilleri tarafından kullanılabilen bir veri değişim formatıdır. YAML’ın açılımı Ain’t Markup Language’dir.

YAML dilinde yazılan veriler birçok programlama dilinde rahatça okunacak şekilde kütüphanelere sahiptir. Anahtar-değer (Key-Value) çiftlerinden oluşur.

Basit bir örnek ile açıklamak gerekirse;

Alışveriş listesini kategoriler şeklinde ifade etmek istersek…


Merhaba arkadaşlar,

Bu makalemde Dockerfile’ın ne olduğundan ve temel Dockerfile terimlerinden bahsedeceğim. Daha sonra basit bir Dockerfile oluşturup bu Dockerfile’dan Image oluşturarak makaleme son vereceğim.

Bir Container’ın çalışması için

  • İlk olarak Dockerfile oluşturulur.
  • İkinci aşamada, Dockerfile üzerinden Image oluşturulur.
  • Son olarak da bu Image’den Container’ı çalıştırırız.

Dockerfile, Docker Image’inin nasıl oluşturulacağının anlatıldığı bir talimat listesidir.

Docker’da base Image’ımize stract denir. Bizim kurduğumuz Image, Stract Image’ine Parent Image olarak oluşturulur.

  • Dockerfile Terimleri

Örnek bir Dockerfile dosyası oluşturmadan önce Dockerfile’ı oluştururken kullandığımız terimleri açıklayacağım:

→ #: Dockerfile içerisinde yorum satırı eklemek için kullanılır.

→ ADD: İstenilen dosya veya dosyaları Container içerisinde…


Merhaba arkadaşlar,

Bu makalemde Docker’ın ne olduğundan, bize ne gibi kolaylıklar sağladığından ve temel Docker komutlarından bahsedeceğim.

  • Docker Kurulumu:

Kuruluma başlamadan Docker’da sıklıkla kullandığımız terimlerin anlamlarını açıklayacağım:

Docker cli: Kullanıcının Docker-Daemon ile iletişime geçebilmesi için gerekli komut setini sağlar.

Image: İnternetten (docker hub) indirilen ve oluşturulan şablona denir.

Container: Docker Deamon tarafından birbirinden izole olacak şekilde çalıştırılan process’lere denir.

Docker Repository: Image’lerin oluşturduğu yapılardır.

Docker Deamon: Bütün CPU, Ram vb. işletim sistemine ait işlemlerin yapıldığı bölümdür. Hypervisor’a benzer. (Hypervisor için bknz.)

Dockerfile: Image’in detaylarını tanımladığınız dosyaya denir. Burada satır satır ne yapmak istediğimizi belirtiriz. (Diğer makalemde detaylı olarak bahsedeceğim.)

İlk…


Merhaba arkadaşlar,bu makalemde BFF yani Backend For Frontend’den bahsedeceğim.

Nedir bu BFF ?

Örnek bir senaryo ile açıklamaya çalışacağım.

Bu senaryonun 3 ana hattı olacaktır.

  • Web UI
  • Mobil App
  • 3rd party applications

Mikro-servis mimarisi ile geliştirdiğimiz bir e-ticaret uygulamamız olsun. Ürün detay sayfamız için bu mimariyi kullanarak geliştirme yapalım.

Peki ürün detay’da yer alacak bilgilerimiz ne olacak ?

  • Ürün ismi, açıklaması, kısa açıklaması vb. (Product Service)
  • Stok Kontrolü (Inventory Service)
  • Fiyat (Price Service)
  • Görüntülenme sayısı (Review Service)
  • Ürün yorumları (Comment Service) vb…

Gördüğünüz gibi ürün detay sayfamız için ufak bir senaryo’da bile 5 mikroservis ile iletişim halinde oluyoruz.

Burada aşağıdaki…


Merhaba arkadaşlar,

Bu makalemde Software Development Life Cycle sürecini hızlandırmak isteyen her kurumun dilinden düşürmediği yapılar ile ilgili bilgiler vermeye çalışacağım.

Continuous Integration:Geliştirilmesi yapılan kodu ilgili repodan alıp,testlerden(unit,integration vs.) geçirip,paketleyip, test edilecek ortama kurulumunu otomatize etme sürecidir.

CI araçlarının esas amacı bir yazılım projesinde birden fazla developer geliştirme yapması durumunda geliştirilen iş paketlerinin belli aralıklarla ana projeye entegre olmasını sağlamaktır.

Continuous Integration için örnek verebileceğim araçlar:

· Jenkins

· Travis CI

· Circle CI

Continuous Delivery: Başarılı ile build alınmış yapıyı bir ortama atmanın otomatik bir yoludur.Continuous Delivery işlemi manuel olarak yapılır!!!.Bu …


Bu makalemde daha önceki makalemde bahsettiğim Locking problemlerinin çözümlerinden bahsedeceğim.

ANSI standartlarına uygun olarak Locking problemini çözmek için 4 izolasyon seviyesi kullanılır.Bunlar Serializable,Repetable read,read committed ve read uncomitted olarak tanımlanmıştır.Tabloda yer alan diğer seviyeleri sql desteklemektedir.Aşağıdaki tabloda izolasyon seviyelerinin izin verip-vermediği durumlar ile ilgili bilgiler yer almaktadır.

Tabloyu kısaca özetleyecek olursak.Örnek vermek gerekirse repeatable read level’ını ele alırsak,eş zamanlı sorgularda sadece phantom read durumuna izin verecektir.Aynı şekilde serializable ve snapshot transaction’lar arasında oluşabilecek sorunlara izin vermez.

Read Uncommitted:En düşük isolasyon seviyesidir.Dirty read durumuna izin verir.2 farklı transaction için transaction’ların herhangi birinde işlem commit edilmemiş data’yı gösterir.Yani işlem hata alıp rollback…

Sefik Can Kanber

Senior Software Developer

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store