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.
-
讨论问题:
当指定了 idc = test 后,apollo 会尝试获取 test 的发布配置,如果没找到就尝试获取 dataCenter 的配置,还没找到就直接获取 default 的配置返回了。这里有一个默认的 fallback 机制,这个 fallback 是否加上一个可控制的开关要更好点??启用或关闭。启用则按照当前的 fallback 策略加载,关闭则直接返回未找到配置。
相关页面ui:
这里的提示不是很准确,当我尝试使用一个未创建并不存在的集群名称时,也会 fallback 到 默认的集群配置给我。在这个场景,当我不小心配置出错的情况下,是不是显示的抛出问题比 fallback 有可能隐藏了问题更好点???
关键代码:
Beta Was this translation helpful? Give feedback.
All reactions