Bir bulut hizmetiniz varken nasıl iyi uyuyabilirsiniz: temel mimari ipuçları

Bir bulut hizmetiniz varken nasıl iyi uyuyabilirsiniz: temel mimari ipuçlarısophiagworld tarafından KAYBEDİLDİ

Bu makale, mühendislerin milyonlarca kullanıcının eriştiği büyük ölçekli hizmetlerle çalışmasına yardımcı olacak bazı genel modelleri içermektedir. 

Yazarın deneyimine göre bu kapsamlı bir liste değildir, ancak aslında etkili tavsiye. Öyleyse başlayalım.

Destekle çevrildi Mail.ru Bulut Çözümleri.

İlk seviye

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.

Bir bulut hizmetiniz varken nasıl iyi uyuyabilirsiniz: temel mimari ipuçları
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:

Bir bulut hizmetiniz varken nasıl iyi uyuyabilirsiniz: temel mimari ipuçları
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"?

Bir bulut hizmetiniz varken nasıl iyi uyuyabilirsiniz: temel mimari ipuçları
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.

Bir bulut hizmetiniz varken nasıl iyi uyuyabilirsiniz: temel mimari ipuçları
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.

Bir bulut hizmetiniz varken nasıl iyi uyuyabilirsiniz: temel mimari ipuçları
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.

Bir bulut hizmetiniz varken nasıl iyi uyuyabilirsiniz: temel mimari ipuçları
Ç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.

Bir bulut hizmetiniz varken nasıl iyi uyuyabilirsiniz: temel mimari ipuçları
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:

Bir bulut hizmetiniz varken nasıl iyi uyuyabilirsiniz: temel mimari ipuçları
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:

Bir bulut hizmetiniz varken nasıl iyi uyuyabilirsiniz: temel mimari ipuçları
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:

Bir bulut hizmetiniz varken nasıl iyi uyuyabilirsiniz: temel mimari ipuçları
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.

Konuyla ilgili başka neler okunmalı:

  1. Go ve CPU önbellekleri
  2. Uygulamaya yönelik bir şablonla korsanlık ruhuna sahip Kubernet'ler
  3. Telegram'da Kubernetes Çevresindeki Kanalımız

Kaynak: habr.com

Yorum ekle