做教育網站多少錢淘寶推廣引流方法有哪些
目錄
- 回顧
- 架構分類
- 單體架構
- 分布式架構
- 微服務架構
- 什么是微服務
- 優(yōu)點
- 缺點
- 微服務的架構特征:
- 微服務架構面臨的挑戰(zhàn)
- 技術挑戰(zhàn)
- 微服架構的設計原則
- 微服務概念
- 提供者(Provider)
- 消費者(Consumer)
- RPC和Restful
- 集群
- 分布式
- 總結
- 服務拆分和遠程調用
- 服務拆分原則
- 服務拆分示例
- 思考
- 主流的微服務框架
- Spring Cloud Netflix概述
- Netflix OSS
- Netflix OSS
- 畢馬威:顛覆性公司和商業(yè)模式報告
- Netflix是什么,與Spring Cloud有什么關系
- Netflix OSS的開源組件
- Eureka:服務注冊和發(fā)現
- Zuul:網關
- Ribbon,即負載均衡
- Feign,服務客戶端
- Hystrix,監(jiān)控和斷路器
- Turbine,監(jiān)控聚合
- Spring Cloud
- Spring Cloud簡介
- Spring Cloud特征
- 版本
- 版本依賴關系
- Spring Cloud 規(guī)范下的實現
- 本教程中選用的組件
回顧
架構分類
單體架構
-
單體架構:將業(yè)務的所有功能集中在一個項目中開發(fā),打成一個包部署。
-
優(yōu)點:
- 架構簡單
- 部署成本低
-
缺點:
- 耦合度高(維護困難、升級困難)
- 耦合度高(維護困難、升級困難)
分布式架構
-
分布式架構:根據業(yè)務功能對系統(tǒng)做拆分,每個業(yè)務功能模塊作為獨立項目開發(fā),稱為一個服務。
-
優(yōu)點:
- 降低服務耦合
- 有利于服務升級和拓展
-
缺點:
- 服務調用關系錯綜復雜
- 服務調用關系錯綜復雜
-
分布式架構雖然降低了服務耦合,但是服務拆分時也有很多問題需要思考:
- 服務拆分的粒度如何界定?
- 服務之間如何調用?
- 服務的調用關系如何管理?
人們需要制定一套行之有效的標準來約束分布式架構。
微服務架構
什么是微服務
- 微服務的概念源于2014年3月Martin Fowler(馬丁·福勒)所寫的一篇文章:https://martinfowler.com/microservices。
- 微服務架構風格是一種將一個單體應用程序開發(fā)為一組小型服務的方法,每個服務運行在自己的進程中,服務間通信采用輕量級通信機制(通常是基于HTTP協(xié)議的RESTful API)。這些服務圍繞業(yè)務能力構建,并且可通過全自動部署機制獨立部署。這些服務共用一個最小型的集中式的管理,服務可用不同的語言開發(fā),使用不同的數據存儲技術。
優(yōu)點
- 邏輯清晰,項目復雜度降低:通過對共享業(yè)務更加細粒度的拆分,一個服務只需要關注一個特定的業(yè)務領域,并通過定義良好的接口清晰表述服務邊界。由于體積小、復雜度低,開發(fā)、維護會更加簡單;
- 技術選型更加靈活:每個微服務都有不同的團隊來維護,所以可以結合業(yè)務特性自由選擇技術棧;
- 可擴展性更強:可以根據每個微服務的性能要求和業(yè)務特點對服務進行靈活擴展;
- 獨立部署:單個微服務的代碼量比較小,使得發(fā)布更加高效;
- 容錯性:如果某一個服務發(fā)生故障,可以通過重試、降級等機制實現容錯;
缺點
- 性能降低,微服務的間通過REST、RPC等形式進行交互,通信的延時會受到較大的影響;
- 提升了運維的難度(版本發(fā)布、問題排查、配置管理、監(jiān)控);
- 數據一致性的問題;
微服務的架構特征:
- 單一職責:微服務拆分粒度更小,每一個服務都對應唯一的業(yè)務能力,做到單一職責
- 自治:團隊獨立、技術獨立、數據獨立,獨立部署和交付
- 面向服務:服務提供統(tǒng)一標準的接口,與語言和技術無關
- 隔離性強:服務調用做好隔離、容錯、降級,避免出現級聯(lián)問題
微服務的上述特性其實是在給分布式架構制定一個標準,進一步降低服務之間的耦合度,提供服務的獨立性和靈活性。做到高內聚,低耦合。
因此,可以認為微服務是一種經過良好架構設計的分布式架構方案 。
微服務架構面臨的挑戰(zhàn)
- 微服務粒度大小難以劃分,需要設計人員對業(yè)務有很好的掌握;
- 分布式復雜性,主要體現在分布式事務、網絡延遲、系統(tǒng)容錯等問題解決難度較大;
- 微服務之間通信成本較高,對微服務之間網絡穩(wěn)定性、通信速度要求較高;
- 由于微服務數量較大,運維人員運維、部署有較大的挑戰(zhàn)
技術挑戰(zhàn)
- 微服務架構的主要目的是實現業(yè)務服務的解耦;
- 對服務進行治理(服務的注冊與發(fā)現、服務與服務之間的調用、熔斷限流、負載均衡、鏈路追蹤、分布式配置中心、服務路由等);
微服架構的設計原則
微服務概念
提供者(Provider)
- 提供接口供其他項目調用的項目
消費者(Consumer)
- 調用提供者接口的項目
RPC和Restful
- RPC:RPC遠程過程調用(Remote Procedure Call)的縮寫形式,主要是基于TCP/IP協(xié)議的。
- Restful:Restful是一種網絡應用程序的設計風格和開發(fā)方式,基于HTTP協(xié)議,可以使用XML格式定義或JSON格式定義。
集群
- 集群就是單機的多實例,在多個服務器上部署多個服務,每個服務就是一個節(jié)點,部署N個節(jié)點,處理業(yè)務的能力就提升 N倍(大約),這些節(jié)點的集合就叫做集群。
分布式
- 分布式結構就是將一個完整的系統(tǒng),按照業(yè)務功能,拆分成一個個獨立的子系統(tǒng),在分布式結構中,每個子系統(tǒng)就被稱為“服務”。這些子系統(tǒng)能夠獨立運行在web容器中,它們之間通過RPC或Restful方式通信。
總結
- 單體架構:簡單方便,高度耦合,擴展性差,適合小型項目。例如:學生管理系統(tǒng)
- 分布式架構:松耦合,擴展性好,但架構復雜,難度大。適合大型互聯(lián)網項目,例如:京東、淘寶
- 微服務:一種良好的分布式架構方案
- 優(yōu)點:拆分粒度更小、服務更獨立、耦合度更低
- 缺點:架構非常復雜,運維、監(jiān)控、部署難度提高
- SpringCloud是微服務架構的一站式解決方案,集成了各種優(yōu)秀微服務功能組件
服務拆分和遠程調用
- 何分布式架構都離不開服務的拆分,微服務也是一樣。
服務拆分原則
- 不同微服務,不要重復開發(fā)相同業(yè)務
- 微服務數據獨立,不要訪問其它微服務的數據庫
- 微服務可以將自己的業(yè)務暴露為接口,供其它微服務調用
服務拆分示例
cloud-demo:父工程,管理依賴
- order-service:訂單微服務,負責訂單相關業(yè)務
- user-service:用戶微服務,負責用戶相關業(yè)務
說明:
- 訂單微服務和用戶微服務都必須有各自的數據庫,相互獨立
- 訂單服務和用戶服務都對外暴露Restful的接口
- 訂單服務如果需要查詢用戶信息,只能調用用戶服務的Restful接口,不能查詢用戶數據庫
思考
方案該怎么落地?選用什么樣的技術棧?全球的互聯(lián)網公司都在積極嘗試自己的微服務落地方案。
其中在Java領域最引人注目的就是SpringCloud提供的方案了。
主流的微服務框架
框架名稱 | 說明 |
---|---|
Motan | Motan(茅臺)是新浪微博開源的RPC框架,官網:github.com/weibocom/motan |
JSF JSF(京服) | 是京東的微服務組件。 |
MSEC | 毫秒服務引擎(MSEC, Mass Service Engine in Cluster)是騰訊的一個開源框架,適用于在廉價機器組成的集群上開發(fā)和運營分布式后臺服務。該項目集RPC、名字發(fā)現服務、負載均衡、業(yè)務監(jiān)控、灰度發(fā)布、容量管理、日志管理、key-value存儲于一體,目的是提高開發(fā)與運營的效率和質量。 |
Dubbo | 阿里巴巴開源的RPC框架,后來加入Apache孵化器并成功畢業(yè)。新的名字為Apache Dubbo。 |
DubboX | 當當網基于Dubbo開源的PRC框架,后來并入Apache Dubbo。 |
Netflix OSS | Netflix OSS是由Netflix公司開發(fā)的一套代碼框架,用于解決分布式系統(tǒng)的問題,如:服務注冊與發(fā)現、負載均衡、熔斷降級、限流、網關等。 |
Spring Cloud | Spring Cloud是基于Spring Boot的一整套實現微服務的框架。他提供了微服務開發(fā)所需的配置管理、服務發(fā)現、斷路器、智能路由、微代理、控制總線、全局鎖、決策競選、分布式會話和集群狀態(tài)管理等組件。 |
Spring Cloud Netflix | Spring Cloud Netflix是Spring Boot和Netflix OSS在Spring Cloud規(guī)范下的集成。由Netflix開發(fā)后來又并入Spring Cloud大家庭,它主要提供的模塊包括:服務發(fā)現、斷路器和監(jiān)控、智能路由、客戶端負載均衡等。 |
Spring Cloud Alibaba | Spring Cloud Alibaba 是阿里巴巴提供的微服務開發(fā)一站式解決方案,是阿里巴巴開源中間件與 Spring Cloud 體系的融合。Spring Cloud Alibaba 正式入駐Spring Cloud 官方孵化器,并順利畢業(yè)。 |
Spring Cloud 生態(tài)下中微服務整理 | Spring Cloud并沒有重復制造輪子,它只是將各家公司開發(fā)的比較成熟、經得起實際考驗的服務框架組合起來,通過Spring Boot風格進行再封裝屏蔽掉了復雜的配置和實現原理,最終給開發(fā)者留出了一套簡單易懂、易部署和易維護的分布式系統(tǒng)開發(fā)工具包。 主流的微服務治理方案:Spring Cloud Netflix和Spring Cloud Alibaba |
Spring Cloud Netflix概述
-
Spring Cloud Netflix誕生的三個原因
- Spring家族中的大部分項目都是客戶端項目,缺少服務端項目和分布式項目的經驗;
- Netflix開源其分布式領域的中間件,叫做Netflix OSS;
- Dubbo的出現,讓Spring母公司(Privotal)感受到了威脅,它需要保持或增值自身價值。
-
Spring母公司缺少分布式項目的經驗,而Netflix OSS的開源組件正好涉及分布式領域的核心功能,雙方一拍即合,合作誕生的Spring Cloud Netflix項目用于為快速構建分布式系統(tǒng)提供統(tǒng)一的開發(fā)模式。
-
Spring Cloud Netflix是Spring Boot和Netflix OSS在Spring Cloud規(guī)范下的集成。其中,Netflix OSS是由Netflix公司開發(fā)的一套開源框架和組件庫。
Netflix OSS
Netflix OSS
- Netflix OSS(Netflix Open Source Software)即Netflix開源軟件。
- Netflix由于做視頻的原因,訪問量非常的大,從而促使其技術快速的發(fā)展在背后支撐著,也正是如此,Netflix開始把整體的系統(tǒng)往微服務上遷移。
- Netflix毫無保留的把一整套微服務架構核心技術棧開源了出來,叫做Netflix OSS,依靠開源社區(qū)的力量不斷的壯大。
畢馬威:顛覆性公司和商業(yè)模式報告
- 報告顯示Amazon、Apple、Alibaba、Airbnb、Netflix、Google、DJI、Microsoft、Facebook、Baidu、Tencent等公司是最具顛覆性的公司
- 其中Netflix和阿里巴巴分別為第3位和第5位,他們都是對Spring Cloud做出巨大貢獻的公司
Netflix是什么,與Spring Cloud有什么關系
- 首先,Netflix是一家做視頻的網站,可以這么說該網站上的美劇應該是最火的
- Netflix由于做視頻的原因,訪問量非常的大,從而促使其技術快速的發(fā)展在背后支撐著,也正是如此,Netflix開始把整體的系統(tǒng)往微服務上遷移。
- Netflix的微服務做的不是最早的,但是確是最大規(guī)模的在生產級別微服務的嘗試。也正是這種大規(guī)模的生產級別嘗試,在服務器運維上依托AWS云。當然AWS云同樣受益于Netflix的大規(guī)模業(yè)務不斷的壯大。[(AWS)Amazon Web Services(亞馬遜網絡服務)]
- Netflix的微服務大規(guī)模的應用,在技術上毫無保留的把一整套微服務架構核心技術棧開源了出來,叫做Netflix OSS,也正是如此,在技術上依靠開源社區(qū)的力量不斷的壯大。
- Spring Cloud是構建微服務的核心,而Spring Cloud是基于Spring Boot來開發(fā)的
- Pivotal在Netflix開源的一整套核心技術產品線的同時,做了一系列的封裝,就變成了Spring Cloud;雖然Spring Cloud到現在為止不只有Netflix提供的方案可以集成,還有很多方案,但Netflix是最成熟的。
Netflix OSS的開源組件
Eureka:服務注冊和發(fā)現
- 它提供了一個服務注冊中心、服務發(fā)現的客戶端,還有一個方便的查看所有注冊的服務的界面。 所有的服務使用Eureka的服務發(fā)現客戶端來將自己注冊到Eureka的服務器上。
Zuul:網關
- 所有的客戶端請求通過這個網關訪問后臺的服務。他可以使用一定的路由配置來判斷某一個URL由哪個服務來處理。并從Eureka獲取注冊的服務來轉發(fā)請求
Ribbon,即負載均衡
- Zuul網關將一個請求發(fā)送給某一個服務的應用的時候,如果一個服務啟動了多個實例,就會通過Ribbon來通過一定的負載均衡策略來發(fā)送給某一個服務實例。
Feign,服務客戶端
- 服務之間如果需要相互訪問,可以使用RestTemplate,也可以使用Feign客戶端訪問。它默認會使用Ribbon來實現負載均衡。
Hystrix,監(jiān)控和斷路器
- 我們只需要在服務接口上添加Hystrix標簽,就可以實現對這個接口的監(jiān)控和斷路器功能。Hystrix Dashboard,監(jiān)控面板,他提供了一個界面,可以監(jiān)控各個服務上的服務調用所消耗的時間等。
Turbine,監(jiān)控聚合
- 使用Hystrix監(jiān)控,我們需要打開每一個服務實例的監(jiān)控信息來查看。而Turbine可以幫助我們把所有的服務實例的監(jiān)控信息聚合到一個地方統(tǒng)一查看。這樣就不需要挨個打開一個個的頁面一個個查看。
Spring Cloud
Spring Cloud簡介
- Spring Cloud是基于Spring Boot的一整套實現微服務的框架。
- 他提供了微服務開發(fā)所需的配置管理、服務注冊與發(fā)現、斷路器、智能路由、微代理、控制總線、全局鎖、決策競選、分布式會話和集群狀態(tài)管理等組件。
- 最重要的是跟Spring Boot框架一起使用的話,會讓你非常方便開發(fā)微服務架構的服務。
- 官網:https://spring.io/projects/spring-cloud/
Spring Cloud特征
- 分布式/版本化配置
- 服務注冊和發(fā)現
- 路由
- 服務與服務之間的請求調用
- 負載均衡
- 斷路器
- 全局鎖
- 領導選舉和集群狀態(tài)
- 分布式消息傳遞
版本
名稱 | 描述 |
---|---|
SNAPSHOT | 代表快照,也就是未完成的意思 |
GA | 代表穩(wěn)定版 |
RELEASE | 發(fā)行版,沒有太多問題 |
SR | 正式發(fā)布版 |
PRE(M1、M2) | 里程碑版,主要是修復了一些BUG的版本,一個GA后通常有多個里程碑版 |
BUILD-XXX | 開發(fā)版,開發(fā)團隊內部使用,不是很穩(wěn)定 |
- 本教程使用版本:Spring Cloud Hoxton.SR12
版本依賴關系
Spring Cloud所有的子項目都依賴Spring Boot框架,所以Spring Boot框架的版本號和Spring Cloud的版本號之間也存在依賴及兼容的關系,如下圖所示:
Spring Cloud 規(guī)范下的實現
- 在Spring Cloud這個規(guī)范下,有很多實現,比如:Spring-Cloud-Bus、Spring-Cloud-Gateway、Spring-Cloud-Netflix等等。
- 在這些實現中,絕大部分組件都使用“別人已經造好的輪子”,然后基于Spring Cloud規(guī)范進行整合,使用者只需要使用非常簡單的配置即可完成微服務架構下復雜的需求。
- 這也是Spring 團隊最厲害的地方,他們很少重復造輪子,最早的Spring 框架,它只提供了IOC和AOP兩個核心功能,對于ORM、MVC等其他功能,Spring都提供了非常好的兼容性,比如:Hibernate、MyBatis、Spring MVC、Strus2。
- 只有在別人提供的東西不夠好的情況下,Spring團隊才會考慮自己研發(fā)。比如Strus2經常有安全漏洞,所以Spring團隊自己研發(fā)了Spring MVC框架。再比如Spring-Cloud-Netflix中的Zuul網關,因為性能及版本迭代較慢,所以Spring團隊孵化了一個Spring Cloud Gateway來取代Zuul。
- Spring團隊一直在不斷地為開發(fā)者解決一些技術復雜度高的問題,使開發(fā)者能夠更高效地專注于業(yè)務開發(fā)的工作。從Spring到Spring Boot,再到Spring Cloud,都是如此。
本教程中選用的組件
體系組件名稱 | 作用定位 |
---|---|
Eureka | 注冊中心,提供服務注冊與發(fā)現服務 |
Open Feign | 請求客戶端,簡化微服務之間請求調用 |
Hystrix | 容錯處理 |
Ribbon | 為微服務提供負載均衡 |
Gateway | 網關,提供服務轉發(fā)與校驗服務 |
Config | 分布式配置,提供統(tǒng)一配置服務 |
Sleuth | 服務追蹤,提供微服鏈路追蹤服務 |