1. 程式人生 > >Netflix 微服務架構設計的經驗總結!

Netflix 微服務架構設計的經驗總結!

遷移到微服務架構能夠為公司的市場帶來激動人心的機會,因為它為使用者帶來更加快速的新功能釋出。你知道未來公司的成功取決於是否遷移到微服務架構,但你該如何去做呢?

幸運的是一些早期的微服務實踐者已經慷慨的分享了他們在微服務方面的實踐,以及貢獻了原始碼。Adrian Cockcroft – Netflix 的雲架構師,他見證了 Netflix 從100人的傳統應用研發團隊,研發一個 DVD 租賃系統的巨石應用,演進到多個獨立的小團隊,支援500個微服務,每天1.2億人觀看的視訊網站。

什麼是微服務架構?

Cockcroft 將微服務定義為:A microservices architecture as a service‑oriented architecture composed of loosely coupled elements that have bounded contexts. 這裡有兩個核心概念,一是 Loosely Coupled,二是 Bounded Context。

 Loosely Coupled(鬆耦合) 意思是:

  1. 可以獨立的更新每個服務

  2. 更新一個服務無需要求改變其他服務

如果你有一堆小的服務但不能獨立更新,那也不叫微服務,因為這些服務並沒有鬆耦合。原因之一,是有的公司將應用拆分了,但並沒有拆分資料庫,所有的應用仍然訪問同一個資料庫,你需要為每個服務拆分資料庫。

Bounded Contexts  概念來自 Eric Evans 寫的 Domain Driven Design 這本書 。微服務需要有明確的邊界性,你可以只關注自身軟體的釋出,而無需考慮誰在依賴你的釋出版本,因為微服務和它的消費者嚴格通過 API 進行互動,不共享資料結構、資料庫、POJO 等等。基於契約的微服務規範要求服務介面是穩定的,而且向下相容。

設計微服務架構的最佳實踐

為每個微服務建立一個獨立的資料儲存

不要為微服務提供共享的後端資料儲存。每個團隊有選擇最適合資料庫的自由。將資料庫拆分會讓資料管理變得複雜,因為獨立的資料儲存很容易出現數據不一致的問題,外來鍵很容易被意外的破壞。你需要工具來做主資料管理(MDM),為後端服務修復不一致的問題。例如:你需要檢查所有儲存使用者 ID 的資料庫,確保每個資料庫都有完整的使用者 ID 的記錄,不能存在某個資料庫沒有某個記錄的情況。你可以自己實現這個工具,也可以用商業關係資料庫的系統工具,但通常這些工具都有很多門檻,並且不易擴容。

將程式碼的成熟度保持在相同的水平

將程式碼的成熟度保持在相同的水平,如果你想增加或者重寫某個已經穩定服務的微服務,最好的辦法,是保留已有穩定執行的服務不變,建立一個新的微服務。這是符合了 Immutable Infrastructure Principle,這本書的不可變基礎設施理論。這樣你可以遞進式的部署和測試新的程式碼,直到程式碼足夠穩定, 高效執行,沒有任何效能問題和部署失敗問題的時候,你可以把程式碼 Merge 回之前的服務,完成新功能的開發。

為每個微服務提供獨立的構建

為每個微服務提供獨立的構建,這樣每個服務可以構建,獨立釋出,其他的服務依賴你的知識 Release 倉庫裡的某一個版本,他可以自行決定是升級你的最新版本,還是繼續使用舊版本。這樣帶來的是小團隊的獨立性,每個團隊可以自己決定釋出的週期,自己負責線上的問題。

組織結構變化

在微服務架構中,除了應用的重構,組織的結構也會發生變化,為了讓微服務的團隊實現獨立自運營,公司必須成立專門的基礎平臺部門,也叫 SRE,這個部門為公司的研發團隊提供統一的製品庫管理,CI 工具(Jenkins 等),部署工具和運維,監控平臺,以及應用的高可用保障。這樣每個團隊才能做到獨立釋出自己的服務。

部署到容器

部署微服務到容器裡很重要,因為這意味著你只需要一個工具即可部署所有內容。一旦將微服務放在容器裡,容器部署工具便知道如何部署它,無需考慮容器是什麼型別。

視伺服器為無狀態

對待伺服器,特別是直接服務於使用者的伺服器,應該把它看成是一個原子服務裡的某個持續變化的成員,你不需要去單獨的考慮某個機器的狀態,他們都應該提供一樣的功能,無需區別對待。

