Jack Jiang

          我的最新工程MobileIMSDK:http://git.oschina.net/jackjiang/MobileIMSDK
          posts - 499, comments - 13, trackbacks - 0, articles - 1

          2025年3月20日

          1、基本介紹

          RainbowChat-Web是一套基于MobileIMSDK-Web的網(wǎng)頁端IM系統(tǒng)。不同于市面上某些開源練手或淘寶售賣的demo級(jí)代碼,RainbowChat-Web的產(chǎn)品級(jí)代碼演化自真正運(yùn)營(yíng)過的商業(yè)產(chǎn)品,其所依賴的通信層核心SDK已在數(shù)年內(nèi)經(jīng)過大量客戶及其輻射的最終用戶的使用和驗(yàn)證。RainbowChat-Web同時(shí)也是移動(dòng)端IM應(yīng)用RainbowChat的姊妹產(chǎn)品。

           

          2、品質(zhì)說明

          ? 源自真正運(yùn)營(yíng)的商業(yè)產(chǎn)品:RainbowChat-Web的技術(shù)源于真實(shí)運(yùn)營(yíng)的商業(yè)產(chǎn)品。

          ? 它不是個(gè)Demo:不同于市面上某些開源或淘寶售賣的demo級(jí)代碼,RainbowChat-Web的產(chǎn)品級(jí)代碼演化自真正運(yùn)營(yíng)過的商業(yè)產(chǎn)品,其所依賴的通信層核心SDK(即MobileIMSDK-Web)已在數(shù)年內(nèi)經(jīng)過大量客戶及其輻射的最終用戶的使用和驗(yàn)證。

          ? 簡(jiǎn)潔、精煉、優(yōu)化、原生:RainbowChat-Web為了盡可能降低2次開發(fā)時(shí)的上手門檻、兼容性、可讀性、可維護(hù)性的難度堅(jiān)持不依賴任何前端框架這些框架通常是指AngularJS、VUE、EmberJS、React等),返璞歸真,只使用原生JS+HTML+CSS(再無其它復(fù)雜性),極大降低開發(fā)者的上手難度、兼容成本,達(dá)到最簡(jiǎn)潔、最精煉、最靈活的目標(biāo)(簡(jiǎn)潔、簡(jiǎn)單、回歸本質(zhì)的東西,才能擁最強(qiáng)的生命力)。

          截止目前:RainbowChat-Web努力保證在各主流系統(tǒng)、主流瀏覽器、不同分辨率屏幕上的體驗(yàn),包括但不限于:Chrome、Safari、FireFox、Edge、360瀏覽器、世界之窗瀏覽器等▼

          3、運(yùn)行演示

          ? 運(yùn)行截圖,詳見:《RainbowChat-Web前端功能截圖
          ? 演示視頻,詳見:《RainbowChat-Web運(yùn)行演示視頻

          4、功能簡(jiǎn)介

          1、支持文本消息、查看語音留言消息(App產(chǎn)品發(fā)送)、圖片消息大文件消息、查看短視頻消息(App產(chǎn)品發(fā)送)、名片消息位置消息、消息表情、快捷消息、消息撤回消息轉(zhuǎn)發(fā)等;
          2、支持一對(duì)一陌生人聊天模式;
          3、支持一對(duì)一正式好友聊天模式;
          4、支持多對(duì)多群聊聊天模式;
          5、完善的群組信息管理:建群、退群、解散、轉(zhuǎn)讓、邀請(qǐng)、踢人、群公告等;
          6、完整的注冊(cè)、登陸、密碼找回等等功能閉環(huán);
          7、個(gè)人中心功能:改基本信息、改個(gè)性簽名、改頭像、改密碼等;
          8、支持查看個(gè)人相冊(cè)、個(gè)人語音介紹;
          9、完整的離線消息/指令拉取機(jī)制;
          10、完整的歷史消息/指令存取機(jī)制;
          11、完整的好友關(guān)系管理:查找好友、發(fā)出請(qǐng)求、處理請(qǐng)求、刪除好友、好友備注等;
          12、以及其它未提及的功能和特性。

          5、技術(shù)亮點(diǎn) 

          1)輕量易使用:純?cè)鶭S編寫,堅(jiān)持不依賴任何前端框架這些框架通常是指AngularJS、VUE、EmberJS、React等);

          2)模塊化設(shè)計(jì):所有UI模塊、數(shù)據(jù)邏輯均由獨(dú)立封裝的JS對(duì)象管理,代碼規(guī)范、低耦合,有效防止代碼復(fù)雜性擴(kuò)散;

          3)瀏覽器跨域:所有AJAX接口均為JSONP實(shí)現(xiàn),百分百支持跨域;

          4)通信代碼解偶:得益于高內(nèi)聚的MobileIMSDK-Web工程,實(shí)現(xiàn)了IM功能邏輯與網(wǎng)絡(luò)通信的解偶,利于持續(xù)升級(jí)、重用和維護(hù)(這是經(jīng)驗(yàn)不足的IM產(chǎn)品做不到的);

          5)支持WebSocket:并非某些產(chǎn)品中還在使用的過時(shí)“長(zhǎng)輪詢”技術(shù),真正的“即時(shí)通訊”

          6)網(wǎng)絡(luò)兼容性好:核心層基于MobileIMSDK-Web技術(shù),在不支持WebSocket的情況下仍可很好地工作;

          7)斷網(wǎng)恢復(fù)能力:擁有網(wǎng)絡(luò)狀況自動(dòng)檢測(cè)斷網(wǎng)自動(dòng)治愈的能力;

          8)輕松支持加密:一個(gè)參數(shù)即可開啟SSL/TLS通信加密

          9)服務(wù)端慢io解偶:IM實(shí)例本身堅(jiān)持不直接進(jìn)行DB等慢io的讀、寫,保證IM實(shí)時(shí)消息高吞吐和性能;

          10)服務(wù)端邏輯解偶:得益于MobileIMSDK-Web工程,實(shí)現(xiàn)了上層邏輯與網(wǎng)絡(luò)通信核心的解偶,底層數(shù)據(jù)通信全部通過低偶合的回調(diào)通知來實(shí)現(xiàn);

          11)完善的log記錄:服務(wù)端使用log4js日志框架,確保每一關(guān)鍵步驟都有日志輸出,讓您的運(yùn)行調(diào)試更為便利;

          12)聊天協(xié)議兼容:實(shí)現(xiàn)了與RainbowChat-APP產(chǎn)品完全兼容的協(xié)議模型;

          13)消息收發(fā)互通:實(shí)現(xiàn)了與RainbowChat-APP產(chǎn)品的無縫消息互通。

          6、支持的聊天消息類型

          7、好友聊天

          8、群聊聊天

          9、發(fā)送“群名片”消息

          10、發(fā)送“位置”消息

          11、“消息撤回”

          12、“消息轉(zhuǎn)發(fā)”

          12、“消息引用”

          14、“@”功能

          15、其它特性和細(xì)節(jié)

          聊天區(qū)上方聊天對(duì)象信息顯示:查看視頻

          消息送達(dá)狀態(tài)圖標(biāo)顯示:查看視頻

          posted @ 2025-06-13 16:15 Jack Jiang 閱讀(25) | 評(píng)論 (0)編輯 收藏

               摘要: 本文由攜程前端開發(fā)專家Chris Xia分享,關(guān)注新技術(shù)革新和研發(fā)效率提升。1、引言本文介紹了攜程機(jī)票前端基于Server-Sent Events(SSE)實(shí)現(xiàn)服務(wù)端推送的企業(yè)級(jí)全鏈路通用技術(shù)解決方案。文章深入探討了 SSE 技術(shù)在應(yīng)用過程中包括方案對(duì)比、技術(shù)選型、鏈路層優(yōu)化以及實(shí)際效果等多維度的技術(shù)細(xì)節(jié),為類似使用場(chǎng)景提供普適性參考和借鑒。該方案設(shè)計(jì)目標(biāo)是實(shí)現(xiàn)通用性,適用于各種網(wǎng)絡(luò)架構(gòu)和業(yè)務(wù)場(chǎng)景...  閱讀全文

          posted @ 2025-06-13 15:32 Jack Jiang 閱讀(23) | 評(píng)論 (0)編輯 收藏

          本文來自嗶哩嗶哩通用技術(shù)團(tuán)隊(duì)分享,下文進(jìn)行了排版優(yōu)化和修訂。

          1、引言

          隨著 AI 技術(shù)快速發(fā)展,業(yè)務(wù)對(duì) AI 能力的渴求日益增長(zhǎng)。當(dāng) AI 服務(wù)面對(duì)處理大規(guī)模請(qǐng)求和高并發(fā)流量時(shí),AI 網(wǎng)關(guān)從中扮演著至關(guān)重要的角色。AI 服務(wù)通常涉及大量的計(jì)算任務(wù)和設(shè)備資源占用,此時(shí)需要一個(gè) AI 網(wǎng)關(guān)負(fù)責(zé)協(xié)調(diào)這些請(qǐng)求來確保系統(tǒng)的穩(wěn)定性與高效性。因此,與傳統(tǒng)微服務(wù)架構(gòu)類似,我們將相關(guān) API 管理的功能(如流量控制、用戶鑒權(quán)、配額計(jì)費(fèi)、負(fù)載均衡、API 路由等)集中放置在 AI 網(wǎng)關(guān)層,可以降低系統(tǒng)整體復(fù)雜度并提升可維護(hù)性。

          本文要分享的是B站在大模型時(shí)代基于多模型AI的網(wǎng)關(guān)架構(gòu)設(shè)計(jì)和實(shí)踐總結(jié),希望能帶給你啟發(fā)。

          * 相關(guān)閱讀:全民AI時(shí)代,大模型客戶端和服務(wù)端的實(shí)時(shí)通信到底用什么協(xié)議?

          技術(shù)交流:

          (本文已同步發(fā)布于:http://www.52im.net/thread-4831-1-1.html)

          2、系列文章

          1. 長(zhǎng)連接網(wǎng)關(guān)技術(shù)專題(一):京東京麥的生產(chǎn)級(jí)TCP網(wǎng)關(guān)技術(shù)實(shí)踐總結(jié)
          2. 長(zhǎng)連接網(wǎng)關(guān)技術(shù)專題(二):知乎千萬級(jí)并發(fā)的高性能長(zhǎng)連接網(wǎng)關(guān)技術(shù)實(shí)踐
          3. 長(zhǎng)連接網(wǎng)關(guān)技術(shù)專題(三):手淘億級(jí)移動(dòng)端接入層網(wǎng)關(guān)的技術(shù)演進(jìn)之路
          4. 長(zhǎng)連接網(wǎng)關(guān)技術(shù)專題(四):愛奇藝WebSocket實(shí)時(shí)推送網(wǎng)關(guān)技術(shù)實(shí)踐
          5. 長(zhǎng)連接網(wǎng)關(guān)技術(shù)專題(五):喜馬拉雅自研億級(jí)API網(wǎng)關(guān)技術(shù)實(shí)踐
          6. 長(zhǎng)連接網(wǎng)關(guān)技術(shù)專題(六):石墨文檔單機(jī)50萬WebSocket長(zhǎng)連接架構(gòu)實(shí)踐
          7. 長(zhǎng)連接網(wǎng)關(guān)技術(shù)專題(七):小米小愛單機(jī)120萬長(zhǎng)連接接入層的架構(gòu)演進(jìn)
          8. 長(zhǎng)連接網(wǎng)關(guān)技術(shù)專題(八):B站基于微服務(wù)的API網(wǎng)關(guān)從0到1的演進(jìn)之路
          9. 長(zhǎng)連接網(wǎng)關(guān)技術(shù)專題(九):去哪兒網(wǎng)酒店高性能業(yè)務(wù)網(wǎng)關(guān)技術(shù)實(shí)踐
          10. 長(zhǎng)連接網(wǎng)關(guān)技術(shù)專題(十):百度基于Go的千萬級(jí)統(tǒng)一長(zhǎng)連接服務(wù)架構(gòu)實(shí)踐
          11. 長(zhǎng)連接網(wǎng)關(guān)技術(shù)專題(十一):揭秘騰訊公網(wǎng)TGW網(wǎng)關(guān)系統(tǒng)的技術(shù)架構(gòu)演進(jìn)
          12. 長(zhǎng)連接網(wǎng)關(guān)技術(shù)專題(十二):大模型時(shí)代多模型AI網(wǎng)關(guān)的架構(gòu)設(shè)計(jì)與實(shí)現(xiàn)》(* 本文

          3、AI網(wǎng)關(guān)技術(shù)概覽

          AI 網(wǎng)關(guān)是一個(gè)用于統(tǒng)一接入和調(diào)度大語言模型(LLM)服務(wù)的系統(tǒng),支持多供應(yīng)商、多模型、負(fù)載均衡調(diào)度的管理。同時(shí)具備統(tǒng)一鑒權(quán)、Token 配額管理、安全審計(jì)與可觀測(cè)能力,確保 API 調(diào)用的安全性和穩(wěn)定性。負(fù)載均衡模塊,能夠根據(jù)提供商多線路、多模型 和 API Key 進(jìn)行靈活路由,并適用于多模型接入、多租戶等復(fù)雜場(chǎng)景。

          4、整體架構(gòu)設(shè)計(jì)

          AI 網(wǎng)關(guān)的整體架構(gòu)和傳統(tǒng) API 網(wǎng)關(guān)及其類似,在數(shù)據(jù)面和控制面上有幾乎相同的設(shè)計(jì)。

          實(shí)際上 AI 網(wǎng)關(guān)就是衍生于之前微服務(wù)團(tuán)隊(duì)的 API Gateway,我們?cè)?API Gateway 的基礎(chǔ)上做了一些針對(duì) AI 業(yè)務(wù)接口的特性優(yōu)化,如無緩沖區(qū)的請(qǐng)求代理,支持域名、服務(wù)發(fā)現(xiàn)等混合調(diào)度,AI 超長(zhǎng)響應(yīng)時(shí)間請(qǐng)求的優(yōu)雅退出等功能。

          在此基礎(chǔ)上我們使用于 API Gateway 相類似的數(shù)據(jù)面、控制面分離的架構(gòu),控制面會(huì)將變更后的網(wǎng)關(guān)配置準(zhǔn)實(shí)時(shí)下發(fā)至數(shù)據(jù)面節(jié)點(diǎn)。數(shù)據(jù)面節(jié)點(diǎn)識(shí)別配置有更新后在運(yùn)行時(shí)會(huì)動(dòng)態(tài)切換代理引擎至新的代理邏輯下,并保證老的代理邏輯會(huì)處理完當(dāng)下被分配的請(qǐng)求。

          在數(shù)據(jù)面中,我們對(duì)請(qǐng)求過濾器有兩種模式的抽象:請(qǐng)求過濾器和模型過濾器。請(qǐng)求過濾器作用于用戶的原始請(qǐng)求,這類過濾器往往被設(shè)計(jì)用于處理鑒權(quán)、限流等邏輯。而模型過濾器作用于請(qǐng)求被轉(zhuǎn)發(fā)至該模型時(shí),常用于模型 API 的兼容邏輯。比如模型發(fā)展中目前對(duì)深度思考 <think> 的標(biāo)簽處理,推理引擎自定義參數(shù)的兼容修正等。

          除此之外控制面也會(huì)提供 OpenAPI 供 AI 模型供給團(tuán)隊(duì)上架模型,新增 API Key 等日常運(yùn)營(yíng)能力。模型提供方可以在上架模型時(shí)支持為模型配置相應(yīng)的 RPM、TPM 上限,并根據(jù)模型的推理引擎選擇相應(yīng)的兼容策略。也可以通過 OpenAPI 為單個(gè) API Key 授權(quán)相應(yīng)模型等功能。

          5、鑒權(quán)認(rèn)證

          在鑒權(quán)機(jī)制中,采用目前主流 OpenAI SDK 兼容的 API Key 認(rèn)證方案。

          Authorization: Bearer <YOUR_API_KEY>

          在 API Key 的認(rèn)證基礎(chǔ)上還提供細(xì)粒度的權(quán)限控制功能,允許為每個(gè) API Key 配置可訪問的模型范圍,以及對(duì)不同模型的設(shè)置不同的配額。

          另外支持靈活的 API Key 有效期配置,用戶可根據(jù)需求設(shè)置 API Key 的 過期時(shí)間 或 不過期。

          6、配額管理

          在配額管理體系里可以限制模型消費(fèi)者的調(diào)用速率,在這里主要參考了 OpenAI 的配額策略: RPM(每分鐘請(qǐng)求數(shù))和 TPM(每分鐘 Tokens 數(shù))。

          在這里可以按照為每個(gè)用戶分配不同模型的 Token 配額,或指定單位時(shí)間的請(qǐng)求數(shù)限制,以確保 AI 服務(wù)的高效運(yùn)行并防止超出預(yù)算。

          同時(shí)我們還支持月維度的 Token 配額,業(yè)務(wù)按自然月進(jìn)行預(yù)算申請(qǐng),超過預(yù)算時(shí)請(qǐng)求將被限制。對(duì)于接入 AI 能力而言,每個(gè)業(yè)務(wù)都需要提前申請(qǐng)預(yù)算額度,避免帶來難以負(fù)擔(dān)的成本。

          7、多模型訪問

          目前版本僅支持基于 OpenAI API 的協(xié)議轉(zhuǎn)發(fā)。以目前推理引擎發(fā)展和在線 AI 云服務(wù)而言,兼容 OpenAI API 協(xié)議已經(jīng)成為業(yè)界共識(shí),在此基礎(chǔ)上我們只需要實(shí)現(xiàn)根據(jù)用戶需求的模型名,擇優(yōu)選擇一個(gè)相應(yīng)模型的上游 API 提供商(公司自建 IDC或公有云),并替換成相應(yīng)服務(wù)商的 API Key 和 Upstream 域名就可以進(jìn)行負(fù)載均衡。

          對(duì)于公司 IDC 自建的模型服務(wù)而言,我們繼續(xù)沿用基于 discovery 等服務(wù)發(fā)現(xiàn)技術(shù)來發(fā)現(xiàn)推理引擎節(jié)點(diǎn),直接將請(qǐng)求包裝調(diào)度至這些自建模型。

          8、模型負(fù)載均衡

          LLM API 的負(fù)載均衡和傳統(tǒng)實(shí)時(shí) API 的模式有很大的不同。

          傳統(tǒng) API 開發(fā)中:一次請(qǐng)求往往被設(shè)計(jì)成會(huì)極大概率地命中一塊結(jié)果緩存,且緩存 Key 的計(jì)算都比較簡(jiǎn)單,因此很多負(fù)載均衡都簡(jiǎn)單基于請(qǐng)求相應(yīng)時(shí)間、連接數(shù)等等。

          在 LLM 推理場(chǎng)景下:每個(gè)推理請(qǐng)求都會(huì)帶來網(wǎng)關(guān)本身難以評(píng)估的計(jì)算時(shí)間和設(shè)備資源占用,此時(shí)基于 RPS、TTFB、連接數(shù)等負(fù)載均衡策略將不再適用。

          在 AI 網(wǎng)關(guān)的默認(rèn)負(fù)載均衡策略中:我們主要基于單模型服務(wù)節(jié)點(diǎn)處理 Token 的吞吐和時(shí)延能力,在黑盒模式下評(píng)估節(jié)點(diǎn)的飽和度。除此之外,推理引擎自身和顯卡其實(shí)也暴露了許多和執(zhí)行隊(duì)列相關(guān)的指標(biāo),綜合這些指標(biāo)同樣預(yù)計(jì)能獲得比傳統(tǒng)負(fù)載均衡更有效的體驗(yàn)。

          另外:基于 Prefix Cache 的節(jié)點(diǎn)選擇同樣會(huì)是一個(gè)相當(dāng)有效的調(diào)度策略,但 Prefix Cache 的計(jì)算能力往往需要外部服務(wù)來進(jìn)行,因此 AI 網(wǎng)關(guān)同樣支持接入外置的負(fù)載均衡算法,通過前置的 RPC 來讓外置服務(wù)選擇最合適的模型節(jié)點(diǎn)。

          9、多租戶隔離

          業(yè)務(wù)主要通過 域名 + API Key 進(jìn)行訪問大模型推理,可以通過域名進(jìn)行管理對(duì)接的接口路由,進(jìn)行配置轉(zhuǎn)發(fā)到指定 Model Provider 服務(wù)。如果需要進(jìn)行多業(yè)務(wù)隔離,只需要通過不同的域名訪問并配置不同的轉(zhuǎn)發(fā)目標(biāo)。

          10、可觀測(cè)能力

          從業(yè)務(wù)視角,主要分為 Gateway、 Domain、Consumer、Provider、UserModel、UpstreamModel 維度,進(jìn)行查詢和觀察請(qǐng)求接口的可用率,以及 QPS、Latency、5xx、Quota 等指標(biāo)。

          11、支持的API協(xié)議

          11.1 概述

          在 AI 網(wǎng)關(guān)中,我們主要以 OpenAI 提供的 API 作為基礎(chǔ)協(xié)議,讓開發(fā)者基于 OpenAI SDK 實(shí)現(xiàn)各種業(yè)務(wù)場(chǎng)景對(duì)接。

          目前支持的 API 協(xié)議有:

          • 1)對(duì)話式模型交互(CHAT_COMPLETION);
          • 2)通用文本向量接口(EMBEDDING);
          • 3)提示詞模板(CHAT_TEMPLATE);
          • 4)模型上下文協(xié)議(MODEL_CONTEXT_PROTOCOL) 。

          業(yè)務(wù)可以根據(jù)自己不同的場(chǎng)景進(jìn)行選擇對(duì)應(yīng)的協(xié)議。

          11.2 對(duì)話式模型交互(CHAT_COMPLETION)

          對(duì)話式模型交互是最基礎(chǔ)的協(xié)議,用于構(gòu)建具有復(fù)雜邏輯的對(duì)話交互。同時(shí) API 支持上下文感知的對(duì)話,使得模型能夠理解和響應(yīng)多輪交流,并在對(duì)話中保持合理的邏輯和語境一致性。

          對(duì)話接口是 LLM 與現(xiàn)實(shí)世界溝通的重要渠道,大量 AI 需求實(shí)際上就是在與模型進(jìn)行一輪或多輪對(duì)話實(shí)現(xiàn)的。

          例如業(yè)務(wù)希望通過 LLM 排查線上故障的潛在原因,簡(jiǎn)單來說就是將應(yīng)用的各項(xiàng)可觀測(cè)指標(biāo)、故障期間的日志記錄或應(yīng)用上下游的變更記錄以對(duì)話形式告知 LLM,并讓 LLM 輸出一段便于程序理解的結(jié)果表達(dá)模式,讓 LLM 從模型數(shù)據(jù)中計(jì)算出符合直覺潛在故障原因。

          11.3 通用文本向量(EMBEDDING)

          通用文本向量(EMBEDDING)接口的核心功能是將文本轉(zhuǎn)化為高維向量,捕捉其語義特征。這在需要進(jìn)行大規(guī)模信息檢索、匹配和知識(shí)管理的場(chǎng)景中尤為關(guān)鍵。

          11.4 提示詞模板(CHAT_TEMPLATE)

          提示詞模板是一種結(jié)構(gòu)化的對(duì)話生成方式,允許業(yè)務(wù)通過設(shè)置預(yù)定義的模板來生成系統(tǒng)化的回復(fù)。這種方式將語言模型的生成能力與模板化結(jié)構(gòu)相結(jié)合,使業(yè)務(wù)能夠以普通 API 的方式進(jìn)行請(qǐng)求交互,并可以更集中化地控制生成內(nèi)容的樣式和格式。

          同時(shí)我們也支持內(nèi)嵌函數(shù),以方便在提示詞模板進(jìn)行處理內(nèi)容:

          • 1)len(v any) string
          • 2)jsonify(v any) string
          • 3)make_json_object(v ...any) map[string]any
          • 4)slice_to_index_map(v any, startBy int) map[int]any

          以評(píng)論內(nèi)容翻譯的場(chǎng)景:

          - path: /v1/reply-to-en

            protocol: HTTP

            timeout: 300s

            middlewares:

            - name: v1_chat_template

              options:

          '@type': type.googleapis.com/infra.gateway.middleware.llm.v1.contrib.ChatTemplateConfig

                provider: bilibili

                model_name: index

                prompt_template: |

                  你的任務(wù):以下給定文本是一個(gè)B站視頻的相關(guān)文本信息,可能為標(biāo)題、簡(jiǎn)介、彈幕或評(píng)論,請(qǐng)你將給定的文本逐條翻譯成英文。輸入為一個(gè)json格式,key為序號(hào),value為待翻譯的彈幕,一共有{{ len .reply_list }}個(gè)文本。示例如下:

                  輸入: {"1": "xxx", "2": "xxx"}

           

                  輸出: {"1": "xxx", "2": "xxx"}

           

                  注意,用{dyn:xxx}符號(hào)包裹的是圖片引用,不需要翻譯,直接保留。用[xxx]包裹的是表情符號(hào),不需要翻譯,直接保留。現(xiàn)在請(qǐng)根據(jù)上述要求完成如下片段的翻譯,輸出一共{{ len .reply_list }}個(gè)翻譯后的結(jié)果,直接輸出翻譯后的英文,不要進(jìn)行任何解釋。

           

                  輸入: {{ jsonify (slice_to_index_map .reply_list 1) }}

           

                  輸出:

          提示詞模版接口實(shí)際上是基于對(duì)話接口的一種高效對(duì)接模式。眾所周知,自 OpenAI 發(fā)布 ChatGPT 后,提示詞工程(Prompt Engineering)本身被當(dāng)作一種技術(shù)路線而提出。提示詞工程主要關(guān)注提示詞開發(fā)與優(yōu)化,幫助用戶將大語言模型用于各場(chǎng)景和研究領(lǐng)域。研究人員可利用提示工程來提升大語言模型處理復(fù)雜任務(wù)場(chǎng)景的能力,如問答和算術(shù)推理能力。

          對(duì)于接入 LLM 的業(yè)務(wù)研發(fā)而言,他可能本身不具備很強(qiáng)的提示詞工程能力;甚至提示詞的優(yōu)化本身也取決于模型的迭代更新。因此對(duì)于解決特定領(lǐng)域的業(yè)務(wù)場(chǎng)景,AI 工程師往往會(huì)基于最優(yōu)模型寫出最精準(zhǔn)的提示詞,通過 AI 網(wǎng)關(guān)的提示詞模版接口發(fā)布。業(yè)務(wù)提交簡(jiǎn)單 JSON KV 對(duì)后,渲染出最有效的完整提示詞,LLM 基于有效提示詞輸出最精確的結(jié)果。

          11.5 模型上下文協(xié)議(MODEL_CONTEXT_PROTOCOL)

          MCP (Model Context Protocol,模型上下文協(xié)議) 是由 Anthropic 在 2024 年底推出的一種開放協(xié)議,旨在讓大型語言模型(LLM)能夠以標(biāo)準(zhǔn)化的方式連接到外部數(shù)據(jù)源和工具。該協(xié)議抽象并標(biāo)準(zhǔn)化了 Resources、Prompts、Tools 等資源及其接入方式,允許 LLM Client 應(yīng)用以一致的方式連接到各種數(shù)據(jù)源和工具,如文件、數(shù)據(jù)庫、API 等。

          配置轉(zhuǎn)發(fā)到注冊(cè)中心的 MCP 服務(wù):

          - path: /example-mcp/*

            protocol: HTTP

            timeout: 300s

            middlewares:

            - name: v1_mcp_server

              options:

                '@type': type.googleapis.com/infra.gateway.middleware.llm.v1.contrib.MCPServerConfig

                proxy:

                  name: example-mcp

                  upstreams:

                  - url: 'discovery://infra.example.example-mcp'

          - path: /example-mcp/*

            protocol: HTTP

            timeout: 300s

            middlewares:

            - name: v1_mcp_server

              options:

                '@type': type.googleapis.com/infra.gateway.middleware.llm.v1.contrib.MCPServerConfig

                proxy:

                  name: example-mcp

                  upstreams:

                  - url: 'discovery://infra.example.example-mcp'

          12、MCP市場(chǎng)與API接入

          MCP 市場(chǎng)其實(shí)就是一個(gè)公司內(nèi)部的資源共享和協(xié)作平臺(tái)。簡(jiǎn)單來說,它可以看作是企業(yè)內(nèi)的小型“App Store”,專門用來提供各種服務(wù)和資源的接入入口。可以讓業(yè)務(wù)通過這個(gè)平臺(tái)輕松獲取、整合、使用這些資源,使業(yè)務(wù)對(duì)接更加地簡(jiǎn)單。

          用戶可以把自己的 MCP 服務(wù)快速發(fā)布到市場(chǎng)上,并且接入到 MCP Gateway 后即可使用。

          當(dāng)前的 MCP 協(xié)議中主要有兩個(gè)端點(diǎn):

          • 1)/sse:是一個(gè) Events 長(zhǎng)連接通知協(xié)議,用于實(shí)時(shí)通知資源信息的變更;
          • 2)/message:用于 JSONRPC 通信端點(diǎn),能夠以 JSONRPC 方式進(jìn)行通信交互。

          而我們?cè)?MCP Gateway 中,我們?cè)谄髽I(yè)內(nèi)部將通過統(tǒng)一的域名進(jìn)行提供業(yè)務(wù)接入,并且進(jìn)行管理每一個(gè) MCP服務(wù)的接口,例如:https://mcp.example.com/logging-mcp

          同時(shí)在 MCP服務(wù)中,需要使用相同的根路徑 /logging-mcp,因?yàn)樵?MCP 協(xié)議中,會(huì)先連接到 /sse 端點(diǎn),再返回對(duì)應(yīng)的 /message 端點(diǎn)信息,所以請(qǐng)求路徑需要保持跟網(wǎng)關(guān)一致。

          13、本文小結(jié)

          AI 網(wǎng)關(guān)通過統(tǒng)一接入、鑒權(quán)、配額管理 和 模型調(diào)度支持,為大模型提供了高效、安全、定制的連接能力。同時(shí),支持了 OpenAI 協(xié)議、提示詞模板 和 MCP 市場(chǎng)等功能,進(jìn)一步擴(kuò)展了 AI 技術(shù)在企業(yè)中的應(yīng)用場(chǎng)景,為業(yè)務(wù)接入和資源整合提供了極高的便利性。

          14、相關(guān)資料

          [1] Web端即時(shí)通訊技術(shù)盤點(diǎn):短輪詢、Comet、Websocket、SSE

          [2] SSE技術(shù)詳解:一種全新的HTML5服務(wù)器推送事件技術(shù)

          [3] 網(wǎng)頁端IM通信技術(shù)快速入門:短輪詢、長(zhǎng)輪詢、SSE、WebSocket

          [4] 搞懂現(xiàn)代Web端即時(shí)通訊技術(shù)一文就夠:WebSocket、socket.io、SSE

          [5] 全民AI時(shí)代,大模型客戶端和服務(wù)端的實(shí)時(shí)通信到底用什么協(xié)議?


          (本文已同步發(fā)布于:http://www.52im.net/thread-4831-1-1.html)

          posted @ 2025-05-22 14:08 Jack Jiang 閱讀(54) | 評(píng)論 (0)編輯 收藏

          本文來自QCon全球軟件開發(fā)大會(huì)王勁鵬的技術(shù)分享,下文進(jìn)行了排版優(yōu)化和修訂。

          1、引言

          性能和體驗(yàn)在 iOS / Android 雙端場(chǎng)景下已經(jīng)是一個(gè)較為成熟的話題,但隨著鴻蒙 OS 的發(fā)展,端側(cè)開發(fā)者需要更多的關(guān)注多端場(chǎng)景的差異性。

          本次分享的主題是小紅書在鴻蒙平臺(tái)上的工程實(shí)踐,主要聚焦于性能優(yōu)化和探索。* PPT講稿原文下載:小紅書鴻蒙OS下的性能優(yōu)化探索與實(shí)踐(PPT)[附件下載]》)

          先介紹一下自己的背景。之前一直從事大前端領(lǐng)域的工作,主要專注于跨端和容器化方案。也曾手寫過一個(gè)跨端框架,名為 Doric,它可以對(duì)標(biāo) React Native、Vue Native 和 Flutter 等。Doric 框架在落地時(shí)表現(xiàn)良好,還支持了一些自研的 3D 引擎方案。除此之外,我還有播放器內(nèi)核研發(fā)經(jīng)驗(yàn),以及大前端常規(guī)體系建設(shè)和 CI/CD 流水線的工程經(jīng)驗(yàn)。未來,我將持續(xù)關(guān)注大前端的演進(jìn),尤其是鴻蒙這樣的多端和跨端平臺(tái)。

          從 2023 年開始,鴻蒙的優(yōu)勢(shì)愈發(fā)明顯,已經(jīng)成為可與 iOS、安卓媲美的第三大移動(dòng)操作系統(tǒng)。從一些抖音視頻中也可以看出,鴻蒙在流暢性方面甚至在某些層面上超過了 iOS。

          今天的分享內(nèi)容分為四個(gè)部分:

          • 1)介紹整個(gè)歷程和背景;
          • 2)介紹鴻蒙 OS 的相關(guān)能力和小紅書在該平臺(tái)上的優(yōu)化實(shí)踐;
          • 3)通過鴻蒙 OS 提供的性能驗(yàn)證工具,展示小紅書在鴻蒙平臺(tái)上的性能優(yōu)化驗(yàn)證方法、優(yōu)化后的性能提升以及具體的收益和結(jié)果;
          • 4)總結(jié)和展望。
           
           

          2、內(nèi)容分享和整理

          分享者:王勁鵬,內(nèi)容審校和編輯:Kitty。

           王勁鵬:小紅書鴻蒙工程師。目前主要負(fù)責(zé)小紅書鴻蒙版的研發(fā)和工程建設(shè),曾從事過大前端架構(gòu)設(shè)計(jì)、研發(fā)效能等方向的工作,在終端架構(gòu)演進(jìn)、性能優(yōu)化以及跨端容器和動(dòng)態(tài)化等方面具備長(zhǎng)期實(shí)踐及深厚經(jīng)驗(yàn),持續(xù)關(guān)注大前端技術(shù)體系,鴻蒙以及多端的演進(jìn)。

          3、版本歷程和開發(fā)背景

          3.1 小紅書迭代歷程

          從 2023 年年中開始,鴻蒙的“千帆計(jì)劃”正式啟動(dòng),并很快升級(jí)為“鴻飛計(jì)劃”。小紅書作為 7 家頭部合作商之一,率先支持了鴻蒙,并于 2023 年 11 月中旬上線了一個(gè)基礎(chǔ)版的 beta 版本 APP。這個(gè)版本主要包含筆記瀏覽和視頻筆記瀏覽兩大功能,以及一些簡(jiǎn)單的個(gè)人設(shè)置。當(dāng)時(shí),小紅書的動(dòng)作非常迅速,可以說是頭部應(yīng)用廠商中對(duì)華為支持最為積極的品牌之一。

          在整個(gè)鴻飛計(jì)劃中,我們規(guī)劃了三個(gè)核心里程碑:除了 2023 年 11 月的 beta 版本外,還包括 2024 年 6 月的 HDC 版本和 2024 年 9 月的商用版本。HDC 版本主要是針對(duì)華為正式宣發(fā)鴻蒙 3(HarmonyOS Next)開發(fā)者測(cè)試的情況。在 HDC 版本中,我們上線了許多小紅書特有的存量功能,包括視頻拍攝、圖文拍攝以及多設(shè)備協(xié)同等創(chuàng)新特性。而到了 2024 年 9 月的商用版本交付時(shí),小紅書的核心功能已經(jīng)基本與主端對(duì)齊。考慮到鴻蒙的開發(fā)周期僅有一年,小紅書的鴻蒙 APP 在這一年中要對(duì)齊開發(fā)了十年甚至十幾年的安卓和 iOS 版本,難度和壓力都非常巨大。

          到 2024 年 9 月,除了對(duì)齊雙端的所有功能外,我們還開發(fā)了許多其他功能,包括華為支持的創(chuàng)新特性,例如智能拖拽——用戶可以將圖片拖拽到中轉(zhuǎn)站或小藝等場(chǎng)景。此外,商用版本還支持了用戶呼聲較高的 HDR 或 Moonlight Photo 拍攝能力。

          3.2 純血鴻蒙與安卓的區(qū)別

          我從幾個(gè)維度來對(duì)比一下純血鴻蒙和安卓 OS 的主要區(qū)別。

          內(nèi)核架構(gòu)純血鴻蒙的本質(zhì)是微內(nèi)核,而安卓是基于 Linux 宏內(nèi)核。微內(nèi)核只提供基礎(chǔ)的內(nèi)存和文件管理能力,驅(qū)動(dòng)和其他系統(tǒng)能力都在 OS 之外。這樣做的好處是系統(tǒng)穩(wěn)定性極高,即使應(yīng)用崩潰,也不會(huì)導(dǎo)致整個(gè)系統(tǒng)崩潰(system crash)。而在 Linux 宏內(nèi)核中,應(yīng)用的不當(dāng)行為可能會(huì)直接導(dǎo)致系統(tǒng)崩潰。

          多設(shè)備適配鴻蒙目前支持多種設(shè)備類型:包括 Mate 60 Pro 這樣的直板手機(jī)、Mate X5 或非凡大師 XT 這樣的雙折疊和三折疊手機(jī)、平板電腦、車機(jī),甚至華為正在研發(fā)的鴻蒙 PC。鴻蒙真正實(shí)現(xiàn)了類似 iOS 的多端整合能力,通過一套代碼實(shí)現(xiàn)多端部署。其工程體系和架構(gòu)支持單 HAP(Harmony Ability Package)多 HSP(Harmony Service Package)模塊,指令集適配了 ARM64 等多種架構(gòu),開發(fā)者只需根據(jù)設(shè)備尺寸適配 UI 展示即可。例如,在 2024 年 9 月 的華為全場(chǎng)景設(shè)備發(fā)布會(huì)上,余承東展示了小紅書在從直板機(jī)到雙折疊、三折疊設(shè)備上的適配能力,完全實(shí)現(xiàn)了響應(yīng)式編程,不同設(shè)備形態(tài)下有不同的瀏覽體驗(yàn)。

          開發(fā)工具和編程模型鴻蒙的開發(fā)工具和編程模型與安卓差異較大。鴻蒙更類似于 Flutter 的嵌套型容器布局,而不是安卓那種面向?qū)ο蟮拈_發(fā)方式。在語言層面,鴻蒙完全封裝了底層邏輯,采用類似前端 Flux 單向數(shù)據(jù)流模式,通過數(shù)據(jù)變更驅(qū)動(dòng) UI 刷新。這種模式類似于前端 Redux 或 MobX 框架中的 state 管理 。

          從 2024 年 10 月 8 日公測(cè)開始,鴻蒙的應(yīng)用生態(tài)正在逐漸繁榮。不過,目前像微信這樣的應(yīng)用還處于搶先體驗(yàn)階段。相比之下,安卓的生態(tài)已經(jīng)相對(duì)成熟。鴻蒙的最終目標(biāo)是打造全場(chǎng)景智能設(shè)備生態(tài),涵蓋所有終端設(shè)備,以及基于 OpenHarmony 內(nèi)核開發(fā)的物聯(lián)網(wǎng)終端。它還支持多種芯片體系,例如瑞芯微 RK3568 等。

          3.3 小紅書鴻蒙應(yīng)用架構(gòu)層級(jí)

          小紅書經(jīng)過一年的迭代,其整體應(yīng)用架構(gòu)已經(jīng)基本成熟。目前,整體代碼量接近 200 萬行,達(dá)到了一個(gè)較高的復(fù)雜度。在一般成熟的 APP 架構(gòu)中,通常會(huì)包含一些基礎(chǔ)底層能力,例如網(wǎng)絡(luò)、磁盤存儲(chǔ)、埋點(diǎn)體系、APM(應(yīng)用性能管理)系統(tǒng),以及一些通用組件和能力。對(duì)于鴻蒙平臺(tái),小紅書還具備一些特殊的公共通用能力。

          我們開發(fā)了一個(gè)“一多框架”,這是一個(gè)支持一套代碼多端部署的具體框架體系。通過這個(gè)框架,我們實(shí)現(xiàn)了多設(shè)備的斷點(diǎn)控制功能。用戶可以根據(jù)設(shè)備的尺寸和類型進(jìn)行適配,因?yàn)槿A為設(shè)備支持多端投屏。例如,用戶可以在手機(jī)上瀏覽小紅書,然后將內(nèi)容投屏到車機(jī)上。比如用戶購(gòu)買了一輛問界汽車,可以在車內(nèi)通過車機(jī)繼續(xù)瀏覽手機(jī)上的小紅書內(nèi)容,這種場(chǎng)景在駕駛時(shí)尤其有用。

          除了底層框架,對(duì)于上層業(yè)務(wù),小紅書還有一套自研的組件庫方案,這套組件庫承載了上層業(yè)務(wù)的多種功能,包括圖文筆記、視頻筆記瀏覽,以及一些 Hybrid 容器能力。小紅書本質(zhì)上在跨端開發(fā)中仍然使用了 React Native(RN)和類 Web 技術(shù)。RN 引擎由華為內(nèi)部合作提供,采用了自研的 ohos 方案,用于解決 React Native 的 bundle 和 JS 加載以及渲染問題。此外,還包括產(chǎn)品定制層,這里涵蓋了所有相關(guān)的設(shè)備適配內(nèi)容。

           3.4 性能優(yōu)化與實(shí)踐

          目前,安卓和 iOS 在性能優(yōu)化方面已經(jīng)相當(dāng)成熟,包括如何分析性能熱點(diǎn)問題、有哪些工具以及最佳實(shí)踐等。然而,對(duì)于鴻蒙來說,它是一個(gè)全新的系統(tǒng)。直到 2024 年年中,鴻蒙的穩(wěn)定性和流暢性都還存在一些問題。這里重點(diǎn)講述小紅書在 2024 年與華為一起進(jìn)行了哪些實(shí)踐,以提升應(yīng)用的性能和用戶體驗(yàn)。

          我們定義了一個(gè)性能指標(biāo)場(chǎng)景。這個(gè)指標(biāo)體系是小紅書與華為共同探討的結(jié)果,因?yàn)槿A為有一個(gè)性能工廠,它對(duì)每個(gè)應(yīng)用的評(píng)級(jí)都有一個(gè) S 標(biāo)標(biāo)準(zhǔn)。小紅書與華為一起確定了針對(duì)小紅書場(chǎng)景需要觀測(cè)的具體指標(biāo)。性能優(yōu)化的核心是慢函數(shù)指標(biāo),它主要包含兩部分:過程時(shí)長(zhǎng)和應(yīng)用體驗(yàn)的流暢性。

          過程時(shí)長(zhǎng)主要包含以下三點(diǎn):

          • 1)冷啟動(dòng)時(shí)長(zhǎng):這是用戶最關(guān)心的指標(biāo)之一,即從點(diǎn)擊應(yīng)用圖標(biāo)到應(yīng)用完成動(dòng)畫并展示第一幀的時(shí)間。對(duì)于多數(shù)應(yīng)用,首頁通常有緩存機(jī)制。例如,小紅書會(huì)緩存用戶上次刷新的筆記,淘寶會(huì)緩存用戶上次瀏覽的商品內(nèi)容;
          • 2)場(chǎng)景完成時(shí)長(zhǎng):指完成某個(gè)特定場(chǎng)景所需的時(shí)間;
          • 3)應(yīng)用響應(yīng)時(shí)長(zhǎng):指用戶操作界面后,界面真正發(fā)生變化的時(shí)間,即響應(yīng)時(shí)延。

          流暢性方面,最基礎(chǔ)的觀測(cè)指標(biāo)是平均 FPS(幀率),包括丟幀數(shù)、最大連續(xù)丟幀數(shù)、丟幀卡頓次數(shù)以及卡頓率。卡頓率可以通過量化計(jì)算得出:當(dāng)一個(gè)場(chǎng)景中出現(xiàn)丟幀時(shí),丟幀的時(shí)長(zhǎng)與場(chǎng)景總時(shí)長(zhǎng)的比值即為卡頓率,它是一個(gè)小于 1 的百分比數(shù)值。

          3.5 OS 能力 & 優(yōu)化實(shí)踐

          首先,針對(duì) IO 場(chǎng)景,我們進(jìn)行了相應(yīng)的優(yōu)化。

          鴻蒙 OS 的系統(tǒng)能力主要分為以下三個(gè)方面:

          • 1)并行化能力鴻蒙 OS 提供了兩種并行化能力:Worker 和 TaskPool。Worker 類似于傳統(tǒng)的線程模型,每個(gè) Worker 都有自己的內(nèi)存空間和執(zhí)行單元,支持通過消息(message)進(jìn)行通信。TaskPool 則類似于協(xié)程或線程池,能夠動(dòng)態(tài)管理線程數(shù)量,支持標(biāo)記為 @concurrent 的函數(shù)直接在任務(wù)池中調(diào)度和運(yùn)行。這兩種機(jī)制都支持線程間隔離,內(nèi)存不共享;
          • 2)多線程通信和數(shù)據(jù)傳輸在多線程通信方面,鴻蒙 OS 支持序列化數(shù)據(jù)傳輸和基于消息(message)的通信機(jī)制。此外,還引入了事件發(fā)射器(Emitter)用于系統(tǒng)事件的發(fā)布和訂閱。這種機(jī)制允許線程間通過消息傳遞來實(shí)現(xiàn)復(fù)雜的交互邏輯;
          • 3)同步轉(zhuǎn)異步機(jī)制鴻蒙 OS 支持基于 Promise 的異步編程模型,包括 async 和 await 語法,以及 then 和 catch 方法。這種機(jī)制能夠有效提升應(yīng)用的響應(yīng)性和用戶體驗(yàn)。

          4、并行化能力

          在并行化能力方面,鴻蒙 OS 提供了兩套基礎(chǔ)實(shí)現(xiàn)方式。開發(fā)者可以通過 RTS(運(yùn)行時(shí)系統(tǒng))實(shí)現(xiàn)并行化,也可以通過底層庫(如 C++ 標(biāo)準(zhǔn)庫中的)實(shí)現(xiàn)。不過,如果完全依賴底層庫,可能會(huì)導(dǎo)致開發(fā)效率下降。為了滿足業(yè)務(wù)需求,鴻蒙 OS 在年初引入了 Worker 和 TaskPool 能力。Worker 類似于傳統(tǒng)的線程模型,每個(gè) Worker 都有獨(dú)立的內(nèi)存空間和執(zhí)行單元,支持通過消息進(jìn)行通信。消息可以包含可序列化的數(shù)據(jù),也可以通過指針直接遷移數(shù)據(jù)。TaskPool 則類似于線程池,能夠動(dòng)態(tài)管理線程數(shù)量,支持標(biāo)記為 @concurrent 的函數(shù)直接在任務(wù)池中調(diào)度和運(yùn)行。與安卓平臺(tái)的線程池不同,鴻蒙 OS 的 TaskPool 會(huì)根據(jù)硬件條件和任務(wù)負(fù)載動(dòng)態(tài)調(diào)整線程數(shù)量。這種機(jī)制避免了安卓平臺(tái)中因線程池?cái)?shù)量過多而導(dǎo)致的系統(tǒng)資源消耗問題。

          接下來我們對(duì)比鴻蒙 OS 的 Worker 并行化能力和安卓端的相關(guān)特性。從多個(gè)維度來看,Worker 本質(zhì)上不推薦手動(dòng)創(chuàng)建,而是通過系統(tǒng)配置 build-provider.json 綁定 ETS 文件來實(shí)現(xiàn)創(chuàng)建。這一點(diǎn)與安卓端并無明顯差異,安卓端可以通過 THREAD 等方式啟動(dòng)線程。

          在鴻蒙 OS 5.0 以下版本(如 4.2 版本)中,主要運(yùn)行的仍然是安卓系統(tǒng)。這種情況下,安卓線程數(shù)量存在上限,這對(duì)應(yīng)用開發(fā)者來說是一個(gè)挑戰(zhàn)。如果 SDK 集成過多,線程數(shù)可能超標(biāo),進(jìn)而導(dǎo)致應(yīng)用被系統(tǒng)強(qiáng)制終止,或出現(xiàn)業(yè)務(wù)場(chǎng)景異常崩潰等穩(wěn)定性問題。

          數(shù)據(jù)傳輸方面:鴻蒙 OS 為了優(yōu)化 Worker 的性能和負(fù)載,對(duì) Worker 的數(shù)量和單個(gè) Worker 的傳輸上限進(jìn)行了限制。鴻蒙 Worker 的單個(gè)傳輸上限類似于安卓中的 Binder 機(jī)制,也存在類似的傳輸限制。不過,安卓線程通常沒有嚴(yán)格限制,因?yàn)榫€程本質(zhì)上是一個(gè)內(nèi)存拷貝過程,除非開發(fā)者通過指針等方式自定義線程間數(shù)據(jù)傳輸。

          在傳輸格式上:鴻蒙 OS 支持通過 Sendable 接口進(jìn)行數(shù)據(jù)傳輸。Sendable 是一種注解方式定義的數(shù)據(jù)結(jié)構(gòu),具有傳染性,即如果一個(gè)類被標(biāo)記為 Sendable,其關(guān)聯(lián)屬性也必須是 Sendable 類型。鴻蒙 OS 支持基礎(chǔ)數(shù)據(jù)類型(如 number、string)和集合類型作為 Sendable 傳輸?shù)膬?nèi)容。對(duì)于跨模塊調(diào)用,鴻蒙 OS 不允許 Worker 跨 HAP 或跨 HSP 調(diào)用。相比之下,安卓應(yīng)用通常運(yùn)行在一個(gè)或多個(gè) Dex 文件中,允許跨 Dex 或跨模塊的線程間調(diào)用。

          TaskPool 類似于雙端的協(xié)程概念,是一種輕量級(jí)線程,僅存儲(chǔ)函數(shù)。不過,TaskPool 與協(xié)程有所不同,它獨(dú)立于任務(wù)維度,且任務(wù)執(zhí)行時(shí)長(zhǎng)有限制(超過 3 分鐘會(huì)被系統(tǒng)自動(dòng)回收)。安卓平臺(tái)可以通過 ASM 插樁技術(shù)對(duì)線程的創(chuàng)建和執(zhí)行進(jìn)行監(jiān)控和優(yōu)化,但輕量級(jí)線程或協(xié)程的實(shí)現(xiàn)通常依賴于線程池或協(xié)程機(jī)制。

          TaskPool 中的任務(wù)默認(rèn)支持?jǐn)?shù)據(jù)轉(zhuǎn)移(transfer),不支持拷貝。此外,TaskGroup 不支持 SDK 初始化包的加載。某些同學(xué)習(xí)慣在異步線程中觸發(fā) SDK 的行為,在鴻蒙 OS 上可能會(huì)因 TaskPool 生命周期結(jié)束而導(dǎo)致變量被釋放。

          關(guān)于并行化數(shù)據(jù)傳輸?shù)?Sendable 概念:Sendable 通過系統(tǒng)提供的 SharedHeap(共享堆)實(shí)現(xiàn)傳輸。共享堆與本地堆(local Heap)的區(qū)別在于,共享堆支持 Sendable 化數(shù)據(jù)的傳輸,而本地堆則需要序列化。共享堆的管理和控制耗費(fèi)了華為專家大量時(shí)間和精力,其中還涉及復(fù)雜的異步鎖(async lock)機(jī)制。在 RTS 并發(fā)實(shí)例期間(包括 Worker、TaskPool 等),數(shù)據(jù)可以通過 Sendable 傳遞,但 Worker 需要使用單獨(dú)的 API。TaskPool 則完全支持 Sendable 的直接傳輸。這種異步鎖機(jī)制允許在 TaskPool 或 Worker 中鎖定其他任務(wù)中的某些函數(shù),實(shí)現(xiàn)線程間的同步,類似于安卓中的 synchronized 或其他鎖機(jī)制。

          5、小紅書典型并行化場(chǎng)景

          小紅書在一些典型化場(chǎng)景中已經(jīng)實(shí)現(xiàn)了并行化處理。例如,網(wǎng)絡(luò)請(qǐng)求是一個(gè)典型的耗時(shí)操作,因?yàn)檎?qǐng)求過程中涉及驗(yàn)簽和安全能力的處理,這些操作如果在主線程中同步完成,可能會(huì)導(dǎo)致應(yīng)用掉幀。當(dāng)用戶滑動(dòng)時(shí),掉幀現(xiàn)象會(huì)非常明顯,這通常是由于大量計(jì)算引起的。為了解決這一問題,我們采用了 Worker 化的方式,將這些操作移到 Worker 線程中,從而避免主線程的卡頓。

          在進(jìn)行埋點(diǎn)時(shí),可能會(huì)涉及數(shù)據(jù)庫的 IO 操作,這些操作也不建議在主線程中執(zhí)行。通過將這些操作放到 Worker 線程中,可以有效避免對(duì)主線程的影響。

          針對(duì)雙列布局中的圖片和資源預(yù)加載,我們采用華為自研的 RCP 網(wǎng)絡(luò)解決方案(類似于 HTTP),通過 Worker 線程在遠(yuǎn)端進(jìn)行下載,并在完成后將結(jié)果返回到主線程。此外,TaskPool 的應(yīng)用場(chǎng)景也非常廣泛,例如文件上傳、多媒體操作以及啟動(dòng)任務(wù)的編排等。TaskPool 的優(yōu)勢(shì)在于輕量化,避免了線程上下文切換帶來的不必要耗時(shí)。

          關(guān)于冷啟動(dòng)和首刷場(chǎng)景的優(yōu)化。這部分主要包括兩個(gè)方面:模塊的懶加載和動(dòng)態(tài)組件的復(fù)用池。懶加載是應(yīng)用開發(fā)中常見的優(yōu)化手段,類似于安卓端的 class order 機(jī)制。當(dāng)應(yīng)用不需要某個(gè)類時(shí),可以延遲加載該類,直到真正需要使用時(shí)才加載。這種方式可以顯著提高冷啟動(dòng)階段的代碼加載效率,從而大幅降低冷啟動(dòng)時(shí)長(zhǎng)。

          動(dòng)態(tài)組件和組件復(fù)用池則是為了解決 UI 組件重復(fù)創(chuàng)建的問題。在應(yīng)用中,可能會(huì)有多種相同類型的 UI 組件(例如小紅書中的筆記組件)。為了避免重復(fù)創(chuàng)建帶來的開銷,我們希望在運(yùn)行時(shí)盡量復(fù)用已有的組件,而不是頻繁地創(chuàng)建和銷毀。

          6、類前端視角下的模塊懶加載

          我們通過特定的分析工具對(duì)懶加載進(jìn)行了深入分析。如圖所示,我們能夠識(shí)別出啟動(dòng)過程中加載的各種模塊,包括 RNOH(React Native on Harmony)、Web engine(網(wǎng)頁引擎)、Red Player(播放器)等組件。這些模塊的加載過程涉及到多個(gè).so 文件,即共享對(duì)象文件。

           通過自上而下的分析方法,我們可以清晰地看到每個(gè)模塊加載的具體耗時(shí)。進(jìn)一步分析這些.so 文件與 RTS(運(yùn)行時(shí)系統(tǒng))的關(guān)聯(lián),以及它們所引入的 Napi 的 TS 文件。我們進(jìn)行了懶加載潛在對(duì)象的分析,發(fā)現(xiàn)許多 RTS 實(shí)際上并不需要的類文件已經(jīng)被加載。這是因?yàn)殚_發(fā)者在編寫代碼時(shí),可能并未充分考慮到導(dǎo)入一個(gè)類或方法對(duì)應(yīng)用啟動(dòng)延遲的影響。

          為了優(yōu)化這一過程,我們的目標(biāo)是減少字節(jié)碼中需要加載的類文件數(shù)量,從而加快應(yīng)用的冷啟動(dòng)速度。華為提供的編譯器能夠?qū)?RTS 編譯成 Ark bytecode(方舟字節(jié)碼),這是一種高效的字節(jié)碼格式。通過減少需要加載的類文件數(shù)量,我們可以顯著提高應(yīng)用的啟動(dòng)速度。

          華為還提供了一種懶加載的導(dǎo)入方式,只有在真正需要使用某個(gè)類時(shí),它才會(huì)被加載。這種懶加載機(jī)制有助于減少應(yīng)用啟動(dòng)時(shí)的資源消耗。這引發(fā)了一個(gè)問題:為什么華為不默認(rèn)采用全懶加載方式,即只有在使用時(shí)才加載類文件呢?我已經(jīng)將這個(gè)問題反饋給華為,并且系統(tǒng)側(cè)可能會(huì)考慮在未來的版本中默認(rèn)采用懶加載方式,同時(shí)仍然允許用戶手動(dòng)選擇非懶加載的方式進(jìn)行類文件的加載。

          7、動(dòng)態(tài)組件

          在小紅書的首頁場(chǎng)景中,筆記卡組件在多個(gè)場(chǎng)景中被復(fù)用。為了避免重復(fù)創(chuàng)建 UI 導(dǎo)致的性能消耗,我們采用了動(dòng)態(tài)組件的概念。動(dòng)態(tài)組件的核心原理是利用占位符來延遲組件的創(chuàng)建,這與 Android 開發(fā)中使用 Stub 模式的概念相似。在這種模式下,可以使用一個(gè)代理對(duì)象(stub)來代表尚未初始化的組件,從而延遲組件的創(chuàng)建過程。當(dāng)真正需要渲染組件時(shí),再將渲染內(nèi)容填充進(jìn)去,從而避免每次調(diào)用構(gòu)建函數(shù)(如 build)時(shí)的耗時(shí)。

          占位邏輯通過系統(tǒng)的 API 實(shí)現(xiàn),涉及到 NodeContainer 和 NodeController 的綁定關(guān)系。Container 和 Controller 一一映射,由 NodeCore 進(jìn)行管理。Container 僅管理當(dāng)前展現(xiàn)的內(nèi)存部分,使用完畢后需要將其放回池中進(jìn)行回收和再利用。以冷啟動(dòng)首刷為例,在啟動(dòng)階段可以先獲取磁盤上的筆記內(nèi)容,然后在 BuilderNode 中預(yù)先創(chuàng)建多個(gè) Image 組件。這樣,在等待網(wǎng)絡(luò)或推薦接口響應(yīng)時(shí),Image 組件已經(jīng)創(chuàng)建完畢,從而在首頁刷新時(shí)可以立即使用這些組件,這對(duì)于提高首刷非常有益。

           對(duì)于組件復(fù)用池,當(dāng)動(dòng)態(tài)組件不再使用時(shí),需要將其返回到組件池中。對(duì)于自定義組件,通過 NoteContainer 占位方式,由 NodeController 進(jìn)行管理。在需要?jiǎng)?chuàng)建子組件時(shí),先在 NodePool 中查找,如果找不到,則創(chuàng)建新組件;如果找到,則嘗試復(fù)用。流程圖展示了從 Container 裝載 NodeItem 開始,通過 NodePool 查找,如果找到則進(jìn)行條件判斷和復(fù)用。

          組件的新建和復(fù)用過程中,如果找到對(duì)應(yīng)的 NodeItem,則調(diào)用 build 方法并更新自定義組件的狀態(tài),完成復(fù)用。如果有對(duì)應(yīng)的 NodeItem,可以直接通過 update 函數(shù)更新內(nèi)部狀態(tài)并刷新 UI。但要注意,update 方法可能會(huì)因狀態(tài)變量過于復(fù)雜而導(dǎo)致更新延遲,出現(xiàn)圖像殘影。因此,需要拆分 state,使其足夠小,以確保狀態(tài)變更到通知 UI 的時(shí)間縮短,消除殘影。

          我們的策略是優(yōu)先在 NodePool(節(jié)點(diǎn)池)中查找可用的 NodeItem(節(jié)點(diǎn)項(xiàng))。如果 NodePool 中存在可用的 NodeItem,我們就直接使用它,并通過 getNode 方法進(jìn)行 item 綁定,隨后更新其狀態(tài)以實(shí)現(xiàn)復(fù)用。如果 NodePool 中沒有找到對(duì)應(yīng)的 NodeItem,那么我們將通過 makeNode 方法調(diào)用 build 函數(shù)來創(chuàng)建新的節(jié)點(diǎn)項(xiàng)。

          完成組件的復(fù)用后,我們需要將這些組件返回到緩存池中,以便在未來可以再次使用。這個(gè)過程涉及到 NodeContainer(節(jié)點(diǎn)容器)和 NodeController(節(jié)點(diǎn)控制器)的銷毀,并將 NodeItem 重新放回 NodePool 中。為了更有效地管理緩存,業(yè)務(wù)層可以利用 LRU(最近最少使用)算法,或者鴻蒙系統(tǒng)提供的 LRUCache 和 LiUHashMap 等數(shù)據(jù)結(jié)構(gòu),來自定義緩存的大小,從而優(yōu)化組件的復(fù)用和緩存策略。

          8、滑動(dòng)類場(chǎng)景

          在小紅書應(yīng)用中,滑動(dòng)類場(chǎng)景非常普遍,包括推薦頁的子頻道、個(gè)人頁中的收藏點(diǎn)贊以及用戶自己發(fā)布的筆記,還有搜索結(jié)果頁中的搜索結(jié)果和用戶商品等,這些都是雙列滑動(dòng)場(chǎng)景。這些雙列滑動(dòng)場(chǎng)景占據(jù)了小紅書用戶體驗(yàn)的 90% 到 95%,因此,滑動(dòng)體驗(yàn)的流暢性對(duì)于用戶的整體體驗(yàn)至關(guān)重要。

          為了提升滑動(dòng)場(chǎng)景的流暢性,小紅書采用了 RCP 框架來優(yōu)化網(wǎng)絡(luò)資源的獲取。RCP 是華為提供的一個(gè)系統(tǒng)組件能力,主要解決網(wǎng)絡(luò)資源獲取效率問題。通過 RCP,開發(fā)者可以在需要時(shí)發(fā)起網(wǎng)絡(luò)請(qǐng)求,并自定義資源的寫入地址,如文件或 ArrayBuffer。RCP 負(fù)責(zé)高效地將資源寫入指定位置,而在不需要時(shí),可以取消 RCP 請(qǐng)求,從而優(yōu)化資源管理。

           RCP 的核心能力在于能夠取消請(qǐng)求,并對(duì)弱網(wǎng)場(chǎng)景進(jìn)行了優(yōu)化,其建聯(lián)過程優(yōu)于 HTTP 1.1 或 2.0。基于 RCP,小紅書還應(yīng)用了華為俄研所提供的 Prefetch 方案。Prefetch 方案在瀑布流組件的可見區(qū)變更時(shí),通過 worker 線程(如 prefetched worker)啟動(dòng)資源獲取,當(dāng)不可見時(shí)關(guān)閉,從而優(yōu)化快速滑動(dòng)場(chǎng)景,減少不必要的帶寬消耗。

          在快速滑動(dòng)過程中,有些 item 可能短暫消失,對(duì)于雙端場(chǎng)景,網(wǎng)絡(luò)請(qǐng)求可能已經(jīng)發(fā)出且在途,無法取消,導(dǎo)致帶寬浪費(fèi)。Prefetch 和 RCP 結(jié)合的方式可以優(yōu)化這種快滑場(chǎng)景,防止真正想要看的內(nèi)容出現(xiàn)白塊。Prefetched worker 線程管理多個(gè) RCP 請(qǐng)求,每個(gè)請(qǐng)求都有完整的生命周期。當(dāng)通過 RCP 請(qǐng)求獲取到所需資源時(shí),會(huì)通知主線程,主線程根據(jù)地址加載資源到 Image 組件或占位符 RQI 組件中。

          在小紅書的開發(fā)過程中,我們遇到了一些性能熱點(diǎn)問題,這些問題大多是通過 Code Linter(代碼檢查工具)檢測(cè)出來的。由于開發(fā)節(jié)奏快,開發(fā)者在編寫代碼時(shí)可能難以關(guān)注到性能問題,因此需要 CI(持續(xù)集成)檢查工具來輔助檢查。

          常見的性能熱點(diǎn)包括:

          1)在列表場(chǎng)景中頻繁使用的 LadyForEach 組件,需要指定 key 以實(shí)現(xiàn)列表復(fù)用。如果開發(fā)者忘記指定 key,Code Linter 會(huì)報(bào)錯(cuò)提示;

          2)在 onClick 或 onVisible 等函數(shù)中編寫空 callback(回調(diào)函數(shù))。當(dāng)這些空 callback 積累到一定數(shù)量(如幾百個(gè)或上千個(gè))時(shí),可能會(huì)嚴(yán)重拖慢應(yīng)用性能。Code Linter 可以掃描出這類問題;

          3)未使用 TaskPool 處理網(wǎng)絡(luò)資源。例如,Image Bitmap 直接傳遞 URL 進(jìn)行同步加載,當(dāng)網(wǎng)絡(luò)阻塞時(shí)會(huì)導(dǎo)致 UI 線程卡頓;

          4)復(fù)雜的 ETS 組件在列表場(chǎng)景下未實(shí)現(xiàn)重用。未設(shè)置重用的 ETS 組件在列表滾動(dòng)時(shí)需要重新構(gòu)建,非常耗時(shí)。組件嵌套層級(jí)過深也會(huì)導(dǎo)致性能問題。在安卓端,布局檢查器建議容器嵌套不超過四層;

          5)使用 JSON.stringify 進(jìn)行對(duì)象序列化。JSON.stringify 有一定耗時(shí),尤其在處理 100KB 左右的數(shù)據(jù)時(shí),可能需要 10 毫秒左右。Code Linter 會(huì)提示這部分性能問題,但是否需要轉(zhuǎn)異步線程需要開發(fā)者自行判斷;

          6)調(diào)用 Image 的 syncLoad(同步加載)。在某些場(chǎng)景下,如轉(zhuǎn)場(chǎng)動(dòng)畫,需要同步加載 image 以保證連貫性。但如果 image 是非磁盤資源(如網(wǎng)絡(luò)資源),會(huì)導(dǎo)致卡幀。Code Linter 可以掃描出這類問題;

          7)關(guān)于編譯器的優(yōu)化。ETS 組件應(yīng)避免嵌套過深。如果嵌套過深,可以將每層函數(shù)通過系統(tǒng)的 builder param 或 builder 函數(shù)轉(zhuǎn)換。使用 @builder 注解標(biāo)識(shí)的函數(shù)會(huì)在編譯期間與 ETS 代碼整合,從而提高編譯器優(yōu)化效果。

          Code Linter 支持全量掃描和基于 Git DIFF 的增量掃描,但目前華為的 Code Linter 還不能與 Git Prehook 關(guān)聯(lián),導(dǎo)致無法在流水線上自動(dòng)檢查。雖然 CI 檢查階段已有 Code Linter,但本地代碼提交階段仍需手動(dòng)運(yùn)行腳本,無法實(shí)現(xiàn)自動(dòng)檢查。我們正在催促華為解決這一問題。

           

          9、UI 重載場(chǎng)景分幀方案

          在處理 UI 重載場(chǎng)景時(shí),我們采用了一種稱為分幀方案的方法。分幀這個(gè)術(shù)語的含義是,當(dāng)應(yīng)用在一幀內(nèi)無法完成所有繪制工作,或者在多幀內(nèi)都無法完成時(shí),會(huì)導(dǎo)致屏幕卡頓現(xiàn)象。盡管用戶可以看到畫面,但卻無法進(jìn)行滑動(dòng)或操作。在這種情況下,分幀方案就顯得尤為合適。雖然分幀方案可能看起來不是最優(yōu)雅的解決辦法,但它確實(shí)能夠有效地解決性能問題,使應(yīng)用性能達(dá)到預(yù)期標(biāo)準(zhǔn)。分幀方案雖然看似是一種應(yīng)急措施,但它能夠幫助應(yīng)用性能達(dá)標(biāo)。

          分幀方案的流程大致如下:假設(shè)我們有數(shù)據(jù) a、b、c 需要渲染,未采用分幀方案前,數(shù)據(jù) a、b、c 會(huì)同時(shí)到達(dá)并觸發(fā)狀態(tài)變更,進(jìn)而驅(qū)動(dòng)整個(gè) UI 進(jìn)行刷新。這會(huì)導(dǎo)致在一幀內(nèi)需要繪制大量 UI 組件,從而影響應(yīng)用性能。為了解決這個(gè)問題,我們采用分幀方案,將數(shù)據(jù) a、b、c 拆分開,分別在不同的幀中進(jìn)行渲染。例如,數(shù)據(jù) a 在第一幀中渲染完成后,通過調(diào)用宏觀指令讓其進(jìn)入下一階段,然后在下一幀中更新數(shù)據(jù) b,依此類推。

           

          在小紅書的圖文筆記場(chǎng)景中,分幀方案得到了應(yīng)用。當(dāng)用戶在首頁的雙列場(chǎng)景中點(diǎn)擊一篇筆記進(jìn)入筆記詳情頁時(shí),這個(gè)過程涉及到許多組件的加載。我們可以將這些組件拆分成不同的幀,例如幀 a、幀 b 和幀 c。對(duì)于用戶而言,他們通常希望在第一時(shí)間看到整個(gè)大屏的畫面,因此我們會(huì)優(yōu)先在幀 a 中展示大圖。而在幀 b 和幀 c 中,我們?cè)偬幚眄敳繉?dǎo)航欄或底部交互區(qū)等內(nèi)容。通過這種分幀策略,我們能夠確保用戶在第一時(shí)間看到最關(guān)鍵的內(nèi)容,同時(shí)避免了因?yàn)橐淮涡约虞d過多組件而導(dǎo)致的性能問題。

          10、鴻蒙NEXT調(diào)優(yōu)工具

          傳統(tǒng)的主觀工具對(duì)于鴻蒙 OS 的性能分析仍然適用。例如,抖音和小紅書都通過競(jìng)品分析來進(jìn)行主觀測(cè)評(píng)。這種能力主要是通過錄屏來展示整個(gè)流程的耗時(shí)和時(shí)長(zhǎng),特別適合評(píng)估冷啟動(dòng)完成時(shí)延和轉(zhuǎn)場(chǎng)過程的性能。通過錄屏,我們可以逐幀查看用戶從點(diǎn)擊開始到結(jié)束的幀數(shù)和真實(shí)時(shí)長(zhǎng),以此來衡量整個(gè)過程的持續(xù)時(shí)間。

          10.1 鴻蒙性能分析工具:IDE Profiler

          除了主觀工具,我們還可以使用 IDE 提供的性能分析工具,如 Profiler,來分析慢函數(shù)。由于 ArkTS 編程語言框架主要通過 RTS 和 NAPI(原生應(yīng)用接口)進(jìn)行關(guān)聯(lián),因此需要能夠查看 ArkTS 和 NAPI 的整個(gè)堆棧層級(jí)。這與安卓有所不同,因?yàn)楫?dāng) Java 通過 Java Native API 與原生代碼交互時(shí),堆棧并不那么容易查看。

          在小紅書的性能分析中,我們展示了一個(gè)整體線程分析的例子。在左側(cè),可以看到小紅書的主線程(如 com 點(diǎn)開頭的線程)、Daemon 線程、Worker 線程以及 FFRT 線程。FFRT 是一種運(yùn)行函數(shù)流的線程,可以執(zhí)行 TaskPool 上的函數(shù)。在下圖右側(cè),我們可以看到在 RTS 環(huán)境下的分析結(jié)果,其中頂部顯示了 NAPI 調(diào)用,底部則是一些 C++ 函數(shù)。整個(gè)調(diào)用棧和它們的執(zhí)行時(shí)長(zhǎng)是通過一種自上而下的視圖來展示的。利用這種視圖,我們可以精確地識(shí)別出哪些慢函數(shù)是造成界面卡頓的原因。

          10.2 性能場(chǎng)景測(cè)試工具:DevEco Testing

          DevEco Testing 是一個(gè)性能測(cè)試工具,它的功能非常全面,性能測(cè)試只是其中的一部分。除了性能測(cè)試,它還支持多種測(cè)試場(chǎng)景,包括 debug testing。在 debug testing 場(chǎng)景中,用戶可以自定義業(yè)務(wù)場(chǎng)景,監(jiān)測(cè) CPU 的耗時(shí)和負(fù)載、GPU 的耗時(shí)和負(fù)載、設(shè)備發(fā)熱情況以及功耗等問題。

          使用 DevEco Testing 進(jìn)行性能測(cè)試的過程如下:首先定義測(cè)試場(chǎng)景,然后捕獲主幀數(shù)據(jù)。一旦開始捕獲,就可以觀測(cè)到 FPS(幀率)、GPU 負(fù)載以及整體功耗等數(shù)據(jù)。完成性能數(shù)據(jù)捕獲后,工具會(huì)生成一份報(bào)告,為用戶提供了一個(gè)完整的場(chǎng)景分析。不過,目前場(chǎng)景定義還缺乏腳本化能力,需要人工操作輔助。未來,我們期望能夠?qū)崿F(xiàn)場(chǎng)景定義的腳本化配置,類似于自動(dòng)化測(cè)試。這樣,就可以通過自動(dòng)化工具,實(shí)現(xiàn)更高效的測(cè)試流程。

          11、小結(jié)與展望

          在對(duì)性能場(chǎng)景進(jìn)行優(yōu)化后,我們可以看到顯著的收益。在實(shí)驗(yàn)室環(huán)境下的測(cè)試顯示,冷啟動(dòng)時(shí)間可以降低 50%,響應(yīng)時(shí)延可以低于 100 毫秒,完成時(shí)延則保持與雙端持平或更優(yōu)。在流暢性方面,在多場(chǎng)景和重載場(chǎng)景下均實(shí)現(xiàn)了 0 丟幀的成果。需要注意的是,這里的測(cè)試是在非重載模式下進(jìn)行的,即沒有同時(shí)運(yùn)行多個(gè)資源密集型應(yīng)用,如《王者榮耀》或《和平精英》等。在這種條件下,我們的核心場(chǎng)景,如冷啟動(dòng)、搜索和個(gè)人頁等,都能夠與雙端完全對(duì)齊。

          展望未來,有幾個(gè)方向:

          1)首先:我們希望能夠在全場(chǎng)景下實(shí)現(xiàn)組件復(fù)用,以最大程度地實(shí)現(xiàn) UI 復(fù)用。這樣可以在多個(gè)業(yè)務(wù)之間的轉(zhuǎn)場(chǎng)或 UI 創(chuàng)建過程中,將不必要的 UI 創(chuàng)建和消耗降到最低。

          2)其次:我們正在考慮代碼延遲加載的 lazy 機(jī)制。華為內(nèi)部可能將其作為通用的解決方案,但在實(shí)施過程中我們發(fā)現(xiàn)了許多問題,例如全 lazy 加載可能會(huì)影響第三方 SDK,如支付寶等,因?yàn)樗鼈兛赡苓M(jìn)行了額外的二進(jìn)制優(yōu)化,導(dǎo)致加載失敗或無法響應(yīng)。因此,我們期望通過代碼延遲加載來實(shí)現(xiàn)持續(xù)治理,但目前它可能還不適合全場(chǎng)景的 lazy import。

          3)最后:我們關(guān)注防劣化問題,即在每個(gè)版本發(fā)布時(shí),我們不希望性能指標(biāo)出現(xiàn)劣化。我們希望能夠在開發(fā)階段就定義劣化指標(biāo)和具體數(shù)據(jù),以防止應(yīng)用劣化。這部分可能需要借助 DevEco Testing 和主觀測(cè)評(píng)的方式來實(shí)現(xiàn)。包括我們關(guān)注的指標(biāo),例如冷啟動(dòng)和流暢性等,未來可能會(huì)納入防劣化場(chǎng)景。目前,我們的 CI 環(huán)節(jié)或 RC 環(huán)節(jié),包括流水線的性能管控和代碼 CR 機(jī)制,都能夠規(guī)避這類問題。

          12、相關(guān)資料

          [1] 鴻蒙NEXT官方開發(fā)指南

          [2] 一年擼完百萬行代碼,企業(yè)微信的全新鴻蒙NEXT客戶端架構(gòu)演進(jìn)之路

          [3] 鴻蒙NEXT如何保證應(yīng)用安全:詳解鴻蒙NEXT數(shù)字簽名和證書機(jī)制

          [4] 開源IM聊天程序HarmonyChat:基于鴻蒙NEXT的WebSocket協(xié)議

          [5] 微信純血鴻蒙版正式發(fā)布,295天走完微信14年技術(shù)之路!

          [6] 即時(shí)通訊框架MobileIMSDK的鴻蒙NEXT端詳細(xì)介紹

          [7] 即時(shí)通訊框架MobileIMSDK的鴻蒙NEXT端開發(fā)者手冊(cè)

          [8] 擁抱國(guó)產(chǎn)化:轉(zhuǎn)轉(zhuǎn)APP的鴻蒙NEXT端開發(fā)嘗鮮之旅

          [9] 微信Windows端IM消息數(shù)據(jù)庫的優(yōu)化實(shí)踐:查詢慢、體積大、文件損壞等

          [10] 微信技術(shù)分享:揭秘微信后臺(tái)安全特征數(shù)據(jù)倉庫的架構(gòu)設(shè)計(jì)

          [11] IM跨平臺(tái)技術(shù)學(xué)習(xí)(九):全面解密新QQ桌面版的Electron內(nèi)存優(yōu)化實(shí)踐

          [12] 企業(yè)微信針對(duì)百萬級(jí)組織架構(gòu)的客戶端性能優(yōu)化實(shí)踐

          [13] 揭秘企業(yè)微信是如何支持超大規(guī)模IM組織架構(gòu)的——技術(shù)解讀四維關(guān)系鏈

          [14] 微信團(tuán)隊(duì)分享:詳解iOS版微信視頻號(hào)直播中因幀率異常導(dǎo)致的功耗問題

          [15] 微信團(tuán)隊(duì)分享:微信后端海量數(shù)據(jù)查詢從1000ms降到100ms的技術(shù)實(shí)踐

          [16] 大型IM工程重構(gòu)實(shí)踐:企業(yè)微信Android端的重構(gòu)之路

          [17] IM技術(shù)干貨:假如你來設(shè)計(jì)微信的群聊,你該怎么設(shè)計(jì)?

          [18] 微信團(tuán)隊(duì)分享:來看看微信十年前的IM消息收發(fā)架構(gòu),你做到了嗎

          [19] 總是被低估,從未被超越,揭秘QQ極致絲滑背后的硬核IM技術(shù)優(yōu)化

          [20] 首次公開,最新手機(jī)QQ客戶端架構(gòu)的技術(shù)演進(jìn)實(shí)踐

          [21] 大型IM穩(wěn)定性監(jiān)測(cè)實(shí)踐:手Q客戶端性能防劣化系統(tǒng)的建設(shè)之路


          (本文已同步發(fā)布于:http://www.52im.net/thread-4821-1-1.html)

          posted @ 2025-05-19 11:24 Jack Jiang 閱讀(70) | 評(píng)論 (0)編輯 收藏

               摘要: 全平臺(tái)開源即時(shí)通訊IM聊天框架MobileIMSDK的服務(wù)端開發(fā)指南,支持鴻蒙NEXT  閱讀全文

          posted @ 2025-05-15 12:27 Jack Jiang 閱讀(57) | 評(píng)論 (0)編輯 收藏

          一、基本介紹

          MobileIMSDK是一套全平臺(tái)原創(chuàng)開源IM通信層框架:

          • 超輕量級(jí)、高度提煉,lib包50KB以內(nèi);
          • 精心封裝,一套API同時(shí)支持UDP、TCP、WebSocket三種協(xié)議(可能是全網(wǎng)唯一開源的);
          • 客戶端支持iOS、Android、標(biāo)準(zhǔn)Java、H5、微信小程序、Uniap、鴻蒙Next(Demo完整源碼);
          • 服務(wù)端基于Netty,性能卓越、易于擴(kuò)展 new;
          • 可與姊妹工程 MobileIMSDK-Web 無縫互通實(shí)現(xiàn)網(wǎng)頁端聊天或推送等;
          • 可應(yīng)用于跨設(shè)備、跨網(wǎng)絡(luò)的聊天APP、企業(yè)OA、消息推送等各種場(chǎng)景。

          二、源碼倉庫同步更新

          GitHub.com:

          碼云gitee:

          三、設(shè)計(jì)目標(biāo)

          讓開發(fā)者專注于應(yīng)用邏輯的開發(fā),底層復(fù)雜的即時(shí)通訊算法交由SDK開發(fā)人員,從而解偶即時(shí)通訊應(yīng)用開發(fā)的復(fù)雜性。

          四、框架組成

          整套MobileIMSDK框架由以下7部分組成:

          1. Android客戶端SDK:用于開發(fā)Android版即時(shí)通訊客戶端,支持Android 4.0及以上版本,查看API文檔
          2. iOS客戶端SDK:用于開發(fā)iOS版即時(shí)通訊客戶端,支持iOS 12.0及以上版本,查看API文檔
          3. Java客戶端SDK:用于開發(fā)跨平臺(tái)的PC端即時(shí)通訊客戶端,支持標(biāo)準(zhǔn)Java 1.6及以上版本,查看API文檔
          4. H5客戶端SDK:查看精編注釋版
          5. 微信小程序端SDK:查看精編注釋版
          6. Uniapp端SDK:查看精編注釋版
          7. 鴻蒙Next端SDK:SDK暫無開源版(查看精編注釋版),Demo完整工程源碼
          8. 服務(wù)端SDK:用于開發(fā)即時(shí)通訊服務(wù)端,支持Java 1.7及以上版本,查看API文檔

          整套MobileIMSDK框架的架構(gòu)組成:

          MobileIMSDK一直在持續(xù)開發(fā)和升級(jí)中,鴻蒙Next客戶端是MobileIMSDK工程的最新成果。

          五、技術(shù)特征

          • 久經(jīng)考驗(yàn):歷經(jīng)10年,從Andriod 2.3、iOS 5.0 時(shí)代持續(xù)升級(jí)至今(絕不爛尾);
          • 超輕量級(jí):高度提煉,lib包50KB以內(nèi);
          • 多種協(xié)議:可能是全網(wǎng)唯一開源可同時(shí)支持UDP、TCP、WebSocket三種協(xié)議的同類框架;
          • 多種網(wǎng)絡(luò):精心優(yōu)化的TCP、UDP、WebSocket協(xié)議實(shí)現(xiàn),可應(yīng)用于衛(wèi)星網(wǎng)、移動(dòng)網(wǎng)、嵌入式物聯(lián)網(wǎng)等場(chǎng)景;
          • 多端覆蓋:客戶端支持iOS、Android、標(biāo)準(zhǔn)Java、H5微信小程序Uniapp鴻蒙Next
          • 高效費(fèi)比:獨(dú)有的UDP協(xié)議實(shí)現(xiàn),無連接特性,同等條件下可實(shí)現(xiàn)更高的網(wǎng)絡(luò)負(fù)載和吞吐能力;
          • 消息走向:支持即時(shí)通訊技術(shù)中消息的所有可能走向,共3種(即C2C、C2S、S2C);
          • 粘包半包:優(yōu)雅解決各端的TCP經(jīng)典粘包和半包問題,底層封裝,應(yīng)用層完全無感知;
          • QoS機(jī)制:完善的消息送達(dá)保證機(jī)制(自動(dòng)重傳、消息去重、狀態(tài)反饋等),不漏過每一條消息;
          • 健壯可靠:實(shí)踐表明,非常適于在高延遲、跨洲際、不同網(wǎng)絡(luò)制式環(huán)境中穩(wěn)定、可靠地運(yùn)行;
          • 斷網(wǎng)恢復(fù):擁有網(wǎng)絡(luò)狀況自動(dòng)檢測(cè)、斷網(wǎng)自動(dòng)治愈的能力;
          • 原創(chuàng)算法:核心算法和實(shí)現(xiàn)均為原創(chuàng),保證了持續(xù)改進(jìn)和提升的空間;
          • 多種模式:預(yù)設(shè)多種實(shí)時(shí)靈敏度模式,可根據(jù)不同場(chǎng)景控制即時(shí)性、流量和客戶端電量消耗;
          • 數(shù)據(jù)壓縮:自有協(xié)議實(shí)現(xiàn),未來可自主定制數(shù)據(jù)壓縮,靈活控制客戶端的流量、服務(wù)端網(wǎng)絡(luò)吞吐;
          • 高度封裝:高度封裝的API接口,保證了調(diào)用的簡(jiǎn)易性,也使得可應(yīng)用于更多的應(yīng)用場(chǎng)景;
          • Web支持:可與姊妹工程 MobileIMSDK-Web 無縫互通實(shí)現(xiàn)網(wǎng)頁端聊天或推送等;
          • 擴(kuò)展性好:服務(wù)端基于Netty,繼承了Netty的優(yōu)秀高可擴(kuò)展性;
          • 性能優(yōu)異:服務(wù)端繼承了Netty高性能、高吞吐特性,適用于高性能服務(wù)端場(chǎng)景。

          六、演示程序

          1. Android客戶端 Demo:點(diǎn)此安裝和使用
          2. iOS客戶端 Demo:點(diǎn)此安裝和使用
          3. Java客戶端 Demo:點(diǎn)此安裝和使用
          4. H5客戶端 Demo:點(diǎn)此查看介紹
          5. 微信小程序端 Demo:點(diǎn)此查看介紹
          6. Uniapp端 Demo:點(diǎn)此查看介紹
          7. 鴻蒙Next端 Demo:點(diǎn)此查看介紹 new;
          8. 服務(wù)端 Demo:點(diǎn)此安裝和使用

          七、應(yīng)用案例

          RainbowChat是一款基于MobileIMSDK的產(chǎn)品級(jí)聊天APP,更多詳情:點(diǎn)擊下載體驗(yàn) 或 查看運(yùn)行截圖

          ① 基于MobileIMSDK的產(chǎn)品級(jí)聊天APP:

          ▶ 詳細(xì)介紹下載體驗(yàn) 或 查看運(yùn)行截圖

          ② MobileIMSDK在高網(wǎng)絡(luò)延遲下的案例:

          ▶ 某款基于MobileIMSDK的商業(yè)商品,曾運(yùn)營(yíng)于跨洲際的復(fù)雜網(wǎng)絡(luò)環(huán)境下,端到端通信延遲在洲際網(wǎng)絡(luò)繁忙時(shí)可高達(dá)600ms以上(與服務(wù)端的單向延遲約為300ms左右,而通常大家訪問國(guó)內(nèi)主流門戶的延遲約為20~50ms),某段時(shí)期的非敏感運(yùn)營(yíng)數(shù)據(jù) 點(diǎn)此查看

          八、打包下載(all in one)

          說明:最新發(fā)布版打包內(nèi)容中,已包含完整的demo源碼、sdk源碼、api文檔、編譯后的分發(fā)包等。

          九、典型應(yīng)用場(chǎng)景

          場(chǎng)景1:聊天APP

          應(yīng)用說明:可用于開發(fā)類似于微信、QQ等聊天工具。

          消息走向:需使用C2C、C2S、S2C全部類型。

          特別說明:MobileIMSDK并未定義聊天應(yīng)用的應(yīng)用層邏輯和協(xié)議,開發(fā)者可自行定義并實(shí)現(xiàn)之。

          場(chǎng)景2:消息推送

          應(yīng)用說明:可用于需要向客戶端實(shí)時(shí)推送信息的各種類型APP。

          消息走向:僅需使用S2C 1種消息走向,屬M(fèi)obileIMSDK的最簡(jiǎn)單應(yīng)用場(chǎng)景。

          場(chǎng)景3:企業(yè)OA

          應(yīng)用說明:可用于實(shí)現(xiàn)企業(yè)OA的指令、公文、申請(qǐng)等各種消息實(shí)時(shí)推送,極大提升用戶體驗(yàn),并可延伸至移動(dòng)設(shè)備。

          消息走向:僅需使用S2C 1種消息走向,屬M(fèi)obileIMSDK的最簡(jiǎn)單應(yīng)用場(chǎng)景。

          場(chǎng)景4:企業(yè)OA的增強(qiáng)型

          應(yīng)用說明:可用于實(shí)現(xiàn)企業(yè)OA中各種系統(tǒng)級(jí)、用戶級(jí)消息的實(shí)時(shí)互動(dòng),充分利用即時(shí)通訊技術(shù)提升傳統(tǒng)OA的價(jià)值。

          消息走向:可使用C2C、C2S、S2C全部類型,這與聊天APP在很多方面已無差別,但企業(yè)OA有自已的用戶關(guān)系管理模型和邏輯,較之全功能聊天APP要簡(jiǎn)單的多。

          十、開發(fā)指南

          1. Android客戶端開發(fā)指南:點(diǎn)此查看
          2. iOS客戶端開發(fā)指南:點(diǎn)此查看
          3. Java客戶端開發(fā)指南:點(diǎn)此查看
          4. H5客戶端開發(fā)指南:點(diǎn)此查看
          5. 微信小程序端開發(fā)指南:點(diǎn)此查看
          6. Uniapp端開發(fā)指南:點(diǎn)此查看
          7. 鴻蒙Next端開發(fā)指南:點(diǎn)此查看
          8. Server端開發(fā)指南:點(diǎn)此查看

          附錄1:Demo截圖

          1、在鴻蒙Next端運(yùn)行效果:

          >> 編譯和運(yùn)行:查看鴻蒙Next端Demo完整源碼

          2、Android端、iOS端運(yùn)行效果

          >> 安裝和使用:進(jìn)入Android版Demo幫助頁進(jìn)入iOS版Demo幫助頁

          3、H5端運(yùn)行效果

          4、微信小程序端運(yùn)行效果

          5、Uniapp端運(yùn)行效果

          6、Windows 運(yùn)行效果

          >> 安裝和使用:進(jìn)入Java版Demo幫助頁

          7、Mac OS X 運(yùn)行效果

          >> 安裝和使用:進(jìn)入Java版Demo幫助頁

          8、MobileIMSDK-Web版客戶端Demo運(yùn)行效果:

          8.1)MobileIMSDK-Web在手機(jī)端瀏覽器運(yùn)行效果:(如何獲取MobileIMSDK-Web版:點(diǎn)此進(jìn)入

          8.2)MobileIMSDK-Web在PC端瀏覽器運(yùn)行效果:(如何獲取MobileIMSDK-Web版:點(diǎn)此進(jìn)入

          附錄2:基于MobileIMSDK的全功能IM【案例】

          >> 關(guān)于RainbowChat的更多資料請(qǐng)見:RainbowChat前端APP功能截圖網(wǎng)頁 (* 推薦 - 真機(jī)實(shí)拍視頻:Andriod端iOS端)。

          附錄3:基于MobileIMSDK-Web的網(wǎng)頁端IM系統(tǒng)【案例】

          下圖為RainbowChat-Web的主界面更多截圖點(diǎn)此進(jìn)入更多演示視頻點(diǎn)此進(jìn)入):

          下圖為RainbowChat-Web的主界面[聊天窗全屏?xí)r] (更多截圖點(diǎn)此進(jìn)入更多演示視頻點(diǎn)此進(jìn)入):

          下圖為RainbowChat-Web的主界面[獨(dú)立UI效果] (更多截圖點(diǎn)此進(jìn)入更多演示視頻點(diǎn)此進(jìn)入):

          以上內(nèi)容同步發(fā)布于:http://www.52im.net/thread-52-1-1.html )

          posted @ 2025-04-29 15:29 Jack Jiang 閱讀(75) | 評(píng)論 (0)編輯 收藏

          本文由轉(zhuǎn)轉(zhuǎn)技術(shù)團(tuán)隊(duì)趙衛(wèi)兵分享,原題“鴻蒙新篇章:轉(zhuǎn)轉(zhuǎn) APP 的 HarmonyOS Next 開發(fā)之旅”,下文進(jìn)行了排版優(yōu)化和內(nèi)容修訂。

          1、引言

          2023 年在華為開發(fā)者大會(huì)(HDC.Together)上,除了面向消費(fèi)者的 HarmonyOS 4 之外,華為還推出了面向開發(fā)者的 HarmonyOS Next 開發(fā)者預(yù)覽。

          而在去年的 6 月份華為開發(fā)者大會(huì)上,對(duì)外開啟了 HarmonyOS Next Beta 版,并在當(dāng)年內(nèi)正式推出面向消費(fèi)者的商用版本。

          HarmonyOS Next,是鴻蒙生態(tài)的一個(gè)重要拐點(diǎn)。去年的時(shí)候,轉(zhuǎn)轉(zhuǎn)和華為已經(jīng)達(dá)成合作,作為鴻蒙先鋒的一員,加入到鴻蒙應(yīng)用的開發(fā)之中來。

          客戶端從 2023 年 11 月份開始,人力開始逐漸的往這個(gè)方向投入,于 2024 年 2 月份正式開始進(jìn)入業(yè)務(wù)開發(fā),在 6 月 4 號(hào),對(duì)外正式發(fā)布了基于 HarmonyOS Next 系統(tǒng)的轉(zhuǎn)轉(zhuǎn) App 首個(gè)版本。

          從早期的學(xué)習(xí)到最終第一個(gè)版本上線,我們經(jīng)歷了以下幾個(gè)階段:

          • 1)前期的熟悉和學(xué)習(xí)過程;
          • 2)鴻蒙客戶端基建開發(fā)過程;
          • 3)首個(gè)版本需求范圍確定和排期;
          • 4)業(yè)務(wù)開發(fā);
          • 5)測(cè)試;
          • 6)bug 修復(fù)/性能調(diào)優(yōu);
          • 7)上線。

          本文將要分享的是轉(zhuǎn)轉(zhuǎn)APP在開發(fā)全新鴻蒙NEXT端所遇到的一些問題,對(duì)比了鴻蒙開發(fā)和 Android、iOS 的不同,總結(jié)了這次開發(fā)過程中的一些經(jīng)驗(yàn)等等。希望能帶給你啟發(fā)。

           
           

          2、關(guān)于作者

          趙衛(wèi)兵:目前負(fù)責(zé)轉(zhuǎn)轉(zhuǎn)集團(tuán) iOS 和鴻蒙系統(tǒng) App 基礎(chǔ)架構(gòu)和相關(guān)基礎(chǔ)建設(shè)。崇尚開源和分享精神,Sharing is everything ~

          轉(zhuǎn)轉(zhuǎn)團(tuán)隊(duì)分享的其它幾篇技術(shù)文章有興趣也可讀一讀:

          1. 轉(zhuǎn)轉(zhuǎn)平臺(tái)IM系統(tǒng)架構(gòu)設(shè)計(jì)與實(shí)踐(一):整體架構(gòu)設(shè)計(jì)
          2. 轉(zhuǎn)轉(zhuǎn)平臺(tái)IM系統(tǒng)架構(gòu)設(shè)計(jì)與實(shí)踐(二):詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)
          3. Web端IM聊天消息該不該用瀏覽器本地存儲(chǔ)?一文即懂
          4. 手把手教你使用網(wǎng)絡(luò)編程抓包神器Wireshark
          5. 淺談網(wǎng)頁端IM技術(shù)及相關(guān)測(cè)試方法實(shí)踐(包括WebSocket性能測(cè)試)

          3、初識(shí)鴻蒙NEXT

          3.1 分布式技術(shù)

          HarmonyOS Next 具備強(qiáng)大的分布式技術(shù),能夠?qū)崿F(xiàn)跨設(shè)備協(xié)同工作。用戶可以無縫地在不同的設(shè)備間切換和使用應(yīng)用,無需感知設(shè)備的差異。HDC 大會(huì)中如 WPS Office、高德等 APP,使用了應(yīng)用接續(xù)特性,在不同設(shè)備中進(jìn)行流轉(zhuǎn),令人印象深刻。這點(diǎn)在 iOS 和 Android 中并不完全具備。

          3.2 高性能低時(shí)延

          HarmonyOS Next采用輕量級(jí)的微內(nèi)核設(shè)計(jì)。

          iOS 使用的內(nèi)核基于 XNU(X is Not Unix)內(nèi)核,XNU 是一個(gè)混合內(nèi)核,結(jié)合了微內(nèi)核(Mach 內(nèi)核)的內(nèi)存管理、任務(wù)調(diào)度、進(jìn)程間通信等特性和宏內(nèi)核(BSD 內(nèi)核)的文件系統(tǒng)、網(wǎng)絡(luò)堆棧、用戶進(jìn)程管理等特性。

          Android 內(nèi)核基于修改過的 Linux 宏內(nèi)核,增加了 Binder IPC、電源管理、安全性等模塊和機(jī)制,以更好的支持移動(dòng)設(shè)備。

          鴻蒙的微內(nèi)核設(shè)計(jì),官方稱相比宏內(nèi)核,具備更高的性能和更低的時(shí)延,從而在多任務(wù)處理、設(shè)備響應(yīng)和處理能力上具有明顯優(yōu)勢(shì)。

          3.3 自適應(yīng)UI框架

          通過 ArkUI和ArkTS,HarmonyOS Next能夠適應(yīng)各種尺寸和形狀的屏幕設(shè)備,提供一致友好的用戶體驗(yàn)。這個(gè)特性在跨設(shè)備協(xié)同時(shí)尤其重要。

          3.4 多終端、多OS支持

          HarmonyOS Next 不僅僅是一個(gè)手機(jī)操作系統(tǒng),還能運(yùn)行在平板、智能穿戴設(shè)備、智能家居設(shè)備等多種終端上,統(tǒng)一生態(tài)系統(tǒng)。對(duì)比蘋果的iOS,MacOS,TVOS,WatchOS,確實(shí)有些不同。但對(duì)于應(yīng)用開發(fā)者而言,其實(shí)就是API的能力集合問題,這一點(diǎn),鴻蒙使用 SysCap 系統(tǒng)能力集合達(dá)到了殊途同歸的效果。

          3.5 更優(yōu)秀的安全性

          在應(yīng)用安全層面,目前在應(yīng)用的生態(tài)中有以下一些問題:

          • 1)誘導(dǎo)用戶下載安裝惡意應(yīng)用;
          • 2)竊取用戶數(shù)據(jù);
          • 3)強(qiáng)制推送廣告;
          • 4)利用漏洞攻擊其他應(yīng)用程序;
          • 5)盜版軟件。

          這方面,由于Android 的開放性以及側(cè)載安裝的支持,問題表現(xiàn)的尤為明顯,而 iOS 是一個(gè)可以學(xué)習(xí)的老師。

          針對(duì)上面的問題,HarmonyOS Next 又是如何應(yīng)對(duì)的呢?

          • 1)做好應(yīng)用質(zhì)量的監(jiān)管,控制應(yīng)用分發(fā)渠道,避免惡意應(yīng)用分發(fā)到用戶設(shè)備上;
          • 2)提供安全的數(shù)據(jù)授權(quán)機(jī)制,避免用戶過度授權(quán)造成安全威脅;
          • 3)給應(yīng)用程序開放的系統(tǒng)功能做到不被惡意利用;
          • 4)幫助應(yīng)用程序最小程度的受到漏洞影響;
          • 5)為應(yīng)用程序提供有效的核心數(shù)字產(chǎn)權(quán)保護(hù)手段,避免出現(xiàn)盜版軟件問題。

          具體可以看下圖:

          (圖片來自《鴻蒙生態(tài)應(yīng)用安全技術(shù)白皮書 V1.0》)

          4、和Android、iOS的開發(fā)有何不同?

          鴻蒙開發(fā)上,和 Android、iOS 還是有不少相似和不同的地方,我挑選感受比較深刻的幾個(gè)點(diǎn)說下。

          4.1 開發(fā)語言和工具鏈

          鴻蒙開發(fā)使用的是ArkTS 語言,ArkTS基于 TypeScript 做了一些擴(kuò)展,繼承了 TypeScript 的所有特性,是 TypeScript 的超集。

          下面是官方的一些介紹:

          ArkTS的一大特性是它專注于低運(yùn)行時(shí)開銷。ArkTS對(duì)TypeScript的動(dòng)態(tài)類型特性施加了更嚴(yán)格的限制,以減少運(yùn)行時(shí)開銷,提高執(zhí)行效率。通過取消動(dòng)態(tài)類型特性,ArkTS代碼能更有效地被運(yùn)行前編譯和優(yōu)化,從而實(shí)現(xiàn)更快的應(yīng)用啟動(dòng)和更低的功耗。

          與JavaScript的互通性是ArkTS語言設(shè)計(jì)中的關(guān)鍵考慮因素。鑒于許多移動(dòng)應(yīng)用開發(fā)者希望重用其TypeScript和JavaScript代碼和庫,ArkTS提供了與JavaScript的無縫互通,使開發(fā)者可以很容易地將JavaScript代碼集成到他們的應(yīng)用中。這意味著開發(fā)者可以利用現(xiàn)有的代碼和庫進(jìn)行ArkTS開發(fā)。

          在開發(fā)工具上:使用的 IDE 是 DevEco Studio,基于 IntelliJ IDEA Community 開源版本打造,為開發(fā)者提供工程模板創(chuàng)建、開發(fā)、編譯、調(diào)試、發(fā)布等功能。華為在這個(gè) IDE 上針對(duì)鴻蒙開發(fā)易用性上做了大量的工作,包含但不限于編譯器,代碼實(shí)時(shí)預(yù)覽、ArkUI Inspector、Profile 性能分析工具等等。

          在包管理上:有點(diǎn)類似前端的 npm 包管理機(jī)制,不過在這塊,是叫 ohpm,整體上非常相似,但是細(xì)節(jié)上有一些不同,譬如 package.json 的文件命名、lock 文件的內(nèi)容信息、獨(dú)立的開源中心倉等等。倉庫這塊也提供了私倉部署的方式,采用套件工具中的 ohpm-repo就可以部署到企業(yè)內(nèi)部服務(wù)器上。

          在調(diào)試上:和 Android 的 ADB 類似,鴻蒙這塊提供了一個(gè) hdc 的工具,提供了類似查詢?cè)O(shè)備列表、網(wǎng)絡(luò)、文件、應(yīng)用安裝卸載、shell、日志獲取等常用功能。

          4.2 開發(fā)體驗(yàn)

          鴻蒙開發(fā)是用 ArkUI,類似 Flutter,SwiftUI 這樣的聲明式 UI,ArkUI 組件的命名和狀態(tài)管理和 SwiftUI 比較類似,上手比較容易。

          4.3 開發(fā)資料和交流

          Android 從 2008 年谷歌布,iOS 從 2007 年蘋果發(fā)布,距離到現(xiàn)在已經(jīng)有了 16~17 年之久,在這期間,互聯(lián)網(wǎng)上積累了無數(shù)的開發(fā)資料和經(jīng)驗(yàn)分享,也有著大量的開源項(xiàng)目和社區(qū)。

          而有關(guān) HarmonyOS Next 方面的資料,目前更多的是官方開發(fā)指南和開源范例(集中在 gitee 上)。

          社區(qū)方面,主要是華為開發(fā)者論壇,受限于開發(fā)者版本的迅速迭代,一些帖子討論的內(nèi)容已經(jīng)過時(shí)且不再適用。

          而在博客、github 開源上,目前看到的其實(shí)并不多,更多的分享還是比較基礎(chǔ),深度有價(jià)值的還不多。

          目前在這個(gè)階段,更多的是企業(yè)和華為合作的情況下,內(nèi)部使用 Issue 工單系統(tǒng)進(jìn)行溝通交流。交流主要圍繞著需求、Bug 反饋、指南疑問來展開。

          譬如:

          • 1)指南資料中提供的能力,不滿足訴求,交流是否有更好的解決方案;
          • 2)API 、IDE、工具鏈表現(xiàn)不符合預(yù)期,反饋 bug;
          • 3)系統(tǒng)能力類比 Android、iOS 缺失的特性,交流是否有替代的解決方案。

          截止到本篇文章寫的時(shí)候,轉(zhuǎn)轉(zhuǎn)華為工單交流的總數(shù)已達(dá)到 270+個(gè)。反饋的 bug 和缺失的能力,在后面的開發(fā)者預(yù)覽版本中都被修復(fù)或支持了。

          印象比較深刻的一件事是:開發(fā)和測(cè)試期間我們發(fā)現(xiàn)了停留在登錄頁面不動(dòng),過個(gè)10 分鐘左右,系統(tǒng)就會(huì)卡死重啟,我們一度以為是 App 哪里有 bug。我們通過 hdc hilog 抓取系統(tǒng)輸出的日志,發(fā)現(xiàn)大約過了 10 分鐘左右,log 就會(huì)死循環(huán)打印,很明顯系統(tǒng)底層發(fā)生了一些異常。已經(jīng)晚上快 1 點(diǎn)了,我們興奮的找到和我們對(duì)接這個(gè)問題的華為工程師張老師,將視頻和日志發(fā)送給他,張老師按照復(fù)現(xiàn)的路徑,也成功復(fù)現(xiàn)出來,并且抓取到日志。后面的幾天,經(jīng)過華為伙伴的努力,終于定位到問題所在,是文件句柄 FD 存在泄露的情況,并在下一個(gè)開發(fā)者版本中推送修復(fù)了。

          為華為工程師的敬業(yè)和效率豎一個(gè)大拇指,華為之所以強(qiáng)大,從這件事的跟進(jìn)和解決效率上,就能理解到為什么。

          5、踩坑后總結(jié)的幾個(gè)經(jīng)驗(yàn)

          5.1 類比學(xué)習(xí)

          投入鴻蒙開發(fā)的客戶端同學(xué),有來自 Android 開發(fā)的,也有來自 iOS 開發(fā)的,或多或少對(duì)另外一端的系統(tǒng)了解的不是很全面。

          在學(xué)習(xí)的過程中,我們發(fā)現(xiàn)鴻蒙的一些特性和 API 設(shè)計(jì),有些和 iOS 比較像,而有些和 Android 有些像。我們內(nèi)部經(jīng)常討論交流和理解 HarmonyOS Next 的應(yīng)用層設(shè)計(jì)問題。在方案選擇上,HarmonyOS Next 中都有借鑒和取舍。

          這個(gè)階段:我們需要重點(diǎn)理解鴻蒙特有的一些設(shè)計(jì)概念和思想。譬如 Stage 模型,Stage模型是從 API 9 開始新增的模型,是目前主推且會(huì)長(zhǎng)期演進(jìn)的鴻蒙應(yīng)用模型。在該模型中,由于提供了 AbilityStage、WindowStage 等類作為應(yīng)用組件和 Window 窗口的“舞臺(tái)”,這種方式在 Android、iOS 上是不是有類似的概念呢?

          如果我們?nèi)缦骂惐?Android、iOS。

          AbilityStage 和 WindowStage:

          • 1)在 iOS 中,與 UIViewController 和 UIWindow 類似。UIViewController 管理視圖層次和界面行為,而 UIWindow 是應(yīng)用程序的窗口,可以顯示內(nèi)容;
          • 2)在 Android 中,可以類比于 Activity 和 Window。Activity 是應(yīng)用的單個(gè)屏幕,負(fù)責(zé)界面的創(chuàng)建和管理,而 Window 是 Activity 的頂層視圖容器。

          UIAbility 和 ExtensionAbility:

          • 1)UIAbility 可以和 iOS 的 UIViewController 以及 Android 的 Activity 相對(duì)應(yīng),因?yàn)樗鼈兌际怯糜诠芾砗惋@示用戶界面的基本單元。
          • 2)ExtensionAbility 可以類比于 iOS 的 App Extension 和 Android 的 Service。App Extension 提供了將功能擴(kuò)展到系統(tǒng)范圍內(nèi)的能力,而 Service 在 Android 中則是運(yùn)行在后臺(tái)的組件,執(zhí)行長(zhǎng)時(shí)間運(yùn)行的操作。

          雖然細(xì)節(jié)有所不同,但大方向上這樣對(duì)比和類比,會(huì)幫助我們快速理解鴻蒙相關(guān)開發(fā)概念。

          5.2 項(xiàng)目管理和風(fēng)險(xiǎn)方案應(yīng)對(duì)

          首個(gè)版本的開發(fā),幾乎涉及到了公司所有的業(yè)務(wù)部門,我們通過啟動(dòng)會(huì)拉齊背景信息,前期讓大家梳理到新增一個(gè)鴻蒙終端對(duì)業(yè)務(wù)的影響范圍,以及解決方案。

          1)PlanB 方案:

          一些三方 SDK 如微信、支付寶等在前期都是沒有的,我們首個(gè)版本需要做好 PlanB 方案。涉及到的包括登錄、支付、分享等業(yè)務(wù),都需要針對(duì)這些進(jìn)行調(diào)整。

          2)有限的測(cè)試機(jī):

          因?yàn)闃I(yè)務(wù)部門參與進(jìn)來的很多,但工程樣機(jī)十分有限。服務(wù)端和前端同學(xué)代碼調(diào)整完畢后如何測(cè)試呢?這個(gè)是我們不得不考慮的一件事情。

          新增一個(gè)鴻蒙終端,服務(wù)端調(diào)整后端代碼,在測(cè)試和沙箱測(cè)試時(shí),除了回歸不要影響 Android 和 iOS 之外,還要能保證針對(duì)鴻蒙的兼容調(diào)整是有效的。鑒于鴻蒙測(cè)試機(jī)器十分有限,我們給 Server 同學(xué)提供了 Android 測(cè)試包,將 Android 測(cè)試包的終端 mock 成鴻蒙終端來供服務(wù)端測(cè)試接口,這樣子測(cè)試下來十分高效。

          針對(duì)前端同學(xué):不能再向剛才那樣做了,畢竟是用 Android 的 WebView。即便我們 WebView 的 UserAgent mock 成 Android 系統(tǒng),使得通信和交互仍然走類似 Android 的策略,而這樣并不能代表真實(shí)的鴻蒙 WebView 環(huán)境,因?yàn)樵?Next 系統(tǒng)中整個(gè) Native 和 Webview 的通信 Bridge 是全新的一套方案,且鴻蒙的 API 實(shí)現(xiàn)接口也都需要走鴻蒙側(cè)來測(cè)試。針對(duì)這個(gè)情況,我們非常謹(jǐn)慎小心的將各個(gè)業(yè)務(wù)部門的參與進(jìn)來的時(shí)間錯(cuò)開,盡力保證在有限測(cè)試機(jī)的情況下,每個(gè)業(yè)務(wù)輪轉(zhuǎn)參與進(jìn)來的時(shí)候都是有機(jī)器的。

          5.3 多和華為伙伴進(jìn)行溝通

          這部分的經(jīng)驗(yàn),具有一定的時(shí)效性。后期商用版本發(fā)布之后,可能這樣的溝通渠道、頻次很難再有了。

          為什么要多和華為伙伴時(shí)刻保持密切的溝通?有幾個(gè)印象深刻的例子。

          1)第一個(gè)例子:路由

          鴻蒙關(guān)于頁面跳轉(zhuǎn)提供了兩套解決方案,一套是頁面路由 router,一套是組件導(dǎo)航 Navigation。前期我們?cè)诨ㄩ_發(fā)期間,采用的頁面路由 router 方案,@zz/router 組件代碼已經(jīng)開發(fā)完畢了,但是到了開發(fā) WebView 的 Hybrid 接口時(shí),才意識(shí)到一個(gè)嚴(yán)重的問題,就是 router 提供的能力,并不能滿足我們復(fù)雜的頁面棧管理,譬如在頁面棧中多個(gè) WebView,我們需要關(guān)閉指定的 WebView 頁面,router 提供的 API 能力是無法做到的。和華為溝通后才知道,官方是推薦 Navigation 來實(shí)現(xiàn),且未來 router 方案不再演進(jìn)。我們提出的復(fù)雜頁面棧管理的能力,彼時(shí) Navigation 支持的還不完整,但是伙伴告訴我們,他們會(huì)在 Navigation 上滿足我們的需求。關(guān)閉頁面棧中指定 index 或者 name 的頁面,相信其他開發(fā)者也都會(huì)遇到,應(yīng)該是一個(gè)普遍的需求。

          基于這種情況,我們不得不迅速調(diào)整我們的路由組件,基于 Navigation 重新設(shè)計(jì)了一套路由方案,還好項(xiàng)目業(yè)務(wù)還沒有開始大量開發(fā),要改動(dòng)的地方也不是很多,如果溝通再晚點(diǎn),恐怕調(diào)整起來代價(jià)會(huì)相對(duì)更高點(diǎn)。此時(shí)的溝通,讓我們少走了彎路,避免在 router 上走投無路死磕方案。

          2)第二個(gè)例子:企業(yè)分發(fā)

          企業(yè)分發(fā)通常用于企業(yè)內(nèi)部測(cè)試、企業(yè)內(nèi)部 App 等。Dev 證書和 iOS 的 Dev 證書類似,Provisioning Profile(p7b 文件)會(huì)有 100 臺(tái)設(shè)備的限制。考慮到將來,轉(zhuǎn)轉(zhuǎn)也想依賴企業(yè)分發(fā)能力,可以在測(cè)試中采用企業(yè)簽名打包來進(jìn)行測(cè)試。雖說在當(dāng)前階段不是硬性和必要的,但是我們還有一個(gè)轉(zhuǎn)轉(zhuǎn)質(zhì)檢 App,這個(gè) App 我們不能通過 AGC 后臺(tái)上架華為市場(chǎng),因?yàn)樵谫|(zhì)檢中心,如果不走內(nèi)部分發(fā)安裝,那么我們將會(huì)面臨著外網(wǎng)下載,會(huì)給質(zhì)檢中心的帶寬帶來很大的負(fù)載以及成本。

          我們密切關(guān)注者企業(yè)分發(fā)能力的就緒時(shí)間,在今年的 5 月份,AGC 后臺(tái)企業(yè)分發(fā)能力提供之后,立即進(jìn)行了全流程處理,包括申請(qǐng)企業(yè)開發(fā)者、申請(qǐng)證書以及測(cè)試走通下載整個(gè)過程。這種情況下,通過及時(shí)交流,我們可以第一時(shí)間進(jìn)行測(cè)試實(shí)踐,有效降低或者避免了未來方案上的一些風(fēng)險(xiǎn)。

          3)第三個(gè)例子:安全控件與系統(tǒng) Picker

          相信廣大開發(fā)者今年剛開始介入 HarmonyOS Next 開發(fā)時(shí),對(duì)于使用到的一些權(quán)限,如讀取剪貼板,讀取或者保存圖片到相冊(cè)等等這些 ACL(Access Control List)訪問控制列表權(quán)限,都是通過在開發(fā)者后臺(tái)勾選這些權(quán)限從而實(shí)現(xiàn)在應(yīng)用中彈窗許可訪問。但是在今年 6 月份的溝通中,我們獲知后面要讓開發(fā)者全部適配到安全控件方案。這些安全控件都是系統(tǒng)提供的選擇器,使用之后,每次需要用戶明確操作才行。

          目前在 Android 和 iOS 中,如果想要在應(yīng)用中上傳一張照片,就需要同意該應(yīng)用獲得圖庫的訪問權(quán)限,而帶來的弊端就是,這個(gè)應(yīng)用今后可隨意訪問你圖庫中的所有圖片。相比之前的授權(quán)彈窗許可一次之后,可能造成的權(quán)限濫用,安全控件提升了用戶對(duì)敏感權(quán)限的操作感知,算是 HarmonyOS Next 在保障用戶隱私安全方面的一個(gè)亮點(diǎn)和優(yōu)勢(shì)。

          這其中的核心理念便是從權(quán)限管控到數(shù)據(jù)管控。在 Android 和 iOS 原本的權(quán)限管控方案中,比如一旦給了通訊錄權(quán)限,那么相當(dāng)于把通訊錄的鑰匙給予了應(yīng)用開發(fā)者,如果開發(fā)者違規(guī)使用,在用戶不知情的讀取整個(gè)通訊錄,其實(shí)是不符合用戶的隱私要求。而數(shù)據(jù)管控便是不會(huì)再把通訊錄的鑰匙給開發(fā)者,而是你要什么樣的通訊錄數(shù)據(jù),那么你只能通過通訊錄安全選擇控件中來選擇想要讀取的通訊錄,不再讓應(yīng)用隨意獲取整個(gè)通訊錄數(shù)據(jù)。

          關(guān)于安全控件我們進(jìn)行了多次溝通,了解了安全控件在華為側(cè)推進(jìn)的節(jié)奏以及我們整改的期限時(shí)間等,另外我們也提出個(gè)別場(chǎng)景,安全控件還不足以滿足訴求,譬如用戶保存圖片到相冊(cè),還沒有對(duì)應(yīng)的安全控件能力。這方面的溝通,會(huì)讓我們及時(shí)的對(duì) App 的隱私合規(guī)性做出優(yōu)化調(diào)整,避免后面因?yàn)殡[私權(quán)限問題而影響上架。

          及時(shí)溝通對(duì)于了解 Bug 的解決情況,功能交付時(shí)間、華為伙伴的要求等都是很有必要的,因?yàn)檫@些都會(huì)影響到開發(fā)測(cè)試到上線的一個(gè)節(jié)奏。

          6、鴻蒙NEXT上的WebView混合頁面開發(fā)

          6.1 概述

          回到我們大前端來,得提一下大家關(guān)注的 WebView。在 HarmonyOS Next 中仍然沿用之前統(tǒng)一的 WebView 架構(gòu)。

          在 V1 版本中,需要做的核心工作包括:

          • 1)實(shí)現(xiàn) WebView Core 層;
          • 2)JSBridge 層,新增實(shí)現(xiàn) HarmonyOS Next 的 Bridge 通信;
          • 3)平移安全層能力;
          • 4)實(shí)現(xiàn) Hybrid API 接口,也就是 Ability 層的能力。

          需要特別提一下的是:HarmonyOS Next 使用的 Web 瀏覽器基于 ArkWeb(方舟Web內(nèi)核),該內(nèi)核基于 Chrome 114 版本定制,對(duì)于各種 CSS、HTML、JS 屬性在各大瀏覽器中的兼容性情況可以使用 https://caniuse.com/#home 這個(gè)網(wǎng)站進(jìn)行查詢。

          6.2 前期如何確定影響范圍和制定方案

          Ability 層的接口:轉(zhuǎn)轉(zhuǎn)的 WebView 歷經(jīng)多年的演進(jìn),Native 與 WebView 的交互 API 是有一定歷史包袱的。我們不希望鴻蒙這次繼續(xù)背著包袱前行,所以我們計(jì)劃趁著這次前端業(yè)務(wù)兼容鴻蒙的機(jī)會(huì),進(jìn)行一波優(yōu)化,丟棄一些已經(jīng)計(jì)劃不再使用的能力或者接口。比如老的半屏 WebView 方案,導(dǎo)航欄按鈕功能設(shè)置方案、非統(tǒng)跳的頁面跳轉(zhuǎn)接口等。

          但一個(gè)方案的確定要充分考慮客戶端實(shí)現(xiàn)的難易程度以及前端大量業(yè)務(wù)側(cè)統(tǒng)一修改的難度代價(jià),需要做到盡可能的合理平衡。為了確定這點(diǎn),我們根據(jù)線上最近一個(gè)月中URL 中接口調(diào)用的埋點(diǎn)日志,結(jié)合 URL 查詢所屬業(yè)務(wù)、開發(fā)測(cè)試負(fù)責(zé)人的內(nèi)部接口,整理了一張巨大的二維矩陣表,通過在線表格的過濾、篩選等功能,可以非常直觀的看到所有還在使用中的接口的業(yè)務(wù)調(diào)用分布情況,為我們?cè)u(píng)估方案改造工作量提供了重要的參考。

          一個(gè) Hybrid API 在鴻蒙上支持情況,分為下面幾種情況。

          a) 直接支持,前端無需修改:提供和 Android、iOS 一樣的接口能力:

          • 1)功能對(duì)等:能力實(shí)現(xiàn)和 Andriod、iOS 一樣;
          • 2)簡(jiǎn)化:比如瀏覽大圖、奢侈品鑒定,暫時(shí)使用簡(jiǎn)版選圖方案。

          b) 推薦使用新方案:

          • 1)譬如導(dǎo)航欄相關(guān)按鈕的能力、新半屏能力;
          • 2)如 enterChat 等等功能,使用統(tǒng)跳接口來實(shí)現(xiàn)跳轉(zhuǎn)。

          c) 不支持:

          • 1)業(yè)務(wù)下線:業(yè)務(wù)不再需要,下線處理;
          • 2)版本初期不考慮該功能;
          • 3)某端特定功能:為了解決某個(gè)問題,某端專門增加的一個(gè) api 供使用;
          • 4)系統(tǒng)能力不支持:HarmonyOS Next 沒有該項(xiàng)能力。

          最終根據(jù)這些原則,我們確定下來 V1 版本中 WebView API 的需求范圍、涉及業(yè)務(wù)方、改動(dòng)方案。現(xiàn)在回想起來,當(dāng)時(shí)我們做的這一步是非常有必要的,前期這些如果沒有梳理清楚,后面就非常容易造成溝通混亂以及影響開發(fā)進(jìn)度。

          6.3 關(guān)于性能

          轉(zhuǎn)轉(zhuǎn)前端的頁面主要是 Web 形態(tài),Hybrid 場(chǎng)景占據(jù)多數(shù)。在過去的幾年中,我們圍繞 Hybrid 形態(tài),摸索出了一系列 Web 頁面的優(yōu)化方案。從基礎(chǔ)的離線包,到復(fù)雜的預(yù)渲染、預(yù)請(qǐng)求等都有涉及。最終實(shí)現(xiàn)了 Hybrid 頁面與 Native 頁面在電商場(chǎng)景下,相差無幾的體驗(yàn)。

          目前鴻蒙在這塊優(yōu)化上,還都沒來得及跟進(jìn)這些優(yōu)化手段。這個(gè)也是后面要繼續(xù)建設(shè)的一個(gè)方向,最終要拉齊到和Android、iOS 一樣的性能優(yōu)化體驗(yàn)。

          7、后續(xù)開發(fā)展望

          首個(gè)版本上線,只是一個(gè)起點(diǎn)。

          在業(yè)務(wù)上,我們將不斷的繼續(xù)追平 Android、iOS 中那些重要的模塊和功能;

          在開發(fā)工具體驗(yàn)和支持上,也逐漸補(bǔ)足缺失的能力,比如豐富的Native、WebView小工具能力,進(jìn)一步提升客戶端和前端在 HarmonyOS Next 下的開發(fā)體驗(yàn)。

          在性能體驗(yàn)上,持續(xù)的關(guān)注和跟進(jìn)性能問題,優(yōu)化 WebView 以及 Native 的使用體驗(yàn),提升 App 的流暢度和響應(yīng)速度。

          在創(chuàng)新上,我們將持續(xù)探索,將更多的 HarmonyOS Next 下的創(chuàng)新場(chǎng)景,如元服務(wù)、意圖推薦等等融入到轉(zhuǎn)轉(zhuǎn) App 中,提升用戶的購(gòu)物使用體驗(yàn)。

          要做的事情很多,我們會(huì)在后續(xù)迭代中逐步完善起來這些能力,敬請(qǐng)期待。

          8、相關(guān)資料

          [1] 鴻蒙NEXT官方開發(fā)指南

          [2] 一年擼完百萬行代碼,企業(yè)微信的全新鴻蒙NEXT客戶端架構(gòu)演進(jìn)之路

          [3] 鴻蒙NEXT如何保證應(yīng)用安全:詳解鴻蒙NEXT數(shù)字簽名和證書機(jī)制

          [4] 開源IM聊天程序HarmonyChat:基于鴻蒙NEXT的WebSocket協(xié)議

          [5] 微信純血鴻蒙版正式發(fā)布,295天走完微信14年技術(shù)之路!

          [6] 即時(shí)通訊框架MobileIMSDK的鴻蒙NEXT端詳細(xì)介紹

          [7] 即時(shí)通訊框架MobileIMSDK的鴻蒙NEXT端開發(fā)者手冊(cè)

          [8] 轉(zhuǎn)轉(zhuǎn)平臺(tái)IM系統(tǒng)架構(gòu)設(shè)計(jì)與實(shí)踐(一):整體架構(gòu)設(shè)計(jì)

          [9] 轉(zhuǎn)轉(zhuǎn)平臺(tái)IM系統(tǒng)架構(gòu)設(shè)計(jì)與實(shí)踐(二):詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)

          [10] Web端IM聊天消息該不該用瀏覽器本地存儲(chǔ)?一文即懂

          [11] 手把手教你使用網(wǎng)絡(luò)編程抓包神器Wireshark

          [12] 淺談網(wǎng)頁端IM技術(shù)及相關(guān)測(cè)試方法實(shí)踐(包括WebSocket性能測(cè)試)


          (本文已同步發(fā)布于:http://www.52im.net/thread-4820-1-1.html)

          posted @ 2025-04-23 10:50 Jack Jiang 閱讀(62) | 評(píng)論 (0)編輯 收藏

               摘要: 本文由企業(yè)微信客戶端團(tuán)隊(duì)黃瑋分享,原題“在流沙上筑城:企微鴻蒙開發(fā)演進(jìn)”,下文進(jìn)行了排版優(yōu)化和內(nèi)容修訂。1、引言當(dāng)企業(yè)微信團(tuán)隊(duì)在2024年啟動(dòng)鴻蒙Next版開發(fā)時(shí),我們面對(duì)的是雙重難題:1)在WXG小團(tuán)隊(duì)模式下,如何快速將數(shù)百萬行級(jí)企業(yè)應(yīng)用移植到全新操作系統(tǒng)?2)在鴻蒙API 還是Preview的初期,如何保持業(yè)務(wù)代碼的穩(wěn)定,在API快速更新的浪潮中巋然不動(dòng)?DataLis...  閱讀全文

          posted @ 2025-04-15 11:22 Jack Jiang 閱讀(89) | 評(píng)論 (0)編輯 收藏

               摘要: 本文由美團(tuán)技術(shù)團(tuán)隊(duì)張晨分享,原題“鴻蒙應(yīng)用簽名實(shí)操及機(jī)制探究”,下文進(jìn)行了排版優(yōu)化和內(nèi)容修訂。1、引言華為鴻蒙單框架操作系統(tǒng)HarmonyOS NEXT已于2024年10月23日正式發(fā)布Release版。HarmonyOS NEXT僅支持鴻蒙原生應(yīng)用,不再兼容安卓。本文對(duì)鴻蒙NEXT公開資料進(jìn)行了深入分析和解讀,梳理了鴻蒙單框架應(yīng)用的簽名機(jī)制,拆解每一步的實(shí)操過程和背后的實(shí)...  閱讀全文

          posted @ 2025-04-09 11:51 Jack Jiang 閱讀(84) | 評(píng)論 (0)編輯 收藏

               摘要: 本文由阿里云望宸分享,原題“大模型推理主戰(zhàn)場(chǎng):什么才是通信協(xié)議標(biāo)配?”,下文進(jìn)行了排版優(yōu)化和內(nèi)容修訂。1、引言DeepSeek 加速了模型平權(quán),隨之而來的是大模型推理需求的激增,大模型性能提升的主戰(zhàn)場(chǎng)從訓(xùn)練轉(zhuǎn)移到了推理。推理并發(fā)的提升,將催生計(jì)算、存儲(chǔ)、網(wǎng)絡(luò)、中間件、數(shù)據(jù)庫等領(lǐng)域新的工程化需求。本文將分享 SSE 和 WebSocket 這兩個(gè)AI大模型應(yīng)用的標(biāo)配網(wǎng)絡(luò)通信協(xié)...  閱讀全文

          posted @ 2025-03-27 15:14 Jack Jiang 閱讀(83) | 評(píng)論 (0)編輯 收藏

          本文由夏冰軟件cc分享,下文進(jìn)行了排版和內(nèi)容優(yōu)化。

          1、引言

          本文接上篇《什么是IM系統(tǒng)的消息時(shí)序一致性?》,本篇將通俗易懂地講解IM系統(tǒng)中的端到端加密原理,為了降低閱讀門檻,相關(guān)的技術(shù)概念會(huì)提及但不深入展開

          IM即時(shí)通訊系統(tǒng)的技術(shù)本質(zhì)是“即時(shí)消息技術(shù)”,是互聯(lián)網(wǎng)實(shí)時(shí)互動(dòng)場(chǎng)景的底層架構(gòu),包括聊天、直播、在線客服等業(yè)務(wù)領(lǐng)域在內(nèi),所有需要實(shí)時(shí)互動(dòng)、高實(shí)時(shí)性的場(chǎng)景,都需要用到IM技術(shù)。而為了讓即時(shí)通訊更安全,高安全場(chǎng)景下的IM系統(tǒng)通常會(huì)使用端到端加密技術(shù)進(jìn)行通訊加密。下面我們就來了解一下端到端加密技術(shù)在IM系統(tǒng)中的應(yīng)用。

          2、系列文章

          1. 零基礎(chǔ)IM開發(fā)入門(一):什么是IM系統(tǒng)?
          2. 零基礎(chǔ)IM開發(fā)入門(二):什么是IM系統(tǒng)的實(shí)時(shí)性?
          3. 零基礎(chǔ)IM開發(fā)入門(三):什么是IM系統(tǒng)的可靠性?
          4. 零基礎(chǔ)IM開發(fā)入門(四):什么是IM系統(tǒng)的消息時(shí)序一致性?
          5. 零基礎(chǔ)IM開發(fā)入門(五):什么是IM系統(tǒng)的端到端加密?* 本文)》
          6. 《零基礎(chǔ)IM開發(fā)入門(六):什么是IM系統(tǒng)的的心跳機(jī)制? (稍后發(fā)布)》
          7. 《零基礎(chǔ)IM開發(fā)入門(七):如何理解并實(shí)現(xiàn)IM系統(tǒng)消息未讀數(shù)? (稍后發(fā)布)》
          8. 《零基礎(chǔ)IM開發(fā)入門(八):如何理解并實(shí)現(xiàn)IM系統(tǒng)的多端消息漫游? (稍后發(fā)布)》

          3、網(wǎng)絡(luò)通訊數(shù)據(jù)加密的3個(gè)層次

          3.1 概述

          一般的數(shù)據(jù)加密可以在通信的3個(gè)層次來實(shí)現(xiàn):鏈路加密、節(jié)點(diǎn)加密和端到端加密。

          3.2 鏈路加密

          對(duì)于在兩個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)間的某一次通信鏈路,鏈路加密能為網(wǎng)上傳輸?shù)臄?shù)據(jù)提供安全保證。對(duì)于鏈路加密(又稱在線加密),所有消息在被傳輸之前進(jìn)行加密,在每一個(gè)節(jié)點(diǎn)對(duì)接收到的消息進(jìn)行解密,然后先使用下一個(gè)鏈路的密鑰對(duì)消息進(jìn)行加密,再進(jìn)行傳輸。

          在到達(dá)目的地之前,一條消息可能要經(jīng)過許多通信鏈路的傳輸。由于在每一個(gè)中間傳輸節(jié)點(diǎn)消息均被解密后重新進(jìn)行加密,因此,包括路由信息在內(nèi)的鏈路上的所有數(shù)據(jù)均以密文形式出現(xiàn),這樣,鏈路加密就掩蓋了被傳輸消息的源點(diǎn)與終點(diǎn)。由于填充技術(shù)的使用以及填充字符在不需要傳輸數(shù)據(jù)的情況下就可以進(jìn)行加密,這使得消息的頻率和長(zhǎng)度特性得以掩蓋,從而可以防止對(duì)通信業(yè)務(wù)進(jìn)行分析。

          相關(guān)文章推薦閱讀:IM聊天系統(tǒng)安全手段之通信連接層加密技術(shù)》

          3.3 節(jié)點(diǎn)加密

          盡管節(jié)點(diǎn)加密能給網(wǎng)絡(luò)數(shù)據(jù)提供較高的安全性,但它在操作方式上與鏈路加密是類似的:兩者均在通信鏈路上為傳輸?shù)南⑻峁┌踩裕荚谥虚g節(jié)點(diǎn)先對(duì)消息進(jìn)行解密,然后進(jìn)行加密。因?yàn)橐獙?duì)所有傳輸?shù)臄?shù)據(jù)進(jìn)行加密,所以加密過程對(duì)用戶是透明的。然而,與鏈路加密不同,節(jié)點(diǎn)加密不允許消息在網(wǎng)絡(luò)節(jié)點(diǎn)以明文形式存在,它先把收到的消息進(jìn)行解密,然后采用另一個(gè)不同的密鑰進(jìn)行加密,這一過程是在節(jié)點(diǎn)上的一個(gè)安全模塊中進(jìn)行。

          節(jié)點(diǎn)加密要求報(bào)頭和路由信息以明文形式傳輸,以便中間節(jié)點(diǎn)能得到如何處理消息的信息,因此這種方法對(duì)于防止攻擊者分析通信業(yè)務(wù)是脆弱的。

          3.4 端到端加密

          端到端加密允許數(shù)據(jù)在從源點(diǎn)到終點(diǎn)的傳輸過程中始終以密文形式存在。采用端到端加密(又稱脫線加密或包加密),消息在被傳輸時(shí)到達(dá)終點(diǎn)之前不進(jìn)行解密,因?yàn)橄⒃谡麄€(gè)傳輸過程中均受到保護(hù),所以即使有節(jié)點(diǎn)被損壞也不會(huì)使消息泄露。

          端到端加密系統(tǒng)的價(jià)格便宜些,并且與鏈路加密和節(jié)點(diǎn)加密相比更可靠,更容易設(shè)計(jì)、實(shí)現(xiàn)和維護(hù)。端到端加密還避免了其它加密系統(tǒng)所固有的同步問題,因?yàn)槊總€(gè)報(bào)文包均是獨(dú)立被加密的,所以一個(gè)報(bào)文包所發(fā)生的傳輸錯(cuò)誤不會(huì)影響后續(xù)的報(bào)文包。端到端加密系統(tǒng)通常不允許對(duì)消息的目的地址進(jìn)行加密,這是囚為每一個(gè)消息所經(jīng)過的節(jié)點(diǎn)都要用此地址來確定如何傳輸消息。由于這種加密方法不能掩蓋被傳輸消息的源點(diǎn)與終點(diǎn),因此它對(duì)于防止攻擊者分析通信業(yè)務(wù)是脆弱的。

          沒有使用端到端加密時(shí)的通信原理圖(各個(gè)環(huán)節(jié)都存在泄密的可能):

          使用端到端加密后的通信原理圖(除了發(fā)送者和接收者,其它環(huán)境都是密文狀態(tài)):

          4、IM系統(tǒng)中的端到端加密原理

          在IM系統(tǒng)中,當(dāng)用戶A發(fā)送消息給用戶B時(shí),IM系統(tǒng)會(huì)生成一對(duì)公鑰和私鑰,并將公鑰發(fā)送給用戶B。用戶A使用用戶B的公鑰對(duì)消息進(jìn)行加密,然后將加密后的消息發(fā)送給用戶B。

          在用戶B接收到消息后,使用自己的私鑰對(duì)消息進(jìn)行解密,從而獲取明文內(nèi)容。由于私鑰只有用戶B擁有,因此除了用戶B之外,任何人都無法解密消息。

          沒有使用端到端加密時(shí)的聊天消息存在諸多風(fēng)險(xiǎn):

          使用了端到端加密后的聊天就安全多了:

          5、IM系統(tǒng)使用端到端加密的好處

          數(shù)據(jù)安全性:在IM系統(tǒng)中,端到端加密可以確保消息在傳輸過程中始終保持加密狀態(tài),防止黑客和第三方竊取用戶的通信內(nèi)容。

          隱私保護(hù):由于消息內(nèi)容只有通信雙方能夠解密和閱讀,即使是IM系統(tǒng)應(yīng)用自身也無法獲取明文內(nèi)容。這意味著用戶的隱私得到了最大程度的保護(hù)。

          抗竊聽:IM系統(tǒng)使用端到端加密技術(shù),使得竊聽者無法獲取通信內(nèi)容,從而有效防止了竊聽行為的發(fā)生。

          6、IM系統(tǒng)使用端到端加密的意義

          由于在數(shù)據(jù)傳輸?shù)椒?wù)器之后,任何有權(quán)訪問此服務(wù)器的人,包括員工、供應(yīng)商及其他有關(guān)人員(甚至是黑客),都有可能讀取到用戶的數(shù)據(jù)。

          所以,使用端到端加密技術(shù)主要有以下意義:

          1)保護(hù)個(gè)人隱私:在信息時(shí)代,個(gè)人隱私面臨著越來越大的威脅。在IM系統(tǒng)中使用端到端加密可以有效保護(hù)了用戶的通信內(nèi)容,確保個(gè)人隱私不被侵犯。

          2)防止數(shù)據(jù)泄露:許多用戶在社交軟件中分享了大量的個(gè)人信息和敏感數(shù)據(jù)。而IM系統(tǒng)中的端到端加密就可以確保這些數(shù)據(jù)在傳輸過程中不會(huì)被竊取,從而避免了數(shù)據(jù)泄露的風(fēng)險(xiǎn)。

          3)抵御網(wǎng)絡(luò)攻擊:黑客和網(wǎng)絡(luò)犯罪分子經(jīng)常利用網(wǎng)絡(luò)漏洞和弱點(diǎn)來攻擊用戶的通信。IM系統(tǒng)中的端到端加密可以有效防止這些攻擊,保護(hù)用戶的通信安全。

          4)維護(hù)社交關(guān)系:人們?cè)絹碓揭蕾嚿缃粦?yīng)用來保持聯(lián)系和交流。IM系統(tǒng)使用端到端加密可以使得用戶能夠放心地分享私密信息,維護(hù)社交關(guān)系的同時(shí)保護(hù)了個(gè)人隱私。

          7、IM系統(tǒng)使用端到端加密的不足

          通訊效率低:由于端對(duì)端加密需要對(duì)通訊數(shù)據(jù)進(jìn)行加密和解密,因此可能會(huì)導(dǎo)致通信效率較低。

          需雙向支持:端對(duì)端加密需要發(fā)送方和接收方都需要支持該技術(shù),否則就將無法實(shí)現(xiàn)端對(duì)端加密通信。

          安全性問題:雖然端對(duì)端加密可以防止中間人攻擊,但如果黑客能夠獲得了私鑰或公鑰,那么他們也能夠輕易地獲取到通信數(shù)據(jù)。

          8、延伸閱讀

          本文內(nèi)容主要是面向即時(shí)通訊技術(shù)的初學(xué)者以及產(chǎn)品經(jīng)理,所以相關(guān)的技術(shù)概念都沒有深入探討,感光趣的可以繼續(xù)深入閱讀我整理的以下幾篇資料。

          1. IM聊天系統(tǒng)安全手段之通信連接層加密技術(shù)
          2. IM聊天系統(tǒng)安全手段之傳輸內(nèi)容端到端加密技術(shù)
          3. 移動(dòng)端安全通信的利器——端到端加密(E2EE)技術(shù)詳解
          4. 簡(jiǎn)述實(shí)時(shí)音視頻聊天中端到端加密(E2EE)的工作原理

          9、參考資料

          [1] 網(wǎng)絡(luò)編程懶人入門(三):快速理解TCP協(xié)議一篇就夠

          [2] 即時(shí)通訊初學(xué)者必知必會(huì)的20個(gè)網(wǎng)絡(luò)編程和通信安全知識(shí)點(diǎn)

          [3] 為什么要用HTTPS?深入淺出,探密短連接的安全性

          [4] 理論聯(lián)系實(shí)際:一套典型的IM通信協(xié)議設(shè)計(jì)詳解(含安全層設(shè)計(jì))

          [5] 微信新一代通信安全解決方案:基于TLS1.3的MMTLS詳解

          [6] 移動(dòng)端安全通信的利器——端到端加密(E2EE)技術(shù)詳解

          [7] 常用加解密算法與通訊安全講解

          [8] 通俗易懂:一篇掌握即時(shí)通訊的消息傳輸安全原理

          [9] 基于Netty的IM聊天加密技術(shù)學(xué)習(xí):一文理清常見的加密概念、術(shù)語等

          [10] 手把手教你為基于Netty的IM生成自簽名SSL/TLS證書

          [11] 微信技術(shù)分享:揭秘微信后臺(tái)安全特征數(shù)據(jù)倉庫的架構(gòu)設(shè)計(jì)

          [12] 即時(shí)通訊初學(xué)者必知必會(huì)的20個(gè)網(wǎng)絡(luò)編程和通信安全知識(shí)點(diǎn)

          (本文已同步發(fā)布于:http://www.52im.net/thread-4792-1-1.html)

          posted @ 2025-03-20 11:11 Jack Jiang 閱讀(58) | 評(píng)論 (0)編輯 收藏

          Jack Jiang的 Mail: jb2011@163.com, 聯(lián)系QQ: 413980957, 微信: hellojackjiang
          主站蜘蛛池模板: 句容市| 庄浪县| 岗巴县| 时尚| 阿城市| 浦县| 岚皋县| 丽江市| 东丰县| 达尔| 鹤山市| 兴义市| 颍上县| 略阳县| 石门县| 聂拉木县| 临澧县| 大同县| 闽侯县| 永平县| 鄂托克前旗| 河北区| 平度市| 昌都县| 开封市| 铜鼓县| 道真| 绩溪县| 星座| 西吉县| 西青区| 卢氏县| 桓台县| 大化| 盐津县| 读书| 瑞丽市| 五莲县| 阳信县| 建瓯市| 永州市|