<noframes id="395jp"><noframes id="395jp"><video id="395jp"><video id="395jp"></video></video>
<i id="395jp"><font id="395jp"><delect id="395jp"></delect></font></i>
<nobr id="395jp"></nobr><noframes id="395jp"><noframes id="395jp"><dl id="395jp"></dl><video id="395jp"></video><noframes id="395jp"><dl id="395jp"></dl>
<video id="395jp"><video id="395jp"><dl id="395jp"></dl></video></video> <nobr id="395jp"><nobr id="395jp"><meter id="395jp"></meter></nobr></nobr>
<video id="395jp"></video><nobr id="395jp"></nobr>
<video id="395jp"></video>

Jack Jiang

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

置頂隨筆

     摘要: 本文的上篇我們討論了在線實時消息的投遞,如果接收方用戶B不在線,系統是如何保證離線消息的可達性的呢?這就是本文要討論的問題。  閱讀全文

posted @ 2016-11-18 14:39 Jack Jiang 閱讀(3032) | 評論 (0)編輯 收藏

     摘要: 雖然C10K問題已被妥善解決,但對于即時通訊應用(或其它網絡編程方面)的開發者而言,研究C10K問題仍然價值巨大,因為技術的發展都是有規律和線索可循的,了解C10K問題及其解決思路,通過舉一反三,或許可以為你以后面對類似問題提供更多可借鑒的思想和解決問題的實踐思路。而這,也正是撰寫本文的目的所在。  閱讀全文

posted @ 2016-10-21 16:02 Jack Jiang 閱讀(2651) | 評論 (0)編輯 收藏

     摘要: 本文將以新手的視角引導你閱讀相關文章,以便為從零開發一個移動端IM做好方方面面的知識準備:包括但不限于網絡編程基礎、通信協議的選型、IM的架構設計等等。  閱讀全文

posted @ 2016-08-29 17:42 Jack Jiang 閱讀(3169) | 評論 (0)編輯 收藏

     摘要: 本文將簡要介紹TeamTalk開源的過去和現在,為打算研究和采用TeamTalk的同行提供一定程度的參考。  閱讀全文

posted @ 2016-08-09 17:25 Jack Jiang 閱讀(2799) | 評論 (0)編輯 收藏

     摘要: 本文基于作者的實踐以及相關資料的整理,總結了自已對Android進程和Service?;畹睦斫?,希望能為你的應用開發帶來啟發。  閱讀全文

posted @ 2016-08-02 22:43 Jack Jiang 閱讀(2537) | 評論 (0)編輯 收藏

     摘要: 本文將介紹如何在現有的技術基礎上選擇合適的方案開發一個“服務器推”(Comet技術)的應用,最優的方案還是取決于應用需求的本身。相對于傳統的 Web 應用, 開發 Comet 應用具有一定的挑戰性。  閱讀全文

posted @ 2016-07-28 11:07 Jack Jiang 閱讀(1484) | 評論 (0)編輯 收藏

     摘要: 本文對服務器推送技術(SSE)進行了詳細的介紹,包含瀏覽器端和服務器端的相應實現細節,為在實踐中使用該技術提供了指南  閱讀全文

posted @ 2016-07-22 18:03 Jack Jiang 閱讀(1175) | 評論 (0)編輯 收藏

     摘要: Web端即時通訊技術因受限于瀏覽器的設計限制,一直以來實現起來并不容易,主流的Web端即時通訊方案大致有4種:傳統Ajax短輪詢、Comet技術、WebSocket技術、SSE(Server-sent Events)。本文將簡要介紹這4種技術的原理,并指出各自的異同點、優缺點等。  閱讀全文

posted @ 2016-07-15 15:08 Jack Jiang 閱讀(1840) | 評論 (2)編輯 收藏

     摘要: Web端的IM應用,由于瀏覽器的兼容性以及其固有的“客戶端請求服務器處理并響應”的通信模型,造成了要在瀏覽器中實現一個兼容性較好的IM應用,其通信過程必然是諸多技術的組合,本文的目的就是要詳細探討這些技術并分析其原理和過程。   閱讀全文

posted @ 2016-07-12 15:59 Jack Jiang 閱讀(5518) | 評論 (0)編輯 收藏

     摘要: 文演示的是一個Android客戶端程序,通過UDP協議與兩個典型的NIO框架服務端(分別用MINA2和Netty4來實現),實現跨平臺雙向通信的完整Demo。  閱讀全文

posted @ 2016-06-30 16:57 Jack Jiang 閱讀(740) | 評論 (0)編輯 收藏

     摘要: 本文將演示一個iOS客戶端程序,通過UDP協議與兩個典型的NIO框架服務端(將分別用MINA2和Netty4來實現),實現跨平臺雙向通信的完整Demo。  閱讀全文

posted @ 2016-06-28 22:11 Jack Jiang 閱讀(1384) | 評論 (0)編輯 收藏

     摘要: 本文是《NIO框架入門》系列文章中的第2篇,將演示的是一個基于MINA2的UDP服務端和一個標準UDP客戶端(Java實現)雙向通信的完整例子。  閱讀全文

posted @ 2016-06-24 14:38 Jack Jiang 閱讀(826) | 評論 (0)編輯 收藏

     摘要: 本文將演示的是一個基于Netty4的UDP服務端和一個標準UDP客戶端(Java實現)雙向通信的完整例子。實際上,Netty4的UDP例子非常難找,官方的代碼演示里只有一個簡單的UDP廣播例子,不足以用于演示Netty4的UDP通信最佳實踐。  閱讀全文

posted @ 2016-06-20 14:48 Jack Jiang 閱讀(1498) | 評論 (0)編輯 收藏

     摘要: MobileIMSDK是一套專為移動端開發的原創即時通訊框架:超輕量級、高度提煉,lib包50KB以內;完全基于UDP協議實現;客戶端支持iOS、Android、標準Java平臺;可應用于跨設備、跨網絡的聊天APP、企業OA、消息推送等各種場景。  閱讀全文

posted @ 2015-12-14 15:18 Jack Jiang 閱讀(2769) | 評論 (0)編輯 收藏

     摘要: MobileIMSDK是專為移動端開發的原創即時通訊開源框架:超輕量級、高度提煉,lib包50KB以內;完全基于UDP協議實現;客戶端支持iOS、Android、標準Java平臺;可應用于跨設備、跨網絡的聊天APP、企業OA、消息推送等各種場景。  閱讀全文

posted @ 2015-12-01 16:06 Jack Jiang 閱讀(3335) | 評論 (2)編輯 收藏

2023年12月7日

     摘要: 本文由字節跳動技術團隊高原、湯中峰分享,原題“抖音功耗優化實踐”,本文有修訂和改動。一、引言功耗優化是應用體驗優化的一個重要課題,高功耗會引發用戶的電量焦慮,也會導致糟糕的發熱體驗,從而降低了用戶的使用意愿。而功耗又是涉及整機的長時間多場景的綜合性復雜指標,影響因素很多。不論是功耗的量化拆解,還是異常問題的監控,以及主動的功耗優化對于開發人員來說都是很有挑戰性的。本文結合抖...  閱讀全文

posted @ 2023-12-07 11:37 Jack Jiang 閱讀(18) | 評論 (0)編輯 收藏

2023年12月6日

為了更好地分類閱讀 52im.net 總計1000多篇精編文章,我將在每周三推送新的一期技術文集,本次是第26 期。

[- 1 -] 實時語音聊天中的音頻處理與編碼壓縮技術簡述

[鏈接] http://www.52im.net/thread-825-1-1.html

[摘要] 在視頻或者音頻通話過程中,一方面為了減小原始聲音數據的傳輸碼率,需要進行音頻壓縮,另一方面為了得到更高質量的音質,需要進行音頻處理。如何處理好這兩方面,保證聲音傳播的高真性,是個技術活兒!

[- 2 -] 網易視頻云技術分享:音頻處理與壓縮技術快速入門

[鏈接] http://www.52im.net/thread-678-1-1.html

[摘要] 隨著音頻處理和壓縮技術的不斷發展,效果更好、適用范圍更廣、性能更高的算法和新的技術必將不斷涌現,不斷改善我們的生活。

