...雲開發即將發布實時數據推送服務,再也不用自己搭建WebSocket了

2021-01-15 騰訊網

受訪嘉賓 | 周子傑

作者 | Yonie

小程序雲開發 - 實時數據推送是小程序雲開發即將發布的一個雲服務, 可以監聽雲資料庫的數據變更,實時推送到小程序端。省去了開發者搭建 WebSocket 的成本,是小程序中實時推送的高效實踐方案。本次採訪的嘉賓是騰訊高級工程師——周子傑,他將為我們詳細講解實時數據推送服務的開發背景、技術解決方案及未來相關的產品計劃。感謝「雲加社區」對此次採訪的支持。

InfoQ:請您簡單的介紹一下自己以及目前所負責的工作。

周子傑:我剛畢業時來到了騰訊文檔團隊,負責騰訊文檔實時編輯系統開發,並設計衝突處理算法。今年轉到騰訊云云開發團隊,負責搭建低時延、高並發、高可用的資料庫實時推送服務。畢業後的這三年一直在做實時推送系統方面的工作,有時候也會做一些 Node.js 接入層的工作,目前是騰訊的高級研發工程師。

InfoQ:您之前負責騰訊文檔實時編輯系統開發,現在負責雲開發 - 實時數據推送系統,這兩者都對數據的實時性有一定的要求,您認為兩者有什麼相同點和不同點?

周子傑:它們從設計上講是相似的,但是在側重點上又有所不同:

對於騰訊文檔來說,它的側重點在於數據的可靠性,因為文檔編輯的時候,內容稍微出現一點錯誤,後續所有的編輯就沒有意義了。但是對時延和並發的要求不高。

小程序雲開發中的數據實時推送是一個雲服務 ,需要提供給更多的產品使用,而每個產品都有著自己的應用場景,對數據可靠性、延時、並發量也有著不同的需求,所以我們的實時推送服務在需要在數據穩定性、低延時和高並發量上做到極致,並且微信前端 sdk 加上數據的確認和重傳機制,為數據穩定性保駕護航。

InfoQ:請您介紹下前端如何確定數據的丟失呢?

周子傑:我們目前是這樣設計的:後臺去做監聽,當監聽到新的事件時就會往前端推送。在推送數據消息事件時會帶上有序序號,比如現在給前端推一號事件、二號事件,但是突然發現接下來的是五號事件,這就可以判斷出中間已經丟失了一些數據。之後客戶端會重新請求後臺發送丟失的數據。

InfoQ:之前做騰訊文檔的開發經驗,有哪些是可以用在實時數據推送系統裡的呢?

周子傑:騰訊文檔和雲開發 - 數據實時推送系統在技術上是共通的,很多都是通用的技術,尤其在數據可靠性上參考了很多文檔的成熟技術方案。而它們主要的區別在於:兩者所需要支持的並發用戶數是不同的。文檔支持的並發用戶數沒有那麼多,假設我們這個產品日活是一百萬的話,那它最高的同時連接後臺的用戶數可能就在十萬左右。而數據實時推送系統是一個雲服務,其主要目的是給客戶開發的產品提供數據推送服務,而雲開發同時向非常多的應用提供服務,需要很高的並發支持。所以在高並發上我們作了更多的優化。

InfoQ:小程序雲開發項目中的實時推送系統主要基於什麼需求背景?

周子傑:需求背景主要有兩方面:

一方面是小程序雲開發本身有提供雲資料庫的功能,在此基礎上我們考慮對它做更好的封裝,從而給用戶提供更好的體驗,滿足更多的場景。

