Evet, uygulama sunucularımızı değiştirmeye karar vermemizden bu yana 8 ay geçti ve 5 aylık araştırma/analiz ve karar verme ve yaklaşık 3 aylık bir çalışma sonunda tüm ortamlarımızı JBoss uygulama sunucusundan, Websphere uygulama sunucusuna geçirmiş bulunuyoruz.. Geçişi planlı ve düzenli yapmaya özen gösterdik.. Ortamları Development'tan Production'a olacak şekilde geçirdik, üzerinde testler yaptık sorunları giderdik, elimizden geldiğince doküman hazırladık... Tabi, bu sürenin geçiş için biraz uzun olduğunu düşünebilirsiniz, ama uygulamamız basit bir J2EE uygulamasından öte Aurora Altyapısını kullanan çok kapsamlı bir proje, dolayısıyla geçişin kontrollü ve zamanlamasının Sürüm Sistemine uygun olmasına özen gösterildi.. Tabi bazı önemli modüllerin geçişlerinde rastlanılan, çözülmesi zaman alan problemlerden dolayı geçişi ötelemek zorunda kaldık, ama dediğim gibi nihayetinde dört ayrı ortamımızı (bir anlamda proje yaşam döngüsünün dört safhasını) Websphere uygulama sunucusuna geçirdik.
Bu geçiş esnasında JIRA'yı bir sürekli dokümantasyon sistemi olarak kullandık, sorunlar ve çözümleri mümkün mertebe buraya kaydettik. Daha sonra aynı hatalarla yeniden karşılaştığımızda burada yazan çözümler bize bir hayli yardımcı oldu.
Özellikle Jakarta Slide projesi bizi bir hayli zorladı, inanılmaz taklalar attık, ve hala bazı sorunlar yaşıyoruz.. Bunun dışında IBatis ve Hibernate kullanan uygulamalarımızda konfigürasyonel değişiklikler yapmak zorunda kaldık. Yine Quartz ve Log4j araçlarının uygulamaya entegrasyonunun yapıldığı konfigürasyon dosyalarında database'e bağlanma şekillerinde bazı değişiklikler yaptık. Aurora altyapısında çok fazla zorlukla karşılaşmadık..
Yapılan bu çalışma aslında bir bahar temizliği niteliğinde oldu, 3 senedir kullandığımız sistemi yeniden öğrenme ve mümkün yerlerde yeniden şekillendirme şansımız oldu.. Bazı kullanılmayan ve gereksiz olan modülleri temizleyip, bazı şeylerin daha da netleşmesini sağladık. Bu bize sistem üzerindeki esneklik ve hakimiyetimizi geliştirme fırsatı verdi.
Tabi çalışmamız burada bitmiyor, geçiş tamamlansa dahi, performans iyileştirme çalışmaları bitmez gibi görünüyor. Bunun dışında yapılan çalışmanın kapsamlı bir "how-to" dokümanına çevirilmesi hem bizim, hem de bu işi daha sonra yapacakların hayatlarını çok fazla kolaylıştıracaktır. Her neyse, bir açık kaynak savunucusu olarak, JBoss'tan vazgeçmek biraz zor olsa da, yazılım yaşam döngüsü içerisinde açık kaynak kullanacak çok fazla yer var, en azından uygulama sunucusu katmanını IBM'e bırakabiliriz :) ...
Monday, December 17, 2007
Nihayet Websphere
Friday, July 13, 2007
Websphere, Weblogic, JBoss - Part 2
Altyapı değişikliği çok hassas karar verilmesi gereken bir konudur. "Gelen gideni aratır"sa altyapı değişikliğinin pek bir anlamı olmaz. Dolayısıyla, öncelikle ideal bir topoloji düşünülmeli, ardından yeni altyapının bu topolojiyi destekleyip desteklemediği araştırılmalıdır.
Peki bizim sistem olarak yeni altyapı ile ne gibi avantajlarımız olacak?
Support and Documentation
Eğer alınan ürün için lisans ücreti ödeniyorsa, en az 1 yıllık bakım ve destek anlaşması da yanında gelir. Dolayısıyla doküman ve destek ile ilgili sıkıntılarımızda karşımızda bir muhattap olması her zaman bir avantaj olarak değerlendirilir. Mesela, Open Source dünyasında para eden kısım budur. Düşünün ki, bir akşam sistemin bir sorunu ile uğraşırken yalnız olmayacaksınız. Sizinle birlikte kafa patlatan başka biri daha olacak ve bu kişinin size o konuyla ilgili yardım etmek gibi bir sorumluluğu olacak. Biraz tembelce, ama 7/24 sistemler için çok önemli bir konu.
References
Bir ürün alırken aslında en önemli konu referanslardır. O ürün daha önce kimler tarafından kullanılmış? Acaba bizimle aynı şekilde mi kullanmışlar? Ne kadar uzun süredir kullanıyorlar? Bu referansların en önemli avantajı, karşılaşabileceğimiz herhangi bir problem, eğer daha önce aynı ürünü kullanan başka bir firmaya sorun çıkarmışsa ve çözülmüşse; bizim sorunumuz da aynı yöntemlerle daha kısa zamanda çözülebilir. Dolayısıyla Amerika zaten keşfedildi, yeniden keşfetmeye çalışmanın bir alemi yok.
Product Family
Her ne kadar open source dünyasını sevsem, implementasyon olayına bayılsam da, şunu unutmamak lazım ürün ailesi kavramında her zaman için aile üyeleri birbirleriyle iyi anlaşırlar. Yani aldığınız ürün bir ürün ailesi ise daha önce yaşanılan sorunlardan ve problemlerden dolayı muhakkak beraber daha performanslı ve daha iyi yaşamak ve çalışmak için optimize edilmişlerdir. Düşünsenize, elinizin altında bir JVM ve bu JVM'i monitor etmeye yarayan bir araç var. Ve siz, bu entegrasyon için endişe etmiyorsunuz, çünkü zaten bu ikisi birbirine entegre olabilsin diye optimize edilmiş, bunun yanında belki binlerce kez de entegre edilmiş. Yani siz bunu yapmaya çalışan ilk araştırmacılardan biri olmayacaksınız.
Bunların dışında gruplayamadığım bir sürü avantaj var. Bunları da yıllardır her bir bileşene ayrı ayrı kafa yorduğum için biliyorum.
Bütün bu değerlendirmeler ışığında son olarak yapılması gereken yük ve performans testi değerlendirmesidir. Bu da en güzel kendi uygulamalarınızla yapılır.
Ben de üç ayrı uygulama sunucusunu (JBoss 4.0.5, Websphere 6.0, Weblogic 9.1), iki ayrı makine/işletim sistemi konfigürasyonunda (AIX 5.3L-IBM, Solaris 9-Sun) iki ayrı senaryo ile test ettim. Testi IBM Rational Performance Tester kullanarak yaptım. Herbir sunucuyu kendi bilgi birikimim ile tune etmeye çalıştım. Testleri yaparken, 5, 20 ve 50 eş zamanlı kullanıcı ile yük yarattım. Çıkan sonuçlar ilgi çekici idi. Özellikle JBoss'un gösterdiği performans gayet ilgi çekici ve başarılı oldu. Tabi içimden keşke bu versiyon ile Distributed Transaction desteği tam olsaydı dedim.
Uzun lafın kısası biz sistem olarak karşılaştırmayı yaparken, uygulama mimarisini de işin içine kattık, performans testinden çıkan sonuçlar sadece kararın bir ayağını oluşturuyor. Kararı vermeniz için uzun vadede tüm ayrıntıları göz önüne almanız gerekir.
Wednesday, July 11, 2007
Websphere, Weblogic, JBoss - Part 1
Altyapı değişikliği yapmak, hem de uzun bir süreden sonra, hem de çok kapsamlı. Acaip riskli bir iş, riskli olduğu kadar zevkli de. Neden zevkli, çünkü her zaman göremeyeceğin şeyleri görme fırsatın oluyor. Ve yeni şeyler öğreniyorsun. Neyse bizim şirkette de bu tür bir çalışma yapılıyor..
Altyapı değişikliği yapmamızın sebeplerinin başında mevcut sistemin yetersizliklileri ve düşünülen ideal yapının getireceği avantajlar var. Bu seride sırasıyla mevcut sistemin dezavantajları, düşünülen sistemin avantajları, ve bu sistemlerle ilgili karşılaştırma yorumlarımı yazacağım.
Kısaca Mevcut yapı : JBoss ve Weblogic ortak kullanılıyor. Ürün ortamında yaklaşık 12 tane JBoss instance'ı ve 7 tane Weblogic instance'ı var. JBoss instance'larının her biri yaklaşık 3 GB, Weblogic'ler ise 2 GB JVM ile çalışıyorlar.
Support and Documentation
Yetersizliklerin en başında JBoss'un open source olmasından dolayı, sorunla karşılaştığımızda buna müdahele ederken kaynak ve destek konusunda çektiğimiz sıkıntılar geliyor. Bunu da şu şekilde anlatayım.
Şanslıysam, daha önce birisi daha JBoss'ta aynı problemle karşılaşmıştır.
Daha şanlıysam, bu problemini internette forumlarda paylaşmıştır.
Daha daha şanslıysam, bu problemi çözmüştür.
Hepten şanslıysam, çözümü internette biryerlere yazmıştır.
Yani nasıl bir şansa ihtiyacım olduğunu siz düşünün. Bu durum bana hatırı sayılır bir deneyim kazandırdı, bunu inkar edemem. Ama bunun yanında eğer bir sistem 7/24 çalışmak zorunda ise ve size kalan mini minnacık kısıtlı zamanda bu tür bir araştırma yapmanız gerekirse, sanırım yeterince terlersiniz. Projemiz henüz bu aşamada değil, ama çok yakın bir zamanda 7/24 çalışması gereken bir sistem haline gelecek. Bu da sorunlara müdahele şeklimizi değiştirmemizi gerektirecek.
Scalability
Ölçeklenebilirlik, aslında bizlere mühendislik eğitiminde neredeyse sürekli anlatılan bir kavramdır. Ama nedense iş pratiğe geldiğinde günü kurtarma adına verilen kararlar, hem ölçeklenemeyebilirlik yaratmakta, hem de ileride çözümü çok çok zor olan sorunlara yol açmaktadır. Ölçeklema kavramında işin büyük kısmı tasarım ve geliştirmeye düşse de, uygulama sunucusunun da ölçek büyüdükçe buna dayanabilmesi gerekmektedir. Ve hatta daha iyi performans gösterebilmesi gerekmektedir.
Her ne kadar sorunlarla karşılaştığımızda sistemlerimizi dikey veya yatay olarak büyütsek de, buna ihtiyacımızı en aza indirebilmek uygulama sunucusunun görevlerinden biridir. Yaa düşünsenize gerçek hayatta ayakkabı alırken dahi, "bir numara büyüğünü al, gelecek sene de giyersin" diyen bizler, her zaman proje geliştirirken proje büyüklüğünün bu şekilde kalacağını düşünürüz. Ne ironi ama.
Performance Monitoring
Yaşadığımız sıkıntılar içerisinde ilk sıraları zorlayan ve zaman zaman birinciliği alan sorunlardan bir tanesi de, sistem üzerinde performans gözlemleme işlemini layığıyla yapamamızdı. Aşağıda bu sistemde kullandığımız 3rd party tool'ları sıralayayım.
JProfiler - Ürün ortamında kullanmak neredeyse imkansız, sisteme getirdiği yük hayli fazla, dolayısıyla kullanmak istiyorsan, Alfa veya Beta ortamlarında kullanabilirsin ki onu da denedim, o bile işkence idi.
GC.log - JVM içerisine birkaç parametre yazdığınızda sistem Garbage Collection ile ilgili tüm dataları bir dosyaya yazıyor, ve server'ın yaşam süresi boyunca bu dosyayı güncelliyor. Aman dikkat dosyayı yanlışlıkla silerseniz yeniden yaratmıyor. Taa ki sunucu restart olana kadar. Bundan sonrası ile ilgili iyi bir Konfigürasyon Yöneticisi arkadaşımın yazılarında detaylı bilgi var java hafıza problemleri ve GCViewer
JConsole - Neredeyse aralarında favorim budur. Ne ortamlara yük getiriyor, ne de bir sürü ayar yapmanız gerekiyor. Sadece JVM'e birkaç parametre yazıyorsunuz, bitti. Ama bu bile sistemde sadece memory'yi takip etmemize, mevcut thread'leri izlememize yarıyor, ve bundan öteye gidemiyordu.
TomcatListener - Bunu da ben yazdım. Aurora ve JBoss kullanıyorsanız, gayet kullanışlı...
Bu listeden sonra bile, yine de sistemde bir sıkıntı olduğunda bu sıkıntıyı bulmak, bulamadığımız durumlarda geçici çözüm üretmek yeterince zor oluyor. Bu durumda son çare olarak uygulama sunucusunu restart ediyoruz. Yine aynı noktaya geliyoruz, sistem çok yoğun çalışmadığı durumlarda bunu yapabiliyoruz, ama yarın sistem 7/24 çalıştığı zaman bizden hesap sormazlar mı?