[- 3 -] 學習RFC3550:RTP/RTCP實時傳輸協議基礎知識

[鏈接] http://www.52im.net/thread-590-1-1.html

[摘要] 本文對這些協議進行初步歸納總結,在分析RFC3550的基礎上,重點分析RTP系列協議,并以報文類型為主線分析RTCP系列協議。

[- 4 -]基于RTMP數據傳輸協議的實時流媒體技術研究(論文全文)

[鏈接] http://www.52im.net/thread-273-1-1.html

[摘要] 本文來自論文《基于 RTMP 協議的流媒體技術的原理與應用》,文中研究了基于 Flash 平臺的流媒體系統中使用的 RTMP 協議的原理和應用,并對網絡上實時流媒體的各種傳輸方式的優缺點進行了分析。

[- 5 -] 聲網架構師談實時音視頻云的實現難點(視頻采訪)

[鏈接] http://www.52im.net/thread-399-1-1.html

[摘要] 孫雨潤,聲網 Agora.io 首席音視頻架構師,負責全球音視頻傳輸技術架構。畢業于中國科學技術大學,原 YY 后臺架構師,主導 Web YY 整體后臺系統架構搭建。曾任職騰訊 QQ 研究員 ,主導 QQ 空間面孔墻等項目;任職微軟 Microsoft 期間,參與高性能計算產品項目。

[- 6 -] 還在靠“喂喂喂”測試實時語音通話質量?本文教你科學的評測方法!

[鏈接] http://www.52im.net/thread-507-1-1.html

[摘要] 實時語音聊天開發,對于一般的開發者來說比較神秘,很多朋友不太清楚如何全面的評估一個音頻引擎。

[- 7 -] 如何用最簡單的方法測試你的實時音視頻方案

[鏈接] http://www.52im.net/thread-535-1-1.html

[摘要] 本文總結了一些有關實時音視頻方案比較值得自測的要點,旨在沒有生產環境反饋和豐富的測試資源情況下,用較低的成本來測試覆蓋盡可能多的真實場景中可能遇到的網絡和設備問題。

[- 8 -] 簡述實時音視頻聊天中端到端加密(E2EE)的工作原理

[鏈接] http://www.52im.net/thread-763-1-1.html

[摘要] 本文著重闡述端到端加密(E2EE),端到端加密是確保數據傳輸安全的可行方法之一。讀完這篇文章,你可以了解這種加密方式的基本原理.

[- -]  理論聯系實際:實現一個簡單地基于HTML5的實時視頻直播

[鏈接] http://www.52im.net/thread-875-1-1.html

[摘要] 本次分享就向大家介紹一下分享一下直播的整個流程和一些技術點,并動手實現一個簡單的Demo。

[- 10 -] IM實時音視頻聊天時的回聲消除技術詳解

[鏈接] http://www.52im.net/thread-939-1-1.html

[摘要] 為了不讓文章讀起來枯燥,本文將盡量通俗易懂地為您講解實時音視頻聊天場景下的回聲消除技術原因希望能帶給你些許啟發。

[- 11 -] 如何優化傳輸機制來實現實時音視頻的超低延遲?

[鏈接] http://www.52im.net/thread-1008-1-1.html

[摘要] 要在語音視頻 SDK 中實現超低延遲,實時的語音視頻傳輸機制是必不可少的,而 FEC 和 ARQ 的智能結合是實時語音視頻傳輸機制的基石。

[- 12 -] 實時通信RTC技術棧之:視頻編解碼

[鏈接] http://www.52im.net/thread-1034-1-1.html

[摘要] 本文是系列文章的第一篇:講述視頻編解碼的一些基本知識。

[- 13 -] Android直播入門實踐:動手搭建一套簡單的直播系統

[鏈接] http://www.52im.net/thread-1154-1-1.html

[摘要] 實時視頻直播是這兩年非?;鸬募夹g形態,已經滲透到教育、在線互娛等各種業務場景中。但要搭建一套實時視頻直播系統,并非易事,當然相關的直播技術理論在論壇的其它文章里已經寫的非常詳細,本文不再展開。

[- 14 -] 網易云信實時視頻直播在TCP數據傳輸層的一些優化思路

[鏈接] http://www.52im.net/thread-1254-1-1.html

[摘要] 網易云信的實時視頻直播目前使用了TCP進行傳輸,且基于此,從編碼動態適配、發送隊列調整、協議優化、socket等做了全流程的優化,確保在限帶寬、丟包、時延、抖動,無論單項還是復雜網絡,都有非常不錯的實際體驗。

[- 15 -] 實時音視頻聊天技術分享:面向不可靠網絡的抗丟包編解碼器

[鏈接] http://www.52im.net/thread-1281-1-1.html

[摘要] 編解碼器面向直播和網絡通信是不一樣的,我今天想說的是面向不可靠傳輸網絡的抗丟包編解碼器。

[- 16 -] P2P技術如何將實時視頻直播帶寬降低75%?

[鏈接] http://www.52im.net/thread-1289-1-1.html

[摘要] 那整個系統是怎么設計的?使用了哪些技術來達成目標?接下來我來重點分享一下架構設計和技術細節。

??52im社區本周新文:《抖音技術分享:抖音Android端手機功耗問題的全面分析和詳細優化實踐》,歡迎閱讀!??

我是Jack Jiang,我為自已帶鹽!https://github.com/JackJiang2011/MobileIMSDK/

posted @ 2023-12-06 12:22 Jack Jiang 閱讀(25) | 評論 (0)編輯 收藏

2023年11月30日

     摘要: 本文由竹子愛熊貓分享,原題“(十一)Netty實戰篇:基于Netty框架打造一款高性能的IM即時通訊程序”,本文有修訂和改動。1、引言關于Netty網絡框架的內容,前面已經講了兩個章節,但總歸來說難以真正掌握,畢竟只是對其中一個個組件進行講解,很難讓諸位將其串起來形成一條線,所以本章中則會結合實戰案例,對Netty進行更深層次的學習與掌握,實戰案例也并不難,一個非常樸素的I...  閱讀全文

posted @ 2023-11-30 12:28 Jack Jiang 閱讀(32) | 評論 (0)編輯 收藏

2023年11月29日

​為了更好地分類閱讀 52im.net 總計1000多篇精編文章,我將在每周三推送新的一期技術文集,本次是第25 期。

[- 1 -] 即時通訊音視頻開發(一):視頻編解碼之理論概述

[鏈接] http://www.52im.net/thread-228-1-1.html

[摘要] 本文主要講解實時音視頻技術中視頻技術的編解碼基礎理論。

[- 2 -] 即時通訊音視頻開發(二):視頻編解碼之數字視頻介紹

[鏈接] http://www.52im.net/thread-229-1-1.html

[摘要] 本文主要講解實時音視頻技術中視頻技術的數字視頻知識。

[- 3 -] 即時通訊音視頻開發(三):視頻編解碼之編碼基礎

[鏈接] http://www.52im.net/thread-232-1-1.html

[摘要] 本文主要講解實時音視頻技術中視頻技術的編碼理論知識。

[- 4 -] 即時通訊音視頻開發(四):視頻編解碼之預測技術介紹

[鏈接] http://www.52im.net/thread-235-1-1.html

[摘要] 本文主要講解實時音視頻技術中視頻技術的預測技術理論知識。

[- 5 -] 即時通訊音視頻開發(五):認識主流視頻編碼技術H.264

[鏈接] http://www.52im.net/thread-237-1-1.html

[摘要] 本文主要講解實時音視頻技術中目前主流的視頻編碼技術H.264相關知識。

[- 6 -] 即時通訊音視頻開發(六):如何開始音頻編解碼技術的學習

[鏈接] http://www.52im.net/thread-241-1-1.html

[摘要] 本文是一篇講述新手如何學習音頻編解碼知識的文章。

[- 7 -] 即時通訊音視頻開發(七):音頻基礎及編碼原理入門

[鏈接] http://www.52im.net/thread-242-1-1.html

[摘要] 本文是一篇講述基礎音頻知識和編碼原理的文章。

[- 8 -]  即時通訊音視頻開發(八):常見的實時語音通訊編碼標準