另一方面是很多用戶給我們提出了這樣的需求(比如直播的彈幕功能,他們希望有實時消息推送的功能)。他們希望雲開發能提供 WebSocket 的功能,就是希望有能通過後臺直接往前臺推送消息的功能。因為如果沒有這個功能,用戶就要自己去搭 WebSocket 服務,他們自己搭建的服務可能無法保證良好的可靠性和並發性。如果要提供良好的性能,需要的開發成本會很高。於是,為了滿足用戶的需求,我們就立項做資料庫的實時推送系統,我們的願景是:希望實時推送能成為一項服務,不局限於推送資料庫的實時消息,只要你需要,它可以推送任何的消息。目前只是基於資料庫的消息推送,就是資料庫的數據被修改後就將最新數據推送到前端。未來實時推送做成一項服務後,只要有數據消息(可以是自己自定義的一個消息),就可以往前端推送。

InfoQ:現在 Serverless 的概念比較火,小程序雲開發又是一款 Serverless 服務,他為開發者提供了雲函數、雲資料庫和雲文件存儲等功能,請你解釋下採用的雲資料庫與普通的關係型資料庫在數據存儲上有什麼區別?為什麼選取雲資料庫?

周子傑:Serverless 是一個模糊了前端跟後臺關係的概念。雲開發是對 Serverless 的一個落地實踐,但比一般的 Serverless 服務相比,又增加了資料庫、文件存儲等基礎能力,構成一個完整的、可支持小程序、Web、安卓等開發的應用服務中臺。對於一個前端開發人員來說,可以通過雲開發去做一些後臺功能,很大程度上減少了前後端的溝通成本。

雲開發的資料庫與普通的資料庫區別是這樣的:傳統的後臺服務需要先部署 MySQL 或 MongoDB 等資料庫,然後通過後臺服務去操作資料庫,再往前端提供接口,前端同學如果想操作資料庫的話必須通過接口,這中間的溝通成本非常大。

雲開發的資料庫其實是一項服務。從開發的整個鏈路來看,與傳統的開發沒什麼區別的, 它也需要建立自己的後臺服務,只是雲資料庫相當於一個橋梁,處在連接後臺服務和前端的位置,主要是面向前端開發人員使用的一項資料庫服務。雲開發的資料庫不需要後臺提供接口 API 了,前端同學只需要寫幾行調用代碼,就可以實現資料庫的增刪查改,他們也不用再關心後臺用了什麼資料庫、如何搭建等問題,溝通成本和使用成本都降低了很多。用戶可以更聚焦於自己的業務,不用操心其他配置的事情了。

InfoQ:在開發實時推送系統時有沒有遇到一些技術痛點?如何解決的?

周子傑:現在面對最大的技術痛點是如何支持更多的實時連接數。資料庫實時推送是一個新的模塊,實現高可用不是一個簡單的事情,在第一次壓測時,我們 8 核的機器最高支持的連接數大概只有幾千,經過幾次優化現在已經有非常高的並發和可用性。後續還會持續進行優化迭代,以更好的應對高並發需求。

InfoQ:在搭建資料庫的實時推送系統的過程中,需要考慮哪些因素?怎樣保證低延時、高並發、高可用性的性能呢?具體採用了哪些做法?

周子傑:實時推送項目是騰訊雲與微信小程序合作的功能。從整體架構上分成了三個模塊:小程序的前端 SDK、中間接入層和後臺。他們分別承擔的業務為:

小程序的前端 SDK:這個業務需要在前端做些邏輯去保證服務的可靠性。然後在提供一個簡單的接口給前端同學用。這部分由微信小程序的同學負責的。接入層和後臺的工作由我們團隊來負責的。

中間接入層:其任務是與前端保持 WebSocket 長連接,接入層會去後臺輪詢,取到最新的消息事件後就發送給前端。

後臺:就是一個比較傳統的服務,在這一層監聽到最新消息就返回。

為了保證數據的可靠性和完整性,在做模塊設計時,我們採用互不信任的原則,即上述三個模塊之間是互不信任的。為此,我們做了很多的冗餘設計。如果系統中的某一模塊沒有調用成功,我們會採取一些措施來彌補這個缺失。比如說小程序的 SDK,它會定期的去接入層查詢最新消息事件的版本號,如果查到與本地的版本號對不上,它就會重新拉取一下這個消息事件。這樣即使出現數據丟失或者網絡連接斷掉的異常情況時,依然能保證數據的可靠性。

