自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

微服務(wù)架構(gòu),配置中心的技術(shù)選型

開發(fā) 架構(gòu)
目前公司內(nèi)部微服務(wù)架構(gòu)基礎(chǔ)設(shè)施建設(shè)中,技術(shù)選型以Spring Cloud技術(shù)為主,也被大家俗稱作“全家桶”。

 目前公司內(nèi)部微服務(wù)架構(gòu)基礎(chǔ)設(shè)施建設(shè)中,技術(shù)選型以Spring Cloud技術(shù)為主,也被大家俗稱作“全家桶”。

    ★    因其具備微服務(wù)架構(gòu)體系中所需的各個(gè)服務(wù)組件,比如服務(wù)注冊(cè)發(fā)現(xiàn)(如Spring Cloud Eureka、Zookeeper、Consul)、API網(wǎng)關(guān)路由服務(wù)(Spring Cloud Zuul),客戶端負(fù)載均衡(Spring Cloud Ribbon,Zuul默認(rèn)集成了Ribbon)、服務(wù)容錯(cuò)保護(hù)(Spring Cloud Hystrix),消息總線 (Spring Cloud Bus)、分布式配置中心(Spring Cloud Config)、消息驅(qū)動(dòng)的微服務(wù)(Spring Cloud Stream)、分布式鏈路跟蹤服務(wù)(Spring Cloud Sleuth)。”

本篇主要圍繞其中一個(gè)組件 分布式配置中心 展開討論。

Spring Cloud Config配置中心介紹&架構(gòu)

在微服務(wù)架構(gòu)體系中配置中心是比較重要的組件之一,Spring Cloud官方自身提供了Spring Cloud Config分布式配置中心,由它來提供集中化的外部配置支持,它分為客戶端和服務(wù)端兩個(gè)部分。

其中服務(wù)端稱作配置中心,是一個(gè)獨(dú)立的微服務(wù)應(yīng)用,用來連接倉(cāng)庫(kù)(如Git、Svn)并未客戶端提供獲取配置的接口;而客戶端是各微服務(wù)應(yīng)用,通過指定配置中心地址從遠(yuǎn)端獲取配置內(nèi)容,啟動(dòng)時(shí)加載配置信息到應(yīng)用上下文中。

因Spring Cloud Config實(shí)現(xiàn)的配置中心默認(rèn)采用了Git來存儲(chǔ)配置信息,所以版本控制管理也是基于Git倉(cāng)庫(kù)本身的特性來支持的 。

對(duì)該組件調(diào)研后,主要采用基于消息總線的架構(gòu)方式,架構(gòu)圖如下所示:

基于消息總線的配置中心架構(gòu)中需要依賴外部的MQ組件,如Rabbit、Kafka 實(shí)現(xiàn)遠(yuǎn)程環(huán)境事件變更通知,客戶端實(shí)時(shí)配置變更可以基于Git Hook功能實(shí)現(xiàn)。

同時(shí)架構(gòu)圖中看到最右側(cè),有一個(gè)Self scheduleing refresher 這個(gè)是我在實(shí)踐中自己新增的一個(gè)擴(kuò)展功能,目的是當(dāng)依賴的消息組件出現(xiàn)問題時(shí),此時(shí)如果Git倉(cāng)庫(kù)配置發(fā)生了變更,會(huì)導(dǎo)致部分或所有客戶端可能無法獲取到最新配置,這樣就造成了客戶端應(yīng)用配置數(shù)據(jù)無法達(dá)到最終一致性,進(jìn)而引起線上問題。

    ★    Self scheduleing refresher 是一個(gè)定時(shí)任務(wù),默認(rèn)5分鐘執(zhí)行一次,執(zhí)行時(shí)會(huì)判斷本地的Git倉(cāng)庫(kù)版本與遠(yuǎn)程Git倉(cāng)庫(kù)版本如果不一致,則會(huì)從配置中心獲取最新配置進(jìn)行加載,保障了配置最終一致性。”

經(jīng)過實(shí)際使用你會(huì)發(fā)現(xiàn)Spring Cloud Config這個(gè)配置中心并不是非常好用,如果是小規(guī)模的項(xiàng)目可以使用問題不大,但它并不適用于中大型的企業(yè)級(jí)的配置管理。

