Replies: 6 comments 7 replies
-
这个开关感觉可以有。 不过应该得考虑一下开关的粒度,namespace 的粒度,app粒度,还是全局粒度合适?还是说也搞成优先级,namespace >app>globel |
Beta Was this translation helpful? Give feedback.
-
目前的逻辑确实如 @klboke 所描述的,详见配置获取规则说明。 开关的话我觉得可以如 @lepdou 所说的,有几个不同粒度,namespace > app > global 这里还有另一个要考虑的点是这个开关是否只对 private namespace 生效?对于 public namespace 的维护者而言,不太可能按照每个应用的集群去维护一份配置信息 |
Beta Was this translation helpful? Give feedback.
-
这个点不是很明白。其实目前的实现,fallback 机制只存在于 cluster ,如果我指向了不存在 namespace 、 appid 并不会 fallback 到默认的返回。这里的期望也是可以控制遇到未发布配置或者指向了不存在的 cluster 时,fallback 或者不 fallback。一般更倾向不 fallback,显示的告诉使用者这个 cluster 并没找到配置 如果 cluster 作为隔离配置的粒度的话,是不是不区分 private namespace 或 public namespace 更好点,可能我们对 public namespace 的使用场景不一样。我举个栗子,我在香港集群的公共注册中心,和北京集群的公共注册中心要分隔开,因为北京的服务不会连接到香港那边去,所以在 apollo 上只维护一个 public namespace 可能做不到 |
Beta Was this translation helpful? Give feedback.
-
fallback 到 default 配置还是有很多场景的。 因为绝大部分业务场景,一个环境所有的 cluster 的配置应该公用一份 default(相当于环境粒度) 就够了,只有在某个 cluster 需要推送特殊值时,才需要在这个 cluster 下的namespace 覆盖配置项,然后推送 namespace。如果默认做成不 fallback,那么一旦用户建了多个 cluster,就需要同时维护所有 cluster 的配置,成本非常大。 另外像阿里大促的场景下,每次大促都需要新建好几个 cluster,如果没有 fallback 机制,那么需要为新建的 cluster 都要维护配置,成本极高。 蚂蚁的配置中心,一开始就是没有这种fallback机制,后来我就改成了两层的 fallback 机制,极大的降低了运维成本。 |
Beta Was this translation helpful? Give feedback.
-
是否可以像Javascript那样,添加一个strict模式? 在client端通过配置来控制 打开全局开关后 apollo.strict.global.enabled = true 会关闭所有fallback,严格按照 appId + cluster + namespace 获取配置 如果想细分,例如只关闭cluster的fallback 可以写成 apollo.strict.cluster.enabled = true 还可以关闭读取本地文件缓存 apollo.strict.local-cache.enabled = true |
Beta Was this translation helpful? Give feedback.
-
想了一下 fallback 导致出问题的概率应该极低,主要几个点:
基于以上论点,把这个开关放到 client 端其实意义不是很大,本质原因是 cluster 配置是全局的静态配置,并不是在代码里到处零散的。在静态配置之上再加一层静态开关,感觉有些多余。 结论: 可以从用户提的 issue 统计一下,遇到cluster误配错导致的问题多少,如果不多的话,应该说明问题不大~ |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
讨论问题:
当指定了 idc = test 后,apollo 会尝试获取 test 的发布配置,如果没找到就尝试获取 dataCenter 的配置,还没找到就直接获取 default 的配置返回了。这里有一个默认的 fallback 机制,这个 fallback 是否加上一个可控制的开关要更好点??启用或关闭。启用则按照当前的 fallback 策略加载,关闭则直接返回未找到配置。
相关页面ui:
这里的提示不是很准确,当我尝试使用一个未创建并不存在的集群名称时,也会 fallback 到 默认的集群配置给我。在这个场景,当我不小心配置出错的情况下,是不是显示的抛出问题比 fallback 有可能隐藏了问题更好点???
关键代码:
Beta Was this translation helpful? Give feedback.
All reactions