你唯一應該考慮的是他們能否支撐你的業務量。你可以使用自動擴容的方式將這些服務啟動或者關閉。如果其中某個服務 Down 掉了,應該由新的例項來進行替代。一定要避免某個服務存在特殊的功能,從而成為單點故障點。

Cockcroft 的理論是:你應該將伺服器看成是奶牛場裡的牛,而不是寵物。單個的奶牛是用唯一編號標記,而寵物用名字標記。如果你的機器使用名字標記,並且處理某種特殊的應用,如果這個機器 Down 掉了,所有人都會受到影響。

相反,如果你將機器看成是奶牛場裡的奶牛, 你只關心每天生產出多少牛奶,如果某天發現牛奶產量比平時少了,你只需找到這頭有問題的奶牛,把它替換掉。

基於 NGINX 平臺的 Netflix 部署架構

Netflix 是開源版 NGINX 的資深使用者。2011年,Netflix 也成為 NGINX 公司的第一個企業使用者,作為高效能 HTTP 處理的方案,NGINX and NGINX Plus 已經為 Netflix 公司提供每秒幾千-幾百萬併發請求的支援。

參考資料:

https://www.nginx.com/blog/microservices-at-netflix-architectural-best-practices/

作者:王青

目前任職 JFrog 中國首席架構師,之前在 IBM,HPE,愛奇藝,新浪,VIPKID 等公司做過研發和架構,是有十多年開發經驗的網際網路老兵,專注於軟體生命週期管理,微服務架構,雲原生應用,容器化等領域。

歡迎轉載,但轉載請註明作者與出處。謝謝!

相關推薦

Netflix 服務架構設計經驗總結

遷移到微服務架構能夠為公司的市場帶來激動人心的機會,因為它為使用者帶來更加快速的新功能釋出。你知道未來公司的成功取決於是否遷移到微服務架構,但你該如何去做呢? 幸運的是一些早期的微服務實踐者已經

中小企業對Spring Cloud服務架構實踐經驗總結的一些思考

原文出處:微信公眾號 什麼是微服務 微服務的概念源於 2014 年 3 月 Martin Fowler 所寫的一篇文章“Microservices”。文中內容提到:微服務架構是一種架構模式,它提倡將單一應用程式劃分成一組小的服務,服務之間互相協調、互相配合,為使

你必須了解的服務架構設計的10個要點

haproxy 能力 自己的 51cto 需求 均衡 互訪 人人 根據 近來,幾乎人人都在談論微服務。微服務之所以火熱也是因為相對之前的應用開發方式有很多優點,如更靈活、更能適應現在需求快速變更的大環境等。本文將介紹微服務架構設計中的一些要點。 微服務架構設計時有哪些要點呢

SaaS 系統架構設計經驗總結

計費 攔截 好處 abc www. ring 需求 分系統 數據庫 2B SaaS系統最近幾年都很火。很多創業公司都在嘗試創建企業級別的應用 cRM, HR,銷售, Desk SaaS系統。很多SaaS創業公司也拿了大額風投。畢竟SaaS相對傳統軟件的優勢非常明顯。 最近一

服務架構設計

自己 積累 static 工具 緩沖 正是 rod 最適 適合 微服務 軟件架構是一個包含各種組織的系統組織,這些組件包括 Web服務器, 應用服務器, 數據庫,存儲, 通訊層), 它們彼此或和環境存在關系。系統架構的目標是解決利益相關者的關註點。 C

Java架構師,服務架構設計,並發編程,java8新特性,P2P金融項目,高並發,分布式

環境 span acc 要掌握 system 精益 app 擴展 ant 微服務架構設計 微服務 軟件架構是一個包含各種組織的系統組織,這些組件包括 Web服務器, 應用服務器, 數據庫,存儲, 通訊層), 它們彼此或和環境存在關系。系統架構的目標是解決利益

服務架構設計綱要

微服務        軟體架構是一個包含各種組織的系統組織,這些元件包括 Web伺服器, 應用伺服器, 資料庫,儲存, 通訊層), 它們彼此或和環境存在關係。系統架構的目標是解決利益相關者的關注點。 Conwa

Spring Cloud Netflix 服務架構分享

一 專業術語 Eureka:服務註冊中心。 Zuul:閘道器,所有的客戶端請求通過這個閘道器訪問後臺的服務。 Ribbon:即負載均衡,Zuul閘道器將一個請求傳送給某一個服務的應用的時候,如果一個服務啟動了多個例項,就會通過Ribbon來通過一定的負載均衡策略來發送給某一

服務架構設計基礎之領域驅動設計

