C dil sistemini Go ile yeniden yapılandıran, Bahar Festivali Gala kırmızı zarfına direnen bu Baidu yönlendirme motoru trilyonlarca trafik üstlendi

Düzenle | Xiyan

Üretildi | AI Teknolojisi Ana Kampı (ID: rgznai100)

20 Kasım'da Baidu'nun trilyon trafik yönlendirme motoru BFE, GitHub Trending Top 3'te listelendi ve bugün Star 270'i geçti. Aslında, 2019 Bahar Şenliği Galasında kırmızı zarf kapmaya direnen yönlendirme motoru, 2019 yazında GitHub'da açık kaynaklı hale geldi ve bugün aniden tekrar tetiklendi. Dikkat , O halde bu projeyi de gözden geçirebiliriz.

Önce GitHub açık kaynak adresini sunun: https: // github .com / baidu / bfe, Apache 2.0 lisansı.

Dört ana işlevi, açık kaynaklı dört ana özelliği entegre edin

BFE (Baidu Ön Ucu), Baidunun Bir yedi Katmanlı trafik yönlendirme platformu. BFE platformu şu anda Baidu'nun ürünlerinin çoğunu kapsıyor, günlük yönlendirme talepleri 1 trilyona yaklaşıyor ve en yüksek QPS 10 milyonu aşıyor. 2019 Baidu Bahar Festivali Gala kırmızı zarf etkinliğinde, BFE platformu süper kullanıcı baskısı ve birkaç trafik zirvesi altında sorunsuz bir şekilde çalışarak Bahar Festivali Gala kırmızı zarf etkinliğinin sorunsuz ilerlemesini sağladı.

Kapsamlı bir trafik yönlendirme platformu olarak ifşa edilen bilgilerden, BFE platformunun ana hizmetleri dört ana alanı içerir:

  • Trafik erişimi ve iletimi: HTTP, HTTPS, HTTP / 2, QUIC ve diğer protokolleri destekler ve güçlü uygulama katmanı yönlendirme yeteneklerini destekler

  • Global trafik planlama: harici ağ trafiği planlama ve intranet trafiği planlamadan oluşan global trafik planlama sistemini destekler

  • Güvenlik ve saldırı önleme: kara liste engelleme, ince akım sınırlaması ve uygulama katmanı güvenlik duvarı (WAF) gibi birden çok saldırı önleme özelliğini destekler

  • Gerçek zamanlı veri analizi: dakika düzeyinde ultra yüksek boyutlu zaman serisi raporlarını destekler

BFE platformunun temel bir bileşeni olan BFE yönlendirme motoru, 2012'den beri geliştirildi ve Go dili kullanılarak 2014'te yeniden düzenlendi.

BFE şu anda açık kaynaklıdır ve aşağıdaki önemli yetenekleri destekler:

1. Ana akım ağ protokol erişimi

  • Destek HTTP / HTTPS / SPDY / HTTP2 / WebSocket vb.

  • TLS / HTTP / WebSocket ters proxy modunu destekleyin

2. Genişletilebilir eklenti çerçevesi

  • Genişletilebilir eklenti çerçevesi aracılığıyla, işletme özelleştirme ihtiyaçlarını karşılamak için uzantı modüllerini hızla özelleştirin ve geliştirin

  • Yeniden yazma, yeniden yönlendirme, trafik değişikliği ve engelleme gibi yerleşik zengin eklentiler

3. Talep edilen içeriğe göre yönlendirme

  • Karmaşık iş senaryolarında özelleştirilmiş trafik iletimini karşılamak için etki alanına özel dillere dayalı dağıtılmış kurallar

  • İstek içeriğine (URI / Header / Cookie, vb.) Ve talep bağlamına (IP, protokol, etiket, zaman, vb.) Dayalı koşul temelleri dahil olmak üzere eksiksiz bir boşaltma koşulu ilkelleri setini destekler.

4. Esnek yük dengeleme stratejisi

  • Birden çok erişilebilirlik bölgesinde olağanüstü durumdan kurtarma ve aşırı yük koruması elde etmek için küme düzeyinde yük dengeleme ve bulut sunucusu düzeyinde yük dengelemeyi destekleyin

  • IP veya istek içeriğine dayalı, oturumu bekletmeyi başarmak için kullanıcıları tanımlayan yerleşik ağırlıklı döngüsel, ağırlıklı minimum bağlantı sayısı stratejisi

Go diline dayalı, altı önemli avantajı vardır

