300.000 satırlık altyapı kodunu yazdıktan sonra 5 faydalı ders çıkardık

Yazar | Yevgeniy Brikman

Tercüman | Cehalet

Gruntwork'te, 300.000 satırlık bir altyapı kodu kitaplığı oluşturuyor ve sürdürüyoruz ve yüzlerce şirket bu kitaplığı üretim ortamlarında kullanıyor. Bu yazıda, bu kütüphaneyi geliştirme ve sürdürme pratiği sırasında öğrendiğimiz çok önemli beş dersi paylaşacağım.

1. Taş Devri'nde DevOps

Sektör çeşitli en son moda sözcüklerle (Kubernetes, mikro hizmetler, hizmet ağı, değişmez altyapı, büyük veri, veri gölleri vb.) Dolu olsa da gerçek şu ki, altyapı oluştururken ve takılıp kalıyorsanız Başları beladayken hiç de son teknoloji görünmüyorlar.

Bana göre DevOps daha çok şöyle geliyor:

Üretim düzeyinde altyapı oluşturmak aslında zor, stresli ve zaman alıcıdır.

Yüzlerce farklı şirketle çalışırken topladığımız deneysel verilere dayanarak, bir sonraki altyapı projenizin ne kadar süreceğini kabaca tahmin edebilirsiniz:

2. Ders 1: Üretim düzeyinde altyapı kontrol listesi

DevOps projeleri her zaman beklenenden daha uzundur. Bu neden?

İlk sebep Yak Tıraşı (yak kılı), peki Yak Tıraşı nedir? Bu sahneye bakın ve anlayacaksınız:

yönetici: Kullanıcı oturum açma işlevini geliştirmiyor musunuz? Neden şimdi kullanmadığımız bir veritabanını kurcaluyorsunuz? mühendis: Evet, kullanıcı oturum açma işlevini geliştirmeyi planlıyorum. Sonra hangi kütüphaneyi kullanacağımı değerlendirmeye başladım, çok iyi bir kütüphane buldum ama sadece Postgres'i destekliyor. Bu yüzden buna değip değmeyeceğini görmek için bir Postgres oluşturmaya çalıştım. Ancak veritabanları arasında geçiş yapmak dizini yok eder, bu yüzden şimdi bir Postgres dizini oluşturmayı öğreniyorum ... böylece kullanıcı oturum açma işlevi uygulanabilir, değil mi?

İkinci neden, üretim düzeyinde bir altyapı oluşturmanın çok fazla ayrıntı içermesidir. Çoğu geliştirici bu ayrıntıları bilmez, bu nedenle bir projeyi tahmin ederken, genellikle anahtar ve zaman alan ayrıntıları unutursunuz.

Bu sorunu önlemek için, yeni bir altyapıyı her kullanmaya başladığınızda aşağıdaki kontrol listesini kontrol edin:

Her altyapının kontrol listesindeki her maddeyi kontrol etmesi gerekmez, ancak uyguladığınız maddeleri, atlamaya karar verdiğiniz maddeleri ve ilgili nedenleri bilinçli olarak kaydetmelisiniz.

3. Ders 2: Araç Seti

2018 itibariyle, Gruntwork'te altyapı oluşturmak ve yönetmek için kullandığımız ana araçlar şunlardır:

  • Terraform: Ağlar, yük dengeleyiciler, veritabanları, kullanıcılar, izinler ve tüm sunucularımızı içeren tüm altyapıyı yapılandırmak için Terraform kullanıyoruz.
  • Paketleyici: Sunucuda çalışan sanal makine görüntülerini tanımlamak ve oluşturmak için Packer kullanıyoruz.
  • Liman işçisi: Sunucularımızdan bazıları, üzerinde çalışan uygulamaları barındıran Docker konteynerleri içeren bir küme oluşturur. Kullandığımız ana Docker küme araçları Kubernetes, ECS ve Fargate'dir.

Şimdi, tüm bu araçlar çok kullanışlıdır, ancak konu bu değil. Mesele şu ki, bu araçlar yeterli değil, ayrıca takımın davranışını da değiştirmeniz gerekiyor.

