建築釺


如何AWS自動縮放,使Braze有效地發送20億消息每天

喬恩·海曼 通過喬恩·海曼2020年2月10日

Braze幫助消費品牌利用數據來傳遞信息個性化的消息,如電子郵件、應用內消息、推送通知和短信。Braze的運營規模非常龐大:每天我們向全球20多億月度活躍用戶發送數十億條信息。考慮到這些消息的規模和性能要求,處理速度是至關重要的。在這篇文章中,我將提供一些關於我們如何使用AWS自動縮放來盡可能快地處理過程,同時節省成本的背景知識。

首先,在Braze上有兩個主要的處理類別:數據處理和消息發送。當我們的客戶與Brmanbetx万博全站客户端aze集成時,他們通常會在他們的移動應用程序或網站上安裝SDK。每當有人使用應用程序或訪問與Braze集成的網頁時,我們的服務器就會處理數據,以更多地了解終端用戶的偏好和行為。Braze還從合作夥伴那裏獲取數據,例如mParticle振幅,AppsFlyer.這些數據的每一部分都需要盡可能快地處理,因為每個數據點都可能影響客戶消息傳遞——用戶采取的操作可能導致發送消息或取消預定的消息。數據還告訴我們,客戶是否會轉向活動目標,這可能會推動客戶的生命周期。

第二類是消息發送。Braze的客戶manbetx万博全站客户端可以發送各種類型的信息,我們稱之為campaign。活動可以是單個消息,也可以組成整個生命周期策略,其中包括跨越數天或數周的多條消息。活動可以安排在特定的時間發布,立即發送,由用戶行為或API調用觸發,或更多。我們的客manbetx万博全站客户端戶希望我們能很快地發送他們的信息。性能將永遠是一個要求,有不斷增加的期望。Braze每天發送大約20億條信息,這意味著我們平均每分鍾發送近140萬條信息!

對我們來說,最大的問題是,Braze如何在不花大錢的情況下盡可能快地處理數據和發送消息?也就是說,雖然我們總是可以增加更多的硬件來擴大規模和更快地處理,但我們需要確保我們運行的業務對我們自己和我們的客戶來說是具有成本效益的。manbetx万博全站客户端為了解釋我們是如何做到這一點的,讓我們首先了解一點我們的數據基礎設施。

Braze以三種不同的模式為客戶部署數據庫。manbetx万博全站客户端小客戶機使用共享數據庫。中型客戶端將其數據存儲在共享服務器上的專用數據庫中。我們最大的客戶在專用服務器上有自己的專用數據庫。這種方法允許Braze在每個客戶的基礎上提供不同大小的數據庫,並在客戶增長時移動他們。manbetx万博全站客户端

使用這種方法,我們可以構建優先處理特定數據庫集群的應用程序服務器。這些應用程序服務器在嚐試處理其他集群之前,首先為分配給它們的集群處理數據並發送消息。

這種設計的基礎是作業隊列的使用。實際上,我們在作業隊列係統上有一個完全獨立的博客文章,但我將在這裏總結它們。作業隊列是用於異步處理的體係結構模式。應用程序提交一個放入隊列中的“作業”。然後,“worker”處理從隊列中獲取數據並對其進行操作。作業隊列模式有助於提高並發性、可靠性和可伸縮性。Braze使用不同類型的隊列,並讓worker從許多不同的隊列中消費。總的來說,Braze每天在幾十個Redis數據庫分片上處理數十億個任務。在峰值負載下,每個分片每秒處理近20萬次操作!

我們支持將不同的應用服務器與數據庫集群關聯的方式是通過我們的隊列部署:每個數據庫都有自己的隊列集和自己的工作應用服務器集。

這樣做有很多好處。首先,我們為特定客戶提供隔離,這有助於滿足安全性和遵從性需求。我們的隊列部署模型通過增加更多的Redis數據庫、作業隊列和應用服務器來提高吞吐量,從而提高了可伸縮性。還有其他的好處也值得在我們的關於我們排隊係統的博客文章

