17 Ağustos 2024 Cumartesi

Developer Mülakat Soruları - 3 - Database & Microservice

     S.A. Arkadaşlar,

    Bildğiniz gibi bir yazılımcıdan artık sadece kodu yazması ve arkasına yaslanması beklenmiyor. Bunun yanında farklı beklentiler de oluşuyor. Bu yüzden bu sefer de veritabanı (kapsamda hep vardı aslında ama kapsamı genişledi) ve mikroservis ile ilgili mülakat sorularını toparlamaya çalıştık. Biliyorum ki bu konu çok geniş ama çok derinlerine girmeden böyle bir toparlamanın faydalı olabileceğini düşündük, umarım öyle de olur. Hazırsak başlayalım.

Soru: Docker depends on nedir?

Cevap: Bir image ayağa kalkmabilmesi için bağımlı olduğu diğer image'lerdir.


Soru: Image nedir?

Cevap: Dockerfile’daki talimatlara göre statik yapıda oluşan dosyadır. Katmanlı yapıya sahip olup yerel değişiklik yapma imkanı verir. Ayrıca cachleme işlemi yaparak tüm işlemi baştan yapılmasına da gerek bırakmamaktadır.


Soru: Container nedir?

Cevap: Diğer tüm katmanlar container için oluşturulur. Tüm bu yapılar container içerisinde ayağa kalkar. Bu nedenle docker’in beyni dersek sanırım yanlış bir şey söylemiş olmayız. Sanal makine mantığına benzeyip kendine has bileşenleri vardır, bu sayede bağımsız bir ortam oluşturabilir.


Soru: Dockerfile nedir?

Cevap: Docker’a image oluşturmak için oluşturulan bir metin belgesidir. Kendisine has komutları vardır. Dockerfile ismiyle oluşmadığı takdirde komutlarla birlikte parametre ile göndermek zorundayız.


Soru: compose nedir?

Cevap: Karmaşık uygulamaların çalıştırılmasını sağlayan docker aracıdır. Birden fazla cotainer’i tek bir dosyada toplayarrak uygulamanın ihtiyaç duyduğu tüm gereksinimlerle birlikte ayağa kaldırarak ihtiyaç duyulan ortamı ayağa kaldırır.


Soru: Docker volume ne işe yarar?

Cevap: Verilerin kalıcı bir şekilde saklanmasını sağlar. Verilerin kalıcılığını sağlayan 2 yapı mevcuttur. Bu 2 yapıdan biri olan volume bu işleri otomatik yaparken mount ile bazılarını manual olarak yönetmek zorundayız.


Soru: Swarm nedir?

Cevap: Farklı sunucularda docker uygulamalarının yönetilmesini sağlar. Kubernates’in alternatifi olarak ele alabiliriz. Docker içerisinde geldiği için öğrenimi daha kolaydır. Başlangıçta inactive gelir. Bunu docker swarm init ile aktif hale getirmemiz gerekecektir. [Dahası]


Soru: Docker file nasıl çalışır ne yapar.

Cevap: Docker temel olarak bir işletim sisteminin üzerinde container oluşturmak ve container'da uygulama dağıtımını otomatikleştirmek için linux çekirdeği özelliklerini kullanan bir container engine'dir.

Docker sanal makineden farklı olarak, bütün bir sanal işletim sistemi oluşturmak yerine, linux çekirdeğini paylaşarak birbirinden izole bir şekilde sistemi kullanmasına olanak sağlıyor.


Soru: Podman Nedir?

Cevap: Docker'a alternatif olarak ortaya çıkmış, fakat docker'den bazı noktalarda farklılığı olan, bununla birlikte tüm docker komutlarını çalıştırabildiğiniz bir container engine'dir. [Dahası]


Soru: Kubernetes ve Docker Swarm arasındaki farklar nelerdir?

Cevap: 1. Kubernetes'te uygulamalar, bölmeler, dağıtımlar ve servislerin bir kombinasyonu olarak dağıtılır. Docker Swarm'da uygulamalar servisler şeklinde dağıtılır

2. Kubernetes'te otomatik ölçeklendirme özelliği mevcuttur. Docker Swarm'da otomatik ölçeklendirme özelliği mevcut değil.

3. Kubernetes'te iki çeşit health check vardır. Bunlar; liveness , readiness ve startup probes'dir. Docker Swarm'da health check servislerle sınırlıdır.

4. Kubernetes'i kurmak ve yapılandırmak zordur. Docker Swarm'ın kurulumu ve kullanımı kolaydır.

5. Kubernetes'in hata toleransı düşüktür. Docker Swarm'ın yüksek hata toleransı vardır.

