23 Haziran 2007 Cumartesi

SATA - SCSI (Düzeltme: NOD32)

Artık sunucu makinelerde de SATA diskler kullanılmaya başlandı. SATA disk içeren bir makine kullandık. Tecrübemizi paylaşıyoruz.

Makine:

Anakart: Intel S5000VCL
RAID Controller: Intel Embedded Server RAID Technology II
Bellek: 3GB
İşlemci: Intel Xeon 5140@2.33 Ghz
Fiziksel İşlemci Sayısı: 2
Mantıksal İşlemci Sayısı: 4
İşletim Sistemi: Windows 2003 R2 SP2

Production ortamında çalışmakta olan sunucunun işlemci ve bellek kaynakları ortalama olarak %50 oranında kullanılıyor. Bu durumdaki sunucuda C:'den D:'ye 2GB'lik bir log dosyasını taşımaya çalıştığınızda, sunucu kilitleniyor. IIS hizmet vermeyi durduruyor. Benzer işlemleri, yine "yakın" özelliklere sahip ve aynı yük altındaki HP DL380 tipi sunucuda yaptığımızda, herhangi bir yavaşlık veya kesinti söz konusu olmamaktaydı. HP DL380'ler SCSI disk kullanmaktadır.

Sorun çıkartan makine test ortamındayken, aynı işlemi çok hızlı ve aksamasız bir şekilde yapmaktadır.

Sonuç:

Bu tecrübeden şu sonucu çıkartmaktayız; SATA diskler, yalnızca okuma (disk read) yapıldığında, SCSI disklere yakın performans sergilemektedirler. Fakat, okuma ile birlikte yoğun yazma (disk write) işlemleri yapıldığında, performans sorunları yaşatmaktadır. RAID kullanarak performans artırımı sağlanabilir.

Önemli Not: Makalede bahsedilen sorunların nedeninin, SATA diskler olmadığı, sunucu üzerinde çalışmakta olan NOD32 anti virüs sisteminin, sorunlara neden olduğu gözlemlenmiştir. Ek olarak, söz konusu antivirüs sisteminin, bazı IIS loglarını truva atı olarak işaretlediği ve karantinaya aldığı da gözlemlenmiştir. Sonuç: SATA disklerle ilgili bir sorun yok. Bilgilerinize ve değerlendirmelerinize sunarız.

21 Haziran 2007 Perşembe

Bilgi sorumluluktur

Bilmek sorumluluktur; hem iş dünyasında, hem hukukta hem de islamda. Bu yazı, bilmek ve sorumluluk almak üzerine bir değerlendirmedir.

İster dini açıdan bakılsın ister hukukî açıdan, durum aynıdır; bilmek sorumluluktur. Örneğin; suçlunun kim olduğunu bildiği halde gizleyen bir kişi, hukuken suç işlemiş olur. İslamda da aynı şey geçerlidir; suçlunun açıklanması farzdır. İş dünyasına uyarlandığında... Ne kadar bilgiliyseniz, sorun çözme yeterliliğiniz o kadar fazladır. Bu şu anlama gelir; her sorun anında size o kadar fazla iş düşecektir. Bu türlü "sorun çözme" işleri, adil ve makul bir şekilde yargılandığında, üretime yapılan gizli ve önemli katkılardır. Tespit edilmesi ve değer biçilmesi zor katkılar.

Başka bir açıdan bakıldığında; fertlerin 'ben duymadım, bilmiyordum' bahaneleri kalmasın diye Resmî Gazeteler yayımlanır. İslamda ise Kur'an-ı Kerim benzer bir işlev görür. İş dünyasına uyarlandığında ise... Dökümantasyonlar tech spec'ler vs vardır. 'Duymadım', 'bilmiyordum' sözleri bahane değildir. Okunmalı. Bilinmeli. Sorumluluk alınmalı.

20 Haziran 2007 Çarşamba

ColdFusion: 'Connection reset by peer: socket write error'

Uygulamanıza bir tane sunucu yeterli geliyorsa, teknik ekibin yalnızca kodlama, veritabanı vs gibi klasik konuları bilmesi yeterli olabilir. Fakat eğer birkaç sunucu kullanarak kümeleme/cluster yöntemiyle vs çalışılıyorsa durum değişir. Teknik ekip, temel ağ bilgilerine vakıf olmalıdır. Makale, yaşanmış bir örnek üzerinden bu tezi savunur.

ColdFusion kodu, diğer makinedeki veritabanı sunucusuyla iletişim kurarken, ağ mekanizmasında bir aksama yaşanırsa, ColdFusion aşağıdaki hata mesajını göstermeye başlar:

Connection reset by peer: socket write error

