斗魚已公開的運維技術和架構分析
引言
最新一個比較全面的斗魚運維架構分享是在 GITC 2016 北京站的運維專場,以下架構分享文檔。 用戶在斗魚看直播時,斗魚在看什么
從用戶電腦瀏覽器訪問一個網站的過程(還有結合一些公開資料)分析斗魚網站使用的相關運維技術信息和架構方案。
客戶端層
1. 瀏覽器
包含 Cookie、瀏覽器緩存協商(Last-Modified、Expires、Etag)、組件分離、前端優化、運維檢測工具等內容。
上述可以通過瀏覽器開發者工具進行具體查看。
2. DNS 域名
包含瀏覽器 DNS 緩存、DNS 緩存、自建 DNS 服務器、商業 DNS 產品、智能 DNS 等內容
用戶使用瀏覽器訪問一個網站,是輸入網站域名進行訪問的。
下面我們來看看斗魚網站的相關域名信息,它的主域名是 douyu.com。
我們使用阿里的 whois 查詢服務來查下, 具體信息去以下鏈接查看 https://whois.aliyun.com/whois/domain/douyu.com
從上面查詢到的信息我們可以看到 douyu.com 域名注冊商是 GoDaddy。 然后還有一個重要的信息,配置的權威 DNS 服務器為:
- DNS1:NS3.DNSV4.COM
- DNS2:NS4.DNSV4.COM
配置的權威 DNS 服務器是自建還是使用的第三方 DNS 服務?
我們同樣可以使用 whois 查詢服務查詢一下 dnsv4.com 域名的相關信息,如下: https://whois.aliyun.com/whois/domain/dnsv4.com
從里面的信息,我們可以看到,dnsv4.com 的域名是屬於中國最大的第三方域名服務商 DNSPod。
擴展:如果作為第三方並不有域名的管理權限,我想知道斗魚網站的子域名有哪些?如何獲取? 之前我寫過一篇文章子域名查找,使用 wydomain 可以查找到。
3. App 客戶端
包含 HTTP-DNS、打點日志、加密傳輸、移動推送、各類 SDK(監控 SDK、推流 SDK)等內容
擴展:網站排名
參考 Alexa douyu.com 排名信息,國內排名前 50(寫此篇文章時)。
外部層
1. 第三方 CDN
包含 GSLB、反向代理緩存、分布式存儲、流量調度、配置管理、用戶端(各類 API 如:帶寬監控、預緩存、緩存刷新)等內容。
斗魚使用 CDN 提供商有哪些?這個在之前,我有寫一篇文章分析了。斗魚使用的 CDN 服務商分析
- “主線路”, cdn: “ws” 網宿
- “備用線路2”, cdn: “ws2” 網宿線路 2
- “備用線路3”, cdn: “dl” 帝聯?
- “備用線路5”, cdn: “tct” 騰訊雲
2. 雲計算
包含公有雲服務、混合雲、運維外包服務、APM(應用性能管理)、第三方安全解決方案(防 DDOS、WAF) 等相關內容。
斗魚在雲計算方面暫未查到相關公開資料。
網絡層
1. 互聯層
包含多機房互聯(VPN、專線)、異地災備–>異地多活–>按 SET 部署等內容。
2. 核心層
包含防火牆、路由器、IPSec VPN、鏈路負載均衡和高可用 (CCNP 級別)等內容。
3. 匯聚層
包含三層交換、動態路由(OSPF)、靜態路由、EC(端口匯聚)、MSTP+VRRP (CCNP級別)等內容。
4. 接入層
包含二層交換 (VTP、SPF、Trunk、端口安全)(CCNA 級別)等內容。
網絡層這塊一般有專門的網絡工程師負責,Linux 運維工程師一般不太涉及深入這方面。
斗魚在網絡層方面暫未查到相關公開資料。
接入層
1. 負載均衡高可用
四層負載均衡
包含開源:LVS(IP 負載均衡)+ Keepalived、HAProxy 商業:F5、Netscaler 等內容。
七層負載均衡
包含反向代理:HAProxy、Nginx、Apache(根據 HTTP 協議支持的屬性進行 L7 分發)、A/B Test Gateway、WAF 等內容。
2. 反向代理緩存
包含 ATS、Squid、Varnish、Nginx(緩存分級、預緩存、緩存刷新)等內容。
斗魚在接入層方面使用了 CDN、LVS、Nginx、Tomcat、PHP-FPM。
應用服務層
1. Web 服務層
包含 HTTP 協議、Web服務器(Apache、Nginx/OpenResty、Tomcat、Resin、Jboss)安全設置、性能優化等內容。
HTTP 協議方面
斗魚為了保證直播用戶的數據安全和隱私安全,全站由 HTTP 協議升級到了 HTTPS。
(這個信息是從我比較關注一個微信公眾號:MacTalk 看到的)
全站實施 HTTPS 並不是加了一個 S 那么簡單,這里面需要投入巨大的技術研發成本、服務器和帶寬成本等等。 HTTPS 會帶來更多的網絡握手和消耗,如何提升訪問性能,如何優化證書鏈,如何增加高速連接,減少端口之間的跳轉等等。 采用了 HTTPS 之后,所有的靜態資源都需要支持 HTTPS,如何讓 CDN 支持 HTTPS,如何應對 DDoS 的攻擊, 同時,移動客戶端也需要與雲端進行雙向證書認證。 為了解決這些技術問題,斗魚在前端頁面、后端架構、協議特性、加密算法、流量調度、架構和運維、安全等方面都做了大量工作。 除此之外,他們還需要承擔 CA 根節點證書費用、服務器和帶寬增加的成本。 實施了 HTTPS 的斗魚,能為用戶帶來什么好處呢? 用戶可以獲得一個干凈安全的直播和觀看直播的體驗。 比如彈幕,彈幕是直播中與主播溝通的工具,是直播不可分割的一部分,深受用戶關注和喜愛, 因此非常容易受到惡意攻擊行為,發送廣告和非法信息。 彈幕是開放給所有用戶的公共場所,任何人都可以發言,審核管理工作量巨大且復雜,受到惡意攻擊行為后會嚴重影響到大量用戶的體驗, 對觀看直播造成惡劣的影響。 在 HTTP 時代,我們甚至可以簡單的寫一段腳本就可以把直播間的所有彈幕信息抓下來,因為數據在網絡上是明文傳輸的。 有了 HTTPS 的保障,無論是客戶端還是瀏覽器,都可以得到更好的用戶體驗。
2. 應用服務層
包含運行環境(PHP Python Java C C++)、性能優化、緩存(OPCache、LocalCache)、Session 存儲、代碼部署等內容。
3. 業務層
3.1 業務實現
包含 API 網關、302 調度、業務模塊化(電商網站例子:用戶、商品、購物車、結算中心、價格等服務)、微服務等內容。
3.2 SOA 層
包含 SOA 框架(Java Dubbo)、協議(RPC、RESTful)、服務注冊、服務發現、框架安全等內容。
4. 分布式層
消息隊列
包含 ActiveMQ(成熟)、RabbitMQ(成熟、案例多)、RocketMQ(業務應用)、Kafka(日志傳輸)、ZeroMQ(快)等內容。
基礎服務層
1. 業務決策
包含灰度發布、服務降級、異地災備、數據分析平台、智能擴容決策樹(需要各層支持)等內容。
2. 運維相關
包含項目管理(Redmine、Jira、知識庫、Bugzilla、CodeReview)、工單系統、運維操作平台、監控平台等內容。
3. 應用相關
包含持續集成、日志收集平台(ELKStack)、自動化部署平台、Job 管理(調度)平台、安全掃描平台等內容。
ELK 相關
根據查到的公開資料,斗魚的搜索服務是基於 ES 的。
基於Elasticsearch的斗魚搜索服務實現
相關內容如下:
主要針對 Elasticsearch 在斗魚主站、魚吧、點播系統、移動端等搜索項目中應用及其性能調優,進行演講介紹,具體內容包含以下幾點: 1.斗魚主站、魚吧、點播系統、移動端等不同業務環境下,ES 集群搭建、搜索接口調用、mapping 創建及配置設置。 2.斗魚搜索技術架構,接口采用 Nginx 處理一級緩存以及負責均衡,Tomcat 實現索引同步及搜索接口,以 ES,MySQL,Redis 為基礎的數據存儲。 3.斗魚搜索服務緩存處理,高並發應對策略。 4.由於斗魚網絡科技有限公司的語言異構性,搜索集群如何處理數據同步。 5.斗魚搜索基於 Zabbix + ELK 的監控環境搭建,日志收集。 6.以及在搜索開發過程中遇到的接口問題、集群環境問題,並發負載問題以及解決方法的分享。 7.以及未來對搜索服務規划,服務接口化,統一工程分化,Docker 化。 第一個基於 ES 的線上搜索項目是斗魚魚吧搜索,該項目類似於斗魚的論壇,涉及到大量的分詞檢索,因此,采用了 ES+IK。 上線后,效果明顯,且服務器壓力,負載均很穩定,便逐漸在其他項目推廣開來,斗魚主站,魚秀,移動端,點播搜索等等。 再后來不僅搜索服務,部分全站日志收集,實時監控,也采用了 ELK 體系。
4. 系統相關
包含 LDAP、內部 DNS、DHCP、Mail、SMS、GitLab、YUM 倉庫、操作審計(xenapp)、堡壘機等內容。
操作系統層
CPU
包含 CPU 運行級別、使用率、上下文切換、運行隊列、進程調度、系統調用、CPU 管理(進程管理、taskset、Intel VT-X)等內容。
內存
包含虛擬內存、SWAP 換入換出、內存尋址、內存管理(Buffer Cache、HugePages、ksmd、EPT)等內容。
I/O(磁盤)
包含缺頁中斷、IOPS(順序IO、隨機IO)、IO 管理(IO 調度算法、virtio)等內容。
I/O(網絡)
包含 TCP/IP(三次握手、四次揮手、狀態轉換、TCP 隊列)、IO 模型、Bonding、Bridge、網絡管理(iftop、tcpdump)等內容。
內核/Shell
包含內核定制、內存參數優化、腳本編程(AWK、Sed、Shell、Python、PHP、Perl、Ruby、Lua)等內容。
基礎設施層
IAAS(基礎設施即服務)
包含公有雲、私有雲(OpenStack/cloudstack+KVM/XEN、oVirt)、混合雲等內容。
硬件管理
包含硬件選型、配件更換、資產錄入、系統安裝(Cobbler)、標簽化、Raid構建、遠程控制(KVM、iDrac、ILO、IMM)等內容。
IDC 托管
包含需求分析、IDC選型、網絡測試、談價格、簽合同、設備采購(原廠vs渠道)、機櫃和機位規划等內容。
測試和開發相關
包含運維協助:性能測試(TCPCopy、日志轉換)、單機監控(nmon)、環境規划(開發、測試、預生產、生產)、CI(持續集成)、自動化部署等內容。