為了保證低延時,除了在接入層提供 WebSocket 接口以外,後臺所有的業務都使用了基於 TARS 框架的 RPC 通信,TARS 是一個成熟的開源框架,其性能很好。

為了處理高並發,我們持續優化接入層,讓其儘可能的維持更多的實時連接。

InfoQ:實時推送系統在未來有什麼計劃?

周子傑:目前推送系統的核心功能已經開發完成,在多款騰訊內部小程序 / 小遊戲進行內測,計劃將於 8 月下旬正式對外開放。此外,在產品層面,我們將對接入層做進一步優化。前端要跟後臺、接入層打交道,需要接入層提供 WebSocket 來保證長連接服務。只有長連接服務的存在,才可以給客戶端推送消息,所以為了保證同一臺機器能支持更多的長連接服務,我們要對接入層機器上部署的業務做裁減,目的是為了把接入層的服務做地更輕量,然後把更多的服務交給後臺來做。就等於說接入層是一個非常輕量的服務,只需要保持長連接的功能,接入層其他的一些功能移到到後臺去做了。

相關焦點

  • websocket項目 搭建node專題及常見問題 - CSDN
    項目中使用的場景:帳戶掃碼登錄,微信掃碼授權,消息實時提醒,配置結果響應,客戶端同步數據。。。之前項目裡做即時通信都是用的輪循,輪詢的效率低,非常浪費資源,後面好幾個項目都開始用的websocket配合koa和redis來實現,現在整理整理深入了解下整個即時通信實現的過程。
  • 八問WebSocket協議:為你快速解答WebSocket熱門疑問
    有關Comet技術的詳細介紹請參見:《Comet技術詳解:基於HTTP長連接的Web端實時通信技術》《WEB端即時通訊:HTTP長連接、長輪詢(long polling)詳解》《WEB端即時通訊:不用WebSocket也一樣能搞定消息的即時性》《開源Comet伺服器iComet:支持百萬並發的Web端即時通訊方案》
  • Worktile中百萬級實時消息推送服務的實現
    在團隊協同工具 Worktile的使用過程中,你會發現無論是右上角的消息通知,還是在任務面板中拖動任務,還有用戶的在線狀態,都是實時刷新。Worktile中的推送服務是採用的是基於XMPP協議、Erlang語言實現的Ejabberd,並在其源碼基礎上,結合我們的業務,對源碼作了修改以適配我們自身的需求。
  • AppCan 2.0正式發布 推移動應用雲服務
    移動應用開發平臺AppCan正式發布了AppCan 2.0版本,從引擎能力、開發工具和網站服務等進行升級,開發效率和運營能力得到提升。本次更新,應廣大開發者的要求,支持了分權限打包和消息推送功能。
  • 微信小程序中如何使用WebSocket實現長連接(含完整源碼)
    騰訊雲研究了一番之後,發現微信支持 WebSocket 還是很值得玩味的。這個特性意味著我們可以做一些實時同步或者協作的小程序。這篇文章分享了一個基於WebSocket長連接的微信小程序——簡單的剪刀石頭布小遊戲的製作過程,希望能對想要在微信小程序中使用 WebSocket 的開發者有所幫助。
  • 觀遠數據3.0平臺發布:Universe數據開發、Galaxy數據分析、Atlas雲...
    一個平臺,三大產品線在發布會上,觀遠數據首次對外發布一站式智能分析3.0平臺,涵蓋Universe數據開發、Galaxy數據分析去年觀遠數據2.0平臺實現了單表規模從1億行到10億行的提升;而今天我們發布的Universe數據開發平臺,則可將10億行的數據規模提升至100億。「張進在會上介紹到。
  • 基於WebGL的三維數據可視化大屏開發流 ThingJS
    界面側邊欄提供應有盡有的可視化視圖列表,包含了太陽圖、柱狀圖、餅圖、玫瑰圖、折線圖、雷達圖、靜態和動態地圖、環狀圖、文本標籤雲等常用圖形。用戶點擊可視化視圖選項後,系統會進行視圖類型與數據結構匹配。可視化大屏的城市地理數據以2D/3D的視角呈現,火柴盒一樣堆在地圖上的三維效果不再吸睛,三維城市模型有更高級的表現形式,外形栩栩如生,連路邊的綠化帶都清晰可見,這正是thingjs的可視化開發業務。ThingJS可視化組件支持模型導入、場景搭建和可視化增效,基於CityBuilder+ThingDepot+3D源碼二次開發輕鬆實現:1.
  • NSR|衛星數據云服務
    與此同時,IBM(與雲星座合作)發布了一份關於數據架構和數據安全發展的報告,該報告詳細介紹了從傳統雲服務向空間資源存儲的轉變形勢。主流雲服務提供商(CSP)也開始注意到衛星行業為雲應用提供了不錯的應用案例和機會。
  • WebSocket能幹些啥?
    1)通知功能:保持一個長連接,當服務端遊新的消息,能夠實時的推送到使用方。像知乎的點讚通知、評論等,都可以使用WebSocket通信。某些使用H5的客戶端,為了簡化開發,也會使用WebSocket進行消息的通知,由於它是實時推送的,會有更好的用戶體驗。
  • GPS定位系統平臺更高效的實時定位方案展示
    GPSBD通用系統是一套專為二次開發而設計的GPS定位系統平臺,這裡介紹下這套系統的實時定位功能GPSBD通用系統這套系統的實時定位功能與其他系統的實時定位功能不同,採用了不同的方案,GPSBD的這套方案可以讓數據的展示至少提高10S到20S左右的時間提前展示,真正做到實時定位的效果;傳統方案是智能定位終端將接受到的GPS經緯度數據發送到後臺伺服器,後臺伺服器系統解析處理先存入資料庫,然後web前端通過輪詢機制定時輪詢資料庫最新的數據,將數據展示在地圖前端的方式,這個方式的弊端在於系統並不知道設備數據什麼時候發送過來,只能被動的輪詢資料庫,不論當前有沒有數據都去輪詢
  • dfuse 開源區塊鏈開發堆棧,提供高階區塊鏈數據服務
    為了給開發人員帶來最大的便利,dfuse 的 EOSIO 組件也將以一個二進位可執行文件——`dfusebox` 的形式發布(類似於 Kubernetes 的 `minikube`)。通過開源其數據棧,dfuse 將為開發者貢獻其能實時監聽、對全歷史查詢和可感知分叉的搜尋引擎(dfuse Search);交易推送保證和生命周期追蹤(dfuse Lifecycle);dfuse 歷史狀態服務(dfuse State),以及更多建立區塊鏈生態系統的所需的底層模塊。dfuse 目前已部署在許多基於 EOSIO 和以太坊區塊鏈上,並在積極針對其他協議進行開發。
  • 數人云發布金融容器雲 構建開放業務新形態
    數人金融容器雲提供的容器編排能夠幫助用戶從容面對複雜應用,通用的Yaml腳本將容器間的配置信息編排整合,使不同應用容器相互獨立又彼此配合地完成一整套複雜應用。數人金融容器雲打破了傳統金融客戶開發運維的相對獨立,允許客戶以低成本快速開發和部署全新的業務服務。
  • Forrester發布全棧公有雲開發平臺報告,騰訊雲再次入選領導者象限
    今日獲悉,國際領先行業諮詢機構Forrester發布《2020年Q4中國全棧公有雲開發平臺Wave™報告》顯示,騰訊雲再次入選公有雲開發平臺領導者象限。在2018年同主題報告中,騰訊雲也曾入選。
  • 一文帶你徹底了解APP PUSH推送機制
    每種類型APP對PUSH的需求也不同,IM類APP追求實時、穩定的觸達,此類APP一般通過自己的長連接進行消息推送,保證用戶在收到消息的時候能夠實時地接收消息消息。另外,一些安卓廠商也會給予頭部APP的進程一定保護,對相關的進程納入白名單,在清理進程的時候予以忽略。
  • 百度新聞源收錄添利器,實時推送工具即將上線
    此次課程在去年北京首講的基礎上增加了優質新聞資源實時推送工具、資訊類站點移動化等新內容。吸引了東方網、解放網、新民網、浙江在線等50餘家上海及周邊城市的核心資訊類網站內容負責人和技術負責人參加。優質新聞資源實時推送工具,解決收錄不及時、不收原創收抄襲等多種問題此次培訓最受大家關注的內容莫過於百度即將針對優質新聞資源推出的實時推送工具。該工具可以有效解決 「新內容遲遲不被收錄」、「百度收錄競品卻不收自己網站」,以及「百度未收錄自己的原創內容,反而收錄了抄襲網站」這幾大困擾網站的問題。
  • 一加完成統一推送服務開發:將支持災害預警推送
    今天下午,一加官方微博宣布,一加已加入並首批完成統一推送聯盟服務開發工作,後續一加 5 及以上的機型都將支持統一推送服務。在微博中,一加還提及了一項非常重要的新信息。統一推送新增了「推必達」服務,專用於災難險情發生後,第一時間給用戶發送運營商級別的災害預警推送,並提供撤離路線導航等服務。也就是說,支持統一推送服務的手機,未來都將同時支持災害預警功能。據悉,截至 2019 年底,華為、榮耀、OPPO、realme、一加、中興、三星、vivo、iQOO 等手機品牌都已宣布支持統一推送服務。
  • LarkXR實踐匯:3DCAT實時渲染雲平臺|Powered by 平行雲
    平行雲科技(北京)有限公司,以實時雲渲染雲交互為技術核心,自主研發賦能全行業XR應用雲化的使能器——LarkXR,助力客戶高效搭建XR雲平臺,打造XR相關的雲化產品和業務。藉助3DCAT,三維應用的製作方可以輕鬆地向用戶發布、交付內容,而不再需要傳統的把整個應用下載安裝在用戶終端,在保證內容數據安全的同時,能極大簡化用戶端的配置成本,提升終端用戶的使用體驗。
  • 微軟發布計劃:馬斯克SpaceX星鏈加持,讓雲服務遍布全球
    這樣一張網,是微軟發展雲服務的理想合作夥伴。Space」率先把雲服務帶到了太空,著實領先業界一大步。Azure 可以模擬整個衛星網絡,包括使用虛擬或實體衛星硬體直接處理後的預收集衛星圖像做複雜的實時場景生成。
  • 普華集團小型智能雲伺服器BSC雲盒SE版震撼發布
    4月8日,由普華集團研發的首款小型智能雲伺服器BSC雲盒SE版正式發布。採用點對點技術的分布式雲存儲架構,BSC雲盒SE版具備以下四大特性:物理上分散分布、服務穩定可靠、存儲安全(文件切片化存儲)、超低能耗等,理論上更可實現永遠在線。BSC雲盒SE版組建的BSC雲將帶動整個行業的變革,催生出廣闊的市場價值前景。
  • 華為雲WeLink助力中南地區疫情防控通用航空氣象服務平臺雲發布
    然而,冬春之交湖北等地低雲低能見度、降雪、空中積冰頻發,春雷萌動,對航空運輸飛行尤其是通航飛行造成了極大的影響。由於缺乏低空探測信息和精細化預報手段,通航氣象保障遇到不少的障礙。中國民用航空中南地區管理局(中南局)領導迅速做出緊急開發平臺的決定,補齊通航氣象保障短板,在各方通力合作高效協同下,終於迎來了成果。