分布式部署携程Apollo构建配置中心

一、开场白

在系统设计里我们有很多配置希望独立于系统之外,而又能够被系统实时读取。但是在传统的系统设计里,配置信息通常是耦合在系统内的,比如.net里通常会放在App.config或者web.config里,.net core则是appsettings.json里,这些都不够灵活,如果在制度严格,不允许随便登录服务器的中大型公司里,每次的配置更改就意味着系统的发布,毫无疑问,肯定有带哥要吐槽了,什么垃圾架构!为了解决这一问题,Apollo应运而生,专门用来构建微服务架构里的配置中心,在实际生产项目里为了达到高可用,我们会将其以分布式的方式部署。

 粘贴下官方的下载和文档:

官网:https://github.com/ctripcorp/apollo

Wiki:https://github.com/ctripcorp/apollo/wiki(一切的集成方式和使用方法都在这里)

Issues:https://github.com/ctripcorp/apollo/issues(如果期间有任何问题,请通过这里查找大部分解决方法)

二、Maven编译源码

首先要说明一下,官方提供的Quick Start以及预先打好的安装包如果不进行特殊配置都只能单机搭建使用,通过所以如果你想把Apollo搭建在公有云或者调用放和部署不在同一环境,最好自己编译项目。

我这里使用阿里云搭建Apollo,系统是CentOs 7。

1.首先我们需要在以下地址下载源码:

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

640?wx_fmt=png

2. 源码下载完成后我们需要修改两个地方,Apoolo是微服务架构,使用Eureka实现服务的注册和发现,分布式部署的时候,apollo-configserviceapollo-adminservice需要把自己的IP和端口注册到MetaServer(apollo-configservice本身)Server(apollo-configservice本身)。所以如果实际部署的机器有多块网卡(如docker),或者存在某些网卡的IP是Apollo客户端和Portal无法访问的(如网络安全限制),那么我们就需要在apollo-configserviceapollo-adminservice中做相关限制以避免Eureka将这些网卡的IP注册到Meta Server。

我这里的解决方式是直接指定IP。通过修改apollo-adminservice或apollo-configservice 的bootstrap.yml文件,指定apollo-configservice和apollo-adminservice的IP端口。

解压源码文件,通过 apollo-1.3.0\apollo-adminservice\src\main\resources 找到 bootstrap.yml 文件,添加以下配置:

eureka:
instance:
ip
-address: xx.xx.xx.xx
hostname: ${hostname:
47.99.92.76}
preferIpAddress:
true
status
-page-url-path: /info
health
-check-url-path: /health
client:
serviceUrl:
# This setting will be overridden by eureka.service.url setting
from ApolloConfigDB.ServerConfig or System Property
# see com.ctrip.framework.apollo.biz.eureka.ApolloEurekaClientConfig
defaultZone: http:
//${eureka.instance.hostname}:8080/eureka/
healthcheck:
enabled:
true
eurekaServiceUrlPollIntervalSeconds:
60

management:
health:
status:
order: DOWN, OUT_OF_SERVICE, UNKNOWN, UP

ip-address是我阿里云的公有IP,其它部署环境同理。

通过 apollo-1.3.0\apollo-configservice\src\main\resources 找到 bootstrap.yml 文件,配置同上。

同时我们还需要配置下MySQL数据库的链接信息,通过 apollo-1.3.0\scripts 找到 build.sh 文件,编辑链接信息:

# apollo config db info
apollo_config_db_url
=jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8
apollo_config_db_username=xxx
apollo_config_db_password
=xxx

# apollo portal db info
apollo_portal_db_url
=jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8
apollo_portal_db_username=xxx
apollo_portal_db_password
=xxx

因为我的MySQL就是部署在同一个阿里云上,所以就使用localhost,大家酌情修改。

Apollo依赖于MySQL,我们需要先把其对应的数据库跑出来,通过以下路径加载两个sql文件:

Configdb:apollo-1.3.0\scripts\db\migration\configdb