回到消息傳遞,讓我們快速了解一下Braze的消息發送管道。

在較高的層次上,要發送消息,我們首先確定用戶受眾。然後,運行一些業務邏輯來確定受眾中的哪些人應該接收消息。例如,假設我們正在發送電子郵件,但是觀眾中的某個用戶退訂了,或者沒有電子郵件地址。或者我們向iOS用戶發送推送通知,提醒他們更新內容,而觀眾中的特定用戶隻是Android用戶。在這種情況下,我們希望過濾掉這些用戶。接下來,我們針對任何全球頻率上限對結果觀眾執行完整性檢查。為了避免向最終用戶發送過多的消息,Braze客戶可以配置諸如“每周不超過三封電子郵件,每天不超過任何類型的一條manbetx万博全站客户端消息”這樣的規則。一旦我們知道Braze將向誰發送Campaign,就會呈現消息,更新數據庫狀態,並發送消息。

在多步管道中,由於所謂的“隊列饑餓”,作業隊列可能會帶來一些挑戰。隊列本身就是先進先出的。這意味著,如果在同一個隊列中,客戶A有100個作業,客戶B有一個作業,那麼在客戶A的100個作業全部處理完之前,客戶B不會處理任何作業。為了解決這個問題,我們構建了自己的動態隊列係統,該係統為消息發送管道的每個部分創建了短暫的作業隊列。然後,工作服務器對指定給它們的數據庫的動態隊列進行加權選擇。

有了這些背景知識,我們來討論Braze的處理基礎設施是如何提供的。回到如何以具有成本效益的方式以盡可能快的速度發送的問題,這意味著我們需要能夠根據當前或預期的需求自動擴大或縮小容量。為了做到這一點,我們使用AWS自動伸縮功能.AWS自動伸縮是一種技術,它讓我們告訴AWS我們想要多少服務器,他們會自動增加或減少服務器,以匹配所需的數量。

對於數據托管在美國的manbetx万博全站客户端Braze客戶,我們在三個可用區域運行:US -east-1a、US -east-1c和US -east-1d。我們使用起程拓殖為每個數據庫集群、每個可用分區創建兩個AWS自動伸縮組(asg)。一個ASG隻用於數據處理,而另一個用於消息發送和其他類型的工作。

對於每個組和集群,我們收集一組作業隊列指標,比如每個可用區域排隊的作業數量、延遲統計數據,以及我們計劃在未來處理的作業數量。

這些指標被發布到亞馬遜監測,一個監視和可觀察性服務。我們依賴CloudWatch的原因是,它為實時讀取生產用例的指標提供了性能和一致性保證。Braze運行進程來監控作業隊列統計數據,並每分鍾將它們發布到CloudWatch。

從那裏,Braze使用AWSλ讀取CloudWatch關於現有和未來預期作業隊列狀態的指標。然後,這個“asg-lambda”會計算出每個數據庫集群和每個可用分區需要多少服務器,然後不斷向上或向下旋轉服務器。其結果是,我們每天都在不斷地更改在線的不同類型的工作進程和服務器。

因此,Braze的性能始終保持高水平,我們每個月都可以通過這項技術節省數萬美元。

我們有很多方法來提高我們在Braze的自動縮放;查看我們的招聘頁麵加入我們的團隊!


喬恩·海曼

喬恩·海曼

喬恩負責《狂野》的技術運營和工程團隊,他強烈認為有史以來最好的電影是在《年輕的弗蘭肯斯坦》和《灼熱的馬鞍》之間進行選擇。

相關內容

從黑客到Bug賞金程序所有者:一個學習的經驗

閱讀更多

Braze如何利用團隊合作來建立我們的Beacon設計係統

閱讀更多

雪花數據共享

Braze和Snowflake是如何建立有效持續的技術合作關係的

閱讀更多

Braze如何通過協作合成促進團隊合作、洞察力和用戶體驗的改進

閱讀更多