Hata mesajındaki "socket" kelimesinden de anlaşılacağı üzere, bu bir ağ sorunudur. Ağı oluşturan tüm bileşenler kontrol edilmelidir;

  • Kablolar/jag'lar
  • Switch'ler/Hub'lar
  • Ağ kartları (ethernet card)
  • ...
Sorunu tecrübe etmek için, ColdFusion ile veritabanı makinesi arasındaki kabloyu birkaç saniyeliğine çıkartın ve tekrar takın. Bahsi geçen hata mesajı belirmeye başlayacaktır.

13 Haziran 2007 Çarşamba

.NET uygulamasını kontrol altına alma (Application Pool)

Sunucuda birçok .NET uygulaması ve site çalışıyor. Uygulamalardan biri hack'lendiğinde, diğerleri etkilenmemeli. Sunucu kaynakları (işlemci, bellek vs), uygulamalar arasında adil ve garantili bir şekilde paylaştırılmalıdır. Makale, .NET'in bu konudaki özelliklerinden kısaca bahsedecektir.


.NET uygulamaları (.NET Application) varsayılan olarak NETWORK_SERVICE kullanıcısı üzerinden çalışırlar. Bu kullanıcı, sistemde birçok önemli yetkiye sahiptir. Dolayısıyla, aşağıdaki riskleri beraberinde getirirler;

• Kötü niyetli bir geliştirici, yazdığı bir .NET koduyla, sistem kontrolünü ele geçirebilir.
• Birkaç basit form içeren bir .NET uygulaması hack’lendiğinde, saldırgan tüm sistemi ele geçirmiş olacaktır.
• Performans sorunları olan bir uygulama, sunucunun işlemci ve bellek kaynaklarının tamamını tüketecektir.

Olması gereken yapı ise şu şekildedir;

• Uygulama hack’lense bile, yalnızca o uygulama çökmelidir.
• Performans sorunları olan bir uygulamanın yalnızca kendisi yavaşlamalıdır. Diğer uygulamalar etkilenmemelidir. Herkes kendi kaynaklarını kesintisiz kullanabilmelidir.

Özetle; her koyun kendi bacağından asılmalıdır. Bunu sağlamak .NET’te Uygulama Havuzları (Application Pool) kullanılabilir. Her uygulama için bir Uygulama Havuzu oluşturulur. Hangi havuzun sistem kaynaklarının ne kadarını kullanabileceği ayarlanır.

Bir .NET uygulasının hareket kabiliyetini sınırlamak için aşağıdaki işlemler yapılabilir;

  • Uygulama için yeni bir Windows kullanıcısı oluşturulur.
  • Yeni kullanıcı, Users grubundan çıkartılır IIS_WPG grubuna eklenir.
  • Uygulama için yeni bir Uygulama Havuzu oluşturulur.
  • Uygulama Havuzunun Identity ayarı değiştirilir yeni kullanıcı üzerinden çalışması sağlanır.
  • Uygulamanın yeni Uygulama Havuzunu kullanması sağlanır.
  • Uygulamanın çalıştığı klasörlere kullanıcı için yeterli ve gerekli izinler verilir.
  • Windows TEMP klasörüne (Örn: C:\WINDOWS\Temp), IIS_WPG grubu için veya yeni kullanıcı için yazma yetkisi verilir.
  • Registry'de gerekli tüm dallara yazma yetkisi verin.

Makalede anlatılan türde sınırlamalar yapıldığında;

• Uygulamayı hack’leyen bir saldırgan, sistem genelini etkileyemez. Yalnızca uygulamanın kendi kaynaklarını tüketir. Yalnızca o uygulama çöker.
• Yazılan kötü ve performanssız kodlardan dolayı, sistem geneli etkilenmez.
• Özetle; Sistem Yöneticisinin içi rahat eder. İçi rahat etmesi gereken kişi Sistem Yöneticisi olduğundan, bu yazıda anlatılan türdeki tüm kuralları ve yapılandırma standartlarını Sistem Yöneticisi koyar ve uygulatır.

10 Haziran 2007 Pazar

Yazılım projeleri ve saklı yordamlar

Saklı yordamların (Stored Procedure) birçok avantajı vardır. Bu avantajlarından dolayı, yazılım uygulamalarında saklı yordamlar sıklıkla kullanılmalıdır. Dezavantajları da vardır. Bu nedenle, saklı yordamlar tüm yönleriyle bilinmelidir. Dengeli bir şekilde istifade edilmelidir.

AVANTAJLARI

Güvenlik

Saklı yordamlar, yazılımdaki kodlardan parametreleri alırlar. Örneğin, kaydedilecek öğrencinin adını. Bu parametre, SQL INSERT ifadesine bir değişken olarak gömüleceğinden, SQL injection açıkları ortadan kalkar.

Performans

