Netflix 網飛的架構演進過程、Java在網飛中的應用|圖解

寫在前面

上一篇文章中,我們講解了網飛當前的架構,但網飛的架構并不是一開始就是這樣的,而是不斷演進發展才是當前的樣子。
在這里插入圖片描述
這篇文章我們就來講講網飛架構的演進過程。

第一階段:Zuul Gateway + REST API

  • 使用 Zuul 作為API網關,單一前門
  • 設備調用網關,網關扇出到多個微服務
    Netfile 第一版架構

而在這個架構下,會遇到一些問題:

  • 不同設備有不同的數據需求,Web端、App端、TV端所需要的數據結構不一樣
  • 單一REST API無法滿足所有設備,導致api變多且難以維護,要么獲取過多數據,要么需要多次調用
  • 設備特定的優化需求難以進行

第二階段:BFF(Backend For Frontend)模式

為了處理不同設備的差異化數據需求和減少網絡調用,網飛采用了Backend For Frontend (BFF)模式。每個前端都有專屬的后端。

  • UI開發者編寫和維護 Groovy腳本定制化獲取數據。
  • Groovy 腳本部署在API服務器上,通過 Java 調用gRPC/REST服務,并使用 RxJava 和容錯庫 Hystrix 處理扇出中的線程管理和容錯問題

Groovy 是 ?后端導向的語言?,主要服務于 JVM 平臺的后端邏輯、自動化腳本和構建工具鏈

在這里插入圖片描述
然而,這種 BFF 模式存在局限性:

  1. 需要維護大量的腳本,每個終端一個腳本,維護復雜。
  2. 反應式編程本身學習曲線陡峭且復雜
  3. UI 開發者不喜歡用 Groovy/Java/RxJava

第三階段:GraphQL Federation + Java Version 21

  • 采用DGS微服務:基于 GraphQL 的 SprintBoot 服務
  • API 網關處理GraphQL

GraphQL Federation 取代了 BFF,因為客戶端可以通過 GraphQL 精確選擇所需的字段,解決了 REST API 過度或不足獲取數據的問題,使得一個 API 可以服務于不同的 UI。這意味著 UI 工程師不再需要進行服務器端開發來獲取自己所需要的數據。

在這里插入圖片描述

Java 版本升級

從 Java 8 遷移到 Java 17 后,得益于G1垃圾收集器的改進,CPU 使用率降低約 20%,這是一個非常恐怖的優化,會省下非常多的云資源。這些jdk的升級其實很難做,需要兼顧每一個第三方包。是一項很繁瑣的工作。

舉個視頻中的例子,網飛處理Spring Boot 3升級中的Jakarta EE 命名空間的變化,Spring Boot 3 是基于JDK 17,并且從javax切換到了jakarta.ee。對于應用程序而言,這只是簡單的查找并替換。
在這里插入圖片描述

但對于依賴 javax 并且已經編譯成JAR包的老舊庫來說,而這些老舊庫已經找不到源代碼了但還在使用,運行時仍然會嘗試尋找 javax.servlet.Filter。但此時,環境提供的卻是 jakarta.servlet.Filter。由于包名和類名不匹配,即使功能相同,JVM也無法找到對應的類,從而導致運行時錯誤。

針對這種二進制不兼容性的情況,Netflix利用 Gradle transforms 來解決。通過 Gradle插件工具,在依賴包下載時的 artifact resolution time 進行字節碼重寫相當于二進制的查找并替換,將所有javax 替換為 jakarta。

在這里插入圖片描述
由于這些API在功能上沒有變化,只是命名空間改變,所以這種重寫是安全的。而這個工具已作為Netflix Nebula生態系統的一部分開源。
在這里插入圖片描述

此外網飛目前正測試和推廣 Java 21+,Java 21+ 的 ZGC 垃圾收集器(低暫停時間)和虛擬線程(Virtual Threads)特性都非常優秀。 虛擬線程結合結構化并發很有可能完全取代反應式編程(如 RxJava),簡化并發代碼的開發和調試。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/88887.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/88887.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/88887.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用ros2服務實現人臉檢測2-人臉檢測功能實現(適合0基礎小白)

文章目錄 一、用到的庫二、使用步驟1.引入庫2.獲取圖片真實路徑3.檢測人臉4.繪制人臉5.顯示結果6.更改setup.py7.完整代碼 三、結果展示 一、用到的庫 face_recognition:實現在圖片中檢測人臉。 cv2:顯示圖片,并且可以在圖像中展示檢測結果。…

中國農村統計年鑒-Excel版(1985-2024年)

《中國農村統計年鑒》系統收錄了全國和各省農村社會經濟統計數據,以及近年全國農村主要統計數據,是一部全面反映我國農村社會經濟情況的資料性年刊。年鑒內容覆蓋農村人口結構、農業產值、主要農產品產量、市場物價、進出口貿易以及收入消費水平等社會經…

golang pprof性能調試工具

簡介 pprof是性能調試工具,可以生成類似火焰圖、堆棧圖,內存分析圖等。 整個分析的過程分為兩步:1. 導出數據,2. 分析數據。

PPIO × 302.AI:三分鐘搭建可共享的聊天機器人

最近,各主流模型廠商頻頻發布新模型,有一如既往強大的DeepSeek-R1-0528,擅長長輸入推理的MiniMax-M1-80k…… 好用的AI大模型這么多,如何才能集成在一個應用自由使用呢?302.AI作為企業級AI應用平臺支持各主流模型調用&…

怎么樣在自己的網站/獨立站中添加視頻?