BFE'yi Go diliyle yeniden düzenlemek, Baidu ekibi tarafından C, Python ve Go ile karşılaştırıldıktan sonra yapılan seçimdir. Önceki ikisi ile karşılaştırıldığında, Go aşağıdaki özelliklere sahiptir:

  • C'ye yakın performans

  • Eşzamanlılık

    • Rutine gidin: CPU kaynaklarından tam olarak yararlanmak için temel mekanizmayı koruyun

    • Çok iş parçacıklı mod: düşünmesi kolay

  • Geliştirme verimliliği

    • Tanımlama yeteneği Python'a benzer

    • Zengin kitaplık (sistem kitaplığı, üçüncü taraf kitaplığı)

  • Büyük programların organizasyonu

    • paket

    • Veri erişim kısıtlamaları (ilk harfin durumu arasındaki fark)

  • Test edilebilir yetenek

    • Dahili tek taraflı ve kapsam denetim araçları, kolay TDD

    • teste git

  • Hata kontrol yeteneği

    • Sıkı derleme aşaması kontrolleri: güçlü yazma, dosya dahil etme, ...

    • Panik, sorunları bulmak kolay

  • Canlı yayına geç ve operasyon

    • Bağımsız bir yürütülebilir programda derlenebilir

Go dilini temel aldığından ve endüstride yaygın olarak kullanılan Nginx açık kaynak yazılımıyla karşılaştırıldığında, BFE'nin öğrenme maliyetleri, geliştirme maliyetleri ve performans açısından avantajları vardır:

  • Yüksek araştırma ve geliştirme verimliliği: Go dilinin geliştirme verimliliği C dilinden (ve Lua'dan) çok daha yüksektir ve ayrıca kod sürdürülebilirliği açısından da büyük bir avantaja sahiptir.

  • Sistemin yüksek güvenlik ve kararlılığı vardır: Go dili, C dilinin doğasında bulunan arabellek taşmasının gizli tehlikelerine sahip değildir ve çok sayıda kararlılık ve güvenlik riskini önler; ayrıca, programın yinelemeli olarak başlatıldığında bile çökmemesini sağlamak için istisnalar yakalanabilir.

Uzun vadeli bir trendden, yüksek seviyeli programlama dillerine dayalı yazılım sistemleri kademeli olarak rekabet avantajı kazanacaktır. CPU'lar gibi donanım kaynaklarının fiyatı hızla düşmeye devam edecek ve geliştirme insan gücü maliyetleri, proje geliştirme riskleri ve sistem kararlılığı / güvenliği daha önemli karar verme konuları haline gelecektir. Bu açıdan bakıldığında, esas olarak C diline dayalı olan Nginx, kademeli olarak azalırken, BFE gibi daha yüksek seviyeli programlama dillerine dayalı yazılımlar yavaş yavaş ana akım haline gelecektir.

Ek olarak, BFE tasarımında, kurumsal düzeyde uygulama senaryolarının dikkate alınması özel olarak eklenmiştir:

  • Yönlendirme senaryoları için doğrudan destek: Web Sunucusundan Proxy'ye dönüşen Nginx'in evrimsel yolunun aksine, BFE doğrudan senaryoları iletmek için tasarlanmıştır ve yönlendirme modeli ve yönlendirme yapılandırması açısından yönlendirme senaryolarının ihtiyaçlarını daha iyi karşılayabilir.

  • Çoklu kiracı desteği: Bulut bilişim senaryosunda, çok kiracılı yeniden kullanım yaygın bir gerekliliktir. BFE'nin tasarımında, çok kiracılı destek yerleşiktir

  • Yapılandırılmış yapılandırma: BFE yapılandırma tasarımı, ilgili yapılandırma yönetim sistemleriyle bağlantı kurmak için uygun olan JSON gibi çok sayıda yapılandırılmış yöntem kullanır

  • Bol izleme probları: Endüstriyel düzeyde bir yazılım olarak, çevrimiçi izleme gereksinimleri, BFE'nin tasarımında tamamen dikkate alınmıştır.BFE programı, HTTP aracılığıyla binlerce dahili durum değişkenini ortaya çıkarır.

Daha sonra, kısaca BFE'nin belirli adımlarını ve teknik ayrıntılarını tanıtacağım, ancak alan sınırlıdır.Proje hakkında daha ayrıntılı bilgi için lütfen https: // github'a bakın .com / baidu / bfe

Oluştur ve çalıştır

Öncül

  • golang 1.12+

  • Golang yacc

  • git

Kaynak kodunu indirin

  • BFE kodu aşağıdaki depoda bulunabilir:

https: // github .com / baidu / bfe

  • Ana BFE deposunu klonlayın:

$ mkdir -p gocode / src / github .com / baidu $ cd gocode / src / github .com / baidu $ git clone https: // github .com / baidu / bfe $ cd bfe

Kaynak koddan oluştur

  • Bfe'de (src / github .com / baidu / bfe) derleme komut dosyasını kaynak dizinde çalıştırmak için:

$ make
  • Testi çalıştırın:

$ make testi
  • BFE ikili dosyası aşağıdaki gibi oluşturulur:

$ dosya çıkışı / bin / bfeoutput / bin / bfe: ELF 64 -bit LSB çalıştırılabilir ...

Çalıştırmak

  • Bfe'yi örnek yapılandırmayla çalıştırın: conf

$ cd output / bin / $ ./bfe -c ../conf -l ../log

Özellik

Kümeler arasında yönlendirme isteyin

BFE konfigürasyonunda, "ürün" birden fazla kümeden oluşabilir. Kullanıcılar, istekleri kümeler arasında nasıl yönlendireceklerini tanımlayabilir. İstek yönlendirme, HTTP isteğinin içeriğine bağlıdır.

Kural yapılandırması

  • HTTP başlığındaki alanlar, trafiği küme düzeyinde dağıtmak için yönlendirme kurallarını tanımlamak için kullanılır, örneğin:

    • Ana bilgisayar, yol, sorgu, çerez, yöntem vb.

  • BFE, özel başlıklar kullanarak mesajların nasıl yönlendirileceğini tanımlamak için bir "koşul" ifadesi sağlar. Bu, küme düzeyinde yük dengelemede yönlendirme kuralıdır.

  • Birden fazla kural yapılandırılırsa, BFE bu kuralları sırayla eşleştirir. Bir kural eşleşirse, eşleştirme işlemi durur.

misal

  • Bir ürün "demosunun" üç tür trafiği işlemesi gerekir: statik içerik trafiği, "post" trafiği ve diğer trafik. Buna dayanarak, üç küme tanımlayabiliriz:

    • Statik sunum: Statik içerik sağlayın

    • demo-gönderi: mesaj gönder

    • demo-main: diğer trafiğe hizmet etme

  • BFE yapılandırmasında, aşağıdaki yönlendirme kurallarını ekleyebilirsiniz:

    • Kural 1: req_path_prefix_in ("/ statik", yanlış) - > demo-statik, yani "/ statik" yol önekine sahip mesajların demo-statik kümeye yönlendirileceği anlamına gelir.

    • Kural 2: req_method_in ("POST") req_path_prefix_in ("/ setting", false) - > demo-post, yani "POST" yöntemini kullanan ve önünde "/ setting" bulunan mesajların "demo-post" kümesine yönlendirileceği anlamına gelir.

    • Kural 3: Varsayılan- > demo-main, yani yukarıdaki kurallara uymayan tüm mesajlar "demo-main" kümesine gönderilecektir.

Alt küme düzeyinde yük dengeleme

  • Alt küme düzeyinde, yük dengeleme kuralları da yapılandırılabilir. Kural, her bir alt kümeye atanan trafik ağırlığını tanımlar.

  • Trafiği atmak için özel bir sanal alt küme "BLACKHOLE" kullanılabilir.

misal

  • Aşağıdaki yapılandırmayı düşünün:

    • İki IDC: IDC1, IDC2

    • İki BFE kümesi: BFE1, BFE2

    • İki arka terminal kümesi: alt küme-1, alt küme-2

  • BFE kümesinde (BFE1 ve BFE2):

    • BFE1: {alt küme-1: w11, alt küme-2: w12, Kara delik: w1B}

    • BFE2: {alt küme-1: w21, alt küme-2: w22, Kara delik: w2B}

  • Yapılandırılan ağırlığa göre BFE, trafiği arka terminal kümesine dağıtır.

    • Örneğin, ağırlık yapılandırması {w11, w12, w1B} = {45, 45, 10} ise, alt kümeye gelen trafik yüzdesi alt küme-1, alt küme-2 ve Kara delik% 45,% 45 ve % 10.

Örnek düzeyinde yük dengeleme

  • Genellikle, bir alt küme birden çok örnekten oluşur. Alt kümelerde, mesajları örnekler arasında dağıtmak için WRR (Weighted Round Robin) kullanılır.

  • Örneklere kapasitelerine göre farklı ağırlıklar atanabilir.

Örneğin durum kontrolü

BFE, her arka uç örneğinde durum kontrolleri gerçekleştirir. Örnek aşağıdaki iki duruma sahiptir:

  • Normal durum: Örnek, iletileri normal şekilde işler.

  • Durum kontrol ediliyor: Örnek anormal ve mesaj işlenemiyor. Bu durumda, BFE düzenli sağlık kontrolleri yapacaktır.

Devlet geçişi:

  • Aşağıdaki koşullarda normal olarak kontrol edin:

    • Örneğe bağlanırken veya mesaj gönderirken sürekli hatalar eşiği aştı.

  • Aşağıdaki koşullar altında normaldir:

    • BFE, arka uç bulut sunucusundan doğru durum denetimi isteği yanıtını alır.

Mesaj yeniden denenemedi

Mesaj yönlendirme başarısız olursa, BFE mesajı iki seviyede yeniden denemeyi destekler:

  • Aynı alt küme içindeki iletileri yeniden yönlendirin.

  • İletileri diğer alt kümelere yeniden yönlendirin.

bağlantı havuzu

BFE ve arka uç örneği arasında TCP bağlantı desteği:

  • Kısa süreli bağlantı: BFE, her istek mesajını arka uç sunucuya yönlendirmek için yeni kurulan TCP bağlantısını kullanır.

  • bağlantı havuzu:

    • BFE, örneğe olan bağlantı havuzunu korur.

    • Gelen talep için:

      • Mevcut bir bağlantı varsa, lütfen yeniden kullanın.

      • Aksi takdirde yeni bir TCP bağlantısı kurulur.

    • Bağlantı üzerinden talep işlemeyi tamamladıktan sonra:

      • Bağlantı havuzunun geçerli boyutu yapılandırılan sayıdan küçükse, bağlantı havuza eklenir.

      • Aksi takdirde, bağlantıyı doğrudan kapatın.

Oturum yapışkanlığı

BFE, istek mesajının aşağıdaki tanımlamasına dayalı olarak oturum yapışkanlığını destekler:

  • Kaynak IP

  • İstek başlıklarındaki, çerezlerdeki vb. Alanlar

Oturumları farklı yönlendirme seviyelerinde tutun:

  • Alt küme seviyesi: oturumun mesajları aynı alt kümeye gönderilir (bu alt kümedeki örnekler farklı olabilir).

  • Örnek seviyesi: Oturum mesajları aynı örneğe gönderilir.

monitör

indeks

BFE, BFE örneğinin erişim izleme bağlantı noktası aracılığıyla elde edilebilen çok sayıda yerleşik göstergeyi destekler.

Yapılandırma

BFE yapılandırma dosyasında, izleme bağlantı noktasını ayarlayın:

monitorPort = < Liman >

adres

Çalışan BFE örneğinden tam bir gösterge listesi almak için aşağıdaki URL'yi ziyaret edin:

http: // < ip a gg r > : < Liman > / monitor

Eklenti

Eklenti modülü

Projenin sayısız konusu altında, birinin BFE'nin şu anda yalnızca Linux'u desteklediği sorununu gündeme getirdiğini belirtmek gerekir.Projeye katkıda bulunanlar, ileride Windows'u destekleyeceklerini söyleyerek yanıt verdiler.

Son

Boy god halanın seyahat fotoğraflarını geri yüklüyor Dalian kolejleri ve üniversiteleri artık "süslü yatak kontrolü"
önceki
Büyükler ve kız kardeşler sizi kolejlere ve üniversitelere götürür: Shandong Sanat Üniversitesi, Meiyuan'ı yeni bir perspektiften ziyaret edin
Sonraki
En yüksek 15 katlı bina, Güney Shandong Yüksek Hızlı Demiryolu'nun Linyi Kuzey İstasyonu'nun hava operatörlerine saygılarını sunar.
Tencent "çılgın" açık kaynak
Hala kapıyı kaçırdığı için Bacambu'yla dalga mı geçiyorsunuz? Guoan şampiyonu oldu ve son 4 maçta 3 gol attı.
SMS bombardımanı, kırmızı zarf geri ödemesi ... Double 11'den sonra övgü istediniz mi?
Jiaolai Nehri'ni hayal edin: Her zaman Ana Nehir ile birlikte olmak istiyorum
8. Çin İnovasyon ve Girişimcilik Yarışmasının İnternet Sektörü Finalleri Hangzhou'da başladı
2020 yaklaşıyor, üç büyük merkezi girişimin "13. Beş Yıllık" hedefindeki başarı şansı
Çocuklar için dokuz tehlike bölgesi
Kazanmamak nasıl? Guoan'ın takım tarihinin rekorunu kırması bekleniyor, Luneng'i yenmek Çin Süper Ligi'ni kazanmakla karşılaştırılabilir.
"Tüm Aile" CCTV'nin en iyi sekiz altın dosya setine indi, Lin Yongjian, Guo Da ve ailesi oyunun içinde ve dışında.
Sıkı dövüş! Kar amacı gütmeyen eskort sağlamaktan şüphelenilen 4 eğlence kulübü düzeltilmek üzere kapatıldı
HUAWEI 2 milyar yatırım yaptı! 3 yılda 1 milyon yapay zeka yeteneği yetiştirin, netizenler memnun değil
To Top