Mimari
Satır düzeyinde, şema düzeyinde ve hibrit veri yalıtımı. Üçünü de canlı sistemlerde uyguladım; her birinin avantajlarını ve zorluklarını gördüm.
Bu deneyimler hangi koşulda neyi seçeceğimi şekillendirdi.
ÇOK KİRACILI SaaSİstanbul’da yaşayan bir yazılım mimarıyım.
On yıldır ekiplerin işletebileceği, geliştirebileceği ve sahiplenebileceği sistemler kuruyorum.
Araçları ihtiyaca göre seçerim: mümkün olduğunda açık kaynak, anlamlı olduğunda yönetilen hizmetler.
Mimari kararlar geleceğe dair varsayımlara dayanır. Zaman içinde geçerliliğini koruyacak seçimler yapmaya çalışırım.
Ekiplerle birlikte, gerekçesini anlayabilecekleri, bakımını üstlenip geliştirebilecekleri çözümler tasarlarım.
Satır düzeyinde, şema düzeyinde ve hibrit veri yalıtımı. Üçünü de canlı sistemlerde uyguladım; her birinin avantajlarını ve zorluklarını gördüm.
Bu deneyimler hangi koşulda neyi seçeceğimi şekillendirdi.
ÇOK KİRACILI SaaSEkiplerin monoliti ne zaman servislere ayırması, ne zaman tek parça tutması gerektiğini değerlendirmelerine yardımcı olurum.
Sınırlar netleştiğinde ve ekip bu yapıyı işletebilecek durumdayken ayırmak anlamlıdır.
MONOLİTTEN MİKROSERVİSLEREGüvenilir arka plan görevleri, çift yönlü veri akışları ve olay işleme hatları kurarım. Araçları sistemin gecikme gereksinimlerine göre seçerim.
İş kuyrukları ile olay akışları farklı ihtiyaçları karşılar. Seçime sistemin ihtiyacından başlarım.
ASENKRON VE GERÇEK ZAMANLI10 yıllık PHP hâlâ para kazandırıyor mu? Saygı duyarım. Yeniden yazmadan 10 yıl daha yaşatmanın yoluna bakarım.
İşini yapmaya devam eden kodun değerini bilirim.
MEVCUT SİSTEMLERCI/CD, Docker orkestrasyonu, otomatik dağıtım, gözlemlenebilirlik ve kullanışlı monorepo iş akışları kurarım. Açık kaynak araçlarla geliştirme ortamının kontrolü ekipte kalır.
İyi bir geliştirme ortamı, ilk günden zaman kazandırır.
GELİŞTİRİCİ ORTAMIŞirket satın alımı, yatırım turu veya büyük bir geliştirme yatırımı öncesinde kod tabanını inceler, riskleri açıkça ortaya koyarım.
Her kod tabanı, okumayı bilirsen gerçeği söyler.
TEKNİK DEĞERLENDİRMESAGENTIQ'yu, ekiplerin danışmanlık ve eğitim yoluyla yapay zekâyı işlerine katmalarına yardımcı olmak için kurdum. Buradaki mühendislik yaklaşımını kurumların ihtiyaçlarına taşıyorum.
SAGENTIQ'yu keşfetOn yıllık mimari kararlarla şekillenen görüşlerim. Bazıları tartışmaya açık. Gerekçesini okumak için birini aç.
Bu maliyeti gecikmeyle, zorlaşan hata ayıklamayla ve operasyonel karmaşıklıkla ödersin. Servis sınırları ekip için netleşene kadar monoliti korurum. Erken bölünmek, başlangıçtaki sorunu çözmeden aylar kaybettirebilir.
Yönetilen bir servisin sundukları, sağlayıcıya bağımlılığı kabul etmeye değebilir. Tercihimi yapmadan önce maliyetleri ve başka bir çözüme nasıl geçeceğimi anlamak isterim; zamanla ikisini de yönetmek zorlaşabilir. Bulut sağlayıcısını değiştirebilmek benim için önemli.
Geliştirici deneyimini işin başında ele alırım. Uygulama kodundan önce Compose yapılandırmasını yazarım. Yeni bir ekip üyesinin çalışma ortamını ne kadar hızlı kurabildiği, mimari hakkında da bir şey söyler.
Mimari karar kaydı (ADR), bir kararın neden alındığını anlatır; README ise projeye yeni katılan kişinin başlamasını kolaylaştırır. Altı ay sonra gerekçeyi ben de unutabilirim. Projeyi devralan kişinin de bu bilgiye ihtiyacı var.
Kafka, olayları kalıcı olarak saklayan ve yeniden işlemeye imkân veren bir kayıt yapısı sunar. Onu bu özellikleri için kullanırım. Uygulama ilişkisel sorgulara ihtiyaç duyuyorsa bu işi buna uygun bir veritabanında tutarım.
Kolayca geri alınabilen kararları önemserim. Eklediğimiz her tasarım desenini bir gün kaldırmamız gerekebilir. Sistemi tasarlarken bunun maliyetini de düşünürüm.
Yönetilen servislerin maliyeti faturada görünür. Açık kaynakta ise maliyetin daha büyük bir kısmı ekibin harcadığı mühendislik zamanıdır. Seçenekleri karşılaştırırken ikisini de hesaba katarım. Bağımsızlık önemliyse açık kaynağa verilen emeğin çoğu zaman karşılığını bulduğunu düşünürüm.
Ortak tablolarda tenant_id kullanmak, birçok SaaS ürünü için pratik bir başlangıçtır. Ayrı şemaların ve ayrı veritabanlarının sağladığı yalıtım düzeyi ile işletim maliyeti farklıdır. Seçimimi diyagramın görünümünden çok müşteri gereksinimlerine ve bütçeye göre yaparım. Mevzuat ve verinin hangi ülkede tutulması gerektiği de bu gereksinimlere dahildir.
Trafik saniyede 10.000 isteğe ulaşmadan, henüz 10 istek düzeyindeyken metrikleri görmek isterim. Prometheus ve Grafana'yı erken kurmak, büyümeyle birlikte sorunları teşhis etmek zorlaşmadan sistemi anlamamı sağlar.
Dört senaryoyu incele: başarı, ret, istek sınırına takılma ve yavaş yanıt. Bir isteği takip ederek zamanın nerede harcandığını ve yanıtı hangi kararların şekillendirdiğini gör.
Örnek bir istek akışı. Kodlar ve süreler anlatım amaçlıdır; canlı sistem ölçümü değildir.
TLS bağlantısını sonlandırır, bağlantı havuzunu yönetir ve yoğun trafiğe karşı ilk sınırı uygular.
# nginx.conf
location /api {
limit_req zone=api burst=20;
proxy_pass http://backend;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Request-ID $request_id;
}Kullandığım, denediğim veya geride bıraktığım araçlar. Dört kategori ve beş halka, her birinin günlük işlerimde ne kadar yer tuttuğunu gösteriyor.
// haritayı keşfet veya aşağıdaki teknoloji listesini aç
Sık karşılaştığım sorunlar, günlük mühendislik alışkanlıklarım ve öğrenme yöntemlerim. Kararların arkasındaki çalışmaya daha yakından bir bakış.
Unvanlar ve teknolojiler değişiyor, sorunlar çoğu zaman tanıdık geliyor. On yıl boyunca farklı ekiplerle uğraştığım sorunlardan bazıları bunlar.
// on yıllık deneyim · yaklaşık sayılar · müşteri ayrıntıları gizli
Sık karşılaştığım başlangıç koşulları ve ekiplerle birlikte kurmayı hedeflediğim çalışma düzeni.
Çalışan bir sistem, bildiklerimi sınayabileceğim bir yer açar. Bu alışkanlıklar hem kendi kararlarımı sorgulamama hem de birlikte çalıştığım insanlardan öğrenmeme yardımcı olur.
Bir teknolojiyi derinlemesine öğrenmek için kimlik doğrulama, kuyruklar, CI/CD, Docker ve testler içeren bir başlangıç projesi hazırlarım. Onu üç gerçek projede kullanmak, bir eğitimden çok daha fazlasını öğretir.
Canlıya geçmeden önce test ortamında bilinçli olarak hata senaryoları oluştururum. Canlı sistemlerdeki arızalar da yazıya dökülmemiş varsayımları ortaya çıkarır ve bize somut dersler verir.
Bir araç ayda 500 dolar istiyorsa, nedenini anlamak isterim. Çoğu zaman işlevlerinin %80'ini bir hafta sonunda geliştirebilirim. Kalan %20, satın almanın mı yoksa geliştirmeye devam etmenin mi doğru olduğunu gösterir.
Fikirleri araştırmak ve varsayımlarımı sorgulamak için yapay zekâ kullanırım. Bir problemi modele anlatırken, henüz anlamadığım noktalar çoğu zaman ortaya çıkar. Verdiği cevapları yine doğrulamak gerekir.
Bir konuyu başkasına anlatmak, nerede eksik kaldığımı gösterir. Ekiplerle gerçek örnekleri beyaz tahtada ve birlikte kod yazarak ele alırım. Sorulara her zaman yer vardır.
Yapmak deneyim kazandırır.
Kararlarımı sorgulamak, o deneyimi kullanmama yardımcı olur.
İkisine de zaman ayırmaya çalışırım.
Klavyeden uzak kaldığımda yaptıklarım. Gerçi kendimi yine bir şeylerin nasıl çalıştığını düşünürken buluyorum.
Gitar çalıyorum. Ritim tutmak ve bir pasajı temiz çalana kadar tekrar etmek sabır istiyor. Kod yazarken de benzer bir sabra ihtiyaç duyuyorum.
Risk yönetimini, sistem arızalarını incelemeye başlamadan önce motosiklet üzerinde öğrendim. Hızın keyfi, frenine güvenebilmekte.
Fotoğraf çekerken neyi öne çıkaracağıma, neyi kadrajın dışında bırakacağıma karar veririm. Ürün geliştirirken de kendimi benzer sorular sorarken buluyorum.
Bir mimari kararı mı değerlendiriyorsun, karmaşık bir sistemi mi çözüyorsun, yeni bir fikir mi araştırıyorsun? Üzerinde çalıştığın konuyu anlat.
cihantaylan@cihantaylan.comHer mesajı okurum. Biraz bağlam paylaşırsan, konuşmaya iyi bir yerden başlayabiliriz.