因此,我對(duì)業(yè)界開源的配置中心做個(gè)對(duì)比后最終選擇了攜程開源的Apollo配置中心解決了微服務(wù)架構(gòu)配置管理和其他項(xiàng)目中配置管理痛點(diǎn)。

下面就針對(duì)Spring Cloud Config和Apollo配置中心做個(gè)更加直觀的比對(duì):

Apollo VS Spring Cloud Config

通過以上對(duì)比圖發(fā)現(xiàn)Spring Cloud Config缺陷還是挺大的,比如最后一條高可用,Apollo配置中心客戶端應(yīng)用加載配置后本地會(huì)生成緩存文件,即使配置中心所有的服務(wù)都掛掉,只是配置無法更新,但是不影響你的服務(wù)啟動(dòng)。

而這Spring Cloud Config是無法做到的,有人會(huì)說我們可以在應(yīng)用classpath下添加應(yīng)用配置文件作為「兜底使用」,這樣做首先配置不會(huì)自動(dòng)同步,而且也不是Spring Cloud Config自身的功能。

另外還有一個(gè)原因是因?yàn)楝F(xiàn)階段項(xiàng)目中也使用了一些自研的配置中心,但都差強(qiáng)人意,有的配置中心僅支持xml格式的,無法支持KV形式;還有的配置中心是基于JMX開發(fā)的,但只支持屬性配置推送。

所以經(jīng)過對(duì)Apollo配置中心的調(diào)研和使用發(fā)現(xiàn)這款產(chǎn)品不僅適用于微服務(wù)配置管理場(chǎng)景,同時(shí)也支持多種配置格式,如xml、json、yml,還支持多語言客戶端的接入,在配置服務(wù)治理方面也是很完善的,在攜程內(nèi)部已經(jīng)支撐10萬+的實(shí)例運(yùn)行,成熟又穩(wěn)定!

開源配置中心對(duì)比

下面這個(gè)圖詳細(xì)的開源配置中心對(duì)比圖:

在上述幾個(gè)開源配置中心里,Apollo社區(qū)是非?;钴S的,不斷更新迭代。

在Apollo出現(xiàn)之前百度開源的disconf配置中心使用的更多些,disconf最新代碼更新時(shí)間還是2年前的,且與Apollo的對(duì)比社區(qū)活躍度有所下降。

Apollo配置中心介紹&架構(gòu)

Apollo(阿波羅)是攜程框架部門研發(fā)的分布式配置中心,能夠集中化管理應(yīng)用不同環(huán)境、不同集群的配置,配置修改后能夠?qū)崟r(shí)推送到應(yīng)用端,并且具備規(guī)范的權(quán)限、流程治理等特性,適用于微服務(wù)配置管理場(chǎng)景。

服務(wù)端基于Spring Boot和Spring Cloud開發(fā),不依賴外部容器,便于部署。

Java客戶端不依賴任何框架,能夠運(yùn)行于所有Java運(yùn)行時(shí)環(huán)境,同時(shí)對(duì)Spring/Spring Boot環(huán)境也有額外支持。

原生支持Java和.Net客戶端,同時(shí)也支持其他語言客戶端,目前已支持Go、PHP、Python、NodeJS、C++。

主要功能特性:

  •  統(tǒng)一管理不同環(huán)境、不同集群的配置
  •  配置修改實(shí)時(shí)生效(熱發(fā)布)
  •  版本發(fā)布管理
  •  灰度發(fā)布
  •  權(quán)限管理、發(fā)布審核、操作審計(jì)
  •  客戶端配置信息監(jiān)控
  •  提供Java和.Net原生客戶端
  •  提供開放平臺(tái)API
  •  部署簡(jiǎn)單,依賴少

Apollo總體架構(gòu)設(shè)計(jì):

各組件作用說明:

Apollo HA高可用設(shè)計(jì):

Apollo客戶端架構(gòu):

客戶端架構(gòu)原理:

