DevOps Nedir?(What is DevOps)

Veysel Güneş
Kodcular
Published in
4 min readOct 21, 2019

--

Merhaba arkadaşlar öğrendiklerimi yazıyorum serisinde bugün DevOps dan bahsedeceğim.

DevOps kesin bir tanıma sahip olmasa da neyi kapsayıp, neyi kapsamadığı konusunda birçok fikir vardır.

DevOps Tanımlarından Bazıları Şöyledir:

  • DevOps, IT bölümleri içindeki farklı disiplinlerin (developers & operations) sağlam bir güven ilişkisi ve etkili iletişim üzerinden beraber çalışmasıdır.
  • DevOps, bir felsefe, bir kültürel yaklaşımdır. Yazılımcılar (dev) ve sistem yöneticileri (ops) arası etkili iletişimi teşvik eder.
  • DevOps, yazılımcılar (dev) ve sistem yöneticilerinin (ops); tasarım, geliştirme, test ve yüklemeden oluşan yazılım yaşam döngüsünde ve daha sonrasındaki destek aşamasında da ortaklaşa çalışmaları için gerekli faaliyetlerin bütününü temsil eder.
  • DevOps, yazılımcıların (dev) kendi sistemlerinin çalışması için kullandığı tekniklerin, sistem yöneticileri (ops) tarafından da kullanılmasıdır. Bu araçlar, kaynak kodu kontrolünden (source code control) teste, oradan Agile geliştirme süreçlerine (Agile development processes) kadar uzanır.

Dev

“Dev”, genelde yazılım geliştiricileri için kullanılır, ancak gerçekte daha geniş bir topluluğu temsil eder ve “yazılım geliştirme için çalışan herkes”i kapsar.

Ops

“Ops”, “Dev”e göre daha geniş bir kapsamı olup sistem mühendisleri, sistem yöneticileri, sürüm mühendisleri, veritabanı yöneticileri (DBAs), network mühendisleri, güvenlik uzmanları ve daha birçok değişik alt displinler için kullanılır.

DevOps Nasıl, Hangi İhtiyaçtan Ortaya Çıktı?

Günümüzde yazılım ürünlerinin (uygulamaların) sürüm (version/release) değiştirme hızı, ürünler arası rekabetin artmasıyla birlikte artmıştır ve artmaya devam etmektedir. Şirketler ve ürünleri, bu yarışa benzer ortamda müşterilerini memnun etmek için kaliteli sonuçlar da elde etmek zorundadırlar. Bazı şirketler kullanıcı deneyimini iyileştirmek, hataları düzeltmek veya yeni özellikler eklemek için bazen gün içinde onlarca, belki yüzlerce yazılım değişikliği yapmakta ve kullanıcılara gerçek zamanlı sunmaktadır. Bu şirketlere, Google, Amazon, Twitter ve Etsy örnek olarak gösterilebilir. İşte bu yüzden yazılım üretiminin, çeviklik (agility) ile yerine getirilmesi kaçınılmaz hale gelmiştir.

Eskiden “Dev” ve “Ops” birbirinden kopuk olarak çalışırken istenilen çeviklik elbette sağlanamıyordu, yazılım geliştiren şirketler kendi içlerinde verimsizlik yaşıyor ve nihayetinde müşteriler de durumdan memnun olmuyordu. Geciken projeler, hatalı ürünler, başarısız sürüm denemeleri, boşa harcanan para ve zaman, itibar kaybı… DevOps, işte bu gidişata dur diyecek bir hareket olarak ortaya çıkmış ve yazılım geliştiriciler (dev) ve sistem yöneticilerl (ops) arasındaki iletişimi, işbirliğini ve bütünleşmeyi (entegrasyonu) vurgulamayı esas edinmiştir. Sonuç olarak, şirketlerin IT hizmetleriyle beraber yazılım ürünlerinin de daha hızlı ve daha sık teslim edilebilir (continuous delivery) olmasına yardımcı olmaya başlamıştır.

DevOps ve Agile

DevOps ile Agile yaklaşımın güçlü bağları vardır. Agile yazılım geliştirme müşteri ile ürün yöneticileri, geliştiriciler, bazen de kalite kontrolcüler arasındaki işbirliğini zenginleştirmeyi hedefler ve daha yüksek kaliteli, daha sık ve sorunsuz ürün çıktısı sağlar. Müşteri için yaratılan değer de aynı şekilde yüksek olur. DevOps, yazılım geliştiricilerin çıktısı olan ürünün diğer sistemlerle etkileşiminin de müşteriye sunulan değerin temel bir parçası olduğunu söyler ve böylece ürün geliştiriciler, sistemler etkileşimini de hesaba katmalıdır der. Yani, DevOps basit anlatımla Agile prensipleri daha da genişleterek sadece üretilen kodu değil hizmetin tamamını göz önünde bulundurur diyebiliriz.

