随着程序功能的日益复杂,程序的配置日益增多:各种功能的开关、参数的配置、服务器的地址等对程序配置的期望值也越来越高。配置修改后实时生效,灰度发布,分环境、分集群管理配置,完善的权限、审核机制等。在这样的大环境下,传统的通过配置文件、数据库等方式已经越来越无法满足开发人员对配置管理的需求。
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。配置中心基于SpringBoot和SpringCloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。
Java客户端不依赖任何框架,能够运行于所有Java运行时环境,同时对Spring/SpringBoot环境也有较好的支持。
Apollo 的基础模型:
1、用户在配置中心对配置进行修改并发布。
2、配置中心通知 Apollo客户端有配置更新。
3、Apollo客户端从配置中心拉取最新的配置、更新本地配置并通知到应用。
配置中心git地址:https://github.com/ctripcorp/apollo/releases
下载配置中心jar包,配置中心是一个微服务架构,分为三个jar项目。
apollo-adminservice.jar提供配置的修改、发布等功能,服务对象是 Apollo Portal(管理界面),端口8090
apollo-configservice.jar提供配置的读取、推送等功能,服务对象是 Apollo 客户端,端口8080
apollo-portal.jar提供页面操作管理配置信息,端口8070
配置中心的部署步骤:
1、检查8090,8080,8070端口是否被占有。
2、导入配置中心sql脚本。
3、修改三个应用中数据库配置文件。
4、通过启动脚本启动三个应用。
通过浏览器访问http://ip:8070
默认登录账号/密码:apollo/admin
至此总共配置中心配置、启动成功。
Apollo 客户端的实现原理:
客户端和服务端保持了一个长连接,从而能第一时间获得配置更新的推送。(通过Http Long Polling 实现);
客户端还会定时从Apollo 配置中心服务端拉取应用的最新配置;
这是一个 fallback机制,为了防止推送机制失效导致配置不更新;
客户端定时拉取会上报本地版本,所以一般情况下,对于定时拉取的操作,服务端都会返回304 - Not Modified。
客户端从 Apollo配置中心服务端获取到应用的最新配置后,会保存在内存中,所以我们的应用程序来获取配置的时候其实始终是从内存中获取的;
客户端还会把从服务端获取到的配置在本地文件系统缓存一份;
这主要是为了容灾,假设应用程序重启的时候,恰好远端服务全挂了,或者网络有故障,应用程序依然能从本地恢复配置。
通过这种推拉结合的机制,以及内存和本地文件双缓存的方式,有效地保证了客户端的可用性。
客户端配置以spring-boot项目架构为例
客户端配置文件配置如下
客户端启动入口、配置@EnableApolloConfig注解
编写测试类调用,直接获取到的配置文件中属性
通过apollo去下发、创建项目
Appid必须跟客户端保持一致
然后新增发布配置
再次请求下测试类、内容实时修改为apollo下发的配置
配置已经缓存到前面配置好的缓存路径中,后续配置中心网络不通或者宕机,也无使用影响
动态日志级别
问题:
服务运行过程中,经常会遇到需要通过日志来排查定位问题的情况,然而这里却有个两难:
如果日志级别很高(如:ERROR),可能对排查问题也不会有太大帮助。
如果日志级别很低(如:DEBUG),日常运行会带来非常大的日志量,造成系统性能下降。
解决方案:
为了兼顾性能和排查问题,我们可以借助于日志组件和配置中心实现日志级别动态调整。
通过Apollo配置中心配置logging.level属性,客户端监听配置变化,根据运维场景需求实时动态调整日志级别。已到达无需频繁修改配置文件、重启应用来修改日志级别。并且对于客户端使用配置属性前台支持可视化查看。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/130183.html
摘要:现在很多网站都通过服务来实现消息推送及数据即时同步功能,即时通讯组件逐渐成为产品的标配。目前国内有很多成熟稳定的第三方即时通讯服务厂家,比如融云。 现在很多网站、APP都通过IM服务来实现消息推送及数据即时同步功能,即时通讯组件逐渐成为产品的标配。目前国内有很多成熟稳定的第三方即时通讯服务厂家,比如:融云。使用这些专业的服务可以提高开发效率而且服务稳定有保障。 如果自己DIY或者需要在...
摘要:开发者体验可以帮助团队更快地实现功能上线,因为它对开发者的体验非常好。可以显示每个的埋点指标,可以帮忙你定位错误,可以分析中请求的每个字段的分布频率。产品案例虽然规范是由在年公布的,但是自年以来,就是移动应用开发的重要组成部分。 在大前端应用的开发过程中,如何管理好数据是一件很有挑战的事情。后端工程师需要聚合来自多个数据源的数据,再分发到大前端的各个端中,而大前端工程师需要在实现用户体...
摘要:宋体自年被开源以来,很快便成为了容器编排领域的标准。宋体年月,乐心医疗的第一个生产用集群正式上线。所以于年推出后,乐心医疗的运维团队在开会讨论之后一致决定尽快迁移到。Kubernetes 自 2014 年被 Google 开源以来,很快便成为了容器编排领域的标准。因其支持自动化部署、大规模可伸缩和容器化管理等天然优势,已经被广泛接纳。但由于 Kubernetes 本身的复杂性,也让很多企业的...
摘要:今天逛了逛,顺手精选出了一下近几个月以来上最热门的个项目。相关阅读正式开源,帮助应用快速容器化未来可能会上热门的项目地址介绍哈哈,皮一下很开心。这是我自己开源的一份文档,目前仍在完善中,欢迎各位英雄好汉一起完善。 showImg(https://segmentfault.com/img/remote/1460000015766827?w=391&h=220);今天逛了逛Github,顺...
摘要:我们是不是很好奇配置中心如何做到实时更新并且通知到客户端的这也是一个面试中经常会问到的题目。客户端得到状态码是并且会根据立即去服务端拉取最新的配置。引言 记得我们那时候刚开始学习Java的时候都只是一个单体项目,项目里面的配置基本都是写在项目里面的properties文件中,比如数据库配置啥的,各种逻辑开关,一旦这些配置修改了,还需要重启项目这修改才会生效。随着各种微服务的诞生,服务的...
摘要:我们是不是很好奇配置中心如何做到实时更新并且通知到客户端的这也是一个面试中经常会问到的题目。虽然是携程开源的,但是携程内部也不用它。客户端得到状态码是并且会根据立即去服务端拉取最新的配置。通过定时任务的补充,可以让配置达到最终的一致性。 引言记得我们那时候刚开始学习Java的时候都只是一个单体项目,项目里面的配...
阅读 1346·2023-01-11 13:20
阅读 1684·2023-01-11 13:20
阅读 1132·2023-01-11 13:20
阅读 1858·2023-01-11 13:20
阅读 4100·2023-01-11 13:20
阅读 2704·2023-01-11 13:20
阅读 1385·2023-01-11 13:20
阅读 3597·2023-01-11 13:20