背景 微服務現在可以說是軟體研發領域無人不提的話題,然而業界流行的對比多數都是所謂的Monolithic(單體應用),而大量的系統在十幾年前都已經是以SOA(面向服務架構)為基礎的分散式系統了,那麼微服務作為新的架構標準與SOA有什麼差異點呢?其本質區別在於設計原理,微服務是去中心化設計,SOA是「整合」形成

服務架構設計基礎之立方體模型

背景 對於現在的微服務架構的應用來說,對大量併發的及時響應是一項制勝能力。據使用者行為分析平臺統計,隨行付的某一款APP產品每日請求就達到上千萬次使用者請求、加解密服務3000萬次/日等等。這些微服務每時每刻在處理如此高強度的請求,對資料層的應對能力要求極高。如果我們把對速度的需求放在複雜的分散式資料架構背

Java高併發高效能分散式框架從無到有服務架構設計

微服務架構模式(Microservice Architect Pattern)。近兩年在服務的瘋狂增長與雲端計算技術的進步,讓微服務架構受到重點關注 微服務架構是一種架構模式,它提倡將單一應用程式劃分成一組小的服務,服務之間互相協調、互相配合,為使用者提供最終價值。每個服務執行在其獨立的程序中,

服務架構元素卡; 15 分鐘內搞定服務架構設計

Cloud-Native 微服務架構設計不應該是一個講求標準答案, 簡單粗暴的設計過程。而應該是一個考量各方因素下的一個“決策的過程”。 但是, 這種決策的過程, 是不大容易就能 “高效” 的做得到位的。 主要的原因是: 微服務太複雜了… 每個版本會有數

服務架構設計 第五步: 服務的 User Stories 的拆分與澄清

2016.9.11, 深圳, Ken Fang 特性負責人與架構師, 開發骨幹人員, 測試經理, 資深測試人員, 經由協作, 完成了: 1.  微服務邊界上下文 (Bounded Context) 的界定。 2.  微服務架構設計; 架構方案的選定。 3.  微服務架構上

Java高併發、分散式框架,從無到有服務架構設計

微服務架構模式(Microservice Architect Pattern)。近兩年在服務的瘋狂增長與雲端計算技術的進步,讓微服務架構受到重點關注微服務架構是一種架構模式,它提倡將單一應用程式劃分成一組小的服務,服務之間互相協調、互相配合,為使用者提供最終價值。每個服務執行

服務架構設計實踐系列之十一:物理架構

微服務架構設計實踐 目    次1 序言2 微服務4.4.5  物理架構4.4.5.1  物理架構定義        物理架構定義了“程式”如何對映(安裝、部署或燒寫等)到“硬體”,以及“資料“如何在”硬體“上儲存和傳遞。        物理架構必須考慮”功能的分佈“和”資料

服務架構設計實踐系列之十:技術架構

微服務架構設計實踐 目    次1 序言2 微服務4.4.4  技術架構4.4.4.1  技術架構定義        技術架構定義了實現整個系統所需的各種技術,包括開發類、過程管理類、執行環境類、運維支撐類、以及相關技術規範等。        更確切地說,技術架構描述了在一個

服務架構設計實踐系列之五:架構準備階段

微服務架構設計實踐 目    次1 序言2 微服務4.2  架構準備階段        在架構準備階段,主要是分析使用者的需求,推薦採用“ADMEMS矩陣”矩陣方法進行需求結構化,即“需求層次-需求方面矩陣”。        通過業務級需求、使用者級需求、開發級需求三個層次,

網際網路金融平臺服務架構設計

  按照孢子框架要義對網際網路金融理財平臺進行微服務架構設計。假設我們設計的目標是5年後的陸金所(https://www.lu.com/)。陸金所簡介,平安集團旗下理財平臺,是中國最大的網路投融資平臺之一,2011年9月在上海註冊成立,註冊資本金8.37億元,lufax結合全球金融發展與網際網路技術創新,

基於SpringCloud的服務架構設計

大家好,今天分享的是我最近在公司剛實現的一套微服務架構,用作於公司基礎性服務(例如搜尋,Passport Server,分散式任務排程系統等) 以下是整體架構 可以看出,可以分為7個模組,整體是分層架構 反向代理層 閘道器層 服務層 儲存層 服務治理中心

Spring Cloud Netflix服務架構實踐

前言 系統一旦走向分散式,其複雜程度成倍增長,傳統單體應用只考慮業務邏輯的開發方式已經不再適用。正因其複雜性,目前只有業務需求大的大型網際網路公司才會(被迫)採用,而且需要投入大量的技術力量來開發基礎設施,也造成了小公司“用不起”分散式架構的情況。現在這一局面正在逐漸被打破