[鏈接] http://www.52im.net/thread-243-1-1.html

[摘要] 本文是一篇講述常用的實用音頻通訊編碼標準的文章。

[- 9 -] 即時通訊音視頻開發(九):實時語音通訊的回音及回音消除概述

[鏈接] http://www.52im.net/thread-247-1-1.html

[摘要] 本文是一篇介紹實時音頻通訊過程中的回音問題,以及回音消除技術的介紹文章。

[- 10 -] 即時通訊音視頻開發(十):實時語音通訊的回音消除技術詳解

[鏈接] http://www.52im.net/thread-250-1-1.html

[摘要] 本文是一篇詳細介紹實時音頻通訊過程中的回音消除技術的文章,主要描述的是回音消除技術理論和算法原理等。

[- 11 -] 即時通訊音視頻開發(十一):實時語音通訊丟包補償技術詳解

[鏈接] http://www.52im.net/thread-251-1-1.html

[摘要] 本文是一篇詳細介紹實時語音通訊過程中的丟包補償技術的文章。

[- 12 -] 即時通訊音視頻開發(十二):多人實時音視頻聊天架構探討

[鏈接] http://www.52im.net/thread-253-1-1.html

[摘要] 雖然都是視頻通訊,大部分情況下的單人視頻通話可能根本不需要用到流媒體服務,而多人視頻,如在線教育這些則必須用到,所以下面主要介紹多人視頻中服務端架構模式,以及各自特點。

[- 13 -] 即時通訊音視頻開發(十三):實時視頻編碼H.264的特點與優勢

[鏈接] http://www.52im.net/thread-266-1-1.html

[摘要] 本文主要講解實時音視頻技術中最流行的視頻編碼技術H.264的特點和優勢,希望能為您的技術選型提供一定的參考。

[- 14 -] 即時通訊音視頻開發(十四):實時音視頻數據傳輸協議介紹

[鏈接] http://www.52im.net/thread-267-1-1.html

[摘要] 本文將簡要介紹這些主流的實時音視頻數據傳輸協議。

[- 15 -] 即時通訊音視頻開發(十五):聊聊P2P與實時音視頻的應用情況

[鏈接] http://www.52im.net/thread-269-1-1.html

[摘要] p2p就是點對點,兩個客戶端直接進行數據交互,不需要經過服務器轉發(relay),這種方式能大大減輕服務端的負載,所以特別視適合大數據的傳輸,比如實時音視頻聊天、在線視頻直播、大文件傳輸等應用場景。

[- 16 -] 即時通訊音視頻開發(十六):移動端實時音視頻開發的幾個建議

[鏈接] http://www.52im.net/thread-270-1-1.html

[摘要] 本文將就幾個典型問題給出簡要的參考建議。

[- 17 -] 即時通訊音視頻開發(十七):視頻編碼H.264、VP8的前世今生

[鏈接] http://www.52im.net/thread-274-1-1.html

[摘要] 本文重在為讀者從技術角度講解H.264和VP8的發展淵源以及現時所面臨的問題,相信讀完此文后,對于即時通訊(IM聊天應用)的實時音視頻開發中視頻編碼的選擇會有個直觀的了解。

[- 18 -] 即時通訊音視頻開發(十八):詳解音頻編解碼的原理、演進和應用選型

[鏈接] http://www.52im.net/thread-2230-1-1.html

[摘要] 以下就是本次為大家分享的主要內容,希望通過此次分享可以使大家對音頻編解碼有一個整體的認識,并在實際應用中有參考的依據。

[- 19 -] 即時通訊音視頻開發(十九):零基礎,史上最通俗視頻編碼技術入門

[鏈接] http://www.52im.net/thread-2840-1-1.html

[摘要] 視頻編碼技術涉及的內容太過專業和龐雜,市面上的書籍或博客多數都只是枯燥的技術概念羅列,對于新手來說讀完依舊蒙逼是常態,本文將借此機會,專門給大家做一個關于視頻編碼的零基礎科普。

[- 20 -] 即時通訊音視頻開發(二十):一文讀懂視頻的顏色模型轉換和色域轉換

[鏈接] http://www.52im.net/thread-4467-1-1.html

[摘要] 本文將以通俗易懂的文字,引導你理解視頻是如何從采集開始,歷經各種步驟,最終通過顏色模型轉換和不同的色域轉換,讓你看到賞心悅目的視頻結果的。

??52im社區本周新文:《跟著源碼學IM(十二):基于Netty打造一款高性能的IM即時通訊程序》,歡迎閱讀!??

我是Jack Jiang,我為自已帶鹽!https://github.com/JackJiang2011/MobileIMSDK/

posted @ 2023-11-29 13:41 Jack Jiang 閱讀(34) | 評論 (0)編輯 收藏

2023年11月24日

為了更好地分類閱讀 52im.net 總計1000多篇精編文章,我將在每周三推送新的一期技術文集,本次是第 24 期。

[- 1 -] 開源實時音視頻技術WebRTC的現狀

[鏈接] http://www.52im.net/article-126-1.html

[摘要] 作為Google開源的技術,WebRTC并不是一個可以拿來就用并且性能很好的產品,而且正如眾多的其它開源技術一樣,WebRTC的發展并沒有期待中的快。


[- 2 -] 簡述開源實時音視頻技術WebRTC的優缺點

[鏈接] http://www.52im.net/thread-225-1-1.html

[摘要] 作為Google開源的技術,WebRTC并不是一個可以拿來就用并且性能很好的產品,需要工程師們對其進行較多的改善。本文主要來談一談WebRTC的優缺點。


[- 3 -] 訪談WebRTC標準之父:WebRTC的過去、現在和未來

[鏈接] http://www.52im.net/thread-227-1-1.html

[摘要] 首屆(WebRTC)網絡實時通信大會期間,InfoQ 對 WebRTC 之父 Daniel C. Burnett 進行了專訪,以下是專訪實錄。(注:Daniel 在訪談中的觀點僅代表他本人及其在 W3C 所做的工作。)


[- 4 -] 良心分享:WebRTC 零基礎開發者教程(中文)[附件下載]

[鏈接] http://www.52im.net/thread-265-1-1.html

[摘要] WebRTC,名稱源自網頁實時通信(Web Real-Time Communication)的縮寫,是一個支持網頁瀏覽器進行實時語音通話或視頻聊天的技術,是谷歌2010年以6820萬美元收購Global IP Solutions公司而獲得的一項技術。


[- 5 -] WebRTC實時音視頻技術的整體架構介紹

[鏈接] http://www.52im.net/thread-284-1-1.html

[摘要] 雖然WebRTC的目標是實現跨平臺的Web端實時音視頻通訊,但因為核心層代碼的Native、高品質和內聚性,開發者很容易進行除Web平臺外的移殖和應用。很長一段時間內WebRTC是業界能免費得到的唯一高品質實時音視頻通訊技術。


[- 6 -] 新手入門:到底什么是WebRTC服務器,以及它是如何聯接通話的?

[鏈接] http://www.52im.net/thread-356-1-1.html

[摘要] 通過WebRTC的端到端通信通常被人們所誤解。WebRTC并不是真正意味著你不需要服務器來協商和聯接通話。它只意味著,在多數情況中,你可以直接地在瀏覽器之間進行通信。


[- 7 -] WebRTC實時音視頻技術基礎:基本架構和協議棧

[鏈接] http://www.52im.net/thread-442-1-1.html

[摘要] 本文主要介紹WebRTC的架構和協議棧。


[- 8 -]  淺談開發實時視頻直播平臺的技術要點

[鏈接] http://www.52im.net/thread-475-1-1.html

[摘要] 現在大大小小的公司,甚至個人開發者,都想開發自己的直播網站或App,本文會幫你理清,開發視頻直播平臺,你需要注意哪些技術要點。


[- 9 -] [觀點] WebRTC應該選擇H.264視頻編碼的四大理由

[鏈接] http://www.52im.net/thread-488-1-1.html

[摘要] 對實時音視頻開發者來說,當開發一個基于WebRTC的產品時,我們應該選擇什么樣的視頻編解碼器?去年的時候,答案可能是“VP8”。幾個月前,答案可能是“看情況”?,F在答案是“除非必須用VP8,否則就用H.264”。


