Selam,
Ne MS in ne de FireBird un band a göre utilize edilebilen bir network layer ı yok maalesef. Bu konuda zaten client/server uygulama modeli oluşturmak başlıca bir sorun. Tartışılan şeyle de ilgili olduğundan birkaç tespit yapayım (kızacaklar yine tespitleri köşeli parantez içine alacağım bu nedenle) MS in özellikle ürünlerine neyi neden eklediğine DB cephesinden farklı bir bakış da sağlayacağını sanıyorum. Sadece anlamadığım her alanda uzmanlaşmayı benimseyen güncel bilişim dünyasında, DB server a herşeyi yaptıramaya çalışmanın mantığıdır. Neden birsürü sertifikasyon koyuyorlar ki. Onu da bir tane yapsınlar. Adam db bilsin web admin, network uzmanı yazılımcı vs vs hepsini öğrensin tek başına. Neden değişik alanlarda uzmanlaştırmaya çalışıyorsunuz ki insanları. İş çalışma kuralları olunca takım çalışması ve uzmanlaşma, uygulama olunca tek kişilik gösteri ve herşeyi bilen uygulama modeli. Bu çok anlaşılmaz bir durum. Bu yanlıştan çok uzun süre önce döndü pekçok firma.
-----------------------
Öncelikle modern uygulama geliştirme metodolojisi client/server ı kendi haline terkedip, bir şekilde n-tier bir ortama doğru gitmekte. Bunun birkaç nedeni olmakla birlikte en can alıcı nedenleri;
- Ölçeklenebilirlik/Yüksek Bulunabilirlik
- Değişik kanallardan erişim talebi, bağlı olarak düşük band genişliği olan ağlar
- Veritabanının uygulama yazılımından soyutlanabilmesi
- Her katmanın kümelenebilme kabiliyetinin bağımsız şekilde modellenebilmesi
- Batch işlemler ve business logic bölümlerinin merkezileştirilerek değişik istemcilerle aynı ortak kodun kullanılabilmesi
------
Bu gereksinimlerin detaylarına ve MS tarafından nasıl karşılandığına bir bakalım;
---------------
Ölçeklenebilirlik/Yüksek Bulunabilirlik
Ölçeklenebilirlik
[Bu özellik MS tarafından desteklenmiyor. Elinizdeki aracın içinden (İşletim sistemi olabilir DB olabilir) istemediğiniz bölümleri çıkartamıyorsunuz olana da fazla birşey ekleyemiyorsunuz. Paket olarak size sunuluyor olduğu gibi kullanıyorsunuz.] 5 client bulunduran bir büroda yada realtime çalışması gereken 1000 terminalli bir büroda. Burada DB anlamında MSDE/SQLEXPR var ya demeyelim, onu zaten ölçeklenebilirlik olarak sayamıyorum maalesef.
Linux zaten ölçeklenebilirlikte sanırım klasman farkıyla önde. Oracle 10g çalıştıracak bir tek linux için işletim sistemini kendiniz kesip biçip 100mb ın altına (ki glib gerekiyor ondan büyük bukadar) düşürüp makinayı bir db makinası haline getirebilirsiniz. Ya da yuzlercesini grid içine alır dev bir datacenter kurabilirsiniz. Aynı şekilde Oracle içindeki ve çevresindeki bileşenleri opsiyonlu olarak çıkarabilir/ekleyebilirsiniz. DB önüne Appserver koyup bunları kümeleyebilir gprs üzerinden bile verimli çalışabilecek thin clientlar çalıştırabilirsiniz. Burası başlı başına bir konu o nedenle detaya girmiyorum. Başka bir topic de tartışılabilir.
Yüksek Duraylılık
Bu özellik veriden bahsedilen bir ortam için olmazsa olmaz bir özelliktir. Veritabanı nın HA desteği, APP Server ın HA özelliği ve connectionları serialize edebilen bir HA yöneticisi gerekliliği, HA yöneticisinin de kümelenebilmesi ihtiyacı üreticileri sürekli sıkıştırıyor. Üstelik HA nın yanında partitioning denen ekstra bir kavram da işin içine giriyor. Yani katmanı kümeleyebileceğiniz gibi bölerek çok merkezli de çalıştırabilmelisiniz. Üstelik bunu yaparken session ların tüm node larda senkron durmasını da sağlamalısınız.Kesintisiz çalışmak budur. Hattan düşüp tekrar aramak değil.
[Bu anlamda işletim sistemi olarak kısıtlı bir cluster desteği (enterprise versiyonda sanırım) ve standby db tutmanın dışında bir destek şu ana kadar geliştiremedi MS]. Bu ise vakti zamanında bir kasada iki tane makinayı simultane çalıştırıp bir NT çöktüğünde diğerinin donanım olarak onun yerini alması şeklindeki tuhaf çözümden pek de farklı değil.
Onlarca linux makinayı tutup bir heartbeat çalıştırarak öve öve bitirilemeyen data mirroring in alasını firebird ile kolaylıkla yapabilirsiniz. Hem de oldukça uzun bir süredir. Çalışacağından da emin olabilirsiniz. Oracle ise HA konusunda sanırım rakipsiz. Özellikle RAC + DG ikilisini birlikte konfigüre ederseniz gerçek sıfır veri kaybını garanti edebilirsiniz. Reklam da değildir bizzat uygulanmış ve çalışıyor olduğundan emin olduğumuz bir yöntemlerdir.
Veriyi sadece db hasarlarına/donanım hasarlarına karşı değil, hatalı çalışan kodlara da karşı koruyabilmelisiniz. Bu ise anlık geri dönüşün olanaklı olması ile mümkündür. Hiçbir backup, veri kaybını engellemez. Ve bir tek record un bile kaybına tahammülü olmayan birkaç müşterim var. Duraylılığı bir de bu açıdan düşünün.
--------------------------------------
Değişik kanallardan erişim talebi, bağlı olarak düşük band genişliği olan ağlar
Veriye erişim, değişik kanallardan olabilir. Özellikle günümüzün en baskın piyasa taleplerinden birisidir. Bu nedenle değişik bağlantı talepleriyle DB nin uğraşması yerine bu işi kotaracak, üstelik tüm gelen requestlere ortak bir API hazırlamaya olanak sağlayacak bir katmana Application Server a ihtiyaç olmaktadır. Güncel clientlar ofisteki bir pc olabildiği gibi, cebindeki handheld le seyahatte olan mobile kullanıcılar da olabilmektedir. Birisi gb network ten birisi gprs den geliyor olabilir. Client ları farklı olabilir ama aynı sipariş uygulamasına erişiyor olabilirler. Maalesef bu konuda da MS yanlış yola sapmış, DB ye Apserver rolünü de yüklemeye çalışmaktadır ki, sonunda batağa saplanacağından emin olabilirsiniz. Bu bir kehanet değil, geçen yıllarda edinilmiş deneyimlerin söylediğidir.
Genel geçer kural intranet den gelen tüm bağlantıların doğrudan AppServer a, internet den gelen bağlantıların ise araya bir de web/jse katmanı aracılığıyla appserver a yapılması yönündedir. [Bu konuda db den doğrudan webservis çalıştırılabilmesi özelliği eklenmesi bu büyük eksikliğin giderilmesine yönelik yanlış bir çabadır]. Akıllı hiçbir yönetici DB server ına dışardan doğrudan connection yapılmasına izin vermez. Bırakın DB engine in bizatihi kendisini. Bir ara sanki iis i appserver olarak iyice olgunlaştıracaklar diye düşünmüştüm ama sanırım firma içindekler de iis e benim gibi temkinli yaklaşıyorlar.
[Appserver ı olmayan, yani tüm client/server yada yerleşik çalışan sistemler maalesef MS in terminal server ına mahkum olmuşlardır]. Denize düşen yılana sarılır misali herkes buna sarılmıştır. Ama yılan her zaman sokar, bu onun doğasında var unutmamak gerek. Bu tuzaktan kurtulabilen birkaç sistem ise Oracle ve geliştirme araçları ile Progress gibi özgün appserver ına sahip olan sistemlerdir.
--------------------------------------
Veritabanının uygulama yazılımından soyutlanabilmesi
İstemci makinalar doğrudan db server a ulaşıyorlarsa tehlikedesiniz demektir. Tüm programlarda/tüm katmanlarda bug olur. Eskiden client lar ofis içinde, bilemedin intranet de idiler. Şimdi ise client ın nereden geleceği belli değil. Bu anlamda db ile client arasındaki connection isteğinin anahtarı bu katmanda/katmanlarda olmalıdır. Ancak bu şekilde modern piyasa taleplerine güvenli çözümler önerebilirsiniz.
[Bu konuda maalesef MS oldukça vurdumduymaz davranmaktadır. DB server ı doğrudan client bağlantısından koruyabilecek doğal bir yol sunmuyor. Bazı aklıbaşında insanlar iis kısıtlı da olsa i appserver olarak kullanmaya çalışıp biraz olsun kendilerini güvenceye almışlardı ama görünen o ki bu yöntem MS in pek hoşuna gitmemiş. Şimdi tutup bir de db den daha çok b2b için kullanılan ws leri desteklemeye başladıysa eyvah ki eyvah].
Appserver sadece conn. yönetmemekte, aynı zamanda bir merkezi kod repository si de sağlamaktadır.
---------------------------------------
Her katmanın kümelenebilme kabiliyetinin bağımsız şekilde modellenebilmesi
Ölçeklenebilirliğin en can alıcı yerlerinden birisidir. DB server ları cluster çalıştırırken, appserver ları bağımsız çalıştırabilir, ya da db server da sby modelini benimserken, appserver ları cluster çalıştırabilirsiniz. Bu size kalmış. Ama bu özellik hayatınızı kurtarabilir. Raporlar sby db den alınırken, kayıtlar master a yazılabilir. Transaction lar çift taraflı tutulup max protection sağlanabileceği gibi, asenkron sync ile max bulunabilirlik sağlanabilir. Bu konfigürasyon AS dan bağımsız olduğundan tüm yapıyı yeni baştan tasarlamaz, sadece ilgili katmanı düzenleyebilirsiniz.
[MS ise zaten tek bir katman sunar, istediğiniz gibi de yapılandırmanıza izin vermez].
----------------------------------------
Batch işlemler ve business logic bölümlerinin merkezileştirilerek değişik istemcilerle aynı ortak kodun kullanılabilmesi
Trigger demek herşey demek değildir. Çoğu zaman da çin işkencesine dönebilir. En iyi DB, kendi RI stabilitesini kendisi koruyabilen db dir. Bununla birlikte tüm business logic, trigger larla tanımlanamaz. Bu nedenle ya uygulama içine kod gömersiniz, ya da bu kodu appserver a koyarsınız. Tüm istemciler oradan o kodu çağırırlar.
[Bu konuda MS in SP lerden başkaca elinde doğru dürüst bir mekanizma yoktur ve zaten tümüyle client/server çalışır. db, kendi işi olmayan pekçok işi burada çözmekle de uğraşır].
----------------------------------------
Son bölümler uykum geldiği için kısa oldu, anlatmak istediğimi anlatamadım. Bunca detayı sıkılmadan okuduysanız işte final;
[
- Data Mirroring diye birşey konulmuş, session serialization konulamamıştır. High Availibility ye bir çözüm getirilmek amaçlanmıştır. Fakat arşiv logu/after image vs gibi adlarla diğer db lerde 90 lardan beri var olan mekanizma var olmadığından sistem konfigürasyonu alternatif üretmeye müsait değildir. Bu özellik, sıfır veri kaybını hedeflemektedir, kesintisiz çalışmayı değil. Kullanılan sistemde transaction lar senkron olarak mı tüm sistemlere uygulanıyor bilemediğimden "sıfır veri kaybı" garantisi verip veremediklerini bilemiyorum.
- .NET ile kod geliştirmek olanaklı kılınmıştır. Zira ortada bir appserver olmadığından pekçok BL kodu DB içine yazılmaktadır. T-SQL çok yetersizdir. Bu nedenle artık db server aynı zamanda bir de Appserver (sadece kod repository anlamında) olarak hizmet verecektir. Fakat bu özellik sizin kontrolünüzde değildir. İster istemez vardır.
- Online restore, güzel bir özellik olmakla birlikte, eksiktir. DB damage olmadan birşeyi restore ediyorsanız, dataları fena halde hırpaladınız demektir ki bunu düzeltmek yedekten dönerek olmaz. Hatanın olduğu ana dönmek gerekir. Bu ihtiyacı ise bu karşılamaz. Burada asıl ihtiyaç, Oracle daki gibi bir return-to-time mekanizmasıdır. Flashback diyor oracle ama yapılan iş, istenen db objesinin istenen andaki haline geri gidilip bakılabilmesi, sonra da tekrar güncele gelinebilmesidir. Yani neredeyse verinin versiyon takibi yapılmaktadır. Üstelik çalıştığı da garantilidir (birçok kez kullandım). Hatta ilave, bence bir trash de lazım ORacle daki gibi. Yeni bir arkadaşınız bir tabloyu drop ettiğinde geri getirmk için birebir
- Index restoring, index sayfalarındaki fragmantasyonun toparlanabilmesi güzel bir özellik, keşke dağılmasalardı
- Yönetim konsolundaki yenilik, Yine aynı mantık geçerli, her işi en iyi yapan uygulama olmak çabası. Bu konuda diğer üreticiler bu işi bu konudaki uzmanlara bırakmışlar gibi görünüyor. Üstelik bir case aracı ile db tasarlıyorsanız, o manager a session ları yönetmekten başka iş düşmez. Ama yine de yeni ürün yeni arayüz hoşa gider tabi.
- Özel bağlantı modu, bu özellik iyi olmuş. Çaresiz admine bir destek bir yardım mahiyetinde. Connection layer ı çökmüş bir db ye ulaşıp bunu onarabilecekler için oldukça iyi olmuş. Uzak db yönetimi için iyi. Peki bu kapıyı kimler biliyor ?
- Dahili raporlama aracıyla artık rapor server işini de üstüne alarak, bu anlamdaki tutarlılıklarının devamı anlamında güzel. Ama yazılım geliştirme teknolojisi olarak oldukça kötü bence. Düşünsenize bir rapor oluşturma process i tüm kaynakları kullanıyor sonra göçüyor ve db server offline.
- Web server haline getirip buradan servis vererek Appserver rolünün connection yönetim bölümünün de bir kısmını üstleniyor. Bunu yapmazsanız .NET ile yazacağınız kodların istemcilerden çağırılmasını nasıl yapacaksınız ? IIS var diyorsanız o zaman o kodları neden iis de değil de DB de tutuyorsunuz ?
- Auditing mekanizması koymaları iyi olmuş. Her ne kadar trigger içinde yapılıyor olsada iyi olmuş. Oracle ın auditing mekanizmasına bakılmasını şiddetle tavsiye ederim.
Kanadı olmayan bir canlının kartalın uçuşuna göz dikmesi enteresan tabi. İnsan da uçuyor ama uçtuğumuz şeylerin hiçbirisi en aciz kuşunki kadar mükemmel değil.
Farkettiyseniz tüm caba, olmayan bir Appserver ın işini db server a yıkmaktan, biraz da HA desteği vermekten ötede değil. Küçümsenecek bir şey değil bu, ciddi bir emek. Ve lakin gidilen yol bana göre yanlış. Onun yerine adam gibi bir appserver yazsalardı koysalardı db nin önüne, çok daha güzel bir iş çıkarmış olurlardı eminim.
]
Neyse, kalın sağlıcakla.