文章目錄 **前言** 一、視頻在網站/獨立站的好處二、視頻嵌入網站的原理三、如何簡易地把視頻嵌入到獨立站中? 前言 在信息傳播形式日益多元化的當下,靜態文字與圖片早已無法滿足用戶對沉浸式瀏覽體驗的需求。視頻以其動態畫面、聲音及文字相結合的特性…

【圖像處理基石】什么是攝影的數碼味?

“數碼味”是一個攝影術語,通常指照片看起來不自然,有過度處理的痕跡,比如色彩過于鮮艷、對比度偏高、高光過曝、陰影死黑,或者有明顯的銳化痕跡和噪點。這種現象在手機攝影中尤為常見,因為手機相機的自動算法往往會為…

報表控件stimulsoft教程:在報表、儀表板和 PDF 表單自動生成縮略圖

了解縮略圖的工作原理在使用Stimulsoft Demo、Stimulsoft Server和Stimulsoft Cloud時非常有用。例如,您可以在此處查看縮略圖的實際效果 - 當側邊欄折疊時,將顯示縮略圖而不是資源列表。在本文中,我們將探討 Stimulsoft 產品中報表、儀表板和…

變分自編碼器(VAE)

1. 從自編碼器(AE)到變分自編碼器(VAE) 自編碼器(AutoEncoder, AE) 基本結構: 自編碼器是一種無監督學習模型,通常由兩個部分組成: 編碼器(Encoder)&…

ChatboxAI 搭載 GPT 與 DeepSeek,引領科研與知識庫管理變革

文章摘要:本文深入探討 ChatboxAI 在科研領域的應用優勢。ChatboxAI 集成多模型,支持全平臺,能高效管理科研知識,助力文獻檢索、實驗設計與論文撰寫,提升科研效率與質量,同時保障數據安全。其知識庫功能可整…

【無刷電機FOC進階基礎準備】【04 clark變換、park變換、等幅值變換】

目錄 clark變換park變換等幅值變換 其實我不太記得住什么是clark變換、park變換,我每次要用到這個名詞的時候都會上網查一下,因為這就是兩個名詞而已,但是我能記住的是他們背后的含義。 經過【從零開始實現stm32無刷電機FOC】系列后應該對cla…

Sentinel的流控策略

在 Sentinel 中,流控策略(Flow Control Strategy)用于定義如何處理請求的流量,并決定在流量達到某個閾值時采取的行動。流控策略是實現系統穩定性和高可用性的核心機制,尤其在高并發環境中,確保服務不會因過…

Ubuntu Extension Manager 插件卸載

Ubuntu 上使用Extension Manager 安裝插件,但目前無法在Extension Manager 中卸載。 卸載方式可以通過 gnome-extensions 命令進行卸載: Usage:gnome-extensions COMMAND [ARGS…]Commands:help Print helpversion Print versionenable Enabl…

深度學習中Embedding原理講解

我們用最直白的方式來理解深度學習中 Embedding(嵌入) 的概念。 核心思想一句話: Embedding 就是把一些復雜、離散的東西(比如文字、類別、ID)轉換成計算機更容易理解和計算的“數字密碼”,這些“數字密碼…

(3)Java+Playwright自動化測試-啟動瀏覽器

1.簡介 前邊兩章文章已經將環境搭建好了,今天就在Java項目搭建環境中簡單地實踐一下: 啟動兩大瀏覽器。 接下來我們在Windows系統中啟動瀏覽器即可,其他平臺系統的瀏覽器類似的啟動方法,照貓畫虎就可以了。 但是在實踐過程中&am…

使用OpenWebUI與DeepSeek交互

Open WebUI 是針對 LLM 用戶友好的 WebUI,支持的 LLM 運行程序包括阿里百煉、 Ollama、OpenAI 兼容的 API。這里主要講在Docker環境下安裝與本地Ollame和百煉API Key配置 一、安裝Docker 1. CentOS # 設置為阿里云的源 sudo yum install -y yum-utils sudo yum-config-mana…

Github 2025-06-25 C開源項目日報 Top9

根據Github Trendings的統計,今日(2025-06-25統計)共有9個項目上榜。根據開發語言中項目的數量,匯總情況如下: 開發語言項目數量C項目9C++項目1raylib: 用于視頻游戲編程的簡單易用圖形庫 創建周期:3821 天開發語言:C協議類型:zlib LicenseStar數量:18556 個Fork數量:1…

【數據標注師】2D標注

目錄 一、 **2D標注知識體系框架**二、 **五階能力培養體系**? **階段1:基礎規則內化(1-2周)**? **階段2:復雜場景處理技能**? **階段3:專業工具 mastery**? **階段4:領域深度專精? **階段5&#xff1…

深入淺出Node.js后端開發

讓我們來理解Node.js的核心——事件循環和異步編程模型。在Node.js中,所有的I/O操作都是非阻塞的,這意味著當一個請求開始等待I/O操作完成時(如讀取文件或數據庫操作),Node.js不會阻塞后續操作,而是繼續執行…

C++11的內容

1.支持花括號初始化 void test1() {vector<string> v1 { "asd","asd","add" };vector<string> v2{ "asd","asd","add" };map<string, int> m1{ {"asd",1},{"asd",2},{&q…

AI代碼助手實踐指南

概述與發展趨勢 核心理念 發展方向&#xff1a;從代碼補全 → 代碼生成 → 整個工程服務價值轉換&#xff1a;從單純寫代碼 → 需求驅動的代碼生成功能擴展&#xff1a;超越編寫層面&#xff0c;涵蓋測試環境搭建等 核心價值點 低價值動作識別&#xff1a;debug、代碼評審、…