![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Apollo
weixin_42073629
这个作者很懒,什么都没留下…
展开
-
Sentinel Dashboard中修改规则同步到Apollo
本文以Apollo存储为例,下一篇介绍Nacos的改在示例。问题分析在实际操作之前,我们先通过下图了解一下之前我们所实现的限流规则持久化方案的配置数据流向图:upload successful蓝色箭头代表了限流规则由配置中心发起修改的更新路径 橙色箭头代表了限流规则由Sentinel Dashboard发起修改的更新路径从图中可以很明显的看到,Sentinel Dashboard与业务服务之间本身是可以互通获取最新限流规则的,这在没有整合配置中心来存储限流规则的时候就已经存在这样的机制。原创 2020-07-03 23:38:01 · 283 阅读 · 0 评论 -
Sentinel使用Apollo存储规则
使用Apollo存储限流规则Sentinel自身就支持了多种不同的数据源来持久化规则配置,目前包括以下几种方式:文件配置 Nacos配置 ZooKeeper配置 Apollo配置本文我们就来一起动手尝试一下,如何使用Apollo来存储限流规则。准备工作下面我们将同时使用到Apollo和Sentinel Dashboard,所以可以先把Apollo和Sentinel Dashboard启动起来。如果还没入门Sentinel Dashboard可以通过文末的系列目录先学习之前的内容。原创 2020-07-03 23:24:11 · 1372 阅读 · 0 评论 -
Spring Cloud 配置中心 Apollo 入门
1. 概述本文我们来学习如何在 Spring Cloud 中使用 Apollo 作为配置中心,实现服务的统一配置管理。FROM《Apollo 设计文档 —— Home》Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。在开始本文之前,胖友需要对 Apollo 进行简单的学习。可以阅读《Apollo 极简入门》文章,将第一二小节看完,在本机搭建.原创 2020-06-18 21:43:11 · 408 阅读 · 0 评论 -
Spring Boot 配置中心 Apollo 入门
1. 概述在《Apollo 极简入门》中,我们已经学习了如何搭建一个 Apollo 服务。如果还没有的胖友,赶紧先去简单学习下,重点是跟着该文「2. 单机部署」小节,自己搭建一个 Apollo 服务。本文,我们来学习下如何在 Spring Boot 中,将 Apollo 作为一个配置中心,实现分布式环境下的配置管理。2. 快速入门示例代码对应仓库:lab-45-apollo-demo。本小节,我们会在 Apollo 服务中定义配置,并使用 并使用@ConfigurationProp.原创 2020-05-23 20:13:41 · 1354 阅读 · 0 评论 -
Apollo 源码解析 —— 客户端配置 Spring 集成(三)之外部化配置
1. 概述老艿艿:本系列假定胖友已经阅读过《Apollo 官方 wiki 文档》,特别是《Spring 整合方式》。???? 因为 Spring 仅仅处于入门水平,所以可能一些地方,表述的灰常业余。本文分享 Spring 外部化配置的集成。我们先看看官方文档的说明:使用上述两种方式的配置形式(基于 XML 的配置和基于Java的配置)后,Apollo 会在 Spring 的postProcessBeanFactory阶段注入配置到 Spring 的 Environment中,...原创 2020-05-29 23:43:59 · 316 阅读 · 0 评论 -
Apollo 源码解析 —— 客户端配置 Spring 集成(二)之注解配置
1. 概述老艿艿:本系列假定胖友已经阅读过《Apollo 官方 wiki 文档》,特别是《Spring 整合方式》。???? 因为 Spring 仅仅处于入门水平,所以可能一些地方,表述的灰常业余。本文分享 Spring 注解 + Java Config 配置的集成,包括两方面:Apollo Config 集成到 Spring PropertySource 体系中。 自动更新Spring Placeholder Values ,参见PR #972。2. @EnableApol...原创 2020-05-29 23:40:01 · 1684 阅读 · 0 评论 -
Apollo 源码解析 —— 客户端配置 Spring 集成(一)之 XML 配置
1. 概述老艿艿:本系列假定胖友已经阅读过《Apollo 官方 wiki 文档》,特别是《Spring 整合方式》。???? 因为 Spring 仅仅处于入门水平,所以可能一些地方,表述的灰常业余。从本文开始,我们来看看 Apollo 客户端的配置,是如何和 Spring 集成的。笔者会分成三篇文章,分别是:XML 配置 【本文】 注解配置 外部化配置其中,注解配置会包含Java Config,实在不好拆分 ???? 。推荐一篇有趣的文章,《用小说的形式讲解Spring(3) ——原创 2020-05-29 23:37:35 · 1828 阅读 · 0 评论 -
Apollo 源码解析 —— 客户端 API 配置(四)之 ConfigRepository
1. 概述老艿艿:本系列假定胖友已经阅读过《Apollo 官方 wiki 文档》,特别是《Java 客户端使用指南》。本文接《Apollo 源码解析 —— 客户端 API 配置(二)之一览》一文,分享 ConfigRepository 接口,及其子类,如下图:ConfigRepository、AbstractConfigRepository、RemoteConfigRepository ,在《Apollo 源码解析 —— Client 轮询配置》中已经完整解析,所以本文仅...原创 2020-05-29 23:34:52 · 1124 阅读 · 1 评论 -
Apollo 源码解析 —— 客户端 API 配置(三)之 ConfigFile
1. 概述老艿艿:本系列假定胖友已经阅读过《Apollo 官方 wiki 文档》,特别是《Java 客户端使用指南》。本文接《Apollo 源码解析 —— 客户端 API 配置(二)之一览》一文,分享 ConfigFile 接口,及其子类,如下图:从实现上,ConfigFile 和 Config 超级类似,所以本文会写的比较简洁。Config 基于KV数据结构。 ConfigFile 基于String数据结构。2. ConfigFile在《Apollo ...原创 2020-05-29 23:31:08 · 762 阅读 · 0 评论 -
Apollo 源码解析 —— 客户端 API 配置(二)之 Config
1. 概述老艿艿:本系列假定胖友已经阅读过《Apollo 官方 wiki 文档》,特别是《Java 客户端使用指南》。本文接《Apollo 源码解析 —— 客户端 API 配置(一)之一览》一文,分享 Config 接口,及其子类,如下图:2. Config在《Apollo 源码解析 —— 客户端 API 配置(一)之一览》的「3.1 Config」中,有详细分享。3. AbstractConfigcom.ctrip.framework.apollo.in...原创 2020-05-29 23:19:27 · 1203 阅读 · 1 评论 -
Apollo 源码解析 —— 客户端 API 配置(一)之一览
1. 概述老艿艿:本系列假定胖友已经阅读过《Apollo 官方 wiki 文档》,特别是《Java 客户端使用指南》。本文,我们来一览Apollo客户端配置的 Java API 的实现,从而对它有整体的认识。再在之后的文章,我会写每个组件的具体代码实现。涉及类如下图:2. ConfigServicecom.ctrip.framework.apollo.ConfigService,客户端配置服务,作为配置使用的入口。2.1 构造方法/** * 单例 *...原创 2020-05-29 23:10:33 · 1339 阅读 · 0 评论 -
Apollo 源码解析 —— 服务的注册与发现
1. 概述老艿艿:本系列假定胖友已经阅读过《Apollo 官方 wiki 文档》,特别是《架构模块》。本文分享 Apollo服务的注册与发现。如下图所示:各服务的介绍,见《各模块概要介绍》。 默认情况下,Config Service、Meta Service、Eureka Server统一部署在Config Service中。如果想要使用单独的 Eureka Server,参见《将 Config Service 和 Admin Service 注册到单独的 Eur...原创 2020-05-28 23:30:57 · 2422 阅读 · 0 评论 -
Apollo 源码解析 —— OpenAPI 认证与授权(二)之授权
1. 概述老艿艿:本系列假定胖友已经阅读过《Apollo 官方 wiki 文档》,特别是《Apollo 开放平台》。本文接《Apollo 源码解析 —— OpenAPI 认证与授权(一)之认证》,侧重在授权部分。和 Portal 的授权一样:具体每个URL 的权限校验,通过在对应的方法上,添加@PreAuthorize方法注解,配合具体的方法参数,一起校验功能 + 数据级的权限校验。2. 权限模型和 Portal 使用相同的权限模型,差别在于 UserRole ...原创 2020-05-28 23:22:02 · 801 阅读 · 0 评论 -
Apollo 源码解析 —— OpenAPI 认证与授权(一)之认证
1. 概述老艿艿:本系列假定胖友已经阅读过《Apollo 官方 wiki 文档》,特别是《Apollo 开放平台》。考虑到Portal 的认证与授权分成了两篇,所以本文分享 OpenAPI 的认证与授权,侧重在认证部分。在《Apollo 开放平台》文档的开头:Apollo 提供了一套的 Http REST 接口,使第三方应用能够自己管理配置。虽然 Apollo 系统本身提供了 Portal 来管理配置,但是在有些情景下,应用需要通过程序去管理配置。OpenAPI...原创 2020-05-28 23:11:37 · 1476 阅读 · 0 评论 -
Apollo 源码解析 —— Portal 认证与授权(二)之授权
1. 概述老艿艿:本系列假定胖友已经阅读过《Apollo 官方 wiki 文档》,特别是《Portal 实现用户登录功能》。本文接《Apollo 源码解析 —— Portal 认证与授权(一)之认证》,侧重在授权部分。在上一文中,我们提到:具体每个URL 的权限校验,通过在对应的方法上,添加@PreAuthorize方法注解,配合具体的方法参数,一起校验功能 + 数据级的权限校验。2. 权限模型常见的权限模型,有两种:RBAC 和 ACL 。如果不了解的胖友,可...原创 2020-05-28 23:03:44 · 621 阅读 · 0 评论 -
Apollo 源码解析 —— Portal 认证与授权(一)之认证
1. 概述老艿艿:本系列假定胖友已经阅读过《Apollo 官方 wiki 文档》,特别是《Portal 实现用户登录功能》。本文分享 Portal 的认证与授权,侧重在认证部分。在《Portal 实现用户登录功能》文档的开头:Apollo 是配置管理系统,会提供权限管理(Authorization),理论上是不负责用户登录认证功能的实现(Authentication)。所以 Apollo 定义了一些SPI用来解耦,Apollo 接入登录的关键就是实现这些 SPI 。...原创 2020-05-28 21:57:20 · 1382 阅读 · 0 评论 -
Apollo 源码解析 —— Config Service 操作审计日志 Audit
1. 概述老艿艿:本系列假定胖友已经阅读过《Apollo 官方 wiki 文档》本文分享 Config Service操作审计日志 Audit。在每次在做 ConfigDB 写操作( 增、删、改 )操作时,都会记录一条 Audit 日志,用于未来的审计追溯。老艿艿:这种实践方式,非常适用于我们做的管理平台。2. Auditcom.ctrip.framework.apollo.biz.entity.Audit,继承 BaseEntity 抽象类,Audit实体。代码如下:...原创 2020-05-28 21:31:21 · 218 阅读 · 0 评论 -
Apollo 源码解析 —— 服务自身配置 ServerConfig
1. 概述老艿艿:本系列假定胖友已经阅读过《Apollo 官方 wiki 文档》Portal、Config Service、Admin Service 等等服务,自身需要配置服务。一种实现是,基于配置文件,简单方便。但是,不方便统一管理和共享。因此,Apollo 基于数据库实现类配置表 ServerConfig 。老艿艿:如果胖友的系统暂时没有使用配置中心,可以基于数据库实现类配置表 ServerConfig ,实现业务系统里面的配置功能,短平快。 配合 Redis 的 PUB/S.原创 2020-05-28 20:57:22 · 928 阅读 · 0 评论 -
Apollo 源码解析 —— Portal 灰度全量发布
1. 概述老艿艿:本系列假定胖友已经阅读过《Apollo 官方 wiki 文档》,特别是《Apollo 官方 wiki 文档 —— 灰度发布使用指南》。本文接《Apollo 源码解析 —— Portal 灰度发布》,分享灰度全量发布。我们先来看看官方文档对灰度全量发布的使用指南,来理解下它的定义和流程。如果灰度的配置测试下来比较理想,符合预期,那么就可以操作【全量发布】。全量发布的效果是:灰度版本的配置会合并回主版本,在这个例子中,就是主版本的 timeout 会被更...原创 2020-05-28 20:47:19 · 378 阅读 · 0 评论 -
Apollo 源码解析 —— Portal 灰度发布
1. 概述老艿艿:本系列假定胖友已经阅读过《Apollo 官方 wiki 文档》,特别是《Apollo 官方 wiki 文档 —— 灰度发布使用指南》。灰度发布,实际上是子Namespace (分支Namespace )发布 Release 。所以,调用的接口和《Apollo 源码解析 —— Portal 发布配置》是一样的。差异点,在于apollo-biz项目中,ReleaseService#publish(...)方法中,多了一个处理灰度发布的分支逻辑。2. R...原创 2020-05-27 01:46:13 · 395 阅读 · 0 评论 -
Apollo 源码解析 —— Portal 配置灰度规则
1. 概述老艿艿:本系列假定胖友已经阅读过《Apollo 官方 wiki 文档》,特别是《Apollo 官方 wiki 文档 —— 灰度发布使用指南》。本文分享Portal 配置灰度规则的流程,整个过程涉及 Portal、Admin Service ,如下图所示:对于一个子Namespace 仅对应一条有效灰度规则 GrayReleaseRule 记录。每次变更灰度规则时,标记删除老的灰度规则,新增保存新的灰度规则。 变更灰度配置完成后,会发布一条 ReleaseMessage...原创 2020-05-27 01:35:09 · 413 阅读 · 0 评论 -
Apollo 源码解析 —— Portal 创建灰度
1. 概述老艿艿:本系列假定胖友已经阅读过《Apollo 官方 wiki 文档》,特别是《Apollo 官方 wiki 文档 —— 灰度发布使用指南》。本文分享Portal 创建灰度的流程,整个过程涉及 Portal、Admin Service ,如下图所示:创建灰度,调用的是创建 Namespace分支的 API 。通过创建的子 Namespace ,可以关联其自己定义的 Cluster、Item、Release 等等。关系如下所图所示:创建 Namespace分支时:...原创 2020-05-27 01:27:36 · 179 阅读 · 0 评论 -
Apollo 源码解析 —— Config Service 记录 Instance
1. 概述老艿艿:本系列假定胖友已经阅读过《Apollo 官方 wiki 文档》。在 Portal 的应用详情页,我们可以看到每个 Namespace 下的实例列表。如下图所示:实例( Instance ),实际就是 Apollo 的客户端。本文分享实例相关的实体和如何存储的。2. 实体2.1 Instancecom.ctrip.framework.apollo.biz.entity.Instance,Instance实体。代码如下:@Entity@Table(...原创 2020-05-27 01:20:41 · 465 阅读 · 0 评论 -
Apollo 源码解析 —— Client 轮询配置
1. 概述老艿艿:本系列假定胖友已经阅读过《Apollo 官方 wiki 文档》。本文分享 Client 如何通过轮询的方式,从 Config Service 读取配置。Client 的轮询包括两部分:RemoteConfigRepository ,定时轮询 Config Service 的配置读取/configs/{appId}/{clusterName}/{namespace:.+}接口。 接口的逻辑,在《Apollo 源码解析 —— Config Service 配置读取...原创 2020-05-27 00:58:24 · 477 阅读 · 0 评论 -
Apollo 源码解析 —— Config Service 配置读取接口
1. 概述老艿艿:本系列假定胖友已经阅读过《Apollo 官方 wiki 文档》。本文接《Apollo 源码解析 —— Config Service 通知配置变化》一文,分享 Config Service 配置读取的接口的实现。在上文,我们看到通知变化接口,仅返回通知相关的信息,而不包括配置相关的信息。所以 Config Service 需要提供配置读取的接口。???? 为什么不在通知变化的同时,返回最新的配置信息呢?老艿艿请教了作者,下一篇文章进行分享。OK,让我们开始看看具体的代码.原创 2020-05-27 00:40:15 · 1085 阅读 · 0 评论 -
Apollo 源码解析 —— Config Service 通知配置变化
1. 概述老艿艿:本系列假定胖友已经阅读过《Apollo 官方 wiki 文档》。本文接《Apollo 源码解析 —— Admin Service 发送 ReleaseMessage》一文,分享配置发布的第四步,NotificationControllerV2 得到配置发布的 AppId+Cluster+Namespace 后,会通知对应的客户端。FROM《Apollo配置中心设计》的2.1.2 Config Service 通知客户端的实现方式客户端会发起一个Http...原创 2020-05-26 01:11:32 · 743 阅读 · 0 评论 -
Apollo 源码解析 —— Admin Service 发送 ReleaseMessage
1. 概述老艿艿:本系列假定胖友已经阅读过《Apollo 官方 wiki 文档》。本文接《Apollo 源码解析 —— Portal 发布配置》一文,分享配置发布的第三步,Admin Service 发布配置后,发送 ReleaseMessage 给各个Config Service。FROM《Apollo配置中心设计》的2.1.1 发送ReleaseMessage的实现方式Admin Service 在配置发布后,需要通知所有的 Config Service 有配置发布...原创 2020-05-26 00:27:01 · 415 阅读 · 0 评论 -
Apollo 源码解析 —— Portal 发布配置
1. 概述从本文开始,我们进入 Apollo最最最核心的流程配置发布后的实时推送设计。在配置中心中,一个重要的功能就是配置发布后实时推送到客户端。下面我们简要看一下这块是怎么设计实现的。上图简要描述了配置发布的大致过程:用户在 Portal 操作配置发布 Portal 调用 Admin Service 的接口操作发布 Admin Service 发布配置后,发送 ReleaseMessage 给各个Config Service Config Service 收到 Rel...原创 2020-05-25 23:21:46 · 465 阅读 · 0 评论 -
Apollo 源码解析 —— Admin Service 锁定 Namespace
1. 概述本文分享Admin Service 锁定 Namespace。可通过设置ConfigDB的 ServerConfig 的"namespace.lock.switch"为"true"开启。效果如下:???? 一次配置修改只能是一个人 ???? 一次配置发布只能是另一个人也就是说,开启后,一次配置修改并发布,需要两个人。默认为"false",即关闭。2. NamespaceLockcom.ctrip.framework.apollo.biz.entity.Namespa...原创 2020-05-25 23:08:07 · 394 阅读 · 0 评论 -
Apollo 源码解析 —— Portal 批量变更 Item
1. 概述老艿艿:本系列假定胖友已经阅读过《Apollo 官方 wiki 文档》。本文接《Apollo 源码解析 —— Portal 创建 Item》文章,分享 Item 的批量变更。对于yamlymljsonxml数据类型的 Namespace ,仅有一条 Item 记录,所以批量修改实际是修改该条Item 。 对于properties数据类型的 Namespace ,有多条 Item 记录,所以批量变更是多条Item 。整体流程如下图:老艿艿:因为...原创 2020-05-25 00:10:48 · 502 阅读 · 0 评论 -
Apollo 源码解析 —— Portal 创建 Cluster
1. 概述老艿艿:本系列假定胖友已经阅读过《Apollo 官方 wiki 文档》。本文分享Portal 创建 Cluster的流程,整个过程涉及 Portal、Admin Service ,如下图所示:下面,我们先来看看 Cluster 的实体结构老艿艿:因为 Portal 是管理后台,所以从代码实现上,和业务系统非常相像。也因此,本文会略显啰嗦。2. Clustercom.ctrip.framework.apollo.biz.entity.Cluster,继承...原创 2020-05-25 00:08:58 · 193 阅读 · 0 评论 -
Apollo 源码解析 —— Portal 创建 App
1. 概述老艿艿:本系列假定胖友已经阅读过《Apollo 官方 wiki 文档》。本文分享Portal 创建 App的流程,整个过程涉及 Portal、Admin Service ,如下图所示:下面,我们先来看看 App 的实体结构老艿艿:因为 Portal 是管理后台,所以从代码实现上,和业务系统非常相像。也因此,本文会略显啰嗦。2. App在apollo-common项目中,com.ctrip.framework.apollo.common.entity...原创 2020-05-25 00:08:09 · 287 阅读 · 0 评论 -
Apollo 源码解析 —— Portal 创建 Item
1. 概述老艿艿:本系列假定胖友已经阅读过《Apollo 官方 wiki 文档》。Item ,配置项,是 Namespace 下最小颗粒度的单位。在 Namespace 分成五种类型:propertiesymlyamljsonxml。其中:properties:每一行配置对应一条Item 记录。 后四者:无法进行拆分,所以一个Namespace仅仅对应一条Item 记录。本文先分享Portal 创建类型为 properties 的 Namespace 的 Ite...原创 2020-05-25 00:10:29 · 375 阅读 · 0 评论 -
Apollo 源码解析 —— Portal 关联 Namespace
1. 概述老艿艿:本系列假定胖友已经阅读过《Apollo 官方 wiki 文档》,特别是《Apollo 官方 wiki 文档 —— 核心概念之“Namespace”》。本文分享Portal 关联 Namespace的流程,整个过程涉及 Portal、Admin Service ,如下图所示:老艿艿:因为 Portal 是管理后台,所以从代码实现上,和业务系统非常相像。也因此,本文会略显啰嗦。2. Portal 侧2.1 NamespaceController在...原创 2020-05-25 00:10:16 · 237 阅读 · 0 评论 -
Apollo 源码解析 —— Portal 创建 Namespace
1. 概述老艿艿:本系列假定胖友已经阅读过《Apollo 官方 wiki 文档》,特别是《Apollo 官方 wiki 文档 —— 核心概念之“Namespace”》。本文分享Portal 创建 Namespace的流程,整个过程涉及 Portal、Admin Service ,如下图所示:下面,我们先来看看 AppNamespace 和 Namespace 的实体结构老艿艿:因为 Portal 是管理后台,所以从代码实现上,和业务系统非常相像。也因此,本文会略显啰嗦。...原创 2020-05-25 00:09:57 · 411 阅读 · 0 评论 -
Apollo 源码解析 —— 调试环境搭建
1. 依赖工具老艿艿:本文参考《Apollo 官方文档 —— 开发指南》,进行精简。官方很良心,文档很细心。建议胖友后面阅读 Apollo设计文档:《Apollo 配置中心介绍》 《Apollo 配置中心设计》 《Apollo核心概念之“Namespace”》JDK :1.8+ MySQL :5.6.5+ Maven IntelliJ IDEA2. 创建数据库Apollo 服务端共有两个数据库:ApolloPortalDB ApolloConfigDB在 ...原创 2020-05-24 14:20:09 · 455 阅读 · 0 评论 -
Apollo 极简入门
1. 概述Apollo 算国内开源中间件,文档完善程度最好的产品,可能唯一能够比肩的只有 Dubbo 的文档了。1.1 介绍Apollo 是什么?其官方文档自我介绍如下:FROM《Apollo 设计文档 —— Home》Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。服务端基于 Spring Boot 和 Spring Cloud.原创 2020-05-24 00:50:44 · 373 阅读 · 0 评论