Portaldb:apollo-1.3.0\scripts\db\migration\portaldb

配置就到这里,接下来我们要安装Maven环境来编译源码:

1.安装maven

wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz

Windows环境通过本文安装:https://blog.csdn.net/Snowprincev/article/details/81670037

2、解压安装

tar -zxvf apache-maven-3.3.9-bin.tar.gz 

mv apache-maven-3.3.9 /usr/local/maven-3.3.9

3、配置环境变量

vi /etc/profile

#在适当的位置添加

export M2_HOME=/usr/local/maven3  (这里需要制定你的安装目录 自定义的哈)

export PATH=$PATH:$JAVA_HOME/bin:$M2_HOME/bin

4、使配置生效

保存退出后运行下面的命令使配置生效,或者重启服务器生效。

source /etc/profile

5、验证版本

mvn -v

6.配置阿里云仓库,国内速度快

在maven的settings.xml 文件里配置mirrors的子节点,添加如下mirror:

<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

7.阿里云cd到源码文件夹路径 apollo-1.3.0\scripts ,执行以下命令编译源码:

该脚本会依次打包apollo-configservice, apollo-adminservice, apollo-portal。

8.编译完成后

获取位于apollo-configservice/target/目录下的apollo-configservice-x.x.x-github.zip。解压后执行scripts/startup.sh即可。如需停止服务,执行scripts/shutdown.sh.

获取位于apollo-adminservice/target/目录下的apollo-adminservice-x.x.x-github.zip。解压后执行scripts/startup.sh即可。如需停止服务,执行scripts/shutdown.sh.

获取位于apollo-portal/target/目录下的apollo-portal-x.x.x-github.zip。解压后执行scripts/startup.sh即可。如需停止服务,执行scripts/shutdown.sh.

OK,上面3个启动后,我们就可以通过Ip:8070 访问Apollo的UI界面的,通过默认的 账户密码登录:apollo/admin

640?wx_fmt=png

640?wx_fmt=png

通过IP:8080访问Eureka的UI界面查看被注册的configure和admin两个进程。

 640?wx_fmt=png

二、新建.Net Core API项目试用

1.新建.net core api项目,通过nuget引入项目包:Com.Ctrip.Framework.Apollo.Configuration。

2.在Program.cs中添加如下代码:

    public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, builder)
=>
{
builder
.AddApollo(builder.Build().GetSection(
"apollo"))
.AddDefault();
})
.UseStartup
<Startup>();
}

3.appsettings.json中进行如下配置,我们这里试用默认自带的SimpleApp测试:

{
"apollo": {
"AppId": "SampleApp",
"MetaServer": "http://47.99.92.76:8080",
"Env": "Dev"
}
}

这里配置的意思是客户端需要通过Eureka查询Configure服务的地址,从而获取配置信息。

640?wx_fmt=png

  private IConfiguration _configuration;

public ValuesController(IConfiguration configuration)
{
_configuration
= configuration;
}