[- 10 -] 基于開源WebRTC開發實時音視頻靠譜嗎?第3方SDK有哪些?

[鏈接] http://www.52im.net/thread-510-1-1.html

[摘要] 利用Google開源的WebRTC來開發自已的實時音視頻系統,靠不靠譜這個問題一直被問到,其實很難一兩句話說清楚,因為答案不是一個靠譜或不靠譜可以回答好的,既然被反復問到,今天就系統地整理參考答案。


[- 11 -] 開源實時音視頻技術WebRTC中RTP/RTCP數據傳輸協議的應用

[鏈接] http://www.52im.net/thread-589-1-1.html

[摘要] 本文在深入研究WebRTC源代碼的基礎上,以Video數據的發送和接收為例,力求用簡潔語言描述RTP/RTCP模塊的實現細節,為進一步深入掌握WebRTC打下良好基礎。


[- 12 -] 簡述實時音視頻聊天中端到端加密(E2EE)的工作原理

[鏈接] http://www.52im.net/thread-763-1-1.html

[摘要] 本文著重闡述端到端加密(E2EE),端到端加密是確保數據傳輸安全的可行方法之一。讀完這篇文章,你可以了解這種加密方式的基本原理.


[- 13 -] 實時通信RTC技術棧之:視頻編解碼

[鏈接] http://www.52im.net/thread-1034-1-1.html

[摘要] 那么 RTC 技術棧究竟包含哪些技術,我們會提供一系列文章,來解讀 RTC 技術棧。本文是系列文章的第一篇:講述視頻編解碼的一些基本知識。


[- 14 -] 開源實時音視頻技術WebRTC在Windows下的簡明編譯教程

[鏈接] http://www.52im.net/thread-1125-1-1.html

[摘要] WebRTC是提供了一整套處理實時音視頻的開源庫。它包括了音視頻處理(采集,編解碼,前處理,后處理,渲染),數據傳輸(實時傳輸,流控)和業務邏輯控制??梢哉f WebRTC 的出現大大減少了做音視頻開發的難度,所以熟練掌握好這個庫對于做音視頻相關的同學就顯的特別重要了。


[- 15 -] 網頁端實時音視頻技術WebRTC:看起來很美,但離生產應用還有多少坑要填?

[鏈接] http://www.52im.net/thread-1282-1-1.html

[摘要] 直到2011年,WebRTC技術的出現,并且由谷歌做推廣。WebRTC帶來的體驗是因為免安裝才受到了關注。


[- 16 -] 了不起的WebRTC:生態日趨完善,或將實時音視頻技術白菜化

[鏈接] http://www.52im.net/thread-1631-1-1.html

[摘要] 有人說 2017 年是 WebRTC 的轉折之年,2018 年將是 WebRTC 的爆發之年,這并非沒有根據。就在去年(2017年),WebRTC 1.0 標準草案出爐(實際上WebRTC標準草案的早期版本早在2011年就已經發布,WebRTC并非一夜之間就出現的技術),并將于今年正式發布。與此同時,越來越多的瀏覽器和廠商都開始對它進行廣泛的支持,WebRTC 即將成為互聯網的基礎設施了,或許門檻如此之高的實時音視頻技術終有白菜化的那一天。


[- 17 -] 騰訊技術分享:微信小程序音視頻與WebRTC互通的技術思路和實踐

[鏈接] http://www.52im.net/thread-1988-1-1.html

[摘要] 本文來自騰訊視頻云終端技術總監rexchang(常青)技術分享,內容分別介紹了微信小程序視音視頻和WebRTC的技術特征、差異等,并針對兩者的技術差異分享和總結了微信小程序視音視頻和WebRTC互通的實現思路以及技術方案。希望能帶給你啟發。


[- 18 -] 融云技術分享:基于WebRTC的實時音視頻首幀顯示時間優化實踐

[鏈接] http://www.52im.net/thread-3169-1-1.html

[摘要] 本文主要通過對WebRTC接收端的音視頻處理過程分析,來了解和優化視頻首幀的顯示時間,并進行了總結和分享。


[- 19 -] 零基礎入門:基于開源WebRTC,從0到1實現實時音視頻聊天功能

[鏈接] http://www.52im.net/thread-3680-1-1.html

[摘要] 本文將基于筆者公司開發的在線問診產品中WebRTC技術的實踐經驗,講述的如何基于WebRTC從零開發一個實時音視頻聊天功能。文章會從WebRTC的基本知識、技術原理開始,基于開源技術為你演示如何搭建一個WebRTC實時音視頻聊天功能。


[- 20 -] 實時音視頻入門學習:開源工程WebRTC的技術原理和使用淺析

[鏈接] http://www.52im.net/thread-3804-1-1.html

[摘要] WebRTC(全稱 Web Real-Time Communication),即網頁即時通信。是一個支持網頁瀏覽器進行實時語音對話或視頻對話的技術方案。從前端技術開發的視角來看,是一組可調用的API標準。


??52im社區本周新文:《嗶哩嗶哩從0到1自研智能客服IM系統的技術實踐之路 http://www.52im.net/thread-4517-1-1.html》,歡迎閱讀!??

我是Jack Jiang,我為自已帶鹽!https://github.com/JackJiang2011/MobileIMSDK/

posted @ 2023-11-24 11:39 Jack Jiang 閱讀(42) | 評論 (0)編輯 收藏

2023年11月23日

     摘要: 本文由B端技術中心分享,原題“從0到1:嗶哩嗶哩智能客服系統的設計與實現”,本文有修訂和改動。1、引言本文將要分享的是嗶哩嗶哩從0到1自研智能客服IM系統的技術實踐過程,包括整體架構設計和主要核心功能的技術實現思路等,希望帶給你啟發。* 推薦閱讀:《得物從0到1自研客服IM系統的技術實踐之路》。  技術交流:- 移動端IM開發入門文章:《新手入門一篇就夠...  閱讀全文

posted @ 2023-11-23 11:53 Jack Jiang 閱讀(56) | 評論 (0)編輯 收藏

2023年11月16日

     摘要: 本文由微信客戶端團隊rhythm分享,原題“視頻號直播:如何進一步降低功耗占用?”,本文有修訂和改動。1、引言功耗優化一直是 app 性能優化中讓人頭疼的問題,尤其是在直播這種用戶觀看時長特別久的場景。怎樣能在不影響主體驗的前提下,進一步優化微信iOS端視頻號直播的功耗占用,本文給出了一個不太一樣的答案。  技術交流:- 移動端IM開發入門文章:《新手入...  閱讀全文

posted @ 2023-11-16 11:57 Jack Jiang 閱讀(41) | 評論 (0)編輯 收藏

2023年11月15日

為了更好地分類閱讀 52im.net 總計1000多篇精編文章,我將在每周三推送新的一期技術文集,本次是第23 期。

[- 1 -] 理論聯系實際:一套典型的IM通信協議設計詳解(含安全層設計)

[鏈接] http://www.52im.net/thread-283-1-1.html

[摘要] 本文將以理論聯系實際的方式,詳細講解一套典型IM的通信協議設計的方方面面。


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

[鏈接] http://www.52im.net/thread-310-1-1.html

[摘要] 通信安全是互聯網應用首要考慮的問題,有別于傳統PC應用,隨著移動互聯網時代的到來,移動端的通信安全性要同時權衡:安全、性能、體驗、數據流量等等方面,要實現一個完整而實用的通信安全解決方案并非易事。本文將詳細介紹基于TLS 1.3的微信新一代通信安全協議mmtls。


[- 3 -] 來自阿里OpenIM:打造安全可靠即時通訊服務的技術實踐分享

[鏈接] http://www.52im.net/thread-215-1-1.html

[摘要] OpenIM是阿里巴巴推出的,集成于阿里百川項目中的移動端IM開放服務。阿里百川是阿里巴巴集團無線開放平臺,為移動開發者(涵蓋移動創業者)提供快速搭建APP、加速APP商業化、提升用戶體驗的解決方案。


[- 4 -]簡述實時音視頻聊天中端到端加密

[鏈接] http://www.52im.net/thread-763-1-1.html

