V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  aofei  ›  全部回复第 1 页 / 共 2 页
回复总数  27
1  2  
@szzhiyang 小弟我目前还在家里等待着疫情结束……😩
@yech1990 抱歉,可能是我叙述的不是很清楚所以让大家产生了误解。这个项目大概是去年二月底三月初我还在学校的时候开发的,我自己的确也跑了一段时间(大概几个月),随后我跟七牛的 CEO 许叔提议了一下要把这个项目交给七牛来运营,他一口就答应了。现在这个项目跟七牛的关系是它完全属于七牛,包括它的域名也是备案在七牛名下的(沪 ICP 备 11037377 号-56 ),我跟这个项目的关系是我目前还是它的维护者。所以大家可以放心使用,因为它不是一个个人项目。❤️
@ronman 不盈利,是七牛无偿提供的服务基础设施支持,毕竟七牛和 Go 的关系很深,他们对此是很慷慨的。而且七牛之前也支持过类似的其他服务,staticfile.org 相信也有不少人用过。
@blless WIP……先把 API 放出来了让大家用着,集思广益。
@chenyi 首页有“用法”说明的,其实很简单,就是修改 GOPROXY 环境变量:

export GOPROXY=https://goproxy.cn,direct

需要注意的就是另外也建议把 GO111MODULE 环境变量设置为 on,发现很多朋友在遇到问题时都是不明白默认值 auto 的含义,所以建议设置为 on 一劳永逸。
@wsseo 这个跟传统的比如 APT 镜像源之类的倒不完全一样,Go 模块代理可以做到零延迟,至少 goproxy.cn 是这么实现的。比如你在 GitHub 上刚提交了一个代码修改,那么你是可以通过 go get github.com/foo/bar@master 立刻拿到那个修改的,此时就是零延迟。同理,如果打了个新的 Tag,比如 v1.2.3,那么也是可以通过 go get github.com/foo/[email protected] 立刻拿到的,同样也是零延迟。
@excxapp 抱歉,这个应该跟我自己的操作有关了,我们前一阵子在探索零错误率,所以导致了一些问题的产生。不过现在已经搞定了,错误应该也基本都消失了,老哥你愿意的话可以再尝试一下。再遇到问题欢迎随时去提 issue,我们会尽快回应的。
@godall 这是一个类似于 Docker Reistry 、NPM 、RubyGems 的用来加速项目构建的东东,但是是给 Go 语言用的。并且,也的确是可以在一定程度上避免在使用 go get 等命令抓包时可能出现的 DNS 污染、电信运营商拦截等现象。
2020-03-10 05:09:23 +08:00
回复了 duanquanyong 创建的主题 Go 编程语言 https://goproxy.cn 这个 go 代理有问题
@duanquanyong

你好,朋友告诉了我这个帖子,所以我特地过来回复一下老哥。

首先要说的是,问题解决了,问题产生时间大概是 2020-03-09 17:00:00,解决时间是 2020-03-10 00:20:00 左右。

我来分享下具体细节吧,这在国内 CDN 服务商里应该也算是一个坑,希望今后能多少帮助到大家做别的开发。

