1. 程式人生 > >基於winserver部署Apollo初次體驗(附.net客戶端demo)

基於winserver部署Apollo初次體驗(附.net客戶端demo)

前言

配置中心伴隨著這幾年分散式系統演變和微服務架構的興起,已經成為必不可少的需求之一。試下一下如果哪天公司的所有應用服務,從公司伺服器遷移到雲服務,成千上萬的配置,修改起來是多麼耗時費勁的事(我們公司就是……)。

配置中心主要有以下特點:

  • 配置動態化
  • 管理集中化

修改配置不需要重新發布配置檔案,而且可以複用,同一個的配置只需要修改一次,省時省力。通過後臺統一管理,修改、檢視,部分產品還支援配置版本管理。

Why Apollo

  • 國產
  • 開源
  • 功能強大

首先是支援國產,同時在遇到問題也可以良好的和國人交流溝通。其次功能很全,滿足公司的所有需要,不需要二次開發。

優勢

阿波羅的功能非常強大,幾乎滿足一般的分散式系統的使用要求,重點主要如下:

  • 配置多維度
    • application (應用)
    • environment (環境)
    • cluster (叢集)
    • namespace (名稱空間)
  • 版本釋出管理
    • 歷史檢視
    • 版本回滾
  • 後臺許可權管理
    • 釋出稽核
    • 操作審計
  • 更新機制
  • 客戶端監控
    • 客戶端例項檢視
    • 配置實用例項檢視

缺點

強大的功能,必然伴隨少許缺點:

  • 一定的學習成本
  • 部署繁雜

官方文件說明部署簡單,我認為不然,依賴jdk1.8,(我試了1.9部署Quick Start版本失敗了),mysql,指令碼需要自己匯入,在windows平臺還需要gitbash。

總的來說利大於弊,還是值得去使用的。

準備

部署

注意jdk的環境變數配置

匯入指令碼

在剛下載apollo-build-scripts裡sql目錄下的兩個指令碼匯入到mysql裡

apolloconfigdb.sql

apolloportaldb

修改專案資料庫配置

編輯demo.sh,找到下面的配置項,修改為對應的資料庫資訊

# apollo config db info
apollo_config_db_url=jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8
apollo_config_db_username=root
apollo_config_db_password
=123456789 # apollo portal db info apollo_portal_db_url=jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8 apollo_portal_db_username=root apollo_portal_db_password=123456789

啟動

開啟cmd,切換到剛下載的apollo-build-scripts目錄下。

cd C:\Users\chengong\source\repos\apollo-build-scripts

demo.sh start
==== starting service ====
Service logging file is ./service/apollo-service.log
Started [10768]
Waiting for config service startup.......
Config service started. You may visit http://localhost:8080 for service status now!
Waiting for admin service startup....
Admin service started
==== starting portal ====
Portal logging file is ./portal/apollo-portal.log
Started [10846]
Waiting for portal startup......
Portal started. You can visit http://localhost:8070 now!

如果控制檯輸出以上為啟動成功

初體驗

輸入瀏覽器輸入http://localhost:8070

賬號:apollo

密碼:admin

可以見到預設的有一個Sample App專案,點進去,就可以見到下圖

.net客戶端

建立一個控制檯專案,下載apollo.net包

nuget install apollo.net
static void Main(string[] args)
        {
            Config config = ConfigService.GetAppConfig();
            config.ConfigChanged += OnChanged;

            while (true)
            {
                Thread.Sleep(500);
                var timeout = config.GetProperty("timeout", "");
                Console.WriteLine(timeout);
            }
        }

        private static void OnChanged(object sender, ConfigChangeEventArgs changeEvent)
        {
            Console.WriteLine("Changes for namespace {0}", changeEvent.Namespace);
            foreach (string key in changeEvent.ChangedKeys)
            {
                ConfigChange change = changeEvent.GetChange(key);
                Console.WriteLine("Change - key: {0}, oldValue: {1}, newValue: {2}, changeType: {3}", change.PropertyName, change.OldValue, change.NewValue, change.ChangeType);
            }
        }

