背景

SpringBoot引用Apollo(阿波罗)分布式配置管理中心后,Docker中服务启动速度变慢,刚开始启动只需要20s,加入配置后启动需要两分钟。每次部署服务都需要多浪费时间,这是为什么?要怎么解决呢?

在这里插入图片描述

原因

通过分析日志, 每次启动服务,都需要从Apollo服务拉取配置然后处理一分多时间导致总体时间很长

日志如下

[main] INFO  c.c.f.f.i.p.DefaultServerProvider -Environment is set to null. Because it is not available in either (1) JVM system property 'env', (2) OS env variable 'ENV' nor (3) property 'env' from the properties InputStream.
[main] WARN  c.c.f.a.i.DefaultMetaServerProvider -Could not find meta server address, because it is not available in neither (1) JVM system property 'apollo.meta', (2) OS env variable 'APOLLO_META' (3) property 'apollo.meta' from server.properties nor (4) property 'apollo.meta' from app.properties
[main] WARN  c.c.f.apollo.core.MetaDomainConsts -Meta server address fallback to http://apollo.meta for env UNKNOWN, because it is not available in all MetaServerProviders
Started App in 114.872 seconds (JVM running for 118.52)

拉取流程:
在这里插入图片描述

解决

启动本地模式,使用挂载让容器内服务访问的配置文件存在。

步骤1、加入启动参数-Denv=local

示例

java -Denv=local -jar xxx.jar

步骤2、保证配置文件已被拉取且是最新

配置默认路径

Mac/Linux: /opt/data/{appId}/config-cache

Windows: C:\opt\data{appId}\config-cache

本地模式启动日志:

[main] INFO  c.c.f.f.i.p.DefaultServerProvider -Loading opt\settings\server.properties
[main] INFO  c.c.f.f.i.p.DefaultServerProvider -Environment is set to [local] by JVM system property 'env'.
[TID: N/A] [main] WARN  c.c.f.a.spi.DefaultConfigFactory -==== Apollo is in local mode! Won't pull configs from remote server for namespace ! ====

官网地址:
https://www.apolloconfig.com/#/zh/usage/java-sdk-user-guide

小拓展

Apollo

Apollo(阿波罗)是一款可靠的分布式配置管理中心,诞生于携程框架研发部,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。

服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。

Java客户端不依赖任何框架,能够运行于所有Java运行时环境,同时对Spring/Spring Boot环境也有较好的支持。

.Net客户端不依赖任何框架,能够运行于所有.Net运行时环境。

Spring Cloud Config

在Spring Cloud中,有分布式配置中心组件spring cloud config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中。

在spring cloud config 组件中,分两个角色,一是config server,二是config client。

Config Server是一个可横向扩展、集中式的配置服务器,它用于集中管理应用程序各个环境下的配置,默认使用Git存储配置文件内容,也可以使用SVN存储,或者是本地文件存储。

Config Client是Config Server的客户端,用于操作存储在Config Server中的配置内容。

微服务在启动时会请求Config Server获取配置文件的内容,请求到后再启动容器。

Nacos

官网地址:
https://nacos.io/zh-cn/docs/v2/what-is-nacos.html
Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
在这里插入图片描述

服务注册发现和服务健康检测

动态配置服务

动态DNS服务

服务及元数据管理

通过以上流行配置中心介绍,推荐使用nacos。
你们配置中心使用的是什么呢?

在这里插入图片描述

点赞 收藏 关注
读经以研寻义理为本,考据名物为末

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