Cumhuriyet Üniversitesi Yazılım Mühendisliği Dersi Bölüm 8 Dağıtım - Bakım Halil ARSLAN Abdulkadir ŞEKER
Bölümün hedefleri Bir dağıtım planına ne yazmalısınız? Neden bir rollback planına ihtiyacınız var? Kesim (cutover) stratejileri Ortak dağıtım görevleri Yaygın dağıtım hataları
Dağıtım (Deployment) Tanım Dağıtım, bitmiş uygulamayı kullanıcılara verme ve onların beğenisine sunma işlemidir. Teoride basit bir işlem gibi görünse de, test aşamasında çok başarılı çalışan bir uygulama canlıya çıkıldığında tamamıyla çuvallayabilir. (Kullanıcılarda güçlü PC ler, hızlı yazıcılar olmadığını öğrenilecektir.) Dağıtım terimine ek olarak, anlamları benzer olan; gerçekleme (implementation), yükleme (installation), piyasaya sürme (release/launch) terimleri de kullanılmaktadır. Implementation : Kodlama. (Implementation of user validation module.) Installation : Kurma (call an electrician or a plumber to install something.) Deployment : Daha dinamik bir olay. (deployment of troops into a field of battle) Release/Launch: Uygulamayı veya sürümlerini canlıya çıkarmak. Alfa Beta Release (versiyon) eylemin kendisi deployment
Deployment Scope / Plan Dağıtım aşamasında, dağıtım kapsamı ve planı olmalıdır. Kapsam (scope): Kullanıcı sayısı, işlediği veri miktarı, uygulama büyüklüğü, etkilendiği/etkilediği harici sistemler, ... Büyük dağıtımlarda hata ihtimali de daha fazla olacaktır. Bu sebeple küçük dağıtımlar daha pürüzsüz olabilir. Kendinize yazdığınız bir uygulamadaki pürüz sadece sizi etkilerken, bir OS yeni versiyonunda oluşabilecek bir problem milyonlarca kullanıcıyı etkileyecektir. Dağıtım planı yapmadan önce kapsam kesinlikle belirlenmelidir. Plan : Yapılacak işlerin takip edileceği bir adım/iş listesi oluşturulmalıdır. (Ayrıntılı olarak) Her adım için, başarısızlık durumlarında gidilecek yollar belirlenmelidir. Acil durumlar için B planları, yedekleme planları eklenmelidir. Yedekleme planı yoksa dağıtımı durdurmak gerekebilir.
Cutover (Sistem Geçişi / Canlı Geçiş) Kullanıcıları yeni uygulamaya taşıma süreci. Bazı uygulamalar için sadece yeni sürümü internete koyup kullanıcıların yüklemesi beklenir. Bazı projelerde ise, kullanıcılara yeni versiyon için mail ile bildirimler yapılır veya kullanıcılara yeni versiyon yerinde yüklenir. Bazı sistemlerde yeni sisteme taşınırken, bir takım kurulumlar ve düzenlemeler yapmak gerekebilir. (OS yükseltme, veri tip dönüştürme, vs. ) Kurulum esnasında kullanıcılar için işlerini yapamayacakları zamanı minimize etmek gerekir. Bunun için aşağıdaki adımlar önemlidir Yerinde Dağıtım (Staged Deployment) Kademeli Dağıtım (Gradual Cutover) Incremental Deployment Parallel Testing
Cutover (Sistem Geçişi) Yerinde Dağıtım(Staged Deployment) Tüm kurulumlar için özel alanlarda yapılan çalışmalardır. Sistem yönetim ekibi ürün kurulumlarını yerinde yapar. Kademeli Dağıtım (Gradual Cutover) Bazıları yeni versiyona geçerken, bazı kullanıcılar var olan sistem ile devam ederler. Herşeyden emin olduktan sonra tüm kullanıcılar geçirilir. Avantaj ters giden durumlardan min. kullanıcıyı etkilemek. Dejavantaj ise iki grubu yönetmek için extra çaba harcanmasıdır. Geçici kurallar ile kullanıcılar yönetilir.
Cutover (Sistem Geçişi) Artırımlı Dağıtım (Incremental Deployment) Kademeli olarak yeni sistemin özellikleri kullanıcılara eklenir. Önce bir tool kullanıcıya verilir, sonra sorun yoksa bir sonraki tool a geçilir. Bu çözüm monolitik uygulamalarda kullanılamaz. Yeni bir hava trafiği kontrol sistemi kurulumu için, önce kalkışı uygula, test et, havadaki uçakların yakıtı bitmeden önce inişi planla Parallel Testing: Hataları azaltmak için paralel çalışmak gerekebilir. Yeterince kullanıcı varsa, yeni sistemi eskisiyle paralel olarak kullandırabilirsiniz. Örn. Muhasebe programı iki versiyonuda yüklenir. Eski veriler ve fonksiyonlarla yeni versiyon karşılaştırılarak geçiş yapılır.
Dağıtım Görevleri Başarılı bir dağıtım için yapılması gereken görevler uygulamaya özgüdür. FileZilla yeni sürümü için sadece yükleme yapmak yeterli, ancak bir müşteri destek merkezi oluşturuyorsanız, yapacak çok iş vardır. Büyük çaplı dağıtımlar için aşağıdaki görevlerin üstesinden gelinmelidir. Fiziksel Çevre (ofis, masa, sandalye, vs.) Donanım (ağ kabloları, routerlar, yazıcılar, vs.) Dökümantasyon (eğitim materyalleri, kullanıcı kılavuzu, genel komut tanımları, vs) Eğitim (kullanıcıların eğitilmesi, key user veya eğitmenler tarafından) Veritabanı (sunucu, DBMS, vs.) 3. parti yazılımlar (web servis, satın alma sistemleri, yazdırma/tarama araçları, vs) Asıl geliştirilen uygulama. (izleme (log) ve test araçları iyi yazılmış olmalı.)
Dağıtım Hataları Başarılı bir dağıtım : 1-plan / 2-hata tahmini / 3-sorunların üstesinden gelme Ancak bazen kurtarılamayacak hatalar ortaya çıkabilir. Bunlardan bazıları; Herşeyin çalışacağını varsayma: Rollback planı yapmama: Rollback için extra çaba gerekir, fakat hayat kurtarır. Yetersiz zaman verme: Beklenmeyen durumlar için fazladan zaman tanımak. Geri dönüşe yeterli zaman bırakılmalıdır Birden fazla güncellemeyi bir kerede yükleme Kararlı olmayan bileşenlerle çalışma Özellikle open-source 3. parti ürünlerin kararsız versiyonları Dönüşü olmayan bir erken noktayı belirleme
NELER ÖĞRENDİK ? Dağıtım kapsamı, her plan için olası problemleri tahmin etmeyi sağlar. Dağıtım planı, dağıtım için gereken adımları, işlerin yanlış gidebileceği olası durumları içermelidir. Dağıtım tıkandığında değişiklikleri geri alma (rollback) opsiyonu olmalıdır. Roll-back zor olsa da, geri dönüşü olmayan bir noktada tıkanmak çok daha acı verici olacaktır. Kesme stratejileri: staged dağıtım, kademeli kesme ve artırımlı dağıtım Dağıtım görevleri Dağıtım hataları