1
liprais 2015-09-09 13:50:43 +08:00 1
有时间吹牛逼还不如把产品做好点,天天发软文真没啥意思
|
3
s5s5 2015-09-09 14:52:11 +08:00 1
不错
|
4
levon 2015-09-09 14:54:59 +08:00 1
干货
|
5
ssaul 2015-09-09 15:07:02 +08:00 1
这个思路是不错的,关键是实现的难度。
|
6
Troevil 2015-09-09 15:09:41 +08:00 1
继阿里之后,又一个拥抱变化的 ^_^
|
8
just4test 2015-09-09 19:52:04 +08:00 1
因为 Push On Green 所以贵司的服务经常挂球么。
|
9
just4test 2015-09-09 20:15:47 +08:00 1
上一条回复很不友好, coding 竟然还给我点赞了……那我就多说两句,我自己搭的架构大概做到了 coding two 。
实现方法是后端服务器用 docker 封装成镜像,叫 diablo 。一台 ECS 上同时跑了 N 个版本的 diablo ,前面有个 nginx 顶着,流量分配。上线的时候在所有业务服务器上启动新版本的 diablo ,然后一点点流量打过去,如果没问题再加大流量。万一某个版本跪了,把流量指向稳定的 diablo 就行。 然后这种结构应该也可以实现 Push On Green 。不太清楚 coding 的 push on green 到底做了那些方便的布置?完善的测试代码?这个小项目目前做了这么几个技术: 1.接口哈希检查,保证前后端接口兼容 2.静态数据合法性检查 不过我们几乎没有单元测试…… |
10
zhuang 2015-09-09 21:57:13 +08:00 1
不清楚这是个什么会议,在座的听众是谁,我只是很好奇,很多内容明明可以用简洁的术语描述出来,却一定要绕开不用,好像怕听众听不懂一样。
技术层面一共三个大问题: 源代码版本依赖,使用 android repo tool ,算是解决了吧。 dev/staging/prd 运行时统一和标准化, vagrant/docker 只是表面上解决了问题:运行时的依赖转移到了公司级别的 VM 之上。只是这个 VM 就不升级了吗?下次组件更新的时候,还是要回头解决依赖问题。 这两个依赖问题并不能靠“全公司依赖同一个版本”来解决,时间长了,一定会出现的情况是新代码会依赖新版本,而老代码还没有针对新代码做匹配。除非所有组件的更新都有着 100% 的向后兼容性,但这是不可能的。 我觉得一个更合理的思路是,能够独立运行的组件,可以使用独立的依赖。问题转移到,如何构建和重现独立的依赖。不过从对 vagrant/docker 的使用描述来看, coding 还没有这个能力。 最后一个自动化 CI 的问题,与 Push on Green 理念不冲突,@just4test 给了很好的实现方法。 |
11
c742435 2015-09-10 10:13:53 +08:00 1
@zhuang 我是上面的 just4test
vm 通常不需要升级了吧,我的主控 /测试环境机用的 centos ,线上机器用的 ubuntu ,这么做的原因是,主控机一开始用的 cent ,然后发现 cent 下 docker 默认报警告,建议不使用回环设备。然后业务机改成 ubuntu ,用 AUFS 。 两个系统都是装好 docker 和 docker-compose 就完事了。我感觉没用什么需要更新的了。而且业务服不存任何数据,随时销毁重建。 |
12
zhuang 2015-09-10 12:11:06 +08:00 1
@c742435
docker 用 loopback 后端一定要把 loopback 设备映射到物理硬盘上,不然性能问题太严重。 aufs 的内核补丁不管怎么说都是个隐患,能用 overlay 还是用 overlay 最好。 之前一直在用自己的构建系统,写明内核、工具链以及应用的版本,构建出对应的 vm 镜像。生产系统启动时抓取镜像。基本上 nginx 20MB , python 50MB 这样。如果共用一个 4GB 的 vm ,对于网络和 io 的影响都太大了。 vm 确实不需要经常更新,但是还是会有变动的时候。实际上想吐槽的是全公司共用一个 vm 的行为。 coding 的这种做法短期看不出问题,等时间长了, 甲项目说要用某组件的 a 版本,乙项目说要 b 版本。公司说,你们研究研究,到底用 a 还是用 b 。指望靠人规定来解决依赖问题,相当不科学……标题里不是写着嘛,人、技术和流程,都人规定了,要技术和流程干啥。 技术支持就该说,你们愿意用啥就用啥,环境都能给搭建好,不冲突还能重现。 |