Apollo源碼分析(一):Apollo簡介 & 架構演進

零 爲什麼要學apollo源碼

1 簡單,Apollo是我如今看起來最"簡單"的源碼
不會像spring封裝了一層又一層,把人繞暈,而apollo沒有那麼多封裝,上手快,咱們學習就應該從簡單的開始,憑什麼非要去學封的像糉子同樣的spring源碼,咱們就是要去學簡簡單單,平時樸素,接地氣的源碼git

2 最接近業務代碼的源碼。並且裏面有大量的業務代碼,而咱們其實平時寫的最多的就是業務,它向咱們展現了大神是如何來寫業務的,如何來配置maven依賴,如何來處理異常,如何來輸入參數判斷github

好比它的maven依賴層次結構
maven依賴spring

它使用不一樣的異常處理類
圖片描述springboot

它對DTO,排序等的使用架構

@RequestMapping(value = "/apps/{appId}/envs/{env}/clusters/{clusterName}/namespaces/{namespaceName}/items", method = RequestMethod.GET)
 public List<ItemDTO> findItems(@PathVariable String appId, @PathVariable String env,
                             @PathVariable String clusterName, @PathVariable String namespaceName,
                             @RequestParam(defaultValue = "lineNum") String orderBy) {

List<ItemDTO> items = configService.findItems(appId, Env.valueOf(env), clusterName, namespaceName);
if ("lastModifiedTime".equals(orderBy)) {
  Collections.sort(items, (o1, o2) -> {

平凡而接地氣,讓咱們有了學習的榜樣app

固然也有比較"高端"的,好比servlet3.0中的DeferredResult用來保持長鏈接maven

@RequestMapping(method = RequestMethod.GET)
public DeferredResult<ResponseEntity<List<ApolloConfigNotification>>> pollNotification(

自定義註解ide

@Import(ApolloConfigRegistrar.class)  //用import註解來載入bean
public @interface EnableApolloConfig {

//用ImportBeanDefinitionRegistrar來註冊bean
public class ApolloConfigRegistrar implements ImportBeanDefinitionRegistrar {
  @Override
  public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {

學習知識老是從皮毛開始,學產品也是從產品功能開始,讓咱們先來看下apollo的應用場景學習

一 應用場景

(載至apollo官方git)測試

1 傳統開發

小A是XX團隊主力開發,有一天產品說要上線一個迪士尼門票內購功能,因爲迪士尼門票很火爆,產品一拍腦殼說,每一個用戶限購5張!

代碼以下:

private static final int MAX_QTY_PER_USER = 5; //產品需求限購5張
if (qty > MAX_QTY_PER_USER ) {
    throw new IllegalStateException(
        String.format("每一個用戶最多購買%d張!", MAX_QTY_PER_USER ));
}

次日中午,因爲內購實在太火爆,產品急匆匆的跑過來對小A說,趕忙改爲每人1張!
小A只好放棄了午餐,改代碼、迴歸測試、上線,整整花了1個小時才搞定。。。

clipboard.png

2 Apollo開發

小B是YY團隊主力開發,有一天產品說要上線一個歡樂谷門票搶購功能,因爲歡樂谷門票很火爆,產品一拍腦殼說,每一個用戶限購5張!
小B吸收了小A的教訓,二話不說把配置寫在了Apollo配置中心

clipboard.png

次日中午,因爲內購實在太火爆,產品急匆匆的跑過來對小B說,趕忙改爲每人1張!
小B不緊不慢的說:10秒內搞定~

clipboard.png

二 Apollo功能一覽

  1. 配置修改實時生效: 配置能夠作到準實時生效,不再用改配置文件從新發版了
  2. 可視化配置管理:配置的後臺管理系統
  3. 權限管理: 權限管理、發佈審覈、操做審計
  4. 環境管理: 統一不一樣環境、不一樣集羣
  5. 版本管理: 版本管理、灰度發佈

三 Apollo核心概念之namespace

  1. 公共類型: 應用之間共享配置
  2. 私有類型:應用獨有的配置
  3. 關聯類型:應用繼承共享配置,並可覆蓋(相似於類的繼承)

clipboard.png

四 搭建Apollo服務

springboot接入很是簡單,只需在maven裏面加個依賴,而後啓動類上加個@EnableApolloConfig就能夠了,而後在配置項上使用@Value註解便可

搭建apollo服務仍是要頗費一番功夫的,參考《apollo開發指南》

五 架構演進

架構V1

相關文章
相關標籤/搜索