Aşağıda listelenen önlemlerin uygulanması nispeten basittir ancak etkisi yüksektir. Bunları daha önce denemediyseniz, önemli gelişmelere şaşıracaksınız.
Kod olarak altyapı
Tavsiyenin ilk kısmı altyapıyı kod olarak uygulamaktır. Bu, tüm altyapıyı dağıtmak için programlı bir yola sahip olmanız gerektiği anlamına gelir. Kulağa karmaşık geliyor ama aslında aşağıdaki koddan bahsediyoruz:
100 sanal makinenin dağıtımı
Ubuntu'lu
Her biri 2 GB RAM
aşağıdaki koda sahip olacaklar
bu parametrelerle
Altyapınızdaki değişiklikleri takip edebilir ve sürüm kontrolünü kullanarak hızlı bir şekilde bunlara geri dönebilirsiniz.
İçimdeki modernist, yukarıdakilerin hepsini yapmak için Kubernetes/Docker'ı kullanabileceğinizi söylüyor ve haklı.
Ayrıca Chef, Puppet veya Terraform kullanarak otomasyon sağlayabilirsiniz.
Sürekli Entegrasyon ve Teslimat
Ölçeklenebilir bir hizmet oluşturmak için her çekme isteğine yönelik bir derleme ve test hattının olması önemlidir. Test çok basit olsa bile en azından dağıttığınız kodun derlenmesini sağlayacaktır.
Bu aşamada her seferinde şu soruyu yanıtlarsınız: Meclisim testleri derleyip geçecek mi, geçerli mi? Bu düşük bir çıta gibi görünebilir, ancak birçok sorunu çözer.
Bu tikleri görmekten daha güzel bir şey yok
Bu teknoloji için Github, CircleCI veya Jenkins'i değerlendirebilirsiniz.
Yük Dengeleyiciler
Bu nedenle, trafiği yeniden yönlendirmek ve tüm düğümlerde eşit yükün olmasını sağlamak veya arıza durumunda hizmetin devam etmesini sağlamak için bir yük dengeleyici çalıştırmak istiyoruz:
Yük dengeleyici genellikle trafiği dağıtma konusunda iyi bir iş çıkarır. En iyi uygulama, tek bir başarısızlık noktanızın olmaması için aşırı denge kurmaktır.
Genellikle yük dengeleyiciler kullandığınız bulutta yapılandırılır.
İstekler için RayID, korelasyon kimliği veya UUID
Hiç şuna benzer bir mesaj içeren bir uygulama hatasıyla karşılaştınız mı: "Bir şeyler yanlış gitti. Bu kimliği kaydedin ve destek ekibimize gönderin"?
Benzersiz bir tanımlayıcı, korelasyon kimliği, RayID veya varyasyonlarından herhangi biri, bir isteği yaşam döngüsü boyunca izlemenize olanak tanıyan benzersiz bir tanımlayıcıdır. Bu, günlüklerdeki istek yolunun tamamını izlemenize olanak tanır.
Kullanıcı A sistemine bir talepte bulunur, ardından A, B ile iletişime geçer, o da C ile iletişime geçer, bunu X'te saklar ve ardından talep A'ya geri gönderilir.
Sanal makinelere uzaktan bağlanıp istek yolunu izlemeye (ve hangi çağrıların yapıldığını manuel olarak ilişkilendirmeye) çalışırsanız delirirsiniz. Benzersiz bir tanımlayıcıya sahip olmak hayatı çok daha kolaylaştırır. Bu, hizmetiniz büyüdükçe zamandan tasarruf etmek için yapabileceğiniz en basit şeylerden biridir.
Ortalama seviye
Buradaki tavsiyeler öncekilere göre daha karmaşıktır ancak doğru araçlar görevi kolaylaştırır ve küçük ve orta ölçekli şirketler için bile yatırım getirisi sağlar.
Merkezi günlük kaydı
Tebrikler! 100 sanal makine dağıttınız. Ertesi gün CEO gelir ve hizmeti test ederken aldığı bir hatadan şikayetçi olur. Yukarıda bahsettiğimiz ilgili kimliği rapor eder, ancak çökmeye neden olanı bulmak için 100 makinenin kayıtlarına bakmanız gerekir. Ve yarınki sunumdan önce bulunması gerekiyor.
Bu eğlenceli bir macera gibi görünse de, tüm dergileri tek bir yerde arama olanağına sahip olduğunuzdan emin olmak en iyisidir. Günlükleri merkezileştirme sorununu ELK yığınının yerleşik işlevselliğini kullanarak çözdüm: aranabilir günlük toplamayı destekliyor. Bu, belirli bir dergiyi bulma sorununu çözmeye gerçekten yardımcı olacaktır. Bonus olarak grafikler ve buna benzer başka eğlenceli şeyler oluşturabilirsiniz.
ELK yığın işlevselliği
İzleme aracıları
Artık hizmetiniz çalışır durumda olduğuna göre, sorunsuz çalıştığından emin olmanız gerekir. Bunu yapmanın en iyi yolu birkaç tane çalıştırmaktır. ajanlarParalel olarak çalışan ve çalıştığını ve temel işlemlerin gerçekleştirildiğini kontrol eden.
Bu noktada şunu kontrol edersiniz çalışan yapı iyi hissettiriyor ve iyi çalışıyor.
Küçük ve orta ölçekli projelerde API'leri izlemek ve belgelemek için Postman'ı öneririm. Ancak genel olarak, bir kesintinin ne zaman meydana geldiğini bilmenin ve zamanında bilgilendirilmenin bir yolunun olduğundan emin olmak istersiniz.
Yüke bağlı olarak otomatik ölçeklendirme
Çok basit. VM hizmet istekleriniz varsa ve %80 bellek kullanımına yaklaşıyorsa kaynaklarını artırabilir veya kümeye daha fazla VM ekleyebilirsiniz. Bu işlemlerin otomatik olarak yürütülmesi, yük altında elastik güç değişiklikleri için mükemmeldir. Ancak her zaman ne kadar para harcadığınıza dikkat etmeli ve makul sınırlar koymalısınız.
Çoğu bulut hizmetini, daha fazla sunucu veya daha güçlü sunucular kullanarak otomatik ölçeklendirme yapacak şekilde yapılandırabilirsiniz.
Deney sistemi
Güncellemeleri güvenli bir şekilde kullanıma sunmanın iyi bir yolu, bir şeyi kullanıcıların %1'i için bir saat boyunca test edebilmektir. Elbette bu tür mekanizmaları çalışırken görmüşsünüzdür. Örneğin Facebook, kullanıcıların değişiklikleri nasıl algıladığını görmek için hedef kitlenin bazı kısımlarını farklı renkte gösterir veya yazı tipi boyutunu değiştirir. Buna A/B testi denir.
Yeni bir özelliğin piyasaya sürülmesi bile bir deneme olarak başlatılabilir ve daha sonra bu özelliğin nasıl piyasaya sürüleceği belirlenebilir. Ayrıca, hizmetinizde bozulmaya neden olan işleve bağlı olarak yapılandırmayı anında "hatırlama" veya değiştirme olanağına da sahip olursunuz.
İleri düzey
İşte uygulanması oldukça zor olan ipuçları. Muhtemelen biraz daha fazla kaynağa ihtiyacınız olacak, dolayısıyla küçük veya orta ölçekli bir şirket bunu yönetmekte zorlanacak.
Mavi-yeşil dağıtımlar
Ben buna "Erlang" açılım yolu diyorum. Erlang, telefon şirketleri ortaya çıktığında yaygın olarak kullanılmaya başlandı. Telefon çağrılarını yönlendirmek için yazılım anahtarları kullanılmaya başlandı. Bu anahtarlardaki yazılımın temel amacı, sistem yükseltmeleri sırasında çağrıların kesilmemesiydi. Erlang'ın, önceki modülü çökertmeden yeni bir modülü yüklemenin güzel bir yolu var.
Bu adım bir yük dengeleyicinin varlığına bağlıdır. Yazılımınızın N sürümüne sahip olduğunuzu ve ardından N+1 sürümünü dağıtmak istediğinizi varsayalım.
Sen could hizmeti durdurup kullanıcılarınız için uygun olan bir zamanda bir sonraki sürümü kullanıma sunmanız ve biraz kesinti yaşamanız yeterlidir. Ama varsayalım ki gerçekten katı SLA koşulları. Yani SLA %99,99 çevrimdışı olabileceğiniz anlamına gelir sadece yılda 52 dakika.
Bu tür göstergeleri gerçekten elde etmek istiyorsanız aynı anda iki dağıtıma ihtiyacınız var:
şu anda olan (N);
sonraki sürüm (N+1).
Siz regresyonları aktif olarak izlerken, yük dengeleyiciye trafiğin bir yüzdesini yeni sürüme (N+1) yönlendirmesini söylersiniz.
Burada iyi çalışan bir yeşil N konuşlandırmamız var. Bu dağıtımın sonraki sürümüne geçmeye çalışıyoruz
Öncelikle N+1 dağıtımımızın az miktarda trafikle çalışıp çalışmadığını görmek için gerçekten küçük bir test gönderiyoruz:
Son olarak, dağıtımımız tamamlanana kadar yürüteceğimiz bir dizi otomatik kontrolümüz var. Eğer sen çok çok Dikkatli olun, kötü bir gerileme durumunda hızlı bir geri alma işlemi için N dağıtımınızı sonsuza kadar kaydedebilirsiniz:
Daha da ileri bir seviyeye geçmek istiyorsanız mavi-yeşil dağıtımdaki her şeyin otomatik olarak çalışmasına izin verin.
Anormallik tespiti ve otomatik azaltma
Merkezi günlük kaydına ve iyi günlük toplama işlemine sahip olduğunuz göz önüne alındığında, zaten daha yüksek hedefler belirleyebilirsiniz. Örneğin, arızaları proaktif olarak tahmin edin. İşlevler monitörlerde ve günlüklerde izlenir ve çeşitli diyagramlar oluşturulur; böylece neyin yanlış gideceğini önceden tahmin edebilirsiniz:
Anormallikler tespit edildikten sonra hizmetin sağladığı bazı ipuçlarını incelemeye başlarsınız. Örneğin, CPU yükündeki ani bir artış, sabit sürücünün arızalandığını gösterebilirken, isteklerdeki ani bir artış, ölçeği artırmanız gerektiğini gösterebilir. Bu tür istatistiksel veriler hizmeti proaktif hale getirmenize olanak tanır.
Bu öngörülerle herhangi bir boyutta ölçeklenebilir ve makinelerin, veritabanlarının, bağlantıların ve diğer kaynakların özelliklerini proaktif ve reaktif olarak değiştirebilirsiniz.
Bu kadar!
Bir bulut hizmetini yükseltiyorsanız bu öncelik listesi sizi birçok sorundan kurtaracaktır.
Orijinal makalenin yazarı okuyucuları yorumlarını bırakmaya ve değişiklik yapmaya davet ediyor. Makale açık kaynak olarak dağıtılmaktadır, yazar tarafından yapılan çekme istekleri Github'da kabul ediliyor.