[摘要] 本文著重闡述端到端加密(E2EE),端到端加密是確保數據傳輸安全的可行方法之一。讀完這篇文章,你可以了解這種加密方式的基本原理.


[- 5 -] 移動端安全通信的利器——端到端加密(E2EE)技術詳解

[鏈接] http://www.52im.net/thread-764-1-1.html

[摘要] 端到端加密允許數據在從源點到終點的傳輸過程中始終以密文形式存在。采用端到端加密(又稱脫線加密或包加密)時消息在被傳輸時到達終點之前不進行解密,因為消息在整個傳輸過程中均受到保護,所以即使有節點被損壞也不會使消息泄露。


[- 6 -] Web端即時通訊安全:跨站點WebSocket劫持漏洞詳解(含示例代碼)

[鏈接] http://www.52im.net/thread-793-1-1.html

[摘要] 本文將深入淺出為讀者介紹跨站點 WebSocket 漏洞的原理、檢測方法和修復方法,希望能幫助廣大讀者在實際工作中避免這個已知安全漏洞。


[- 7 -] 通俗易懂:一篇掌握即時通訊的消息傳輸安全原理

[鏈接] http://www.52im.net/thread-970-1-1.html

[摘要] 本文將通過通俗易懂的文字,引導你一步步理解為何一個即時通訊應用需要加密技術,以及需要何種方式的加密技術等,希望能為您的IM或消息推送服務的設計提供一些參考。


[- 8 -]  IM開發基礎知識補課(四):正確理解HTTP短連接中的Cookie、Session和Token

[鏈接] http://www.52im.net/thread-1525-1-1.html

[摘要] 本文討論的使用Http短連接的話題可能并不適用于微信這樣的IM,因為微信的短連接并非使用Http標準協議實現,而是基于自研的Mars網絡層框架再造了一套短連接機制,從而更適用于IM這種場景(更低延遲、更省流量、更好的弱網適應算法等)


[- 9 -] 快速讀懂量子通信、量子加密技術

[鏈接] http://www.52im.net/thread-1604-1-1.html

[摘要] 量子通信技術是個很高端的話題,對于搞IM、推送、網絡通信的程序員來說,這到底是個什么鬼?所以我們一起來了解一下!


[- 10 -] 即時通訊安全篇(七):如果這樣來理解HTTPS原理,一篇就夠了

[鏈接] http://www.52im.net/thread-1890-1-1.html

[摘要] 本文將嘗試用通俗易懂的語言,一步步還原HTTPS的設計過程,以便您能輕松理解為什么HTTPS最終會是這副模樣。


[- 11 -] 一分鐘理解 HTTPS 到底解決了什么問題

[鏈接] http://www.52im.net/thread-2027-1-1.html

[摘要] 本文只做簡單的描述,力求簡單明了的闡明主要內容,因為HTTPS 體系非常復雜,這么短的文字是無法做到很詳細和精準的分析。想要詳細了解HTTPS的方方面面,可以閱讀此前即時通訊網整理的《即時通訊安全篇(七):如果這樣來理解HTTPS,一篇就夠了》一文。


[- 12 -] 一篇讀懂HTTPS:加密原理、安全邏輯、數字證書等

[鏈接] http://www.52im.net/thread-2446-1-1.html

[摘要] HTTPS(全稱:Hypertext Transfer Protocol Secure,超文本傳輸安全協議),是以安全為目標的HTTP通道,簡單講是HTTP的安全版。本文,就來深入介紹下其原理。


[- 13 -] 基于Netty的IM聊天加密技術學習:一文理清常見的加密概念、術語等

[鏈接] http://www.52im.net/thread-4104-1-1.html

[摘要] 本文正好借此機會,以Netty編寫的IM聊天加密為例,為入門者理清什么是PKI體系、什么是SSL、什么是OpenSSL、以及各類證書和它們間的關系等,并在文末附上簡短的Netty代碼實示例,希望能助你通俗易懂地快速理解這些知識和概念!


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

[鏈接] http://www.52im.net/thread-4142-1-1.html

[摘要] 本文要分享的是如何使用OpenSSL生成在基于Netty的IM中真正可用的SSL/TLS證書,內容包括:證書的創建、創建過程中的注意點,以及在Server端、Android端、iOS端、Java桌面端、H5端使用證書的代碼范例。


[- 15 -] 微信技術分享:揭秘微信后臺安全特征數據倉庫的架構設計

[鏈接] http://www.52im.net/thread-4374-1-1.html

[摘要] 本文將介紹微信的安全數據特征倉庫的背景起源、技術演進、當前的架構設計和實踐,以及數據質量保證系統的實現。希望給中大型IM系統的安全數據特征倉庫的設計帶來啟發。


??52im社區本周新文:《微信團隊分享:詳解iOS版微信視頻號直播中因幀率異常導致的功耗問題》,歡迎閱讀!??

我是Jack Jiang,我為自已帶鹽!https://github.com/JackJiang2011/MobileIMSDK/

posted @ 2023-11-15 10:51 Jack Jiang 閱讀(41) | 評論 (0)編輯 收藏

2023年11月9日

本文由小紅書基礎架構存儲組空洞和劉備分享,原題“小紅書如何應對萬億級社交網絡關系挑戰?圖存儲系統 REDtao 來了!”,本文有修訂和改動。

1、引言

小紅書是一個社區屬性為主的產品,它涵蓋了各個領域的生活社區,并存儲海量的社交網絡關系。

為了解決社交場景下超大規模數據的更新與關聯讀取問題,并減少數據庫壓力和成本,我們自研了面向超大規模社交網絡的圖存儲系統 REDtao,大大提高了系統穩定性。該系統借鑒了 Facebook 的圖存儲系統設計,將緩存和底層數據庫封裝起來,并對外提供統一的圖查詢 API,實現了訪問收斂,同時在緩存中實現了高效的邊聚合。

本文將為你分享小紅書面向超大規模社交網絡的圖存儲系統REDtao的架構設計與技術實踐過程,希望能帶給你啟發。

 
 
技術交流:

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

2、關于作者

空洞:小紅書基礎架構存儲組,負責圖存儲系統 REDtao 和分布式緩存的研發。

劉備:小紅書基礎架構存儲組負責人,負責REDkv / REDtao / REDtable / REDgraph 的整體架構和技術演進。

基礎架構存儲組是給小紅書的業務部門提供穩定可靠的存儲和數據庫服務,滿足業務對存儲產品的功能、性能、成本和穩定性要求。目前負責自研分布式 KV、分布式緩存、圖存儲系統、圖數據庫和表格存儲。

已上線的存儲產品包括:

  • 1)REDkv : 分布式高性能 KV;
  • 2)REDtao :滿足一跳查詢的高性能圖存儲數據庫;
  • 3) REDtable :提供 Schema 語義和二級索引的表格存儲;
  • 4) REDgraph :提供兩跳及以上的圖語義查詢數據庫。

3、技術背景

小紅書是以年輕人為主的生活記錄、分享平臺,用戶可以通過短視頻、圖文等形式記錄生活點滴,分享生活方式。

在小紅書的社交領域里,我們有用戶、筆記、商品等實體,這些實體之間有各種各樣的關系。

例如:用戶與筆記之間可能存在“擁有”(發布)、“點贊”、“收藏”等三種關系,同時還存在對應的反向關系“被點贊”,“被收藏”等。

小紅書的社交圖譜數據已經達到了萬億條邊的規模,且增長速度非???。當用戶登陸小紅書時,每個用戶都會看到關注的好友、粉絲、點贊、收藏以及其他為其量身定做的內容。

這些信息高度個性化,需要實時從這些海量社交關系數據中讀取用戶相關信息。這是一個讀為主的過程,讀取壓力非常大。

過去,我們將這些社交圖譜數據都存儲在運維成熟的 MySQL 數據庫中。

然而,即使我們只有百萬請求每秒的規模,MySQL 的 CPU 使用率仍然到達了 55% 。隨著用戶和 DAU 爆發式的增長,需要不斷擴容 MySQL 數據庫,這帶來了巨大的成本和穩定性壓力。

為了解決這些問題且考慮到沒有合適的開源方案,2021 年初我們開啟了從 0 到 1 自研 REDtao 的歷程。