错误产生的具体原因是“Content-Encoding: gzip”和“ETag”两个响应头同时出现导致了 CDN 多级缓存节点重验证行为异常,从而响应给了客户端错误的内容。我猜测国内的 CDN 服务商对“ETag”的“W/”弱验证机制支持的并不是很友好,应该是只支持强验证,而我们这次的服务更新中恰好就用到了弱验证(对于“Content-Encoding: gzip”和“ETag”存在的矛盾详见 https://tools.ietf.org/html/rfc7232#section-2.3.3 这里)。

目前 [goproxy.cn]( https://goproxy.cn) 服务的所有 Go modules 文件里,只有 .mod 这一类文件可能会触发这个错误(因为只有它存在被 gzip 的可能),但也并不是百分百触发。触发所需的一个大前提是目标文件得满足尺寸不小于 1KB (这是我们 gzip 传输的起征点,而 https://goproxy.cn/github.com/spf13/viper/@v/v1.6.2.mod 就恰好满足了这个条件),所以大多数 .mod 文件都不会遇见这个错误。满足尺寸条件后,后台也是可以正常响应 gzip 过的内容给 CDN 节点的,CDN 节点也是可以正常缓存的,客户端也是可以正常从 CDN 节点那里获取到的。只有在 CDN 节点已经有了目标文件的缓存,并且缓存已经在 CDN 节点中存在了一段时间,需要与后台商量进行重验证时,才会有概率出现这个错误。所以才会有比如老哥你遇到了这个错误,但你在群里一说,隔壁省(也就是不同 CDN 节点的意思)的某个哥们儿却能正常获取的情况。

错误的具体解决办法有两种,一种是关闭 gzip 传输功能。还有一种是在“Content-Encoding: gzip”出现时移除“ETag”(这是国内很多 CDN 服务商目前响应 gzip 过的内容给客户端时的做法,但从后台拿 gzip 过的内容时他们并没有忽略“ETag”),或者也可以修改“ETag”,但千万不要试图使用“W/”使 CDN 节点强行走“弱验证”的路子,因为国内很多 CDN 服务商可能并不理解什么是“弱验证”(或者说理解得不够好),通用可行的修改方法可以参考 Apache Web Server 或者 RoR Web 框架等,在“ETag”内容里追加一个“-gzip”后缀,比如“ETag: "<some-hash-characters>"”就修改成“ETag: "<some-hash-characters>-gzip"”。不过,第二种办法是我给爱好自己写 Web 框架的朋友们准备的,其他朋友如果遇到这类问题直接选用第一种办法就好,简单直接。至于我们这次选用的解决办法,当然了,我们不能关闭 gzip 传输功能,因为我们有一个大目标就是要保证所有人都能以最快的速度获取到模块版本,所以我们是选择了第二种里面修改“ETag”的办法(加“-gzip”后缀)。

此外,像一楼老哥说的,[goproxy.cn]( https://goproxy.cn) 之所以快,主要得力于我们上了七牛云的融合 CDN 服务,并且没有做任何带宽或者速率限制(单节点带宽甚至高达 40Gbps+)。虽然我不是七牛的员工,但按照我的个人理解所谓“融合”指的应该是把多家 CDN 服务商整合起来一并拿给用户使用,这样当某家提供商的服务出现问题时,或者节点不足时,可以采用别家的以作补充。当然,这是我的个人理解。近期,为了能做得更好,我们在探索“零错误率”的可能性,也就用到了 CDN 算是还未正式发布给所有人用的一些功能。对于我个人来说,由于我还没参与到实际社会工作当中,所以在很多事情的处理方式上可能显得太过胆大不计后果(这些老前辈们最近也有说过我),相当于我是在冒着出事故的风险优化我们的服务,试图用事故来换取未来的低错误率……为此鲁莽行为我郑重地向大家道个歉。[goproxy.cn]( https://goproxy.cn) 是我去年还在学校里时开发的,可能在我潜意识里它还停留在一个“校园项目”的类别中吧,直到最近我才意识到了它已经不再是我曾经自己搭建自己跑的那个鲜有人用的小服务了,现在日访问量直逼千万级,比我了解到的别的几个同类服务的数据是要多的,就连已缓存的模块版本数量都要比官方的 [proxy.golang.org]( https://proxy.golang.org) 多出不少,甚至都有 [goproxy.baidu.com]( https://goproxy.baidu.com) 这种大厂的公共代理将 [goproxy.cn]( https://goproxy.cn) 用作上游……所以任何一个不负责任的改动都可能导致很多人的日常开发或多或少的受到影响,哪怕本意是好的,但我还是会深感愧疚……好了,睡觉,夜里太过感性……总之,出过的错,记下了,下次再出同样错的机率就会很低很低了。

最后,我为这次产生的问题向大家道个歉,造成了麻烦,实在是不好意思。
2019-09-04 18:11:33 +08:00
回复了 wsseo 创建的主题 Go 编程语言 go1.13 今天发布了,感觉 go module 比 GOPATH 难用
@emeab 嗯嗯,我也发现了,不过目前我只能在 Go 分类下面回复消息…其他的都是 30 天限制…
2019-09-04 17:53:15 +08:00
回复了 wsseo 创建的主题 Go 编程语言 go1.13 今天发布了,感觉 go module 比 GOPATH 难用
@wsseo

Go modules 和 VCS 并没有直接关系,就算不用 VCS 也是可以直接 Modules 的,但这种场景下你 go mod init 时就必须指定一个 module path 了,因为如果你不指定的话 go 没有参考依据,不知道怎么来。
2019-09-04 16:58:23 +08:00
回复了 wsseo 创建的主题 Go 编程语言 go1.13 今天发布了,感觉 go module 比 GOPATH 难用
@wsseo

vscode 自动补全的话…抱歉这个我确实不太了解,因为我没用过,我能告诉你的就只有现在大多数 tools 是已经支持 modules 了的,但你的 vscode 插件用到了哪些 tools 我就不清楚了😅
2019-09-04 16:57:02 +08:00
回复了 wsseo 创建的主题 Go 编程语言 go1.13 今天发布了,感觉 go module 比 GOPATH 难用
@wsseo

如果你是在你的项目根目录,且根目录包含了 .git 等 VCS 目录或者 Gopkg.lock 等旧版依赖管理文件,那么此时你 go mod init 时是不需要指定 module path,它会自己生成一个,不满意的话你到时候还可以再改。
2019-09-04 16:54:42 +08:00
回复了 wsseo 创建的主题 Go 编程语言 go1.13 今天发布了,感觉 go module 比 GOPATH 难用
@lcode dep 现在已经渐渐退出舞台了…
2019-09-04 16:49:09 +08:00
回复了 wsseo 创建的主题 Go 编程语言 go1.13 今天发布了,感觉 go module 比 GOPATH 难用
@fangdingjun 推荐使用七牛云运行的 goproxy.cn 哦~做了全球范围的 CDN 加速,速度能快到让你吃惊~😊
2019-09-04 16:36:01 +08:00
回复了 wsseo 创建的主题 Go 编程语言 go1.13 今天发布了,感觉 go module 比 GOPATH 难用
我的天!!!我居然能回复别人了!!!我刚才好一阵子在 V2EX 上逛都没法儿回别人的 post ……说是得等我注册满 30 天才行😢……
2019-09-04 16:35:00 +08:00
回复了 wsseo 创建的主题 Go 编程语言 go1.13 今天发布了,感觉 go module 比 GOPATH 难用
1. 可以;
2. 使用了 Go modules 后所有的 import path 都得以 module path 开头,当前工作目录的话就以步骤 1 中的 module path 开头;
3. 如果你指的“其他目录”是别的模块的,同理步骤 2,如果指的是普通文件夹,那得用 `go mod replace` 替换为你的目标路径模块;
4. 现在大多数 IDE 的代码不全等 tools 都已经适配了 Go modules,所以基本可用;
5. 虽然我没用过 VSCode 的,但如果它有现成的 Go 插件的话那么可以直接使用,插件会自动处理,你只需将 `GO111MODULE=on` 即可。
@realpg 哈哈哈谢谢你,了解了,以后会尽量在这里多活跃的😊
@dabaibai 透明代理是很爽,不过,讲道理它对于 Go 语言来说真不一定就比用 Go 模块代理要快哦,尤其像是用挂载着全球范围 CDN 加速的那种代理,会就近节点缓存模块数据,换句话说只要你同城有人下载过某个模块,那么在很长一段时间内(理想最多长达一年)你们同城的人再重复下载那个模块时都是直接从就近的节点直接抓取的,这级别的抓去速度再好的透明代理都是比不上的哦😄
@scnace 是的,官方只有那一个,可我也搜了一下,确实网上有很多账号发的文章都给 io 那个代理加了个 [官方] 的 title😂
1  2  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   981 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 17ms · UTC 20:50 · PVG 04:50 · LAX 13:50 · JFK 16:50
Developed with CodeLauncher
♥ Do have faith in what you're doing.