1.推拉結(jié)合方式

  •  客戶端與配置中心保持一個(gè)長(zhǎng)連接,配置實(shí)時(shí)推送
  •  定時(shí)拉配置(默認(rèn)5分鐘)

2.本地緩存

  •  配置緩存在內(nèi)存
  •  本地緩存一份配置文件

3.應(yīng)用程序

  •  通過Apollo客戶端獲取最新配置
  •  訂閱配置更新通知

Apollo核心概念:

application (應(yīng)用)

每個(gè)應(yīng)用都需要有唯一的身份標(biāo)識(shí) -- appId

environment (環(huán)境)

Apollo客戶端通過不同環(huán)境獲取對(duì)應(yīng)配置

cluster (集群)

一個(gè)應(yīng)用下不同實(shí)例的分組,不同的cluster,可以有不同的配置。

比如北京機(jī)房和天津機(jī)房可以有不一樣的kafka或zk地址配置。

namespace (命名空間)

一個(gè)應(yīng)用下不同配置的分組,不同的namespace的類似于不同的文件。

如:數(shù)據(jù)庫(kù)配置,RPC配置等。支持繼承公共組件的配置。

配置分類

  •  私有類型(private):只能被所屬應(yīng)用獲取
  •  公共類型(public):必須全局唯一。使用場(chǎng)景:部門/小組級(jí)別共享配置,中間件客戶端配置。
  •  關(guān)聯(lián)類型(繼承類型):私有繼承公有配置并覆蓋;定制公共組件配置場(chǎng)景。

配置項(xiàng)(Item)

默認(rèn)和公共配置使用properties格式;私有配置支持properties/json/xml/yaml/yml格式。

定位方式:app+cluster+namespace+item_key

權(quán)限管理

  •  系統(tǒng)管理員擁有所有的權(quán)限
  •  創(chuàng)建者可以代為創(chuàng)建項(xiàng)目,責(zé)任人默認(rèn)是項(xiàng)目管理員,一般創(chuàng)建者=責(zé)任人
  •  項(xiàng)目管理員可創(chuàng)建集群,Namespace,管理項(xiàng)目和Namespace權(quán)限
  •  編輯權(quán)限只能編輯不能發(fā)布
  •   布權(quán)限只能發(fā)布不能編輯
  •  普通用戶可以搜索查看所有項(xiàng)目配置,但沒有相關(guān)操作權(quán)限

Apollo配置中使用及擴(kuò)展

使用Apollo配置中心后,做了進(jìn)一步的功能開發(fā)擴(kuò)展,接入公司的SSO和郵件通知接入。

基于Spring Cloud Config微服務(wù)架構(gòu)體系中,如果之前使用了Spring Cloud Config配置中心,也可以通過下列方式平滑的遷移到Apollo配置中心。

Spring Cloud微服務(wù)項(xiàng)目在pom.xml中引入如下依賴: 

  1. <dependency>  
  2.      <groupId>com.letv.micro.apollo</groupId>  
  3.     <artifactId>micro-apollo-spring-boot-starter</artifactId>  
  4.     <version>1.0-SNAPSHOT</version>  
  5. </dependency> 

該源碼參考Github:

    ★    https://github.com/david1228/micro-apollo-spring-boot-starter

需要自行編譯打成jar包使用。

這個(gè)jar包對(duì)Spring Cloud配置刷新機(jī)制集成Apollo客戶端做了進(jìn)一步封裝,實(shí)現(xiàn)的主要功能如下:

1、在Apollo配置中心發(fā)布配置后,微服務(wù)應(yīng)用客戶端監(jiān)聽配置變更,包括默認(rèn)的配置和公共的配置,通過ContextRefresher中的refresh()方法完成應(yīng)用環(huán)境上下文的配置刷新。