DevOps Yaşam Döngüsü

Geleneksel yazılım geliştirme döngüsü (software development lifecycle) geçmişte genel olarak Waterfall yöntembilimini (metodoloji) izlerken günümüzde Agile SCRUM yöntembilimi yaygın hale gelmiştir. Ancak çoğu kurumda bu yaşam döngüsünü Agile, SCRUM ve Waterfall yöntembilimlerinin bir karışımı olarak görmek de mümkündür.

DevOps Yaşam Döngüsü Aşağıdaki Gibidir:

  1. Kod, kaynak kontrol sistemine aktarılır (check in)
  2. Kod, derlenmek için kaynak kontrol sisteminden çekilir (pull)
  3. Testler çalıştırılır. Sürekli entegrasyon (continuous integration) sunucusu, yapıları (build) ve sürümleri (release) üretir. Entegrasyon ve kullancı testleri yapılır
  4. Testleri geçen çıktılar (artifacts) ve yapılar (build) depolanarak saklanır
  5. Otomatik bir sürümleme (release) aracı kullanılarak dağıtım yapılır
  6. Ortam (environment) konfigüre edilir
  7. Veritabanları güncellenir
  8. Uygulamalar güncellenir
  9. Test edilmiş uygulamalar kullanıcılara bir kesinti yaşamalarına gerek kalmadan aktarılır
  10. Uygulama ve ağ performansı izlenir (monitoring) ve sorunlar oluşmadan engellenmeye çalışılır
  11. Her adım biraz daha iyileştirilerek baştan alınır

DevOps kullanılarak, bir geri dönüş (feedback) döngüsüyle ürünlerin sürekli olarak dağıtımı (deployment) şu aşamaların yürütülmesi ile gerçekleşir:

  • Altyapı Otomasyonu
  • Konfigürasyon Yönetimi
  • Dağıtım Otomasyonu
  • Altyapı İzleme
  • Log Yönetimi
  • Uygulama ve Performans Yönetimi

DevOps’un Faydaları

DevOps uygulamalarını yürüten şirketler çok daha verimli çalışırlar. DevOps yaklaşımı ile çalışmayanlara göre 30 kata kadar daha fazla dağıtım (deployment) yapabilirler. Puppet Labs 2013 State of DevOps araştırma sonuçlarına göre dağıtımları %50 daha az başarısız olmuştur.

DevOps ile gelen en büyük değişim, eskiden ayrık çalışan ve farklı becerilere sahip takım üyelerinin; geliştiriciler, veritabanı yöneticileri, sistem yöneticileri, sistem analistleri vb.; bir araya gelip tek bir takım oluşturması olmuştur. Farklı rollerdeki bu işbirliğinin birçok avantajı vardır.

Teknik Faydaları

  • Sürekli teslim (continuous delivery)
  • Düzeltilecek sorunların daha az karmaşık olması
  • Sorunlara daha hızlı çözümler

İşletmeye Olan Faydaları

  • Ürün özelliklerinin daha hızlı teslimi
  • Daha istikrarlı, stabil çalışan sistemler
  • Sorun gidermekten daha çok, iyileştirme için zaman ayırma

DevOps Araçları

Onlarca DevOps aracı içinden bazılarını sizin için seçtik.

Veritabanı

Konfigürasyon Yönetimi (Configuration Management)

Uygulama Dağıtımı (Application Deployment)

İzleme (Monitoring)

Kaynak Kodu Versiyon Kontrolü (Version Control)

Yapılandırma ve Test (Build & Test)

Zengin Kaynak Yönetimi (Repository Management)

Sürekli Entegrasyon (Continuous Integration)

Middleware

Bulut

Mini Türkçe-İngilizce Sözlük

Yazıda geçen bazı İngilizce/Türkçe çevirilerin daha iyi anlaşılması için bu mini sözlüğe başvurabilirsiniz:

Yöntembilim: methodology
Dağıtım: deployment
Sürüm: release/version
Sürekli teslim: continuous delivery
Döngü: loop
Kullanıcı deneyimi: user experience
Çeviklik: agility
İşbirliği: collaboration
Bütünleşme: integration
Geliştirici: developer/software developer

Sabırla okuduğunuz için teşekkür ederim

Kaynaklar

https://www.acmagile.com

--

--

Veysel Güneş
Kodcular

Studying software engineering at firat university, Blogger Öğrendiklerini yazmaktan ve ortaya bir ürün koymaktan mutlu olan http://veyselgunes.site/