Özellikle, ekibiniz bu araçlara güvenmiyorsa veya ekibinizin bu araçları kullanmayı öğrenmek için yeterli zamanı yoksa, o zaman dünyadaki en iyi araçlar bile takımınıza herhangi bir yardım getiremeyecektir. Bu nedenle, kilit nokta, kod olarak altyapının bir yatırım olmasıdır: önceden maliyet ödemeniz gerekir, ancak akıllıca yatırım yaparsanız, uzun vadeli büyük faydalar elde edersiniz.

4. Ders 3: Büyük modüller zararlıdır

Yeni başlayanlar olarak altyapı, genellikle tek bir dosyada veya bir birim olarak dağıtılan bir dizi dosyada tüm ortamların (geliştirme, aşama, üretim vb.) Tüm altyapısını tanımlar. Bu kötü bir uygulamadır.

İşte bu yaklaşımın bazı dezavantajları:

  • Yavaş hız: Tüm altyapınız aynı yerde tanımlanmışsa herhangi bir komutu çalıştırmak uzun zaman alacaktır. Şirketin terraform planının 5-6 dakika sürdüğünü gördük!
  • Güvenli değil: Tüm altyapınız birlikte yönetiliyorsa, içeriği değiştirirken tüm içeriğe erişiminizin olması gerekir. Bu, hemen hemen her kullanıcının bir yönetici olması gerektiği anlamına gelir.
  • risk: Tüm yumurtalar tek bir sepetteyse, tek bir hata tüm sistemi bozabilir. Geliştiricideki ön uç uygulamasında küçük değişiklikler yapıyor olabilirsiniz, ancak üretim veritabanı yazım hataları veya yanlış komutlar nedeniyle silinebilir.
  • Anlaması zor: Bir yerde ne kadar çok kodunuz varsa, insanların bunları anlaması o kadar zor olur. Bunları bir araya getirirseniz anlamadığınız kısımlar sizi etkileyebilir.
  • Test etmesi zor: Altyapı kodunu test etmek zordur ve büyük miktarlarda altyapı kodunu test etmek neredeyse imkansızdır.
  • İncelemesi zor: Hiç kimse binlerce satır çıktı görmek istemediğinden, terraform planı gibi komutların çıktıları işe yaramaz hale gelir. Kod incelemeleri de işe yaramaz hale geldi.
  • Kod oluşturmak için küçük, bağımsız, yeniden kullanılabilir ve bir araya getirilebilir modüller kullanmalısınız. Bu tartışmalı yeni bir görüş değil. Bunu daha önce sayısız kez duymuş olabilirsiniz:

    "Her seferinde bir şey yapın ve bunu iyi yapın" -Unix felsefesi. "İşlevlerin ilk kuralı, küçük olmaları gerektiğidir. İşlevlerin ikinci kuralı, küçükten daha küçük olmaları gerektiğidir." - "Kodu Temizlemenin Yolu"

    5. Ders 4: Otomatik test olmadan altyapı kodu çok kırılgandır

    Altyapı kodunuz otomatik olarak test edilmezse, yanlış gitmek kolaydır. Sadece bazı gizli sorunları bilmiyorsun. Diğer bir deyişle, altyapı kodunu test etmek zordur. "Localhost" a sahip değilsiniz (örneğin, dizüstü bilgisayarınızda AWS VPC dağıtamazsınız) ve "birim testine" sahip değilsiniz (örneğin, "Terraform" kodunu "harici" koddan ayıramazsınız çünkü Terraform'un yaptığı şey Dış dünya ile etkileşim).

    Bu nedenle, altyapı kodunuzu düzgün bir şekilde test etmek için genellikle kodu gerçek bir ortama dağıtmanız, gerçek altyapıyı çalıştırmanız ve yapmaları gereken şeyi yaptıklarını doğrulamanız gerekir (bu test yöntemi için lütfen açık kaynak kitaplığı olan Terratest'e bakın, Terraform, Packer ve Docker kodunu test etmek için araçlar). Bu nedenle, altyapı testi için bazı terimleri yeniden tanımlamanız gerekir:

    • Birim testi, bir altyapıdan bir veya az sayıda yakından ilişkili modülün konuşlandırılması ve test edilmesi anlamına gelir (örneğin, tek bir veritabanı modülünün test edilmesi).
    • Entegrasyon testi, birlikte çalışabileceklerini doğrulamak için farklı altyapı türlerinden birden çok modülün konuşlandırılması ve test edilmesi anlamına gelir (örneğin, Web hizmeti modüllerini ve veritabanı modüllerini test etmek).
    • Uçtan uca test, tüm mimarinin dağıtılması ve test edilmesi anlamına gelir.

    Bu resim bir piramit, çok sayıda birim testimiz, az sayıda entegrasyon testimiz ve çok az sayıda uçtan uca testimiz var. neden? Bu, her test türü için gereken süreye göre belirlenir:

    Altyapı testinin döngü süresi çok yavaştır, özellikle piramit daha yavaş yükseldiğinden, piramidin alt kısmında mümkün olduğunca çok hata yakalamak isteyeceksiniz. Bu, yapmanız gereken anlamına gelir:

  • Küçük ve basit bağımsız modüller oluşturun ve bunlar için çok sayıda birim testi yazın.
  • Az miktarda entegrasyon ve uçtan uca test ile daha karmaşık bir altyapı oluşturmak için bu küçük, basit, sahada test edilmiş yapı taşlarını birleştirin.
  • 6. Ders 5: Yayınlama süreci

    Şimdi hepsini bir araya getirelim. Altyapınızı bundan sonra oluşturmak ve yönetmek için benimsemeniz gereken yöntemler şunlardır:

    • Doğru şeyleri oluşturduğunuzdan emin olmak için üretim düzeyinde altyapı kontrol listesini kontrol edin.
    • Altyapınızı kod olarak tanımlamak için Terraform, Packer ve Docker gibi araçları kullanın. Ekibinizin bu araçlarda ustalaşmak için zamanı olduğundan emin olun.
    • Kod oluşturmak için küçük, bağımsız, birleştirilebilir modüller kullanın (veya altyapıdaki hazır modülleri kod tabanı olarak kullanın).
    • Modülleriniz için otomatik testler yazmak için Terratest'i kullanın.
    • Bir çekme isteği gönderin ve başkalarının kodunuzu incelemesine izin verin.
    • Yeni sürüm kodunu yayınlayın.
    • Kodunuzu bir ortamdan diğerine aktarın.

    Orijinal İngilizce

    https://blog.gruntwork.io/5-lessons-learned-from-writing-over-300-000-lines-of-infrastructure-code-36ba7fadeac1

    190330 Yapımcı müzik sınıfının onuncu dersi başlıyor! Yixing size gülümsemeyi ve ayrılıkla yüzleşmeyi öğretir
    önceki
    Kendi en sevdiğim 5 Amerikan dizisini paylaş, hepsi süper güzel yüksek skorlu diziler!
    Sonraki
    Surface Studio 2 yabancı medya değerlendirme incelemesi
    Bunlar 2018'in en iyi rap ayeti, ikna olmayacaksın
    Angular 7'nin on ana özelliğini analiz edin!
    Deadpool "Little Bite" ın kız arkadaşı, güzelliği beni büyüledi.
    Nintendonun yeni konsolunun Joy-Con denetleyicisinin işlevleri nelerdir?
    20.000 paylaşımlı bisiklet "Ebedi Uyku" lojistik parkı muhteşem
    2019 Şangay Otomobil Fuarı en çok beklenen yeni otomobil
    Birkaç yüksek skorlu Amerikan dramasını önerin, kaç tane izlediniz gördünüz mü? Sizce en iyisi hangisi?
    899 yuan olarak fiyatlandırılan Marshall, MINOR II kablosuz Bluetooth kulaklığı piyasaya sürdü
    CW, yeni dizisi "Batwoman" daki ilk karakter grubunu ve oyuncu listelerini açıkladı
    "Xiaoxue" burada, bu makine size 28 metrekare sıcaklık verebilir.
    "The King of Drugs": Sansasyonel Koreli efsanevi uyuşturucu lordu Lee Doosan'ın gerçek deneyiminden uyarlanmıştır.
    To Top