尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Apollo 2.0.0 版本解析:从 Java 17 支持到灰度发布、安全加固与 OpenAPI 重构

Apollo 2.0.0 版本解析:从 Java 17 支持到灰度发布、安全加固与 OpenAPI 重构 Apollo 2.0.0 版本解析从 Java 17 支持到灰度发布、安全加固与 OpenAPI 重构【免费下载链接】apolloApollo is a reliable configuration management system suitable for microservice configuration management scenarios.项目地址: https://gitcode.com/gh_mirrors/apoll/apolloApollo 2.0.0 是配置中心 Apollo 的一个里程碑式大版本本篇文章基于官方changes/changes-2.0.0.md的 Release Notes结合仓库源码逐项解读 2.0.0 的核心变更覆盖运行环境升级Java 17、Spring Boot 2.6、安全能力增强Access Key 时间戳可配置、密码策略、灰度发布维度扩展、公共 Namespace、按 Item 搜索、按环境导入导出配置、软删除重构与 OpenAPI 易用性改造等主题。读完你可以掌握 Apollo 2.0.0 的升级要点、关键配置项和对应源码位置为实际部署与二次开发提供直接参考。版本定位与升级总览根据 changes/changes-2.0.0.mdApollo 2.0.0 是一次能力扩展 平台加固的大版本Release Notes 中列出的 Pull Request 超过 50 项大致可归为六类类别代表性变更运行环境升级支持 Java 17、升级 Spring Boot 2.6.6 / Spring Cloud 2021.0.1、Flyway 8.0.5、Guava 31.0.1并移除 Java 1.7 支持安全加固Access Key 时间戳校验可配置、密码策略落地且规则可配置、修复用户改密失败、处理 SSL 握手异常配置治理能力公共 Namespace 基础能力、按 Item 搜索、按环境导出/导入配置、Namespace 对比仅显示差异键灰度发布扩展灰度规则支持除 IP 之外的多维度label修复灰度发布刷新 Item 状态问题工程与架构重构软删除设计重构、移除 ctrip 内部 profile、内部代码去除 Spring 依赖、OpenAPI 易用化重构缺陷修复与体验优化首页与顶部导航样式优化、创建 Namespace 页面优化、发布/回滚弹窗滚动条、非 properties 类型 Namespace 的发布历史展示评论与时间等下面按主题深入展开每个主题都会给出对应的源码佐证路径方便你在仓库中进一步核验。运行环境升级Java 17 与 Spring 生态版本对齐2.0.0 最引人注目的变化是升级到 Java 17 并放弃 Java 1.7对应 PR #4015、#4060。这意味着运行 Apollo 2.0.0 各服务的 JVM 至少应为 Java 8更推荐 Java 17Java 1.7 已不再被支持为适配 Java 17 的强封装模块系统与编译工具链2.0.0 同步升级了 Maven 插件版本PR #4333并升级了 Spring Boot 到 2.6.6、Spring Cloud 到 2021.0.1PR #4295依赖层面做了多处 Bumpxstream 1.4.17 → 1.4.18PR #3916、Guava 29.0 → 31.0.1PR #4182、Flyway → 8.0.5PR #4312并移除了对内部代码的 Spring 依赖PR #3937。升级依赖的同时也修复了若干由此暴露出的兼容性问题Portal 启动失败问题PR #4298javax.net.ssl.SSLHandshakeException: No appropriate protocolPR #4308该问题常见于 JDK 与远程服务 TLS 协议版本协商不一致的场景使用EnableApolloConfig且配合 Spring 3.1.1 时出现的 NPEPR #4180property placeholder 在 dubbo reference bean 上不生效的问题PR #4175。升级提示若你当前运行的是 1.x 版本升级前需重点核对运行 JVM 版本≥ Java 8、Spring Boot/Spring Cloud 版本兼容性以及数据库迁移Flyway 版本变化带来的影响。安全加固Access Key 时间戳校验可配置化Apollo 客户端与 ConfigService 之间通过Access Key 签名进行身份认证。在 2.0.0 之前请求头时间戳的校验窗口是硬编码的 60 秒2.0.0 将其改造为可配置项PR #3908。认证核心逻辑位于 ClientAuthenticationFilter.java其中doCheck方法按顺序执行两步校验时间戳校验checkTimestamp读取请求头Timestamp若与服务器时间偏差过大则直接返回 401RequestTimeTooSkewed签名校验checkAuthorization结合 URI、QueryString、时间戳与 AccessKey 的 Secret 计算签名并比对。对应的配置项定义在 BizConfig.java相关配置项如下配置项默认值说明apollo.access-key.auto-provision.enabledfalse是否允许 Access Key 自动创建apollo.access-key-cache-scan.interval1秒Access Key 缓存扫描间隔apollo.access-key-cache-rebuild.interval60秒Access Key 缓存重建间隔apollo.access-key.auth-time-diff-tolerance60秒认证允许的时间戳偏差窗口2.0.0 新增其中apollo.access-key.auth-time-diff-tolerance即本次Make Access Key Timestamp check configurable的核心产物默认值 60 秒与旧版本硬编码行为保持一致。对于存在客户端与服务器时钟偏差、或使用负载均衡导致多节点时钟不一致的部署环境可以适当调大该值以减少误杀在安全要求更高的场景下也可调小以收紧校验窗口。时间戳校验的具体逻辑与 401 响应路径可对照 ClientAuthenticationFilter.java 查看。安全加固密码策略与规则可配置化2.0.0 引入了内置密码策略用于在**内建用户体系Spring Security 本地账号**下避免弱密码PR #4008、#4207、#4212同时修复了用户修改密码失败的缺陷。密码校验实现位于 AuthUserPasswordChecker.java其默认规则为^(?.*[0-9].*)(?.*[a-zA-Z].*).{8,20}$即密码必须同时包含数字和字母长度在 820 个字符之间同时会检查密码是否属于常见弱密码如连续字符、纯字母/数字序列等例如abcd1234、1234qwer、1q2w3e4r。为避免规则硬编码2.0.0 还支持通过 Portal 配置自定义禁止使用的密码列表PR #4207配置项为apollo.portal.auth.user-password-not-allow-listabcd1234,1234qwer,...该配置由 PortalConfig.getUserPasswordNotAllowList() 读取未配置时使用内置默认禁止列表AuthUserPasswordChecker在校验时会将用户输入的密码小写化后与列表逐项比对。密码策略同时作用于 Portal 的 UserInfoController.java 与 OpenAPI 的 UserController.java 用户管理接口相关测试见 UserControllerTest.java。灰度发布从 IP 维度扩展到 Label 维度灰度发布是 Apollo 的核心能力之一。2.0.0 之前灰度规则只支持按客户端 IP匹配2.0.0 将其扩展为IP Label客户端打标多维度匹配PR #4013从而支持了按机房、环境、自定义标签等场景的灰度。灰度规则项的匹配模型定义在 GrayReleaseRuleItemDTO.javaprivate String clientAppId; // 目标客户端 AppId private SetString clientIpList; // 目标 IP 列表 private SetString clientLabelList; // 目标 Label 列表2.0.0 新增 public boolean matches(String clientAppId, String clientIp, String clientLabel) { return (appIdMatches(clientAppId) ipMatches(clientIp)) || (appIdMatches(clientAppId) labelMatches(clientLabel)); }可以看到匹配规则为AppId 匹配且 IP 命中或 AppId 匹配且 Label 命中二者满足其一即可命中灰度。服务端负责加载与维护灰度规则的组件是 GrayReleaseRulesHolder.java它实现ReleaseMessageListener通过监听ReleaseMessage在本地缓存灰度规则供 ConfigService 下发配置时进行分支选择。同一主题还修复了灰度发布后 Item 状态刷新不正确的问题PR #4128保证灰度分支上的配置项在发布后界面状态与数据一致。配置治理公共 Namespace、按 Item 搜索与导入导出公共 Namespace 基础能力2.0.0 引入公共 Namespacepublic namespace基础功能PR #3850允许将部分 Namespace 声明为公共类型供其他应用关联复用这是平台级配置复用能力的基础与此前关联公共 Namespace的用法一致。相关的核心实体与规则可结合 Namespace 及 Portal 的 Namespace 相关 Controller 查看。按 Item 搜索配置项2.0.0 支持按配置项Item搜索PR #3977即通过 Key 或 Value 进行全局配置检索而不再局限于按 Namespace/应用名搜索。该功能默认开启可通过配置关闭searchByItem.switchtrue配置由 PortalConfig.supportSearchByItem() 读取接口实现位于 GlobalSearchController.java提供了按 key 或 value 检索配置项信息的端点并校验至少输入一个搜索条件key 或 value 二选一。按环境导出 / 导入配置2.0.0 支持按 Apollo 环境Env批量导出/导入配置PR #3947以及后续优化 PR #4231、修复 PR #4262便于多环境之间的配置迁移与备份。导出相关端点集中在 ConfigsExportController.java端点功能GET /apps/{appId}/envs/{env}/clusters/{clusterName}/namespaces/{namespaceName}/items/export导出指定 Namespace 的配置项GET /apps/{appId}/envs/{env}/clusters/{clusterName}/export导出指定环境、集群下的应用配置GET /apps/{appId}/.../export?envsDEV,FAT按逗号分隔的 envs 参数一次性导出多个环境其他配置治理体验优化Namespace 对比仅显示差异键PR #4165对比两个 Namespace 时支持只展示差异项减少信息噪音非 properties 类型的 Namespace 发布历史也展示评论与发布时间PR #4198文本模式下已删除配置项的显示问题修复PR #4279、文本视图中关联 Namespace 显示错误修复PR #4219超过 16 位的 JSON 数字显示问题修复PR #4183。架构与工程重构软删除重构、OpenAPI 易用化与脚本化软删除设计重构2.0.0 对底层软删除soft delete设计做了重构PR #3866并修复了一个潜在的数据一致性问题PR #4256。这是一次偏底层的架构调整涉及数据库层删除标记的处理方式重构后相关 DAO/Repository 层的删除语义更为统一。配合此次重构仓库的 scripts/sql/migration/release-history-retention 目录还提供了面向发布历史保留场景的预检查与清理 SQL 脚本含 precheck 与 restore/purge 流程可作为软删除数据治理的参考。OpenAPI 易用化重构与 bash 脚本调用2.0.0 对OpenAPI 做了易用性重构PR #3943让第三方系统接入 Apollo OpenAPI 更简单同时补充了使用 bash 调用 OpenAPI 的脚本PR #3980。仓库提供了完整的 bash 调用示例openapi.sh 与 openapi-usage-example.sh。脚本通过环境变量注入目标地址与令牌export APOLLO_PORTAL_ADDRESShttp://ip:port export APOLLO_OPENAPI_TOKENplease_change_me_by_environment_variableopenapi.sh内封装了通过 curl 调用 Portal OpenAPI 的常用函数并支持通过CURL_OPTIONS透传额外 curl 参数方便在 CI/CD 流水线中直接复用。其他工程化变更移除 ctrip profilePR #3920去掉与携程内部环境强绑定的 profile进一步走向通用开源形态移除内部代码的 Spring 依赖PR #3937、用 commons-lang3 替换 commons-langPR #4225ProviderManager SPI 增加 Ordered 接口PR #4218允许对多个 Provider 的实现进行排序增强 SPI 扩展的确定性ConfigService 日志从 warning 降级为 infoPR #3884减少正常请求下的日志噪音helm chart 拆分到独立仓库PR #4125Apollo 主仓库不再维护 helm chartKubernetes 部署请使用独立的 chart 仓库修复 shell 脚本读取变量时未使用$符号的问题PR #3890、修复 ingress 语法问题PR #3933允许关闭客户端本地缓存PR #4199提供开关以适配禁止本地落盘的强安全场景用 Spring ApplicationEvent 广播 ConfigChangeEventPR #4305客户端配置变更事件改为基于 Spring 事件机制广播便于与 Spring 生态统一集成捕获 ClassLoaderUtil.isClassPresent 的 LinkageErrorPR #4097类存在但加载失败时不再异常中断UI 体验优化首页样式优化PR #4052、顶部导航样式优化PR #4073、创建 Namespace 页面优化PR #4213、发布/回滚弹窗增加滚动条PR #4251、版权年份更新PR #4202。升级到 Apollo 2.0.0 的注意事项综合上述变更升级到 2.0.0 时建议重点检查以下事项JVM 版本2.0.0 已放弃 Java 1.7PR #4015请确保 ConfigService、AdminService、Portal 运行在 Java 8 及以上生产环境建议直接使用 Java 17PR #4060框架版本Spring Boot 升级至 2.6.6、Spring Cloud 升级至 2021.0.1PR #4295业务侧如需同时升级请先核对自身依赖树特别是与 xstream、Guava、Flyway 的间接依赖冲突数据库迁移Flyway 升级到 8.0.5PR #4312升级过程中请按官方 SQL 迁移脚本见 scripts/sql 各 profile 下的 delta 目录逐版本执行并注意软删除重构PR #3866对数据的影响Access Key 时间窗口如存在时钟偏差环境可调整apollo.access-key.auth-time-diff-tolerance密码策略启用本地账号体系后新密码必须满足数字 字母 820 位的默认规则可用apollo.portal.auth.user-password-not-allow-list追加禁用名单Kubernetes 部署helm chart 已从本仓库移除PR #4125如使用 K8s 部署请改用独立维护的 chart 仓库。小结Apollo 2.0.0 通过 Java 17 支持、Spring 生态升级完成了平台底座现代化通过 Access Key 时间戳可配置、密码策略落地强化了安全边界通过灰度 Label 维度、公共 Namespace、按 Item 搜索、按环境导入导出提升了配置治理能力并通过软删除重构、OpenAPI 易用化与脚本化降低了二次开发门槛。本仓库的 changes/changes-2.0.0.md 记录了完整的 PR 清单你可以在 CHANGES.md 中查看更完整的版本演进脉络并借助上文列出的源码路径深入研读每一处实现细节。【免费下载链接】apolloApollo is a reliable configuration management system suitable for microservice configuration management scenarios.项目地址: https://gitcode.com/gh_mirrors/apoll/apollo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表