4、方案調研和API設計

4.1方案調研

我們充分調研了業內其他廠商的實現,發現有著強社交屬性的公司基本上都有一個自研的圖存儲系統(如下圖所示)。

比如:

  • 1)Facebook 實現了一個叫做 “TAO” 專門的分布式社交圖譜數據庫,并將其作為最核心的存儲系統;
  • 2)Pinterest 和 Facebook 類似,也實現了類似的圖存儲系統;
  • 3)字節跳動自研了 ByteGraph 并將其用于存儲核心的社交圖譜數據;
  • 4)Linkedln 在 KV 之上構建了社交圖譜服務。

考慮到當時我們的社交圖譜數據已經存放在 MySQL 數據庫上且規模巨大,而社交圖譜數據服務是非常重要的服務,對穩定性的要求非常高?;厮?Facebook 當年遇到的問題和我們類似,數據存儲在 Memcache 和 MySQL 中。因此,參考 Facebook 的 Tao 圖存儲系統更貼合我們的實際情況和已有的技術架構,風險更小。

4.2API設計

社交圖譜的訪問主要是邊的關系查詢。

我們的圖模型將關系表示為一個 <key, value> 對,其中 key 是 ( FromId,  AssocType,  ToId ) 的三元組,value 是屬性的  JSON 格式。

比如“用戶 A ”關注“用戶 B ”,映射到 REDtao 的數據存儲結構為:

1<FromId:用戶A的ID, AssocType:關注, ToId:用戶B的ID>  ->  Value (屬性的json字段)

我們對業務方的需求進行分析,封裝了 25 個圖語義的 API 給業務方使用,滿足了其增刪改查的需求,并收斂業務方的使用方式。

相比于 Facebook 的 Tao,我們還補充了社交圖譜所需要的圖語義,為反作弊場景提供了額外的過濾參數。

同時,在緩存層面,我們支持對不同的字段在緩存中配置局部二級索引。

下面給一些典型的使用場景。

1)場景一:獲取關注了 A 的所有正常用戶(并且剔除作弊用戶):

1getAssocs(“被關注類型”, 用戶A的ID, 分頁偏移量, 最大返回值, 只返回正常用戶,是否按照時間從新到舊)

2)場景二:獲取 A 的粉絲個數(并且剔除作弊用戶):

1getAssocCount(“被關注類型”, 用戶A的ID, 只返回正常用戶)

5、整體架構設計

REDtao 的架構設計考慮了下面這幾個關鍵的要素:

整體架構分為三層:

  • 1)接入層;
  • 2)緩存層;
  • 3)持久層。

業務方通過 REDtao SDK 接入服務。

如下圖:

在這個架構中:和 Facebook Tao 不一樣的是,我們的緩存層是一個獨立的分布式集群,和下面的持久層是解耦的。緩存層和下面的持久層可以獨立的擴容縮容,緩存分片和 MySQL 分片不需要一一對應,這樣帶來了更好的靈活性,MySQL 集群也變成了一個可以插拔替換的持久存儲。

1)讀流程:客戶端將讀請求發送給 router,router 接收到 RPC 請求后,根據邊類型選擇對應的 REDtao 集群,根據三元組 ( FromId,  AssocType,  ToId ) 通過一致性 Hash 計算出分片所在的 Follower 節點,將請求轉發到該節點上。Follower 節點接收到該請求,首先查詢本地的圖緩存,如果命中則直接返回結果。如果沒有命中,則將請求轉發給 Leader 節點。同樣的,Leader 節點如果命中則返回,如果不命中則查詢底層 MySQL 數據庫。

2)寫流程:客戶端將寫請求發送給 router,和讀流程一樣,會轉發到對應的 Follower 節點上。Follower 節點會轉發寫請求給 Leader 節點,Leader 節點轉發給 MySQL,當 MySQL 返回寫入成功后,Leader 會清除本地圖緩存對應的 Key,并同步給其他所有 Follower 清除掉該 Key,保證數據的最終一致性。

6、高可用設計

REDtao 分為獨立的兩層:緩存層和持久層。每一層都保證高可用性。

1)自研的分布式緩存:

我們自研了實現圖語義的分布式 cache 集群,支持故障自動檢測和恢復、水平擴縮容。

它是一個雙層 cache,每個分片都有一個 Leader 和若干個 Follower。所有的請求都先發給外層的 Follower,再由 Follower 轉發給 Leader。這樣的好處是讀壓力大的時候只需要水平擴展 Follower,單點 Leader 寫入的方式也降低了復雜度,更容易實現數據的一致性。

如果一個副本故障,系統會在秒級別內進行切換。當持久層發生故障時,分布式緩存層仍然可以對外提供讀取服務。

2)高可用的MySQL集群:

MySQL 集群通過自研的中間件實現了分庫分表方案,并支持 MySQL 的水平擴容。每個 MySQL 數據庫有若干從庫,并且與公司內部其他的 MySQL 運維方案一致,保證高可用性。

3)限流保護功能:

為防止緩存擊穿導致 MySQL 突發大量請求,從而導致 MySQL 宕機,我們通過限制每個主節點最大 MySQL 并發請求數來實現限流保護 MySQL。達到最大并發請求限制之后的請求會被掛起等待,直到已有請求被處理返回,或者達到等待超時請求被拒絕不會被繼續請求到 MySQL 。限流閾值在線可調,根據 MySQL 集群規模調整對應限制。

為防止爬蟲或者作弊用戶頻繁刷同一條數據,我們利用 REDtaoQueue 順序執行對寫入或者點查同一條邊的請求,隊列長度會被限制,控制同一時間大量相同的請求執行。相比于單個全局的隊列控制所有請求的方式,基于每個請求的隊列可以很好地限制單個同一請求,而不影響其他正常請求。

7、高性能設計

數據結構的設計是 REDtao 高性能的重要保證。

我們采用了三層嵌套 HashTable 的設計, 通過根據某個起點 from_id 從第一級 HashTable 中查找到 REDtaoGraph,記錄了所有 type 下對應的所有的出邊信息。

接著,在第二級 HashTable 中,根據某個 type_id 查找到 AssocType 對應某個 type 下邊所有出邊的計數、索引以及其他元數據。

最終在最后一級 HashTable ,通過 AssocType 的某個 to_id 查找到最終邊信息。

我們記錄了創建時間、更新時間、版本、數據以及 REDtaoQueue,time_index 則對應根據創建時間排序列表。

最后一級 HashTable 以及索引限制存儲最新的 1000 個邊信息,以限制超級點占據過多內存,同時集中提高最新熱數據的查詢命中率以及效率。REDtaoQueue 用于排隊當前某個關系的讀寫,只記錄了當前最后一個請求的元數據。

每次查詢或寫入時,首先查詢 REDtaoAssoc:

  • 1)若緩存不存在,則會首先創建只包含 REDtaoQueue 的對象;
  • 2)若緩存已存在,則會更新隊列元數據,將自己設置為隊列的最后一個請求,并掛起等待被執行。

通過這種多層 hash+ 跳表的設計,我們能高效地組織點、邊、索引、時間序鏈表之間的關系。內存的申請、釋放在同一個線程上完成。

在線上環境中,我們的系統可以在一臺 16 核的云廠商虛擬機上跑到 150w 查詢請求/s,同時 CPU 利用率僅有 22.5% 。下方是線上集群的一個監控圖,單機的 QPS 到達 3w ,每個 RPC 請求聚合了 50 個查詢。

 

8、易用性設計

1)豐富的圖語義 API :

我們在 REDtao 中封裝了 25 個圖語義的 API 給業務方使用,滿足了業務方的增刪改查的需求。業務方無需自行編寫 SQL 語句即可實現相應操作,使用方式更加簡單和收斂。

2)統一的訪問 URL :

由于社區后端數據太大,我們按照不同的服務和優先級拆分成了幾個 REDtao 集群。

為了讓業務方不感知后端的集群拆分邏輯,我們實現了統一的接入層。

