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 --name db -p 8091-8094:8091-8094 -p 11210:11210…


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 olması. Response’un JSON olarak dönmesi ve bu sayede veri sorgulama ve ekleme işlemlerinin…

Image for post
Image for post

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, meyve ve sebze olmak üzere iki kategoriye ayıralım. Burada alışveriş bir kategori olacak ve içerisinde iki anahtar içerecektir. Bu anahtarlar meyve ve sebze olarak belirlenir ve bu değerler birer liste olarak meyve ve sebzeleri içermektedir. …


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 belirtilen dizine eklemek için kullanılır. Url ile indirilen dosyayı belirlediğimiz dizine atmasını da sağlayabiliriz. …


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 olarak bilgisayarımızdaki işletim sistemine göre Docker’ı kurmalıyız. Bunun için buradan Docker Hub’a gidip uygun işletim sistemine göre ilgili kurulum adımlarını takip edip tamamladıktan sonra Docker işletim sisteminiz üzerinde çalışmaya başlayacaktır. …


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 gibi sorunlar bizi bekleyecektir. …


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.

Image for post
Image for post

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 olsa dahil yanlış data’yı gösterir.Yanlış …


SQL Server’da Transaction,Locking ve Deadlock Nedir ?

Bu makalemde veritabanlarında art arda işlem yaparken kullandığımız yapılardan bahsedeceğim.

Bir veya daha fazla sql ifadesini bir bütün olarak düşünen ve başarılı olması halinde sql ifadelerini kalıcı olarak istenilen değişikliği uygulayan veya hata olması halinde değişiklik yapmadan verileri aynı şekilde korunmasını sağlayan işleme transaction denir.Transaction işlemlerinin sağlıklı bir şekilde çalışmaya devam edebilmesi için ACID ilkelerini sağlaması gerekmektedir.

Veritabanları kullanıcılardan gelen istekleri ayrıştırabilmek için Locking’i kullanır.Peki nedir bu Locking ?

Bir kullanıcının işlem yaptığı tabloya transaction açması ve insert-update işlemlerine başlaması sonucunda başka bir kullanıcı bu tabloya ulaşmak istediğinde ilk kullanıcının işlemi tamamlamasını bekler.İşte bu yapıya Locking denir.İşlemlerin …


Merhaba arkadaşlar,

Bu makale serisinde .Net Core ile cache kullanımları hakkında bilgi vermeye çalışacağım.İlk olarak in-memory cache yapısıyla başlayalım.

Cache nedir ?

Son kullanıcıya gösterilen veriler arasından nadiren güncellenen verileri her istekte veritabanı üzerinden elde ederek kullanıcıya sunmaktansa, ilgili verileri belirli aralıkta önbelleğe alarak orjinal veriyi tekrar elde etmek yerine daha hızlı sonuçlar üretebilmemizi sağlayan yapılara cache denir.

.NET Core’da In-Memory Cache Kullanımı

.Net Core modüler bir yapıya sahip olduğu için içinde varsayılan olarak cache object bulundurmamaktadır.Bunu biz developer’lar bir kaç küçük ayarlama ile aktif edebiliyoruz.

.Net Core’da in-memory cache özelliğini açmak için Startup.cs içerisindeki ConfigureServices metoduna aşağıdaki gibi services.AddMemoryCache()

About

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