Ölçeklenebilirlik, bir yazılımın büyüme altında işlevini ve davranışını koruyabilmesi; kayıt, istek ve kullanıcı sayısı artarken yeniden kurulmaya ihtiyaç duymamasıdır. Tanım hangi sayının artacağını söylemiyor; o sayı adlandırılmadan teklifteki “ölçeklenebilir” sözü denetlenebilir bir vaat olmuyor. Vipkurum’da artan sayı, kullanıcı sayısı değil kurum sayısıdır.
Ölçeklenebilirlik nedir: yazılımda ne anlama gelir
Tanımın iki yarısı var ve ikisi ayrı şeyler söylüyor. Birinci yarı davranışla ilgili: kullanıcı, kayıt ya da istek sayısı artarken sistemin aynı işi aynı biçimde yapmaya devam etmesi. İkinci yarı yöntemle ilgili: bu artışı karşılamak için sistemin baştan kurulmak zorunda kalmaması. Bir yazılım büyümeyi yalnız yeniden yazılarak karşılıyorsa büyümeye dayanmış olur, ama ölçeklenebilir sayılmaz. Kelimenin iş dünyasında ikinci bir anlamı da var: ekip ve maliyet aynı hızda büyümeden geliri büyütebilen iş modeli. Bu yazı yazılımdaki anlamı alıyor; öteki anlam ayrı bir konu.
Aramada iki terim hemen karşınıza çıkıyor: dikey ve yatay ölçeklendirme. Birincisi işin yapıldığı makineyi güçlendirmeye, ikincisi işi birden fazla makineye dağıtmaya bakıyor. İkisi de büyümenin karşılanma yöntemini adlandırıyor; hangi sayının büyüyeceğini ise ikisi de söylemiyor. Hangi yöntemin gerektiği bu yazının sorusu değil, çünkü o karar büyüyecek şeyin adı konduktan sonra veriliyor.
Ölçeklenebilirliğin bir derece olduğunu da söylemek gerekiyor. Hiçbir yazılım her büyümeye açık değil; her sistem belli bir büyümeyi kurgusuna göre karşılıyor ve başka bir büyümede zorlanıyor. Bu yüzden soru “ölçeklenebilir mi” değil, “hangi büyümede ölçeklenebilir” biçiminde kuruluyor.
Tanımın sustuğu yer bu yazının başladığı yer. “Sayı arttığında” ifadesi hangi sayıyı kastettiğini söylemiyor; cevap işletmeden işletmeye değişiyor ve cevabın değişmesi tanımın eksikliği değil, alıcının doldurması gereken boşluk. Teklifte okuduğunuz “ölçeklenebilir” sözü de o boşluk doldurulmadan denetlenemiyor.
Ölçeklenebilirlik bir hız değildir
İki kelime kolayca tek kalem sanılıyor. Performans bugünkü yük altında ölçülen bir süre: bir sayfanın açılışı, bir isteğin cevaplanması, bir raporun çıkması. Ölçeklenebilirlik ise aynı sistemin yük büyüdüğünde o süreye ve davranışa ne yaptığı. Biri bugün yapılan bir ölçüm, öteki yarına sorulan bir soru.
Gösteri ortamı bu karışıklığı besliyor. Ekranlar az kayıtla açılıyor, her şey anında geliyor ve izleyen taraf gördüğü hızı bir büyüme güvencesi gibi okuyor. Oysa o gösterimde ölçülen şey bugünün yükü; kayıt sayısı büyüdüğünde aynı ekranın ne yaptığı orada görünmüyor.
Hız ile büyüme birbirinden bağımsız: biri iyiyken öteki kötü olabiliyor. Bugünkü yükte hızlı açılan bir ekran, yük arttığında tıkanabiliyor; bugün yavaş olan bir rapor, yük arttığında aynı yavaşlıkta kalabiliyor. Hızlı bir sistem ölçeklenebilir olduğunu kanıtlamıyor, yavaş bir sistem de ölçeklenemez olduğunu. Teklifte gördüğünüz hız ölçümü bu yüzden ölçeklenebilirlik sorusunu cevaplamıyor.
Ayrımın pratik karşılığı şu: hız ölçümü bugünün tanığı, büyüme sorusunun tanığı değil. Bir ekranın bugün ne kadar sürede açıldığını ölçebiliyorsunuz; aynı ekranın kayıt sayısı büyüdüğünde ne yapacağını ölçmek için o kaydın nasıl tutulduğuna bakmak gerekiyor.
Tersi de söylenebiliyor: ölçeklenebilir bir sistem hızlı olmak zorunda değil. Yük büyüdükçe davranışı bozulmayan bir sistem, bugün de yarın da aynı ölçülü yavaşlıkta çalışabiliyor. Alıcı için iyi haber burada: iki soru ayrı ayrı sorulabiliyor ve ayrı ayrı cevaplanabiliyor.
”Büyüdükçe ölçeklenir mi” sorusunun eksik yarısı: ne büyüyecek
Alıcının kendi sorusu şu biçimde geliyor: büyüdükçe ölçeklenir mi? Soru yarım, çünkü içinde büyüyecek şeyin adı yok. Cevap veren taraf da aynı yarımlıkla cevaplıyor ve iki taraf anlaştığını sanarak masadan kalkıyor. Katmanın ne zaman eklendiği sorusunun cevabını “Büyüdükçe ölçeklenir mi?” sorusunu cevapladığımız web yazılım sayfasında bulabilirsiniz; bu yazının derdi o cevabın öncesinde duran boşluk.
Boşluğu doldurmak için büyüyecek şeyi adlandırmak gerekiyor ve portföyümüzde bu ad dört ayrı biçimde çıkıyor. Bir eğitim platformunda artan şey kurum sayısı oluyor. Bir sınav değerlendirmesinde sınavın okutulduğu nokta sayısı artıyor. Bir hava durumu sitesinde tarih ve konum kırılımı çoğalıyor. Bir parfüm mağazasında aynı koku birden çok hacimde satılıyor ve sayılan şey bu hacimler.
Dördünün ortak noktası tek: hepsi “sayı artıyor” cümlesine sığıyor. Ayrıldıkları yer ise sistemin hangi noktasını zorladıkları. Kurum büyümesi veri sınırını zorluyor, nokta büyümesi tek merkeze bağlı adımı, kayıt büyümesi sayfa yapısını, katalog büyümesi kayıt modelini. Teklif masasında bu ayrım bir cümleye sığıyor: beklediğiniz büyümenin adını siz söylemezseniz, cevap başka bir büyümeye verilmiş olabiliyor.
Adı koymanın pratik yolu geçmişe bakmak. Geçen dönemde sizde hangi sayı arttı: kurum mu, nokta mı, kayıt mı, ürün mü? Önümüzdeki dönemde hangisinin artacağını da aynı listeden seçebiliyorsunuz. Bu cevap teklif görüşmesine yazılı olarak götürülebiliyor.
Adlandırma işi alıcıda kalıyor, çünkü hangi büyümenin geleceğini işi yürüten taraf biliyor. Yazılımcı tahmin edebiliyor; bilemiyor. Beklenen büyümenin adı masaya konduğunda veri yapısı o ada göre kuruluyor, konmadığında ise varsayılan bir büyümeye göre kuruluyor ve o varsayım yazılı hiçbir yerde durmuyor.
Kurum sayısı büyüdüğünde büyüyen şey sınırdır
Birden fazla kurumun aynı sistemi kullandığı bir işte çoğalan şey kullanıcı değil sınır oluyor. Her yeni kurum kendi verisiyle, kendi adıyla ve kendi görünümüyle geliyor; komşusunun kaydına değmemesi gerekiyor. Büyüme burada bir ayırma sorusuna dönüşüyor: aynı çatı altında kaç ayrı sınırın tutarlı kalabildiği sorulmuş oluyor. Bu büyümenin yanlış cevabı her kurum için ayrı bir kopya kurmak: o zaman büyüme kurum sayısıyla değil kurulum sayısıyla ölçülmeye başlıyor.
Vipkurum’a yeni bir eğitim kurumu katıldığında kimse yeni bir sistem kurmuyor; platform tek kalıyor ve kurum onun içinde kendi adıyla tanımlanıyor. Bu yapının nasıl kurulduğunu çok kiracılı sistemlerin kurulumunu anlattığımız yazıda açtık.
Bu büyüme her işte bulunmuyor. Tek kurumla çalışan bir yazılımda sınır sorusu hiç doğmuyor ve kurum sayısı için verilen cevap o işletmeye hiçbir şey kazandırmıyor. Birden fazla sınırı baştan kurmak, gelmeyecek bir büyüme için bugün bedel ödemek oluyor.
Şube sayısı büyüdüğünde kırılma noktası tek noktadır
Şubesi ya da iş yapılan noktası çoğalan bir işte büyüyen şey aynı anda iş yapılan yer sayısı oluyor. Burada kırılma hacimde değil, herkesin aynı yere bağlı olduğu tek bir adımda çıkıyor. O adım bir cihaz olabiliyor, bir kişi olabiliyor, bir onay olabiliyor; nokta sayısı arttıkça sıra uzuyor ve o adım durduğu gün bütün noktalar duruyor.
Tek nokta her zaman bir cihaz değil. Onayı tek kişi veriyorsa nokta sayısı arttıkça o kişinin masası sıraya dönüşüyor; kaydı tek ekip giriyorsa aynı şey o ekibin önünde oluyor. Sorunun adı donanım değil, tekillik.
Bu büyümede ölçeklenebilirlik, o tek adımı güçlendirmek değil ona olan bağımlılığı kaldırmak oluyor. İkinci bir cihaz almak işi ikiye bölüyor; bağımlılık yerinde kalıyor, çünkü iş yine belli bir donanımın çalışmasına bağlı. Bağımlılık ancak adımın her noktada yapılabilir hâle gelmesiyle kalkıyor ve bu bir satın alma kararı değil bir tasarım kararı.
Vipkurum’un optik okuma aracında okuma tek merkezdeki cihazdayken o cihazın arızası bütün kurumun sınav değerlendirmesini durduruyordu; bugün her şube kendi sınavını kendi yerinde okutuyor. Cihaz olmadan okumanın nasıl yapıldığı optik okuyucu olmadan sınav değerlendirmeyi anlattığımız yazının konusu.
Tek noktayı kaldırmak her bağımlılığı kaldırmıyor. Okuma nerede yapılırsa yapılsın, sonucun doğruluğu girdinin düzgünlüğüne bağlı kalıyor: yanlış doldurulmuş bir form her yerde yanlış okunuyor. Kalkan şey tek bir yere bağlı olmak; işin yerel koşulu yerinde duruyor ve bunu söylememek, kalkan bağımlılığı olduğundan büyük göstermek olur.
Sayfa ve kayıt sayısı büyüdüğünde yapı yeniden kurulmamalı
İçeriği ya da kaydı çoğalan bir sitede büyüyen şey adres ve satır sayısı oluyor. Her yeni kırılım bir yeni konum, bir yeni dönem, bir yeni kategori olarak geliyor ve asıl bedel sayıda değil, her kırılım için sayfa yapısının elle yeniden kurgulanmasında çıkıyor. O noktada büyüme bir yayın işi olmaktan çıkıp bir yazılım işine dönüyor: her ekleme küçük bir proje oluyor.
Bu büyümede ölçeklenebilirlik, sayfa yapısının sayıdan bağımsız kalması oluyor. Yapı bir kez kırılımın kendisine göre kuruluyor: hangi kırılım kalıcı bir adres taşıyor, o adres neyi gösteriyor, hangi bilgi hangi kırılımdan okunuyor. Kararlar bir kez verildikten sonra her yeni tarih, her yeni konum aynı kalıbın içine düşüyor ve kimse yeni bir kalıp çizmiyor.
Günlük Hava Durumu’nda her konum için her günün kendi adresi var ve yeni bir konum ya da yeni bir gün eklendiğinde sitenin yapısına dokunulmuyor. Bu sayfaları hangi kararla ürettiğimizi sitenin yayın yolunu anlattığımız yazıya bıraktık.
Sayfa sayısı sabit kalan bir tanıtım sitesinde bu büyüme türü yok. Kırılımı olmayan bir sitede adres yapısına yatırım, hiçbir zaman dolmayacak bir kalıp bırakıyor.
Katalog büyüdüğünde doğru cevap bazen hiçbir katman eklememektir
Katalogda büyüyen şey ürün ve birim sayısı oluyor ve kırılma kayıt modelinde çıkıyor. Model yanlış kurulduğunda her yeni birim listede yeni bir satır açıyor; aynı şey farklı adlarla tekrar ediyor ve katalog kendi tekrarıyla şişiyor. Model doğru kurulduğunda yeni birim mevcut kaydın altına düşüyor ve büyüme listede hiç görünmüyor.
Ölçeklenebilirliğin ölçüsü eklenen katman sayısı değil. Gelen büyümeyi kayıt modeli yeniden kurulmadan karşıladıysa ve iş arama ya da önbellek gibi ayrı bir katman istemediyse, küçük kalan bir yığın da ölçeklenebilir sayılıyor. Ölçü tek: büyüme karşılandı mı, karşılanırken yapı yeniden mi kuruldu.
Kokudankokuya’da aynı kokunun yeni bir şişe hacmi katalogda yeni bir ürün açmıyor ve bu kataloğun ölçeğinde mağaza, uygulama ile veritabanı dışında ne bir arama ne bir önbellek katmanı taşıyor. Varyant sınırının nereden geçtiğini ürün varyantını nasıl modellediğimizi anlattığımız yazıda ayrıca yazdık.
“Büyümeye hazır olsun” diye baştan kurulan katman büyümeyi değil bakılacak alanı büyütüyor: kullanılmayan bir katman da güncelleniyor, izleniyor ve her taşınmada birlikte taşınıyor.
Alıcı tarafında bu büyümenin sınaması basit: kataloğa yeni bir birim eklemek kimin işi? Cevap “kendi ekibimiz bir kayıt açıyor” ise model büyümeyi taşıyor. Cevap “yazılımcıya haber veriyoruz” ise her ekleme küçük bir iş emrine dönüşüyor ve katalog ancak birisi vakit buldukça büyüyor.
Olgunun sınırını da yazalım: burada gerekmemiş olması, katalog büyümesinin hiçbir zaman katman istemediği anlamına gelmiyor. Katman isteyen katalog var.
Birinin cevabı ötekine iyi gelmez: teklifte “ölçeklenebilir” yazıyorsa ne sorulur
Dört büyümenin cevapları birbirine aktarılamıyor. Kurum büyümesinin cevabı sınırda, nokta büyümesinin cevabı bağımlılığın kalkmasında, kayıt büyümesinin cevabı sayıdan bağımsız yapıda, katalog büyümesinin cevabı kayıt modelinde duruyor. Kurum sayısı için verilmiş bir cevap katalog büyümesine iyi gelmiyor; nokta büyümesi için verilmiş bir cevap sayfa sayısına.
Dört satır yan yana durduğunda ayrım görünür hâle geliyor. Sütunlarda büyüyen şey, kırılmanın yeri, ölçeklenebilirliğin o büyümedeki anlamı ve kurduğumuz, bugün de üstünde çalıştığımız işlerden bir örnek duruyor.
| Büyüyen şey | Nerede kırılır | Ölçeklenebilirliğin burada anlamı | Örnek |
|---|---|---|---|
| Kurum ve kiracı sayısı | Her kurum için ayrı kopya kurulduğunda; kopya sayısı bakım sayısı oluyor | Yeni kurumun kurulum değil tanım olması | Vipkurum |
| Şube ve iş yapılan nokta sayısı | Tek merkeze bağlı adımda: cihaz, kişi ya da onay; sıra uzuyor, arıza hepsini durduruyor | Kapasite eklemek değil, bağımlılığı kaldırmak | Vipkurum optik okuma |
| Sayfa ve kayıt sayısı | Her yeni kırılım için sayfa yapısı elle yeniden kurgulandığında | Yapının kırılım sayısından bağımsız kalması | Günlük Hava Durumu |
| Katalogdaki ürün ve birim sayısı | Kayıt modeli yanlışsa listede tekrar; doğruysa büyüme listede görünmüyor | Katman eklememenin de cevap olabilmesi | Kokudankokuya |
Tabloyu okuma yönü satırlar. Her satırda ikinci sütun birinci sütunun doğurduğu kırılmayı söylüyor; üçüncü sütun ise o kırılmanın ortadan kalkması için ne gerektiğini. Üçüncü sütunun dört satırda dört farklı şey yazması, yazının bütün iddiası.
Teklifte “ölçeklenebilir” yazıyorsa sorulacak tek soru şu: bu söz hangi büyümeyi karşılıyor? Cevap dört türden birini adlandırıyorsa konuşma denetlenebilir bir zemine iniyor; adlandırmıyorsa kelime bir vaat değil bir sıfat olarak kalıyor. Kaç kullanıcıya dayandığı sorusu bundan sonra gelir, çünkü o rakamın neyi saydığı ancak büyüyecek şey adlandırıldıktan sonra okunuyor.
Büyüme payı koddan önce verilen bir karar. Hangi büyümenin geleceği, kayıt modeli ve sayfa yapısı kurulurken belirleniyor; sonradan eklenen bir katman o kararın yerini tutmuyor. Elinizdeki teklifte “ölçeklenebilir” yazıyorsa, o sözün hangi büyümeyi karşılayacağını kod yazılmadan önce birlikte adlandırabiliriz; bu kararın nerede verildiğini sistem mimarisi sayfasında anlattık.