Hizmet dayanıklığı sistemlerinizde gelişebilecek olası performans hatalarını hızlı bir şekilde önceden belirleyip azaltabilmenizi sağlar. Böylece hizmetinizin dayanıklığını arttırmada ilk adımı atmış olursunuz.
Eskiden kullanılan yazılımların çalışabilmesi için sadece bir web sunucusunun ve veritabanının olması yeterliydi. Ancak, modern yazılımlarda sistemler çok daha karmaşık bir oluşumdur. Bugünlerde yazılım tasarımcıları, genel ve özel cloud, sunucu sanallaştırması ve daha birçok karmaşıklarla uğraşıyor.
Hem eski tür hem de yeni tür yazılımlar başarısız olabilmektedir. Ama eski tarzdaki uygulamalar için esnek yazılım oluşturmak modern yazılımlara kıyasla daha kolaydı.
Resilient ”esnek” sistemin teknik anlamı, başarısız olmasına rağmen müşteri ve kullanıcı tarafından işlevselliğini koruyan sistemdir. Dayanıklılığı anlamak için örneğin seller, kuraklık veya yangınlardan kaçabilen çevre ekosistemi düşünebilirsiniz. Hizmet dayanıklığı sağlayacak esnek bir tasarım, ortalama onarım süresini iyileştirmek için tasarlanmıştır.
Hizmet dayanıklığı geliştirmenizi sağlayacak 4 teknik:
1. Yollanan güncellemeleri uygulayın
10 veya 100 sunucu çalıştırdığınızda hepsini aynı anda güncellemeyin. Bunun yerine, her seferinde sadece bir sunucuyu güncelleyerek durumunu takip edin. Microsoft’ta Yazılımı Nasıl Test Ediyoruz kitabında, öncelikle yakın zamanda güncellenmiş sunucuların sadece dahili çalışan sunuculara yönlendirmeniz önerilir. Tasarlanmış sürümün yalnızca bir tanesinin stabil olduğuna karar verildiğinde müşterilere bırakılması tavsiye edilir. Bu sayede ödeme yapan müşteriler en stabil sürümü görebilmektedir. Bu süreç boyunca çalışanlar aslında beta testçileri olarak görev alır.
Kanarya dağıtımı olarak da bilinen bu yöntem, ödeme yapan müşteriye sorunlar yansımadan belirlenebilmesini sağlar. Genel sürüm yayınlanmadan önce çözülmesi gereken bir performans sorununu gösteren her şeyi toplamanız ve loglamanız gereklidir. Buna ek, otomatik izlemeden, raporlama yazılımından ve beta kullanıcılarınızdan gelen geri bildirimleri not almalısınız. Böylece, tekrardan test yapmanıza gerek kalmadan sorunları tanımlayabilirsiniz.
2. İşlevselliği yeniden deneyin ve hizmetleri asenkron hale getirin
Eski yöntemli geleneksel web hizmetleri eş zamanlı bir sisteme sahiptir. İstek gönderdikten sonra yanıtın gelmesi beklenir. Ancak eş zamanlı sistemlerde bekleme süreleri çok uzun olabilmektedir. Herhangi bir girişim başarısız olduğunda, işlemlerin tamamı zaman aşımı ve başarısızlık riskleriyle karşı karşıya kalır.
Hizmet esnekliğini sağlamanın bir başka yolu da bekleme süresinin bağlantısını kesmektir. Açık kaynak veritabanları örneğin Redis bağlantıyı otomatik keser. Redis, bilgileri iletmeden önce bir sunucunun veritabanı yanıtlarının doğru olduğundan emin olmak için güncel olmayan bilgileri hızla sunucuya geri gönderir. Böylece, sunucu veritabanından yanıt beklerken fazaldan bekleme süresini keser.
3. Üretimde sentetik işlemlerle test yapın
Gözlemlenebilirlik problemi: Elle test edilip her şeyin normal ve yolunda gözükmesine denir.
Bir destek mühendisi, hataların kaynağını ve zamanını belirleyebilen bir test komut dosyası oluşturdu. BU şekilde, loglama yapılırken zaman aşımına uğrama sorununun çözülmesini sağladı.
Sentetik işlemler: Üretimde çalışan ve kullanıcı deneyimi bilgileri sağlayan küçük test komut dosyalarına denir. Bazı çerçeveler bunları kullanıma hazır verir. Ancak bazıları bir test aracına ihtiyaç duyar.
Ancak bu teknik tüm uygulamalarda işe yaramaz. Sentetik işlemlerin eklenmesi, diğer projelere daha fazla zaman harcayabilecek zaman ve enerji gerektirir. Bu yüzden gereksiz işlemlere zaman kaybetmek istemiyorsanız sorunun gerçekten var olduğundan emin olmalısınız. Performans düştüğünde herkesin fark edebileceği, çalışma süresi yüksek dahili sistemlerde bu teknik gereksizdir. Çünkü işlemler sistemin performansı zorlandığında kullanıcının aldığı deneyimin kalitesi düşer.
4. Fazlalıklar için mühendislik, peki sonra…
Hizmet dayanıklığı sağlarken sadece fazlalıklarla uğraşmak için mühendislik yaptığınız anlamına gelmez. Bunun için test yapmanız gerektiği anlamına gelir. Netflix’in yarattığı Chaos Monkey’in üretilmesinin ardındaki fikir, belirli hatalar yaratıp bunları test etmekti. Küçük bir amaçla bir ara verilmesi, gerçek bir hata ortaya çıkarıyorsa, tüm işleri tekrardan yükleyin ve fazlalık yaratın.
Fazlalık testi yapmak, Chaos Monkey‘i kullanmak zorunda olduğunuz ya da kendi yazılımınızı yazmanız gerektiği anlamına gelmez. Bunlarla uğraşmak yerine, zorunlu hatalardan oluşan bir test planı hazırlayın. Böylece başarısızlık durumunda ne olduğunu önceden öğrenebilirsiniz. Bu şekilde aslında yarattığınız fazlalığın başarısız olmadığını ve düzeltme yapmanın daha kolay olduğunu fark edeceksiniz.