不同的業務方只需使用同一個服務 URL ,通過 SDK 將請求發送到接入層。接入層會接收到不同業務方的圖語義的請求,并根據邊的類型路由到不同的 REDtao 集群。它通過訂閱配置中心,能夠實時感知到邊的路由關系,從而實現統一的訪問 URL,方便業務方使用。

9、數據一致性設計

作為社交圖譜數據,數據的一致性至關重要。我們需要嚴格保證數據的最終一致性以及一定場景下的強一致性。為此,我們采取了以下措施:

1)緩存更新沖突的解決:

REDtao 為每個寫入請求生成一個全局遞增的唯一版本號。在使用 MySQL 數據更新本地緩存時,需要比較版本號,如果版本號比緩存的數據版本低,則會拒絕此更新請求,以避免沖突。

2)寫后讀的一致性:

Proxy 會將同一個 fromId 的點或邊請求路由到同一個讀 cache 節點上,以保證讀取數據一致性。

3)主節點異常場景:

Leader 節點收到更新請求后,會將更新請求變為 invalidate cache 請求異步的發送給其他 follower,以保證 follower 上的數據最終一致。在異常情況下,如果 Leader 發送的隊列已滿導致 invalidate cache 請求丟失,那么會將其他的 follower cache 全部清除掉。

如果 Leader 故障,新選舉的 Leader 也會通知其他 follower 將 cache 清除。

此外,Leader 會對訪問 MySQL 的請求進行限流,從而保證即使個別分片的cache被清除掉也不會將 MySQL 打崩。

4)少量強一致的請求:

由于 MySQL 的從庫也提供讀服務,對于少量要求強一致的讀請求,客戶端可以將請求染上特殊標志,REDtao 會透傳該標志,數據庫 Proxy 層會根據該標志將讀請求轉發到 MySQL 主庫上,從而保證數據的強一致。

10、 跨云多活設計

跨云多活是公司的重要戰略,也是 REDtao 支持的一個重要特性。

REDtao 的跨云多活架構整體如下:

這里不同于 Facebook Tao 的跨云多活實現,Facebook Tao 的跨云多活實現如下圖所示。

Facebook 的方案依賴于底層的 MySQL 的主從復制都通過 DTS Replication 來做。而 MySQL 原生的主從復制是自身功能,DTS 服務并不包含 MySQL 的主從復制。該方案需要對 MySQL 和 DTS 做一定的改造。前面說到,我們的緩存和持久層是解藕的,在架構上不一樣。

因此,REDtao 的跨云多活架構是我們結合自身場景下的設計,它在不改動現有 MySQL 功能的前提下實現了跨云多活功能。

1)持久層我們通過 MySQL 原生的主從 binlog 同步將數據復制到其他云的從庫上。其他云上的寫請求和少量要求強一致讀將被轉發到主庫上。正常的讀請求將讀取本區的 MySQL 數據庫,滿足讀請求對時延的要求。

2)緩存層的數據一致性是通過 MySQL DTS 訂閱服務實現的,將 binlog 轉換為 invalidate cache 請求,以清理掉本區 REDtao cache 層的 stale 數據。由于讀請求會隨機讀取本區的任何一個 MySQL 數據庫,因此 DTS 訂閱使用了一個延遲訂閱的功能,保證從 binlog 同步最慢的節點中讀取日志,避免 DTS 的 invalidate cache 請求和本區 read cache miss 的請求發生沖突從而導致數據不一致。

11、云原生實現

REDtao 的云原生特性重點體現在彈性伸縮、支持多 AZ 和 Region 數據分布、產品可以實現在不同的云廠商間遷移等幾個方面。REDtao 在設計之初就考慮到支持彈性擴縮容、故障自動檢測及恢復。

隨著 Kubernetes 云原生技術越來越成熟,我們也在思考如何利用 k8s 的能力將部署和虛擬機解綁,進一步云原生化,方便在不同的云廠商之間部署和遷移。

REDtao 實現了一個運行在 Kubernetes 集群上的 Operator,以實現更快的部署、擴容和壞機替換。

為了讓 k8s 能感知集群分片的分配并且控制同一分片下的 Pods 調度在不同宿主機上,集群分組分片分配由 k8s Operator 渲染并控制創建 DuplicateSet (小紅書自研 k8s 資源對象)。

REDtao 則會創建主從并根據 Operator 渲染出來的分片信息創建集群,單個 Pod 故障重啟會重新加入集群,無需重新創建整個集群。集群升級時,Operator 通過感知主從分配控制先從后主的順序,按照分片分配的順序滾動升級以減少升級期間線上影響。

12、老服務的平滑升級實踐

但凡變革,皆屬不易。實現全新的 REDtao 只是完成了相對容易的那部分工作。

小紅書的社交圖譜數據服務已經在 MySQL 上運行多年,有很多不同的業務跑在上面,任何小的問題都會影響到小紅書的在線用戶。因此,如何保證不停服的情況下讓現有業務無感知地遷移到 REDtao 上成為一個非常大的挑戰。

我們的遷移工作關鍵有兩點:

1)將老的大 MySQL 集群按優先級拆分成了四個 REDtao 集群。這樣,我們可以先將優先級最低的服務遷移到一個 REDtao 集群,充分灰度后再遷移高優先級的集群;

2)專門開發了一個 Tao Proxy SDK,支持對原來的 MySQL 集群和 REDtao 集群進行雙寫雙讀,數據校驗比對。

遷移時:我們首先將低優先級的數據從 MySQL 通過 DTS 服務遷移到了一個 REDtao 集群,并升級好業務方的 SDK 。DTS 服務一直對增量數據進行同步。業務方 SDK 會訂閱配置中心的配置變更,我們修改配置讓 Tao Proxy SDK 同時讀寫 MySQL 集群和 REDtao 集群,并關閉 DTS 服務。此時會使用 MySQL 集群的結果返回給用戶。

在停止 DTS 服務時:有可能會有新的 MySQL 數據通過 DTS 同步過來,造成了 REDtao 集群新寫的數據被同步過來的老數據覆蓋。因此,在關閉 DTS 服務后,我們會通過工具讀取開雙寫之后到關閉 DTS 服務這個時間段的 binlog 對數據進行校驗和修復。

修復完成之后:Tao Proxy SDK 的雙讀會展示兩邊不一致的數據量,并過濾掉因為雙寫時延不一致導致數據不一致的請求?;叶纫欢螘r間后觀察到 diff 的數目基本為 0,將 Tao Proxy SDK 的配置改為只讀寫新的 REDtao 集群。

最終:我們在 22 年初完成小紅書所有核心社交圖譜萬億邊級別數據的遷移和正確性校驗,并做到了整個遷移服務無感知,遷移過程沒有發生一起故障。

13、新圖存儲系統帶來的結果和收益

我們的社交圖譜數據訪問中,90% 以上的請求都是讀請求,并且社交圖譜的數據有非常強的時間局部性(即最近更新的數據最容易被訪問)。REDtao 上線后,獲得 90% 以上的 cache 命中率, 對MySQL 的 QPS 降低了 70%+ ,大大降低了 MySQL 的 CPU 使用率。在縮容 MySQL 的副本數目后,整體成本降低了21.3%。‍

業務的訪問方式都全部收斂到 REDtao 提供的 API 接口上,在遷移過程中,我們還治理了一些老的不合理訪問 MySQL 數據庫的方式,以及自定義某些字段賦予特殊含義的不合理做法,通過 REDtao 規范了數據訪問。

對比 2022 年初和 2023 年初,隨著 DAU 的增長,社交圖譜的請求增長了 250% 以上,如果是之前 MySQL 的老架構,擴容資源基本上和請求增長速度成正比,至少需要擴容 1 倍的資源成本(數萬核)。

而得益于 REDtao 系統的存在,因其 90% 的緩存命中率,實際上整體成本只增加了 14.7%(數千核)就能扛下 2.5 倍的請求增長。在成本和穩定性上有了較大的提升。

14、未來展望

在較短的時間,我們自研了圖存儲系統 REDtao ,解決了社交圖譜關系數據快速增長的問題。

REDtao 借鑒了 FaceBook Tao 的論文,并對整體架構、跨云多活做了較多的改進,全新實現了一個高性能的分布式圖緩存,更加貼合我們自身的業務特點和提供了更好的彈性。同時,利用 k8s 能力進一步實現了云原生化。

