Apollo不更新配置了?

问题描述 近期改造服务调用,需要使用Apollo配置进行灵活切换,上线后发现有些机器配置生效,有些配置未生效,开发小伙伴反馈此问题发生有一段时间 问题排查 机器排查 对线上机器进行排查,发现有几台机器根本没有拉取新的应用配置 指定问题机器信息 进入到问题机器查看本地Apollo文件信息 ... -rw-rw-r-- 1 mqq mqq 3429 May 19 15:32 main-webapp+default+CoopReader.baipai.switch.properties -rw-r--r-- 1 mqq mqq 1621 Jul 4 15:39 main-webapp+default+CoopReader.switcher.properties -rw-r--r-- 1 mqq mqq 89 Aug 26 11:18 main-webapp+default+CoopReader.personal.menu.properties -rw-r--r-- 1 mqq mqq 3958 Aug 26 15:45 main-webapp+default+CoopReader.common.config.propertie 可以看到文件的最新日期在8月26日 Apollo 服务的问题? 先前小伙伴反应问过运维相关问题,得到的结论是Apollo没有改动,且服务配置不是完全不可用,此方向排除 服务的问题? 从目前得到的信息可以确认是某几台机器上的Apollo client没有去拉取最新的配置信息 为什么没有拉取到最新配置? 先来梳理一下Apollo的使用流程: 业务对Apollo的访问都基于 L5 的方式 目前业务工程使用cloudlevel5.Protocol来获取L5的信息与Apollo Portal进行交互 <dependency> <groupId>com.yuewen</groupId> <artifactId>userbase-l5-system</artifactId> <version>1.0.3.Final</version> </dependency> 为什么业务机没有与Apollo portal交互? 怀疑与出问题的机器获取不到L5信息有关 问题猜测验证 大体知道问题出在哪了,下面就需要进行验证了。最简单的方式就是打印出Apollo的相关日志信息对猜测进行验证,但是目前业务的日志级别设置的 ERROR ,啥也看不到 修改业务日志级别? 现在需要打印aplllo相关的日志级别为 Info ,需要修改Logback中配置如下: <logger name="com.ctrip.framework.apollo" level="info"/> 但是还是需要发版本上线,未免太麻烦,有没有其它办法? Arthas动态修改日志级别 现在已经有非常成熟的线上调试工具了,Arthas就能实现对Logback的动态日志修改,二话不说,直接机器上修改验证 在问题机器上启动arthas java -jar arthas-boot.jar 选择要处理的应用(10384)进入到arthas ...

2022-09-16 · 1 min · 208 words · tomyli

Apollo Client自定义问题拾遗

由于公司很多服务要接入Apollo配置中心,并且对于项目的接入有网络要求,根据官方说明,需要自定义Client来完成 接入步骤 新建maven项目 在Idea中新建maven项目,基于quickstart构建 增加项目依赖 官方说明的建议在新的client中依赖Apollo官方的client,再根据业务进行扩展,所以maven依赖apollo-client,公司项目的网络访问需要通过L5来进行,所以还要依赖L5的jar,目前这个jar包没有maven坐标,只能以lib方式引入 自定义MetaServer 关键的部分,自定义满足公司网络条件的MetaServer,Apollo官网说明是实现MetaServerProvider且Order值小的Providor被使用,按照说明进行实现 Maven打包Client 执行 mvn clean install 进行打包,解压jar包发现就只有一个Providor的实现类,这样jar运行有问题。需要把新Client所有的依赖都打进jar包,在网上找了半天,需要在POM中增加maven的plugin的配置,如下: <!-- 打包所有的maven依赖到jar包 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.2.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <artifactSet> <excludes> <exclude>junit:junit</exclude> </excludes> </artifactSet> </configuration> </execution> </executions> </plugin> <!-- 添加依赖的非maven jar包 --> <plugin> <groupId>com.googlecode.addjars-maven-plugin</groupId> <artifactId>addjars-maven-plugin</artifactId> <version>1.0.5</version> <executions> <execution> <goals> <goal>add-jars</goal> </goals> <configuration> <resources> <resource> <directory>${basedir}/lib</directory> </resource> </resources> </configuration> </execution> </executions> </plugin> 由于项目中使用了maven依赖与非maven依赖,所以上述的两个插件都要使用。增加了上面两个插件后再运行打包命令查看生成的jar就发现所有的依赖都在jar中了。 项目中使用Client 选择一个项目在测试环境进行配置调试,自定义的Meta Server一直没有生效,所以查找官方文档,由于自定义Providor是通过SPI方式实现的,所以正确的实现方式是新建resource文件夹,指定MetaServerProvider的真正实现类的带包名类才可以,哎,找了我好久。 后续操作 后续会把client上传到内部maven仓库,完善配置API,使业务方可以零配置来使用配置中心。 总结 Maven的打包机制还是不清晰,处理打包问题费了很多时间,要好好重新学习一下 Apollo的官方文档还需要再仔细阅读,有问题多查issue,因为可能有人已经遇到了 多读读源码,真正的体会大牛的软件设计思想

2019-07-01 · 1 min · 70 words · tomyli

Apollo 配置中心畅游

目前市面上的开源产品 Disconf 2014年7月百度开源的配置管理中心,同样具备配置的管理能力,目前已经不维护了,最近的一次代码提交是两年前了。 Spring Cloud Config 2014年9月开源,Spring Cloud生态组件,与Spring Cloud体系无缝整合。 Apollo 2016年5月,携程框架部开源的配置管理中心,具备规范的权限、流程治理等特性。 Nacos 2018年6月,阿里开源的配置中心,可以做DNS和RPC的服务发现。 为什么选择Apollo 社区活跃 刚刚发布了1.4.0版本,Issue处理速度快 文档齐全 体验,部署,设计文档都齐全 重要的灰度发布 想发布一台机器试试水,可以! 开源协议友好 Apache 2 license Apollo都有哪些重要功能 以下摘自官网说明 统一管理不同环境、不同集群的配置 配置修改实时生效(热发布) 版本发布管理 目前只支持对最近版本的恢复。https://github.com/ctripcorp/apollo/issues/1642 灰度发布 权限管理、发布审核、操作审计 编辑与发布是两个独立的操作。 客户端配置信息监控 提供Java和.Net原生客户端 提供开放平台API 这样可以通过其它方式来查看配置信息,平台API说明 使用方便的后台配置系统Portal 分布式部署相对较复杂,这是缺点 外部依赖少,目前依赖Mysql Apollo的组成 Apollo长什么样? Apollo整体设计 总体架构 代码结构 各模块概要介绍 Apollo Config Service 提供配置获取接口,服务对象为Apollo客户端 Apollo Admin Service 提供配置管理(修改、发布)接口,服务与Portal Apollo Portal 提供WEB界面供用户管理配置 Apollo的重要设计 Admin Service与Config Service的通信方式 Apollo使用Mysql实现消息(ReleaseMessage)的处理,消息内容为AppId+Cluster+Namespace,具体的设计思想可以参考这里 客户端与服务端的通信方式 客户端与服务端保持一个长连接(通过Http Long Polling实现) Client Server 重要的Namespace Namespace是配置项的集合,类似于一个配置文件的概念,获取的权限分为private与public两种权限。 Namespace的类型 私有类型 公有类型 关联类型(继承类型) Cluster能用来做什么? 分机房实例,分任务功能实例,比如在一些实例执行job,需要增加-Dapollo.cluster=配置指定集群名 ...

2019-05-09 · 1 min · 108 words · tomyli