欧博博彩注册
欧博博彩注册
欧博娱乐网站网站
贝博百家乐博彩平台社区_奈何应用 Go Mod ?

贝博百家乐博彩平台社区_奈何应用 Go Mod ?

贝博百家乐博彩平台社区_

[[420434]]亚星百家乐

 亚星百家乐hi,人人好,我是 haohongfan。

皇冠手机网址多少

最近在作念 prometheus 生态的 cortex 优化责任,遭遇一个比拟坑的 go mod 的问题,这里共享一下。

澳门威尼斯金人

我为什么将标题称为:奈何应用 Go mod 呢?这个挺特等想的,这里先卖个关子,不外确乎是冲破了 Go mod 的关系特点。(嗯,曹大的 Go mod 十宗罪又不错加多一宗了)

金沙厅是米其林三星吗

在端庄伸开这个话题之前,需要简单的先容下 cortex 和 thanos 这两个方式。

Prometheus 的局限性

说到业务设置基本上皆离不开监控系统,Prometheus 作念为云原生的骄子,以优秀的盘算,生动的使用方式,以优异得益从 CNCF 成功毕业,亦然好多公司作念监控的首选。

然则呢,Promethues 也有其自己局限性,其中影响最大的等于其数据的高可用决策和集群决策。监控亦然业务系统的重中一环,不行因为监控系统宕机导致报警无法实时发出。

Prometheus 官方也有建议联邦决策来科罚集群问题,然则这个决策极其复杂况且好多问题照旧科罚不了,于是就莳植了另外两个 CNCF 的沙箱方式:cortex 和 thanos。这两个方式皆是为了科罚 Promethues 的集群,高可用的。

皇冠体育

由于这两个方式要科罚问题的方针是一致的,是以就会出现好多功能皆是不错互相复用的,于是意旨的事情就发生了。

cortex

话说因为某些的需求,不得已需要变嫌下 thanos 的关系代码。我土产货调试的技艺将 cortex 依赖的 thanos 给 replace 了一下。

足球注册人口
replace github.com/thanos-io/thanos => /Users/hhf/goproject/cortex/thanos 

再等我编译的技艺,就编译不外了。

# github.com/sercand/kuberesolver ../../../go/pkg/mod/github.com/sercand/kuberesolver@v2.1.0+incompatible/builder.go:108:82: undefined: resolver.BuildOption ../../../go/pkg/mod/github.com/sercand/kuberesolver@v2.1.0+incompatible/builder.go:163:32: undefined: resolver.ResolveNowOption 

这就让东说念主很无奈,别烦燥,咱们望望这个 kuberesolver 是被谁依赖的。

博彩平台社区 先看下被 replace 之前:
▶ go mod graph| grep kuberesolver github.com/weaveworks/common@v0.0.0-20210419092856-009d1eebd624 github.com/sercand/kuberesolver@v2.1.0+incompatible github.com/weaveworks/common@v0.0.0-20210112142934-23c8d7fa6120 github.com/sercand/kuberesolver@v2.1.0+incompatible github.com/weaveworks/common@v0.0.0-20200206153930-760e36ae819a github.com/sercand/kuberesolver@v2.1.0+incompatible github.com/weaveworks/common@v0.0.0-20201119133501-0619918236ec github.com/sercand/kuberesolver@v2.1.0+incompatible github.com/weaveworks/common@v0.0.0-20200914083218-61ffdd448099 github.com/sercand/kuberesolver@v2.1.0+incompatible github.com/weaveworks/common@v0.0.0-20200625145055-4b1847531bc9 github.com/sercand/kuberesolver@v2.1.0+incompatible github.com/thanos-io/thanos@v0.13.1-0.20200731083140-69b87607decf github.com/sercand/kuberesolver@v2.4.0+incompatible 

不错看到泛泛版块下,kuberesolver@2.4.0 被 thanos 所依赖,kuberesolver@v2.1.0 被 weaveworks 所依赖。

replace 之后
▶ go mod graph| grep kuberesolver github.com/weaveworks/common@v0.0.0-20210419092856-009d1eebd624 github.com/sercand/kuberesolver@v2.1.0+incompatible 

是不是很神奇,kuberesolver@v2.4.0 这个版块真实散失了。由于 kuberesolver 的 v2.1.0 和 v2.4.0 是不兼容的,是以导致 replace 之后就无法编译了。

Gomod replace 语义

其实这并不神奇,这个触及到 Go mod 的 replace 语义,不外亦然很容易让东说念主忽略的特点。