2、支持對(duì)日志級(jí)別和日志路徑文件的動(dòng)態(tài)配置變更。[Apollo Client無法很好的支持日志級(jí)別和日志路徑文件的變更,因日志的LoggingApplicationListener加載優(yōu)先級(jí)高,Apollo配置加載滯后。

上述jar包已上傳公司的Maven私服。具體配置使用示例可以參考「4.Apollo配置中心使用示例」

引入micro-apollo-spring-boot-starter之后,可以將spring-cloud-stater-config依賴從pom.xml中去掉了。

Apollo配置中心公共配置命名規(guī)范:

公共配置建議統(tǒng)一放到新創(chuàng)建的項(xiàng)目中,該項(xiàng)目中存放Spring Cloud相關(guān)的公共組件的配置,比如Eureka、Zipkin、Stream等配置,比如Eureka地址可能是多個(gè)微服務(wù)應(yīng)用共用的,便于在該項(xiàng)目中統(tǒng)一對(duì)配置進(jìn)行管理。

創(chuàng)建項(xiàng)目時(shí),選擇的部門如為「微服務(wù)公共平臺(tái)(dpms)」

各微服務(wù)應(yīng)用項(xiàng)目創(chuàng)建后可以添加Namespace,選擇關(guān)聯(lián)公共配置。

公共配置命名規(guī)則:{部門前綴}.application  或者 {部門前綴}.application-{具體的細(xì)分配置}

當(dāng)Apollo配置發(fā)布后,若需讓Spring Cloud配置實(shí)現(xiàn)動(dòng)態(tài)加載,公共配置命名必須以application關(guān)鍵字開頭,在上述依賴的jar包中會(huì)對(duì)這類命名的Namespace做配置變更監(jiān)聽。

例如:

  •  dpms.application-eureka 存放eureka相關(guān)配置
  •  或 dpms.application-zipkin 存放zipkin相關(guān)配置
  •  或 dpms.application  存放Spring Cloud所有的公共相關(guān)配置
  •  其他微服務(wù)應(yīng)用關(guān)聯(lián)公共配置后,默認(rèn)使用的公共配置項(xiàng)。
  •  你也可以對(duì)公共配置所有參數(shù)做覆蓋,覆蓋后優(yōu)先獲取本項(xiàng)目中的配置,這個(gè)特性在Apolo的公共配置界面能夠直觀的展示出來。

以上就是對(duì)為什么要選擇Apollo配置中心的一些介紹,相信你的項(xiàng)目中可能也遇到了類似的配置管理問題或痛點(diǎn),強(qiáng)烈建議使用Apollo配置中心作為你的配置管理基礎(chǔ)服務(wù)使用。

關(guān)于Apollo更詳盡的文檔請(qǐng)參考Github:

    ★    https://github.com/ctripcorp/apollo 

 

責(zé)任編輯:龐桂玉 來源: Java知音
相關(guān)推薦

2020-11-25 09:56:48

架構(gòu)運(yùn)維技術(shù)

2019-10-24 11:17:57

架構(gòu)運(yùn)維技術(shù)

2021-02-24 14:01:13

微服務(wù)開發(fā)框架

2023-08-27 16:13:50

架構(gòu)微服務(wù)器

2025-03-31 08:35:00

Eureka微服務(wù)架構(gòu)

2023-06-20 08:59:25

微服務(wù)注冊(cè)中心運(yùn)維

2024-12-03 10:55:56

微服務(wù)架構(gòu)注冊(cè)中心

2019-07-11 15:25:02

架構(gòu)運(yùn)維技術(shù)

2017-07-28 16:41:53

Spring Clou微服務(wù)架構(gòu)

2017-09-10 16:21:55

微服務(wù)API權(quán)限

2017-07-12 13:49:45

微服務(wù)架構(gòu)數(shù)據(jù)共享

2021-08-31 10:02:20

架構(gòu)運(yùn)維技術(shù)

2019-08-23 10:34:05

微服務(wù)Eureka架構(gòu)

2020-04-02 10:37:55

微服務(wù)架構(gòu)數(shù)據(jù)

2017-07-04 14:57:40

微服務(wù)paasdocker

2024-05-10 08:46:13

微服務(wù)架構(gòu)技術(shù)

2018-05-23 15:58:27

Spring Clou微服務(wù)架構(gòu)

2018-07-19 14:58:14

Spring Clou微服務(wù)架構(gòu)

2024-12-19 10:48:12

2023-07-28 09:23:24

微服務(wù)架構(gòu)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)