基於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 類實現面向連線的通訊。注意:此例子的目的只是為了說明用套接字寫程式的大概思路,而不是實際專案中的使用程式。在這個例子中,實際上還有很多問題沒有解決,如訊息邊界問題、埠號是否被佔用、訊息命令的解析問題等。。下面是兩個程式的程式碼,(
基於winserver的Apollo配置中心分布式&集群部署實踐(正確部署姿勢)
比較 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