架構師之路--視頻業務介紹,離線服務架構和各種集群原理

来源:http://www.cnblogs.com/xiexj/archive/2017/06/20/7041265.html
-Advertisement-
Play Games

先聊聊業務。我們媒資這邊目前的核心數據是樂視視頻的樂視meta和專門存儲電視劇,綜藝節目,體育賽事這種長視頻的作品庫。樂視視頻的數據都是多方審核的,需要很多運營。但是作品庫部分卻是弱運營的,運營都不超過10個人。結果做了兩個app,日活都有四五百萬的樣子。我們其實都有各樣的技術儲備,很容易可以抓取人 ...


  先聊聊業務。我們媒資這邊目前的核心數據是樂視視頻的樂視meta和專門存儲電視劇,綜藝節目,體育賽事這種長視頻的作品庫。樂視視頻的數據都是多方審核的,需要很多運營。但是作品庫部分卻是弱運營的,運營都不超過10個人。結果做了兩個app,日活都有四五百萬的樣子。我們其實都有各樣的技術儲備,很容易可以抓取人家數據,自己套上一個殼子線上解碼。但是我們逼格很高,都不這麼做的。樂視是個非常註重版權的公司。我名下都有近百個專利了。

  撇開這個項目,先看這邊一般web項目的常用JVM配置。

                    <jvm-arg>-Xms4g</jvm-arg>
                    <jvm-arg>-Xmx4g</jvm-arg>
                    <jvm-arg>-Xss1m</jvm-arg>
                    <jvm-arg>-Xmn1g</jvm-arg> 
                    <jvm-arg>-XX:MaxPermSize=128M</jvm-arg>
                    <jvm-arg>-XX:MaxTenuringThreshold=3</jvm-arg>

  這個配置resin的伺服器業務不是特別複雜的情況下,承載單台QPS4k的併發是不成問題的。下麵的圖拿來只是覺得我們鄒老師畫的好看,裡面涵蓋了很多系統,只要是web server這個配置都是夠用的。我們線上機器都是32G24核高配物理機。其實負載都在2點多。就是說用8G4核虛擬機完全夠用。但是我們的服務相當重要,運維哥哥那邊虛擬化做的不太好,不是很穩定的,線上我們都不這麼用。所以,JVM配置基本上多一點少一點點線上效果不是很明顯。

  離線數據是推送給樂視視頻的搜索部門,樂視視頻的日活是千萬級。當然搜索哥哥那邊也在搞全網搜索,覆蓋廣,再加上快和準是他們的目標。但是最最基本的視頻內容來源是我這邊出的。下麵圖是整體業務架構,下麵標的技術是主要的性能消耗點。有些紅色的線是我兒子畫的,不想這麼浪費一張A4紙就當手稿用了。提倡環保,人人有責。

  調優之前先說說這個mysql從庫。因為這個項目是好多年前就開始做了,依然用的是一主多從的拓撲,binlog複製的集群模式。從庫用的是通知模式,時延也就是ms級都還好。寫數據QPS也就幾十,多加幾個從庫IO也不會瓶頸。主要問題是主庫單點,從庫的複製根據分散式系統的CAP理論,保證的是可用性和分區容忍性。一致性級別也就是個最終一致性。上學的時候都學過,單個資料庫事務用的是ACID模型,記得當年考試的必考點就是事務的原子性,一致性,隔離性,持久性。我竟然還記得。但是一說集群,特別是如今nosql時代,說的也就只能是BASE理論了。binlog採用的是DML語句複製和一旦發現DML語句無法精確複製時就會採用基於行的複製。記得出現過一次事故,資料庫表結構有更新,導致執行語句錯誤,數據同步停止。

  我來公司後新開發的項目都是用的公司的雲資料庫。這個稍微高級一點,用的是Percona XtraDB Cluster做的集群。它是一個mysql高可用和可擴展的解決方案。可以同步複製,事務要麼在所有節點提交或不提交。多主複製,任意節點都可以寫操作。缺點,我沒測試過,從原理來說,寫肯定比傳統一主多從慢。因為從弱一致的非同步冗餘變成了強一致的同步冗餘了嘛。而且必須是innodb引擎。我們的所謂雲,也就是做了一個去中心化。

  離線服務是用了兩台機器,用memcached緩存一個更新時間點的時間戳做增量實時的通訊,定時全量和手動補發是一個簡單兩台伺服器熱備。

  說說緩存集群。memcached集群既然使用的moxi代理,那麼它的集群對客戶端來說就是透明的,客戶端沒有辦法自己修改其輪詢和容災策略。但是這種代理的有一個好處就是可以管道處理,合併重覆的key,一定程度上提高了效率。關於memcached集群,昨天我們大領導找來雲存儲的大神給我們講講視頻存儲是怎麼做的。其中提到了他們那邊用的SSDB的集群。和memcached集群是一樣的。先說說存儲那邊的大體邏輯,重新在大腦里膜拜一下大神。發現我兒子有當偵探的潛質,他的塗鴉讓我想起福爾摩斯<血字的研究>。

  

  我們部門那邊上傳視頻到雲存儲,先要進行一個初始化。這個初始化會採用摘要演算法計算一下文件的sha1,如果視頻已經存在,直接返回狀態,這樣對於一些用戶就可以實現秒傳了。但是對於flash因為這個語言要計算其摘要必須將整個文件全都載入到記憶體,我們是用其他方法來生成sha1的。這個shal傳到雲存儲那邊通過SSDB經過二次開發自己實現的一個nosql資料庫,這些鍵值對的nosql資料庫查找,如果沒初始化過,返回初始化token。這個token里包含了上傳到哪個節點等信息。用戶上傳的介質就可以直接通過網關與存儲通信了。存儲那邊對於每個上產的視頻都有主備。一個主備作為一個組。組內自己有個程式做磁碟同步。會有磁碟檢查剩餘空間。新傳視頻會在未滿的集群中均勻分佈。上傳完成後一些熱點視頻會以推送的方法分發到CDN節點上,供CDN加速用。其他視頻需要CND自己來拉取。當然CDN那邊也有自己的策略。先在邊緣節點查找,找不到再來中心節點找,最後沒有在來存儲這邊。

  大體流程就是這樣。問了下大神哥哥SSDB的集群是怎麼做的。他們也是通過代理的。代理上存有映射表。集群各個節點間本身不通信。需要進行一些哈希計算來找節點的bucket。如果需要添加節點,遷移過程中還是先打到原節點。等遷移完成,映射表更新再往新節點上分發。這樣做的好處是避免了rebalance的巨大開銷。在人人網的時候,7年前我們的memcached集群出過一次事故。當時我們leader升級了客戶端,演算法變了,導致全部緩存都不命中。所以這種基於演算法不實質上相互關聯的集群和gossip的集群不同,對客戶端有依賴。

  qpidd的MQ集群。問過管理MQ的運維童鞋,為啥選這個。他說activeMq和rabbitMq太輕量,性能不行。Kafka又丟消息,所以才選的這個。不過去公司外面問問,貌似知道的人不多。我們部門要把支付的業務接過來,他們那邊是自己搭建了一個kafka的Mq用來集中處理日誌的。

  netty部分我在前面的文章中很詳細的介紹了實戰經驗,有感興趣的可以自己找一下。

  gz壓縮主要是遞歸操作,如果線程站開的特別大,壓縮過程中CPU上升會特別快,需要註意。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Given a collection of integers that might contain duplicates, nums, return all possible subsets. ...
  • String s = null; s += "hello"; System.out.println(s); 結果為:nullhello 原因: 先應用String.valueOf 得出s的value值,再通過StringBuilder拼接hello,因此將value與hello進行了拼接; Stri ...
  • 1、簡單解釋就是:反轉一個序列對象 例子1: def fun3(): x = [3,6,9] for i in reversed(x): print(i,end=',')fun3() 輸出: 》》》9,6,3, 例子2: >>> a = range(5)>>> arange(0, 5)>>> lis ...
  • /* 標識映射在數據映射器的基礎上增加了標識映射類,主要功能是保存已經創建好的對象,在需要的時候可以直接獲取而不是重覆創建造成系統性能的下降。 在數據映射器基礎上還增加了部分調用標識映射類的方法,示例代碼如下: */ namespace woo\domain; //標識映射類 class Objec... ...
  • 梳排序的知名度遠沒有其他排序演算法那麼高,它是在冒泡排序的基礎上做的改進,引入類似“步長”以及“子序列”概念,這兩個概念在後面的排序演算法中會經常提及。 待排序列:{10, 2, 11, 8, 7} groupNums = length = 5 步長繫數(分組繫數)coefficient = 1.3 排 ...
  • 下載sbt: http://www.scala-sbt.org/download.html 解壓zip文件F:\sbt-0.13.15 配置環境變數 如果需要可以修改F:\sbt-0.13.15\sbt\conf\sbtconfig.txt #ivy的cache等,保存到指定的文件夾;不配置的話sb ...
  • 題目背景 [Usaco2008 Jan] 題目描述 N (1 ≤ N ≤ 100) cows, conveniently numbered 1..N, are participating in a programming contest. As we all know, some cows code ...
  • 設計模式(0)簡單工廠模式 設計模式(1)單例模式(Singleton) 源碼地址 0 工廠方法模式簡介 0.0 工廠方法模式定義 工廠方法模式是在簡單工廠模式基礎上,為解決更複雜的對象創建問題而衍生進化出來的一種創建型模式。 工廠方法模式的核心思想是定義一個用於創建對象的介面,讓其子類去決定去實例 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...