另外在app.config填寫以下變數

 <!-- Change to the actual app id -->
    <add key="AppID" value="SampleApp"/>
    <!-- Should change the apollo config service url for each environment -->
    <add key="Apollo.DEV.Meta" value="http://localhost:8080"/>
    <add key="Apollo.FAT.Meta" value="http://localhost:8080"/>
    <add key="Apollo.UAT.Meta" value="http://localhost:8080"/>
    <add key="Apollo.PRO.Meta" value="http://localhost:8080"/>

啟動控制檯程式

修改配置併發布

此時返回控制檯程式檢視

這個時候我們通過監聽程式監聽到配置在後臺被修改了,同時能獲取到最新配置值

配置更新的推拉機制

從上圖看到,阿波羅配置更新具備推和拉兩種方式,在後臺修改併發布後,會及時將配置推給客戶端,假如沒推成功,客戶端會通過後臺執行緒定時更新。

如果客戶端與服務端發生了網路分割槽,此時可以通過客戶端獲取本地檔案快取的配置資料,讓系統正常運作。

快取資料預設儲存在C:\opt\data

從以上來看,阿波羅在可用性設計上還是很不錯的。

結束

最近公司在選型配置中心,因此在玩阿波羅的時候同時記錄其過程。

客戶端demo:https://github.com/SkyChenSky/Apollo.Demo

相關推薦

基於winserver部署Apollo初次體驗.net客戶demo

前言 配置中心伴隨著這幾年分散式系統演變和微服務架構的興起,已經成為必不可少的需求之一。試下一下如果哪天公司的所有應用服務,從公司伺服器遷移到雲服務,成千上萬的配置,修改起來是多麼耗時費勁的事(我們公司就是……)。 配置中心主要有以下特點: 配置動態化 管理集中化 修改配置不需要重新發布配置

95後實習生的遠程辦公體驗asp.net mvcC#技術棧

合作 第一天 好的 我想 能夠 工作 陽光 宿舍 工作效率 這個月我們做了一件別人看起來很瘋狂的事情,就是讓一批95後的實習生實行遠程辦公,效果還不錯,於是寫此文總結一下。 其實認真算算,我自己的遠程工作經驗有十年了吧,在北京工作的時候天氣不好就申請在

C# Socket簡單例子伺服器與客戶通訊

這個例子只是簡單實現瞭如何使用 Socket 類實現面向連線的通訊。注意:此例子的目的只是為了說明用套接字寫程式的大概思路,而不是實際專案中的使用程式。在這個例子中,實際上還有很多問題沒有解決,如訊息邊界問題、埠號是否被佔用、訊息命令的解析問題等。。下面是兩個程式的程式碼,(

基於winserverApollo配置中心分布式&集群部署實踐正確部署姿勢

比較 www. brush apollo 多臺 管理 align 惡心 name 前言 前幾天對Apollo配置中心的demo進行一個部署試用,現公司已決定使用,這兩天進行分布式部署的時候,每一步都踩著坑過來的。因此寫文檔與需要的朋友分享。 此篇文章不代表

Android 音視頻深入 十五 FFmpeg 實現基於Rtmp協議的推流源碼下載

音視頻 FFmpeg Rtmp 推流 源碼地址https://github.com/979451341/Rtmp 1.配置RTMP服務器 這個我不多說貼兩個博客分別是在mac和windows環境上的,大家跟著弄MAC搭建RTMP服務器https://www.jianshu.com/p/6fce

基於shatter tookit外掛實現場景模型切割外掛及核心程式碼

前言 專案需求就是,把當前視野內的模型摳下來,然後資料匯出供後邊的模組使用,是一個三維模擬相關的專案。 專案結構比較簡單,主要分三個部分: 1.獲取視野內不需要切割的模型列表,挨個克隆並寫入結果集陣列 2.獲取視野邊界線上的需要切割的模型列表,按順序克隆切割並把視野內的部分寫入結果集陣列

Spring boot基於redis實現附近的人原始碼下載

核心原始碼 public class NearbyPO { @NotNull(message = "id值不能為空") private Integer id; @NotBlank(message

基於Redis的Bloomfilter去重Python程式碼

“去重”是日常工作中會經常用到的一項技能,在爬蟲領域更是常用,並且規模一般都比較大。去重需要考慮兩個點:去重的資料量、去重速度。為了保持較快的去重速度,一般選擇在記憶體中進行去重。 資料量不大時,可以直接放在記憶體裡面進行去重,例如python可以使用set()

Jrebel外掛的啟用與熱部署配置詳細教程最新可用Jrebel啟用碼地址

寫在前面的話 JRebel是一款JAVA虛擬機器外掛,它使得JAVA程式設計師能在不進行重部署的情況下,即時看到程式碼的改變對一個應用程式帶來的影響。 針對Eclipse,MyEclipse, STS等開發工具 1 Jreble的離線配置 1.1 Jreble配置項的

基於的樸素貝葉斯的文字分類完整程式碼(spark/java

本文主要包括以下內容: 1)模型訓練資料生成(demo) 2 ) 模型訓練(spark+java),資料儲存在hdfs上 3)預測資料生成(demo) 4)使用生成的模型進行文字分類。 一、訓練資料生成 spark mllib模型訓練的輸入資料格