[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{
string title = _configuration["timeout"];
return new string[] { "value1", "value2", title };
}

运行项目查看:

640?wx_fmt=png

OK,运行成功,更多信息大家可以去官方gitHub查看哦,目前博主所在的公司已经使用Apollo很久了,而且.net 端一个分支的维护者还是博主公司架构组的一位同事,就是下面这个:

640?wx_fmt=png

看下使用Apollo后的项目运行图,服务配置数据可以正常请求:

640?wx_fmt=png

今天就到这了,12点睡觉了!!

原文地址:https://www.cnblogs.com/weiBlog/p/10771969.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 
640?wx_fmt=jpeg


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/315921.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[COCI 2017-2018-2]-San

[COCI 2017-2018-2]-San san(1s64M) 游戏世界中有N个楼从左到右排列&#xff0c;从左到右编号为1到N&#xff0c;第i幢楼的高度为Hi,楼上的金币数为Gi,游戏可以从任意一个楼开始且包涵几步。每一步玩家可以从当前位置向右跳&#xff08;可以跳过一些楼&#xff09;但必须跳到…

领域模型架构 eShopOnWeb项目分析 上

一.概述本篇继续探讨web应用架构&#xff0c;讲基于DDD风格下最初的领域模型架构&#xff0c;不同于DDD风格下CQRS架构&#xff0c;二者架构主要区别是领域层的变化。 架构的演变是从领域模型到CQRS, 一开始DDD是用领域模型的分层架构&#xff0c;用单一的领域模型处理业务逻辑…

最小生成树--Boruvka算法

参考文章 介绍 第一次听说这个算法。。 对于最小生成树一定学过prim和krusal&#xff0c;prim复杂度是O(n2)或者O(elogn)O(n^2)或者O(elogn)O(n2)或者O(elogn),krusal复杂度是O(eloge)O(eloge)O(eloge)&#xff0c;这里介绍一下Boruvka算法 Boruvka算法解决某些特定问题非常好…

[NOIP2016]愤怒的小鸟(状压DP)

[NOIP2016]愤怒的小鸟&#xff08;状压DP&#xff09; 题目描述 输入输出格式 输入格式&#xff1a; 第一行包含一个正整数 T&#xff0c;表示游戏的关卡总数。 下面依次输入这 T个关卡的信息。每个关卡第一行包含两个非负整数 n,m&#xff0c;分别表示该关卡中的小猪数量和…

给 asp.net core 写一个简单的健康检查

给 asp.net core 写一个简单的健康检查Intro健康检查可以帮助我们知道应用的当前状态是不是处于良好状态&#xff0c;现在无论是 docker 还是 k8s 还是现在大多数的服务注册发现大多都提供了健康检查机制来检测应用的健康状态&#xff0c;如果应用本身就提供一个健康检查的机制…

从阿里中台战略看企业IT架构转型之道(下)

此文是我阅读《企业IT架构转型之道》一书的学习笔记的下半部分&#xff0c;所有内容出自钟华老师的这本书。上半部分Part1~Part5请点击这里Part 6 异步与缓存原则异步化事务 > 核心是ACID柔性事务 > 基础是CAP理论和BASE理论&#xff0c;因为互联网应用最核心的需求是高可…

CF1543C. Need for Pink Slips

CF1543C. Need for Pink Slips 题意&#xff1a; 题解&#xff1a; 其实具体的计算方法在说明里面都写了&#xff1a;对于第一个数据&#xff1a; 0.2 0.2 0.6 0.2组成方案如下&#xff1a; 就是c和m如果大于v就减&#xff0c;小于v就变成0&#xff0c;到p直接停止 所以直接…

并查集(并茶几)

并查集&#xff08;并茶几&#xff09;的应用 一、What‘s that&#xff1f; 并查集是一种树型的数据结构&#xff0c;用于处理一些不相交集合&#xff08;Disjoint Sets&#xff09;的合并及查询问题。常常在使用中以森林来表示。 ——百度百科 二、How to uphold 0.我们的需…

从阿里中台战略看企业IT架构转型之道(上)

此文是我阅读《企业IT架构转型之道》一书的学习笔记的上半部分&#xff0c;所有内容出自钟华老师的这本书。零、为何阅读《企业IT架构转型之道》在加入X公司后&#xff0c;开始了微服务架构的实践&#xff0c;也开始了共享平台服务的建设&#xff0c;在这方面阿里巴巴的中台战略…

ML.NET机器学习、API容器化与Azure DevOps实践(四):持续集成与k8s持续部署

通过上文所介绍的内容&#xff0c;我们已经完成了RESTful API的开发&#xff0c;现在&#xff0c;就可以使用Azure DevOps来进行持续集成&#xff08;CI&#xff09;和k8s持续部署&#xff08;CD&#xff09;了。本文我会对使用Azure DevOps进行CI/CD的过程中需要注意的地方进行…

P3195 [HNOI2008]玩具装箱

P3195 [HNOI2008]玩具装箱 题意&#xff1a; n件玩具&#xff0c;第i件玩具经过压缩后的一维长度为CiC_iCi​,现在把玩具装入一维容器中&#xff0c;要求&#xff1a; 在一个一维容器中的玩具编号是连续的如果一个一维容器中有多个玩具&#xff0c;那么两件玩具之间要加入一…

卷积与莫比乌斯反演

卷积与莫比乌斯反演 目录 卷积与莫比乌斯反演 0前言 0.1前置技能 0.2问题的引入 1.简单定义 1.1数论函数的定义 1.2卷积的定义 1.3反演的基本形式 2.1莫比乌斯反演 3.1例题&#xff1a;【luogu-P2257 YY的GCD】 题目大意&#xff1a; solution1 solution2 0.前言 莫比…

ML.NET机器学习、API容器化与Azure DevOps实践(三):RESTful API

通过上文所述案例&#xff0c;我们已经选择了最优回归算法来预测学生的综合成绩&#xff0c;并且完成了基于训练数据集的预测模型训练。从实现上&#xff0c;训练好的模型被保存成一个ZIP文件&#xff0c;以便在其它项目中直接调用以完成机器学习的实践场景。在本文中&#xff…

杜教筛

杜教筛 1.概述 杜教筛是用以解决积性函数前缀和的算法。 在学习了莫比乌斯反演之后&#xff0c;杜教筛的过程就会显得简单而自然。 2.基本形式 对于积性函数&#xff0c;我们定义如下函数&#xff1a; 构造积性函数 &#xff0c;使得 显然 &#xff1a; 进一步转化&#xf…

ML.NET机器学习、API容器化与Azure DevOps实践(二):案例

在上文中&#xff0c;我简单地介绍了机器学习以及ML.NET的相关知识&#xff0c;从本讲开始&#xff0c;我会基于一个简单的案例&#xff1a;学生成绩预测&#xff0c;来介绍使用ML.NET进行机器学习以及API部署的基本过程。本案例的数据来源为加州大学尔湾分校的机器学习公开样本…

业界萌新对斯坦纳树的小结

业界萌新对斯坦纳树的小结 0.简介 斯坦纳树问题是组合优化问题&#xff0c;与最小生成树相似&#xff0c;是最短网络的一种。最小生成树是在给定的点集和边中寻求最短网络使所有点连通。而最小斯坦纳树允许在给定点外增加额外的点&#xff0c;使生成的最短网络开销最小。 ——…

cf1208E. Let Them Slide

cf1208E. Let Them Slide 题意&#xff1a; 都放在一个长度为W的框里面。有n个序到&#xff0c;第i个序列的长度是1。这些序到并排放在一起&#xff0c;每一个序列都放在一个长度为w的框里 这些序列可以在框里面滑动&#xff0c;但是不能划出框。 对于每一个位置&#xff0…

结合eShopOnWeb全面认识领域模型架构

一.项目分析在上篇中介绍了什么是"干净架构"&#xff0c;DDD符合了这种干净架构的特点&#xff0c;重点描述了DDD架构遵循的依赖倒置原则&#xff0c;使软件达到了低藕合。eShopOnWeb项目是学习DDD领域模型架构的一个很好案例&#xff0c;本篇继续分析该项目各层的职…

SOS_dp算法

Codeforces博客 简介&#xff1a; 前置知识&#xff1a;状压dp Sum over Subsets dynamic programming&#xff0c;简称Sos dp,状压dp的一种 用一个列题引出SOS dp&#xff1a; 给你一个由2N2^N2N个整数组成的确定数组A&#xff0c;我们需要计算对于任意的x&#xff0c;F(x)所…

微软开源Bing搜索背后的关键算法

微软今天宣布开源了一项 Bing 搜索背后的关键算法 —— SPTAG&#xff0c;它使 Bing 能够快速将搜索结果返回给用户。仅在几年前&#xff0c;网络搜索很简单&#xff0c;用户输入几个关键词然后浏览结果页面。现如今&#xff0c;这些用户可能会在手机上拍照并将其放入搜索框中&…