[Osman Secer'den alıntı]


Soru: Blue Green, A/B ve  Canary Releases kısaca açıklayabilir misiniz?

Cevap: Service deployment durumunda sistemin durması mümkün değil ise, web server (iis ngnix) ya da fiziksel ya da service load balancer üzerinde fail durumunda requestlerin aktarılması için iki adet aynı görevde servis kurulmasıdır. İşlem sonunda yeni servis başarılı durumda ise servis devam eder. Değişikler blue ortama atılıp test ediliyor, her şey yolunda görünürse yeşil durdulur, aksilik durumunda yeşil aktif edilir

    Blue/Green uygulamanın yeni bir versiyonunu güncelleyip tüm fonksiyonlarını değiştirebilir ancak A/B Testing uygulama içerisindeki sadece bir özelliği değiştirmek için kullanılır

    Canary Releases: Versiyonu tamamen değiştirip test etmektense mevcut versiyonlara ek olarak küçük bir yeni versiyon ile testler gerçekleştirilir. [Dahası]


Soru: OCI standartı hakkında bir fikriniz var mı?

Cevap: 2015 yılında Docker, Red Hat, CoreOS, SUSE, Google ve diğer linux container endüstrisindeki liderler “Open Container Initiative” adı altında bağımsız bir oluşum kurdular.Bu çatı altında container image ve container runtime standartlarını belirleyip container/image ve container/storage github repolarında paylaşıma açtılar. [Dahası]


Soru: Yatay ve Dikey büyüme nedir, ne gibi farkları vardır?

Cevap: Dikey büyüme kaynakların güçlendirilmesi olarak geçmektedir. Yatay büyüme ise sistemlerin büyümesini ele alır. Ek sunucu koymak buna örnek olabilir. Dikey büyüme nispeten daha kolay ama daha maliyetlidir. Yatay büyüme sistemsel ve yazılımsal olarak daha maliyetli ve kurgusal daha karmaşıktır, ancak maddi olarak daha ucuzdur.


Soru: Domain Event ve Integration Event nedir, ne gibi farkları vardır?

Cevap:  Her ikisi de mikroservis yapıda asenkron iletişimde kullanılır. Domain Bir sistem içindeki domain bilgisi ile alakalıdır. Integration ise birbirinden bağımsız sistemler için daha çok tercih edilir. [Dahası]


Soru: Transaction nedir?

Cevap: Transaction yapılan işlemin fail olduğu durumda işlemin rollback yaparak veri tutarlılığını sağlar.


Soru: Saga ve Two-Phase Commit (2PC) nedir?

Cevap: İkisi de  dağıtık sistemlerde veri bütünlüğünü sağlayan yapılardır. Saga daha esnek yapılarda kullanılması tavsiye edilirken 2PC veri bütünlüğünün daha sıkı olduğu yapılarda kullanmak daha doğru olacaktır. 2PC bunu yaparken de performanstan taviz vererek bloklayıcı bir yapı sunmaktadır.


Soru: CI/CD nedir? İki kavramı birbiri yerine kullanabilir miyiz?

Cevap: CI (Continous Integration) kodların sürekli merkezi depoya göndererek oluşabilecek entegrasyon hatalarının önüne geçmektir. CD (Continuous Delivery) ise kodun her daim canlıya göndermeye hazır halde olmasıdır. CD (Conitunous Deployment) ise bu kodun otomatik olarak canlıya gönderilme işlemidir.


Soru: Message bus ve message broker nedir? Aralarındaki farkı kısaca açıklar mısınız?

Cevap: Her iksii de dağıtık sistemlerde mesaj gönderimini sağlar. Bus merkezi bir yapı kurgularken broker ise kaynak ile hedef arasında bir köprüdür. Bus basit ve karmaşık olmayan bir iletim sağlarken broker daha karmaşık yönlendirme, kuyruklama gibi yapılar sunmaktadır.


Soru: Load balancer, reverse proxy, api gateaway farklarından bahseder misiniz?

Cevap: [Dahası] [Dahası]


Soru: Bulut bilişim tipleri nelerdir, hangi durumlarda hangileri tercih edilebilir?

Cevap 

Public: İnternet üzerindeki sağlayıcıların herkese açık olan bulut hizmetidir.

Private: Bulut servislerinin kullanıcıya özel sunulmasıdır.

Hibrit: Public ve private ortamların entegre olmasını sağlayarak kullanılan hizmettir. [Dahası]


Soru: Genel (Public) bulut servis modelleri nelerdir? 

Cevap:

IaaS: Bilgi işlem, depolama ve ağ yönetimi gibi hizmetler sunar.

PaaS: IaaS'e ek olarka yazılım geliştirme, iş zekası ve veri tabanı hizmetleri sunar.

SaaS: Servislerin hizmete sunulup direkt kullanılmasını sağlayan modeldir. [Dahası]


Soru: Kubernetes deployment stratejilerinden bahsedebilir misiniz?

Cevap:
Rolling: K8s'in varsayılan deployment yöntemidir. Var olan sürümü günceliyle kesinti olmadan yapar.

Recrate: Eski versiyonları kapatıp yenileri devreye alır. Kesintiye sebebiyet verebilir.

Ramped Slow Rollout: Rolling'e göre kademeli geçiş yapar.

Blue Green: Eski sürüme Blue, yeni sürüme Green denir. Geçiş başarılı ise green devreye alınır.

Canary: Yeni olan bazı özellikleri test etmek için kullanılır.

Shadow: Son kullanıcı etkilemeden eski ve yeni sürüm birlikte kullanılır.

A/B Testing: Belirli bir kullanıcı grubuna açılan deployment grubudur.  [Dahası]


Soru: Rancher ve OpenShift nedir, farklarından bahseder misiniz?

Cevap: Rancher K8s cluster'lerını dağıtım ve yönetimini kolaylaştıran açık kaynaklı bir platformdur. Rancher ise Red Hat tarafından geliştirilen benzerleri işlemleri yapar. [Dahası]


Soru: Mikroserislerde servisler arası haberleşmeden bahseder misiniz?

Cevap: Request Driven modeli bir serviste bir ihtiyaç duyuldukça yapılan istektir. Bağımlılığı artırdığı için mümkün mertebe az kullanmak iyi olacaktır. Bunu rest veya gcp ile yapabilirsiniz. Event Driven ise servisler arası "event" fırlatarak yapılan iletişimdir. Bir de her iki yapıyı birlikte kullanabildiğiniz hibrit yapılar mevcut. [Dahası] [Dahası]


Soru: Sql ve NoSql farkları nedir? Hangi durumlar hangisini kullanmak daha doğru olur?

Cevap: İlişki ve ilişki olmayan veri tabanı tipleridir. İkisinin de birbirine göre avantaj ve dezavantajları vardır. Özetle sql veri tabanı veri bütünlüğünün daha kritik olan yerlerde kullanılması tavsiye edilir. Veri bütünlüğü sql veri tabanlarındaki kadar kritik değil ise tercih edilebilir. Performans olarak çok daha hızlıdır. CAP teroimindeki kurala göre NoSql veri tabanları genelde tutarlılıktan ödün verirken, Sql veri tabanları bölünme kısmında feragat ederler.


Soru: SQL join türleri nelerdir?

Cevap: Inner join: Her iki tablodaki kesişen kısımları alır.

Left/Right: Bir tabloda olan tüm kayıtları ve diğer tablodaki koşulları sağlayan koşulları alır.

Full join: İki tablodaki tüm kayıtları alır. [Dahası]


Soru: İndex nedir? Kaç çeşit index yapısı vardır?

Cevap: Veritabanı tabloları üzerinde oluşan ve verimli daha hızlı getirmek için kullanılan yapılardır. Mssql'de Id default index olarak kabul edilir. Index'in olmadığı takdirde insert hızı artsa da select hızı oldukça düşmektedir. Bunu bir odaya düzensiz atılan eşyalar olarak düşünebiliriz. Belki ilk attığımızda bu iş kolay olur, fakat onları bulmaya çalıştığımızda daha fazla zorlanırız. Cluster ve Non-Cluster  olmak üzere 2 çeşit index vardır. [Dahası]


Soru: No lock nedir? Pessimistic ve optimistic lock mekanizmalar hangi mantıkla çalışır?

Cevap: With (Nolock) ifadesi o anda yapılan insert, update veya delete işlemlerine bakmaksızın verileri getirmede kullanılan bir işlemdir. Böyle bir ifadeyi sorgumuzda kullandığımız zaman son değişikliği görmeden tüm kayıtları çekmiş oluruz.


Soru: ACID ve CAP Teoremi nedir?

Cevap:

Atomicity: Transaction işlemlerinin bir bütün olarak ele alınmasıdır. Ya hep ya hiç kuraldıır.

Consistency: Verinin tutarlılığıdır.

Isolation: Aynı anda aynı veri üzerindeki işlemleri yönetme işidir.

Durability: Transaction sırasında fiziksel oluşabilecek hatalara karşı korunma isteğidir.


Consisteny (Tutarlık): Verinin tutarlığı olma kuralıdır.

Avability (Erişirlik): Veri tabanların her daim erişilebilir olmasıdır. 

Partition (Bölünme): Sunucular arasındaki bağlantı gitse dahi sistemin çalışmasıdır.


Soru: Primary Key varsayılan olarak indeksli halde mi gelir? 

Cevap: Evet


Soru: Veritabanlarında isoloation seviyelerinden bahseder misiniz?

Cevap: 

Read Uncommitted: En düşük seviyedir, dirty data izin verir. Rollback dahi olsa yanlış veriyi gösterir.

Read Committed: Mssql'in varsayılan işlemidir. Dirty data izin vermez. Commit ve rollback yapılmalı.

Repetable Read: Sadece phantom-read durumuna izin verir.

Serializable: Locking olmaz. 2 işlem aynı anda update insert izin vermez, select'e izin verir. [Dahası]


Yazıyı aşağıdaki ayet-i kerime ile bitirelim.

"Andolsun, Biz sizi biraz korku, açlık ve bir parça mallardan, canlardan ve ürünlerden eksiltmekle imtihan edeceğiz. Sabır gösterenleri müjdele." Bakara Suresi, 155. ayet:



Hiç yorum yok:

Yorum Gönder