replace directives:(https://golang.org/ref/mod#go-mod-file-replace)

replace directives only apply in the main module’s go.mod file and are ignored in other modules. See Minimal version selection for details. 

其实很简单,replace 只对主模块(也等于你确刻下方式)是成效的。不错作念如下的讲究:

主模块的 replace 关于被依赖的模块是不成效的 被依赖的模块的 go.mod 的 replace 对主模块亦然不成效的

是以,当 replace 之后,cortex 依赖的 thanos 的 replace 是不成效的。咱们理一下依赖树:

主模块 cortex => require github.com/weaveworks/common v0.0.0-20210419092856-009d1eebd624 weaveworks => requre github.com/sercand/kuberesolver v2.1.0+incompatible 于是举座上 kuberesolver 就惟一了 v2.1.0 了

这个逻辑是跟 gomod 的 replace 语义是吻合的,欧博平台注册也等于 replace 之后编译不外是正确的。

一是投资端的改革,打通长期资金入市的堵点和解决长期资金入市的痛点,加快会计和税收方面的改革,大力引入长期资金,可谓为有源头活水来,中国股票市场的繁荣就成为可能。

贝博百家乐 应用 gomod

那就愈加神奇了,为何 cortex 径直 require thanos 就能编译告成,按照 gomod replace 语义来说,这亦然编译不外的才是正确的。

因为把柄文档咱们知说念,replace 只是作用于主模块,脱离了主模块是一律不成效的,这个是无须置疑的。

我作念了个实践放在了 https://github.com/georgehao/gomodtestmain ,有趣味的不错试一下,这个能考据 gomod 是罢免 gomod replace 语义 和 MVS (最小版块禁受)算法的。

问题基本堕入了僵局,咱们奈何破局呢?

欧博真人百家乐

连续使用 go mod graph 功能,来稽查 cortex 依赖的 thanos 的依赖树。

github.com/thanos-io/thanos@v0.19.1-0.20210729154440-aa148f8fdb28 gopkg.in/yaml.v3@v3.0.0-20210107192922-496545a6307 github.com/thanos-io/thanos@v0.13.1-0.20210401085038-d7dff0c84d17 github.com/Azure/azure-pipeline-go@v0.2.2 github.com/thanos-io/thanos@v0.8.1-0.20200109203923-552ffa4c1a0d k8s.io/utils@v0.0.0-20191114200735-6ca3b61696b6 github.com/thanos-io/thanos@v0.13.1-0.20210204123931-82545cdd16fe gopkg.in/yaml.v2@v2.3.0 github.com/thanos-io/thanos@v0.13.1-0.20201030101306-47f9a225cc52 go.uber.org/goleak@v1.1.10 github.com/thanos-io/thanos@v0.13.1-0.20200807203500-9b578afb4763 go.elastic.co/apm/module/apmot@v1.5.0 .... github.com/thanos-io/thanos@v0.13.1-0.20200731083140-69b87607decf github.com/gogo/protobuf@v1.3.1 

由于这个依赖树太长(700多行),我就不贴了,基本上也能看出来,cortex 依赖了 thanos N 多个版块,其中在临了一个版块中的 go.mod 中咱们发现了一个特等想的东西:

require (   github.com/sercand/kuberesolver v2.4.0+incompatible // indirect ) 

也等于闹了半天,由于 thanos 某个很迂腐的版块的 gomod require kuberesolver@v2.4.0,让 gomod 误合计 cortex 依赖的 thanos 仍是是 require 了 kuberesolver@v2.4.0 了。诚然 thanos 早就改成了 repace kuberesolver,但也就让 cortex 成功编译畴昔了。

这算不算 gomod 的 bug 呢?

交易

为什么 cortex 会依赖 thanos 这样多版块呢?这就要回到开篇说的 cortex 和 thanos 功能复用的问题了。

现在 cortex 和 thanos 这个两个方式,基本上是这样依赖的:

皇冠客服飞机:@seo3687
cortex 1.9.0 -> thanos v0.19.1-0.20210729154440-aa148f8fdb28 thanos v0.19.1-0.20210729154440-aa148f8fdb28 -> cortex v1.8.1-0.20210422151339-cf1c444e0905 cortex v1.8.1-0.20210422151339-cf1c444e0905 -> thanos v0.13.1-0.20210401085038-d7dff0c84d17 .... 

cortex 与 thanos 之间的互相援用,就像俄罗斯套娃相通,几乎等于 gomod 的恶梦。go mod replace 语义,真实让这两个套娃给破解了。

奈何科罚

对应奈何cortex replace thanos 的问题,其实知说念问题的根底场地,科罚起来就很简单了,有两种方式吧:

由于 gomod MVS 算法,咱们径直在主方式 cortex 中指定 kuberesolver 的版块为 v2.4.1 决策 1 仅关于向下兼容的方式比拟适用,要是某方式莫得这个遭殃心的话,这样作念可能是会出问题的,是以比拟径直的科罚目的,径直修改 thanos 的 go.mod, 将 thanos 的所依赖的 kuberesolver 从 replace 挪到 require 中