Kodlanmış bir saklı yordam, VTYS (Veritabanı Yönetim Sistemi) tarafından derlenir. İkinci çalıştırılışında, derlenmiş yordam çalışır. Böylece, koca yordamın yeniden derlenmesine gerek kalmaz. Performans artar.

Ağ trafiği ve transaction süreleri

VTYS ve yazılım uygulamanız iki ayrı sunucuda. O kadar büyük bir yazılımınız var ki, VTYS ile uygulama arasında gidip-gelen trafik çok yüksek. Bir hareketteki (Transaction) ilk geri dönüşün ağ üzerinden yazılıma aktarılması uzun sürdüğünden, hareketin toplam süresi artıyor. Dolaylı olarak, VTYS bağlantıları (Connection) şişiyor. Saklı yordam kullanarak, yazılımınız ile VTYS arasındaki “git-gel”leri azaltabilirsiniz. Parametrelerinizi uzunca hazırlar ve saklı yordama bir defada gönderirsiniz. Bir kez geri dönüş alırsınız.

Not: Saklı yordamlar iki veya daha fazla kayıt kümesi (Recordset) döndürebilirler.

Veritabanı bağımsızlığı ve SQL kodlarında merkezileşme

Yazılım kodlarınızda, saklı yordamı çağırırsınız ve dönen sonucu yorumlar. Yazılımınız, veritabanındaki tablolarda hangi işlemlerin yapıldığıyla ilgilenmez, alanların veri türlerinin neler olduğunu bilmez, tabloların isimlerinin neler olduğunu bilmez… Böylece, tablo isimlerinde değişiklik yapmak istediğinizde, yalnızca saklı yordamlardaki SQL’leri değiştirmeniz yeterli olacaktır. Yani, bakacağınız tek yer yine veritabanıdır. Kodlarınızı değiştirmenize gerek yoktur. Benzer şekilde; eğer gün olur da Oracle’ın maliyetinden kurtulmak için PostgreSQL’e geçmek isterseniz (http://blog.vukuf.com/2007/01/oracledan-postgresqle-gei.html ), aynı saklı yordamları yeni veritabanınızda da oluşturmanız yeterli olacaktır. Yazılım kodlarınız, parametreleri gönderip sonuçları alabildiği sürece, sorun çıkarmayacaktır.

DEZAVANTAJLARI

Bakım zorluğu

Saklı yordamlar, yazılım kodlarınızdaki fonksiyonlar gibidir. Tüm fonksiyonlarınızı aynı klasörde biriktirdiğinizi düşünün. Büyük bir karmaşa. Bu nedenle, saklı yordamlara isim ayarlarken çok hassas olun. Belirli bir standardınız olsun. Yeni gelen takım arkadaşlarınızın uyum sağlaması ve anlaması kolay olsun. Unutmayın; en kötü standart bile, hiç standartsızlıktan iyidir.

Veritabanına bağımlılığın artması

Evet, daha önce bunun tam aksini söylemiştik. Okumaya devam edin…

Saklı yordamlarda, adı üstünde yordamsal dil kullanılabilir; Transact SQL (Microsoft SQL Server), PL/SQL (Oracle), PL/PgSQL (PostgreSQL) gibi. Geliştiriciler (Developer), internette yaptıkları argelerde bazı yordamsal komutlarla tanışırlar ve genellikle hemen kullanırlar. Bu durumda, eğer yazılım uygulamanız iki veya daha fazla VTYS seçeneği sunuyorsa, diğer VTYS’lerdeki saklı yordamlarda da aynı değişikliklerin yapılması gerekecektir. Her VTYS’nin yordamsal dili kendine özgü olduğundan, saklı yordamda gerçekleştirilen iyileştirmelerin diğer VTYS’lerde nasıl yapılabileceğini araştırmak ve değiştirmek gerekecektir.

Eskiden, herhangi bir VTYS’ye özgü yordamsal veya kodsal seçeneklerden kaçınılması önerilirdi. Bunu sonucunda, yazılımlar VTYS’nin özelliklerin tam olarak istifade etmezlerdi. Günümüzde bu yaklaşım tersine dönmüştür. VTYS’nin sunduğu özel yeteneklerden ve komutlardan istifade etmek önerilmektedir. Bu sayede, müşterilerinize en yetenekli VTYS hangisiyse onu önerme fırsatı doğar. Örnek bir doyalog;

Müşteri: Yazılımınız çok yavaş çalışıyor.

Siz: Bizim yazılımımız en iyi “B” VTYS ile çalışır. Kullanım kılavuzunda yazıyor.

Müşteri: Haklısınız. Söylemiştiniz.

Not: Veritabanı bağımsızlığı ile ilgili olarak tasarım kalıpları (Desing Pattern) araştırılabilir.