隨著 DAU 的持續增長,萬億的數據規模也在繼續增長,我們也面臨著更多的技術挑戰。

目前公司內部的 OLTP 圖場景主要分為三塊:

1)社交圖譜數據服務:通過自研圖存儲系統 REDtao 滿足了社交場景超大規模數據的更新與關聯讀取問題。目前已經存儲了萬億規模的關系;

2)風控場景:通過自研圖數據庫 REDgraph,滿足多跳的實時在線查詢。目前存儲了千億點和邊的關系,滿足 2 跳以及 2 跳以上的查詢;

3)社交推薦:這塊主要是兩跳的查詢。每天通過 Hive 批量地導入全量的數據,通過 DTS 服務近實時的寫入更新數據。因為是在線場景,對時延的要求非常高,當前的 REDgraph 還無法滿足這么高的要求,因此業務方主要是用 REDkv 來存儲。

針對以上場景:為了快速滿足業務需求,我們使用了三套不同的自研存儲系統:REDtao 、REDgraph 和 REDkv 。

顯然相對于 3 套存儲系統,用一個統一的架構和系統去解決這幾個圖相關的場景是更加合適的。

未來:我們會將 REDgraph 和 REDtao 融合成一個統一的數據庫產品,打造業內頂尖的圖技術,對公司內部更多的場景進行賦能。

15、相關資料

[1] 以微博類應用場景為例,總結海量社交系統的架構設計步驟

[2] 騰訊技術分享:社交網絡圖片的帶寬壓縮技術演進之路

[3] 基于社交網絡的Yelp是如何實現海量用戶圖片的無損壓縮的?

[4] 社交軟件紅包技術解密(一):全面解密QQ紅包技術方案——架構、技術實現等

[5] 社交軟件紅包技術解密(六):微信紅包系統的存儲層架構演進實踐

[6] 社交軟件紅包技術解密(九):談談手Q紅包的功能邏輯、容災、運維、架構等

[7] 漸行漸遠的人人網:十年親歷者的互聯網社交產品復盤和反思

[8] 中國互聯網社交二十年:全民見證的互聯網創業演義

[9] 盤點移動互聯網時代的社交產品進化史(上篇):誰主沉浮

[10] 盤點移動互聯網時代的社交產品進化史(下篇):大浪淘沙


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

posted @ 2023-11-09 11:21 Jack Jiang 閱讀(63) | 評論 (0)編輯 收藏

2023年11月6日

​為了更好地分類閱讀 52im.net 總計1000多篇精編文章,我將在每周三推送新的一期技術文集,本次是第22 期。

[- 1 -] 即時通訊安全篇(一):正確地理解和使用Android端加密算法

[鏈接] http://www.52im.net/thread-216-1-1.html

[摘要] 本文主要討論針對Android這樣的移動端應用開發時,如何正確的理解目前常用的加密算法,為諸如即時通訊應用的實戰開發,如何在合適的場景下選擇適合的算法,提供一些參考。


[- 2 -] 即時通訊安全篇(二):探討組合加密算法在IM中的應用

[鏈接] http://www.52im.net/thread-217-1-1.html

[摘要] 本文深入分析了即時通信(IM)系統中所面臨的各種安全問題,綜合利用對稱加密算法(DES算法)、公開密鑰算法(RSA算法)和Hash算法(MD5)的優點,探討組合加密算法在即時通信中的應用。


[- 3 -] 即時通訊安全篇(三):常用加解密算法與通訊安全講解

[鏈接] http://www.52im.net/thread-219-1-1.html

[摘要] 本次著重整理了常見的通訊安全問題和加解密算法知識與即時通訊(IM)開發同行們一起分享和學習。


[- 4 -] 即時通訊安全篇(四):實例分析Android中密鑰硬編碼的風險

[鏈接] http://www.52im.net/thread-312-1-1.html

[摘要] 本文主要借用烏云上已公布的幾個APP漏洞來講講這其中的潛在風險和危害。


[- 5 -] 即時通訊安全篇(五):對稱加密技術在Android平臺上的應用實踐

[鏈接] http://www.52im.net/thread-642-1-1.html

[摘要] 本文將重點分享對稱加解密技術在Android平臺上的實踐應用。對于即時通訊社區里的IM、推送技術的開發者同行而言,是不可多得的第一手實踐資料,希望對你有用。


[- 6 -] 即時通訊安全篇(六):非對稱加密技術的原理與應用實踐

[鏈接] http://www.52im.net/thread-653-1-1.html

[摘要] 本文將要分享的是非對稱加密技術在當前互聯網場景下的應用情況。


[- 7 -] 即時通訊安全篇(七):用JWT技術解決IM系統Socket長連接的身份認證痛點

[鏈接] http://www.52im.net/thread-2106-1-1.html

[摘要] 本次分享正是基于此次解決Socket長連接身份安全認證的實踐總結而來,方案可能并不完美,但愿能起到拋磚引玉的作用,希望能給您的IM系統開發帶來啟發。


[- 8 -]  即時通訊安全篇(八):你知道,HTTPS用的是對稱加密還是非對稱加密?

[鏈接] http://www.52im.net/thread-2866-1-1.html

[摘要] 本文將帶你了解HTTPS到底用的是對稱加密還是非對稱加密,以及具體又是怎么使用的。


[- 9 -] 即時通訊安全篇(九):為什么要用HTTPS?深入淺出,探密短連接的安全性

[鏈接] http://www.52im.net/thread-3897-1-1.html

[摘要] 今天就借此機會,跟大家一起深入學習一下HTTPS的相關知識,包括HTTP的發展歷程、HTTP遇到的問題、對稱與非對稱加密算法、數字簽名、第三方證書頒發機構等概念。


[- 10 -] 即時通訊安全篇(十):IM聊天系統安全手段之通信連接層加密技術

[鏈接] http://www.52im.net/thread-4015-1-1.html

[摘要] 本篇文章將圍繞IM通信連接層的安全問題及實現方案,聚焦IM網絡“鏈路安全”,希望能帶給你啟發 。


[- 11 -] 即時通訊安全篇(十一):IM聊天系統安全手段之傳輸內容端到端加密技術

[鏈接] http://www.52im.net/thread-4026-1-1.html

[摘要] 本篇將圍繞IM傳輸內容的安全問題,以實踐為基礎,為你分享即時通訊應用中的“端到端”加密技術。


[- 12 -] 傳輸層安全協議SSL/TLS的Java平臺實現簡介和Demo演示

[鏈接] http://www.52im.net/thread-327-1-1.html

[摘要] 本文將簡要介紹Java平臺的SSL/TLS實現并以Demo示例的方式予以講解。


[- 13 -] 理論聯系實際:一套典型的IM通信協議設計詳解(含安全層設計)

[鏈接] http://www.52im.net/thread-283-1-1.html

[摘要] 本文將以理論聯系實際的方式,詳細講解一套典型IM的通信協議設計的方方面面。


??52im社區本周新文:《小紅書萬億級社交網絡關系下的圖存儲系統的架構設計與實踐http://www.52im.net/thread-4495-1-1.html》,歡迎閱讀!??

我是Jack Jiang,我為自已帶鹽!https://github.com/JackJiang2011/MobileIMSDK/

posted @ 2023-11-06 13:45 Jack Jiang 閱讀(33) | 評論 (0)編輯 收藏

Jack Jiang的 Mail: jb2011@163.com, 聯系QQ: 413980957, 微信: hellojackjiang
久久一级片
<noframes id="395jp"><noframes id="395jp"><video id="395jp"><video id="395jp"></video></video>
<i id="395jp"><font id="395jp"><delect id="395jp"></delect></font></i>
<nobr id="395jp"></nobr><noframes id="395jp"><noframes id="395jp"><dl id="395jp"></dl><video id="395jp"></video><noframes id="395jp"><dl id="395jp"></dl>
<video id="395jp"><video id="395jp"><dl id="395jp"></dl></video></video> <nobr id="395jp"><nobr id="395jp"><meter id="395jp"></meter></nobr></nobr>
<video id="395jp"></video><nobr id="395jp"></nobr>
<video id="395jp"></video>