基於scrapy_redis部署scrapy分散式爬蟲詳細步驟

使用命令列工具下載工具包 scrapy_redis,在命令列敲下面程式碼並回車, 出現Success類字元表示下載成功 使用pycharm 開啟專案,找到settings檔案,配置scrapy專案使用的 排程器及過濾器! 這裡資料儲存到redis中可以

自己主動升級系統的設計與實現續2 -- 添加斷點續傳功能 最新源代碼

blog down 決定 top lin dom itl com 關於 一.緣起      之前已經寫了兩篇關於自己主動升級系統OAUS的設計與實現的文章(第一篇、第二篇)。在為OAUS服務端添加自己主動檢測文件變更的功能(這樣每次部署版本號升級時,能夠節省非常多時間。

node.js對mongodb的連接&增刪改查async同步流程控制

color var literal int lba node () n! node.js 1.啟動mongodb數據庫 官網下載mongodb數據庫 在mongodb根目錄下創建文件夾:假設取名為test。 我們認為test就是mongodb新建的數據庫一枚。 創建批處理文

centos7下部署iptables環境紀錄關閉默認的firewalle

配置 highlight pad localhost custom -a 記錄 ont fire CentOS7默認的防火墻不是iptables,而是firewall.由於習慣了用iptables作為防火墻,所以在安裝好centos7系統後,會將默認的firewall關

Memcached 安裝腳本服務器自啟動

memcached shell 安裝腳本 一、目的 為簡化Memcached快速安裝部署,並添加至服務啟動項,開機自啟動。 二、腳本 2.1 github地址github鏈接2.2 腳本內容 #!/bin/bash #mail:[email protected] #function:auto i

使用for循環和while循環打印三角形九九乘法表實現

九九乘法表使用for / while循環輸出帶*三角形for循環方法: i = 0 for tmp in range(6): print("*"*tmp) while循環方法: i = 0 while i <= 5: print("*"*i) i += 1 效果如下: * **

docker stack 部署容器監控方案cAdvisor、Prometheus、Grafana

自己的 cadvisor local -- extern 命令 業務 自己 reat =============================================== 2018/7/8_第1次修改 ccb_warl

部署日誌服務器網絡設備部分

side center 信息 0.10 cat warnings lis aci -i Cisco設備 logging on logging 10.100.117.36 //配置日誌主機地址 logging trap 6

我是如何零基礎自學轉行人工智能的十問十答

心理 又是 水平 learn back fan 其中 培訓 通過 每個字都是經驗所得,都是站在一個零基礎的人的角度寫的,純手打+網上優秀資源整合,希望大家能每個字都認真看。接下來文章會側重在以下幾方面1、零基礎如何進行人工智能的自學(以找工作為目的),包括路徑規劃,怎麽學等

微信小程序之輪播圖的實現效果圖和源碼

class git 源代碼 nload car 源碼 github項目 小程序 swiper 不管是做APP開發還是小程序,移動端離不開輪播圖的功能,下面就寫一個小程序的輪播圖功能分享給大家 效果圖: step1:頁面index.wxml代碼 <!--index.w