“Dağıtmak”, “Yüklemek”, “Uygulamak” — geliştiricilerin yeni bir kod sürümünü veya değişiklikleri yayınlama sürecini tanımlamak için kullandığı üç argo fiildir. “Yayınlamak” genel anlamına rağmen, her terim kendi nüansını ve bağlamını taşır: “dağıtmak” genellikle tamamen yeni bir sürümle ilgilidir, “yüklemek” dosyalar ve verilerle ilgilidir, “uygulamak” mevcut bir sürümün üzerine güncelleme yapmakla ilgilidir. Stack Overflow 2024 anketine göre, Rusça konuşan geliştiricilerin %89’u bu terimlerden en az birini günlük olarak kullanmaktadır. Farkı ve sürüm sürecinin nasıl doğru şekilde organize edileceğini anlayalım.
Kilit Noktalar
“Dağıtmak” en genel terimdir ve bir yazılım ürünü, özellik veya değişikliğin yeni bir sürümünü yayınlamak anlamına gelir. “Bir güncelleme dağıttık”, “Bir düzeltme dağıttık”, “Bir sürüm dağıttık” — her durumda, değişiklik kullanıcılar için kullanılabilir hale gelir. Terim oldukça büyük bir eylem anlamına gelir: genellikle tek bir dosya değil, tam bir sürüm dağıtılır.
“Yüklemek” daha spesifik bir terimdir ve dosyaları, verileri veya yapıtları bir sunucuya veya depolamaya yüklemek anlamına gelir. “Yapıyı sunucuya yükle”, “komut dosyalarını DB’ye yükle”, “varlıkları CDN’e yükle”. “Dağıtmak”’tan farklı olarak, terim yüklenenlerin kullanıcılar için kullanılabilir hale geldiği anlamına gelmez — dosyalar sunucuda olabilir ancak henüz uygulamaya bağlı değildir. Nüans: “yüklemek” ayrıca bir depoya kod göndermek için de kullanılır (“GitHub’a yükledim”).
“Uygulamak” mevcut bir sürümün üzerine bir değişiklik uygulamak anlamına gelen bir terimdir. “Bir geçiş uygula”, “Bir yama uygula”, “Bir yapılandırma uygula”. Temel fark, değişikliğin tamamen değiştirme olmadan üste eklenmesidir. “Dağıtmak” eski sürümün yerine yenisini başlatmak ise, “uygulamak” halihazırda çalışana bir değişiklik eklemektir. Terim, veritabanları (geçişler) ve yama sürümleri bağlamında yaygındır.
Ek terimler aynı anlamsal alandan: “yaymak” (değişikliği kümedeki tüm sunuculara yaymak), “geri almak” (önceki sürüme dönmek), “dökmek” (yanlışlıkla yanlış sürümü dağıtmak). Tüm bu fiiller, kodla sanki “yuvarlanabilen”, “dökülebilen” ve “geri sarılabilen” fiziksel bir nesneymiş gibi eylemleri tanımlar.
“Dağıtmak” terimi bir otomobil metaforundan gelir: “arabayı garajdan çıkarmak”. Kod sürüme hazır olduğunda, “dağıtılır” — dışarı çıkarılır, kullanıcılar için erişilebilir hale getirilir. Metafor, sürekli teslimat uygulamalarının ortaya çıktığı 2000’lerin başında, sürümlerin yıllık yerine düzenli hale gelmesiyle yayıldı. “Bugün dağıtım günümüz” sürüm günü anlamına gelir.
“Yüklemek” teriminin kökleri erken web’dedir, sitelerin FTP üzerinden sunuculara yülendiği zamanlara dayanır. “Dosyaları sunucuya yükle” — kelimenin tam anlamıyla, veri “dökme” ile ilişkili bir protokol üzerinden dosya aktarmak. Modern dağıtım FTP istemcileri yerine CI/CD boru hatları kullansa da kelime yerleşmiştir. İlginç gerçek: İngilizcede karşılığı “push” (sunucuya itmek)’tir, “pour” (dökmek) değil. Rusça farklı bir metafor seçmiştir.
“Uygulamak” terimi üretim ortamından gelir: “tekerlek takmak”, “somun sıkmak”. Yazılım bağlamında — mevcut bir sistemin üzerine değişiklik eklemek, bir cıvataya diş açmak gibi. Veritabanlarında terim özellikle organiktir: geçişlering “uygulanır” ve “geri alınır”. Rollback, Rusçada tam karşılığı (“otkat”) olan birkaç İngilizce terimden biridir.
Veritabanları bağlamında: geçişler “uygulanır”, veriler “yülenir”, şema sürümü “dağıtılır”. Yeni bir sütun eklemeniz gerekiyorsa — bir geçiş uygulayın. Test verisi eklemeniz gerekiyorsa — bir döküm yükleyin. Tüm veritabanı yapısı değişiyorsa — yeni bir şema dağıtın. Fark, farklı işlemleri yansıtır: apply, insert/load, deploy.
DevOps bağlamında: “dağıtmak” — bir boru hattını çalıştırmak, “yüklemek” — bir Docker imajını kayda göndermek, “uygulamak” — Ansible aracılığıyla bir sunucuya yapılandırma uygulamak. Örnek: “önce imajı kayda yükleyelim, sonra sunucuya yapılandırmayı uygulayalım ve ancak ondan sonra sürümü dağıtalım”. Her terim, CI/CD boru hattının ayrı bir aşamasına karşılık gelir.
Mobil geliştirme bağlamında: “yüklemek” — App Store Connect veya Google Play Console’a bir yapı göndermek, “dağıtmak” — uygulama mağazasında yayınlamak, “uygulamak” — uygulama içi güncelleme mekanizması aracılığıyla bir güncelleme iletmek. iOS için “dağıtmak” incelemeyi geçmek anlamına gelir; Android için Play Console üzerinden kademeli dağıtım. Zaman ölçeği: “yüklemek” dakikalar alır, “dağıtmak” saatler veya günler alır (inceleme nedeniyle).
| Terim | Ne yapılır | Örnek | İngilizce karşılığı |
|---|---|---|---|
| Dağıtmak | Sürüm yayınlamak | Sürüm 2.0’ı dağıttık | Release / Deploy |
| Yüklemek | Yapıtları yüklemek | Yapıyı sunucuya yükledik | Upload / Push |
| Uygulamak | Güncelleme uygulamak | Bir geçiş uyguladık | Apply / Roll out |
| Geri almak | Öncekine dönmek | Değişiklikleri geri aldık | Rollback |
Aşama 1: Derleme (Build). Kod derlenir, bir yapıt (binary, Docker imajı, APK/IPA) oluşturulur. CI sunucusu, ana daldaki her commit’ten sonra derlemeyi çalıştırır. Derleme sonucu, benzersiz bir sürüm etiketi (semantik sürümleme veya commit hash) ile dağıtıma hazır bir yapıttır. Derleme başarısız olursa — tüm boru hattı durur, geliştirici bir bildirim alır.
Aşama 2: Test (Test). Birim testleri, entegrasyon testleri, lint araçları ve güvenlik kontrolleri (SAST) çalıştırılır. Bu aşama 10–15 dakikadan uzun sürmemelidir — uzun sürerse geliştiriciler bağlamı kaybeder ve diğer görevlere geçer. Hızlı geri bildirim, CI/CD’nin temel bir ilkesidir. Puppet State of DevOps 2023’e göre, hızlı test (<10 dk) yapan ekipler 3 kat daha fazla sürüm yapar.
Aşama 3: Hazırlama ortamına dağıtım (Staging Deploy). Yapıt, üretimle aynı olan bir hazırlama ortamına dağıtılır. Hazırlama ortamında E2E testleri, duman testleri ve gerektiğinde manuel QA testleri yapılır. Hazırlama ortamında bir gerileme bulunursa, sürüm engellenir ve değişiklikler düzeltme için geri gönderilir.
Aşama 4: Üretime dağıtım (Production Deploy). Yapıt, üretim sunucularına dağıtılır. Dağıtım stratejisine (rolling, blue-green, canary) bağlı olarak, yayılma saniyelerden saatlere kadar sürebilir. Yayılmadan sonra, dağıtım sonrası testler ve izleme çalıştırılır — metrikler normalse, sürüm başarılı kabul edilir. Hata eşiği aşıldığında otomatik geri alma standart uygulamadır.
Rolling dağıtım — sunucuları tek tek güncelleme. Bir sunucu güncellenirken, diğerleri kullanıcılara hizmet vermeye devam eder. İlk sunucunun başarılı şekilde güncellenmesinden sonra ikincisi güncellenir ve bu böyle devam eder. Dezavantajı: dağıtım sırasında farklı sunucularda farklı sürümler çalışır ve bu uyumsuzluğa neden olabilir. Avantajı: sıfır kesinti ve iki kat sunucu kapasitesine gerek yoktur.
Blue-green dağıtım — iki özdeş ortam: Blue (mevcut sürüm) ve Green (yeni sürüm). Green tamamen hazır ve test edildikten sonra, yük dengeleyici trafiği Blue’dan Green’e geçirir. Green’de bir sorun bulunursa — Blue’ya geri dönülür. Avantajı: anında geri alma. Dezavantajı: iki ortamı desteklemek için iki kat kaynak (sunucu) gerekir. Geçiş saniyeler alır.
Canary dağıtım — yeni sürüm önce sunucuların küçük bir yüzdesine (%5–10) dağıtılır. Bazı kullanıcılar yeni sürümü alır, geri kalanı eski sürümde kalır. Canary grubundaki metrikler normalse (hata oranı artmadıysa, gecikme yükselmediyse), yeni sürüm kademeli olarak tüm sunuculara yayılır. Google, Netflix, Spotify riskleri en aza indirmek için canary dağıtımı kullanır. Dezavantajı: izleme ve metrik analizinin karmaşıklığı.
CI/CD sunucuları — Jenkins, GitLab CI, GitHub Actions, CircleCI, Bitrise (mobil için). Yığına göre seçilirler: Jenkins evrenseldir, GitLab CI depo GitLab’daysa, Bitrise iOS/Android içindir. Bir CI/CD sunucusunun ana görevi, insan müdahalesi olmadan derleme, test ve dağıtım boru hattını otomatik olarak yürütmektir.
Konteynerleştirme — Docker, Kubernetes. Docker, uygulama ve tüm bağımlılıklarla birlikte yalıtılmış konteynerler oluşturur. Kubernetes, bir sunucu kümesi üzerinde konteyner dağıtımını yönetir: otomatik rolling güncelleme, ölçeklendirme, yük dengeleme. CNCF Anketi 2023’e göre, kuruluşların %96’sı üretimde konteyner kullanıyor ve bunların %67’si Kubernetes kullanıyor.
Altyapı Olarak Kod (Infrastructure as Code) — Terraform, Ansible, Pulumi. Terraform, altyapıyı (sunucular, ağlar, yük dengeleyiciler) kod olarak tanımlar ve durumunu yönetir. Ansible, sunucu yapılandırmasıyla ilgilenir: yazılım kurulumu, parametre ayarları. Terraform + Ansible kombinasyonu tamamen otomatikleştirilmiş altyapı sağlar: Terraform sunucuları oluşturur, Ansible onları yapılandırır. Değişmez altyapı — sunucular güncellenmez, güncellenmiş bir imajla yenileriyle değiştirilir.
Sıkça Sorulan Sorular
Günlük konuşmada — evet, birçok geliştirici onları eş anlamlı kullanır. Teknik olarak, “yüklemek” sadece dosyaları yüklemektir, “dağıtmak” ise onları kullanıcılar için erişilebilir kılmaktır. Fark: sunucuya yükleyebilirsiniz ancak yönlendirmeye dahil etmeyebilirsiniz.
“Dökmek” — yanlışlıkla yanlış sürümü dağıtmak veya onay almadan dağıtmak. “Üretime yanlış dalı döktüm” CI/CD’deki korumalarla çözülen klasik bir hatadır: üretime yalnızca main dalından ve tüm kontroller geçtikten sonra dağıtılabilir.
Amazon her 11,7 saniyede bir dağıtır, Netflix — günde birkaç kez. Startuplar için haftada 1–2 sürüm idealdir. Sürümler ne kadar sık olursa, her birindeki değişiklikler o kadar küçük olur — gerilemeleri bulmak ve geri almak daha kolaydır. Önemli olan, bir sürümün manuel eylem gerektirmemesi için süreci otomatikleştirmektir.
İlk olarak — önceki kararlı sürüme geri alın. Teşhis, geri almadan sonra, kullanıcılar tekrar çalışırken yapılır. İkinci olarak — nedeni bulmak için metrikleri ve günlükleri analiz edin. Üçüncü olarak — düzeltin ve tekrar dağıtın. Geri alma bir başarısızlık işareti değil, standart bir prosedürdür.
“To ship” — ürünü kullanıcılara teslim etmek. “We shipped version 2.0” — “Sürüm 2.0’ı dağıttık”. Anlamca yakın: “to roll out”, “to release”, “to deploy”. Mobil geliştirmede — “to publish” (mağazada yayınlamak).
Özet
Anahtar teslim bir mobil uygulama geliştireceğiz
IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.
Ayrıca okuyun