坚信科学,分享技术

>>>尝试更加利于阅读的2014版科学院,以后都在新版上写。

Yearly Archives: 2012

gitlab3.1升级4.0手记

在过去的几个星期,已经顺利在gitlab中开始了团队的代码合作。http://www.54chen.com/_linux_/github-gitlab.html 圣诞前后Gitlab发布了最新的4.0版本,感觉最大的改动有: 1.merge request的diff上的comment好用了 2.支持namespace,看上去是未来用来按team划分权限的 3.network界面的bug修复 以下记录了所有的升级过程: 所有过程完全按照https://github.com/gitlabhq/gitlabhq/wiki/From-3.1-to-4.0,任何一步都可以重复搞。 坑: 因为在之前由于好奇用管理员账号在后台建立了几个Group,这回namespace支持就坏菜了。 sudo -u gitlab -H bundle exec rake gitlab:enable_namespaces RAILS_ENV=production 会出现一堆错误。由它去吧。 然后所有的原来加的Group的project重新生成push吧。 铁一般的事实说明:一定要先在3.1下把groups设置去掉之后再来打开namespace支持。

Continue reading

Posted in linux | Tagged | Leave a comment

五步构建持续性部署(CD)

错误被发现的时间越迟,修复的难度越高,代价也最昂贵。如果工程师在敲下代码的时候就发现了问题,那修复的成本几 乎为零。如果编译器捕获了bug,它对开放时间造成的影响就是以分钟计的。如果bug进入了产品,而且在一段时间内没有被发现,找到bug、修复bug的 代价就会让人觉得难以承受。千年虫问题就是一个典型的例子。 ----题记 from http://www.infoq.com/news/2009/03/Continuous-Deployment 持续部署的目标是通过减少批量工作的大小,并加快团队工作的节奏,帮助开发团队在其开发流程中消除浪费。这使团队能够一直处于一种可持续的平稳流状态, 让团队更容易去创新、试验,并达到可持续的生产率。 下面是来自Eric的五步构建快速部署的办法: 1.CI服务器。持续性部署的前提是持续性构建。我们需要一个地方去做单元测试、功能测试、集成测试和所有测试。这些事情会在每次commit之后进行。一定要确保所有的test在10到30分钟内全部跑完。如果不可能做到,那就将它们进行归类。 2.代码控制提交脚本。不管是svn还是git,都有各种hook的勾子程序,在每次commit前嵌入检查逻辑。这概念来自于传统意义上的“生产线”,一旦在线上的产品发现问题,将停止进入,进入暂停阶段。修好之后继续运转。如果1中的持续构建有一个test case不能过,那这个脚本要能够阻止再来的commit。简单地说,就是让代码能够检查的bug代码不能进入。 3.简洁的发布工具。不需要多复杂的工具,只需要每个人都遵守的、简单的办法,同时要遵循CI没通过就不能使用的原则。 4.

Continue reading

Posted in 架构研究 | Tagged | Leave a comment

谈谈创业公司的技术选型--朴素的技术观

创业公司的定义 把服务器数量在千台以内(如果存在服务端),或者业务没有爆发过或者是长时间没有爆发过的公司,叫做创业公司。 朴素技术观的定义 有很多看上去很美好的技术,背后都有很多对应的很残酷的事实,在一个创业公司许多选择给你,你可以使用当前最炫的技术,也可以使用团队最擅长的技术。朴素世界观,是指所有选择使用团队最擅长技术的一种观念。 语言 语言之争是最没品了,这里不争哪种语言好哪种语言坏。 这里有一个办法来选择语言:所有团队成员的简历中,出现最多的一种语言为标准。 例外情况:团队成员中有一位大拿,是某门语言的泰斗,不说在国际上,在国内也要有领头羊的成绩。印象中在创业中大量使用GO语言的许式伟大侠是例外中最典型的一个,不过看看人家的成绩,已经把GO摸的一清二楚了。 反例:太多。 以下条件满足可开启反例模式: 1.至少一人完全理解整个语言的语法 2.至少一人完全理解语言精髓 3.至少一人完全掌握此语言常见debug工具 4.至少一人在一个规模较小应用成功使用 存储 这里主要讲服务器的存储。 如何选择:mysql+memcached至少在twitter、renren.com、taobao、qq、sina、baidu......等公司大量使用,如果你团队成员一个都不是来自这些公司,那大胆地用吧,用死也用不出什么毛病来。当然了,十分需要在业务爆发时找到一位可靠的mysql dba,这里要提一下人人网的创始员工DBA刘启荣大侠,引用一句前老板的话:×××无出启荣之右也。 反例:此处省去创业团队名字,有史可考。当年KV十分火爆,某兄弟对cassandra十分感冒,于是在整个系统初期设计时

Continue reading

Posted in 资料文档 | Tagged | Leave a comment

企业github之高仿选择-gitlab使用实录

自从上周使用git-svn以来(http://www.54chen.com/_linux_/git-svn.html),一发不可收拾,于是在偶然的机会发现了gitlab这个不错的选择(可以想象成是github的公司自己搭建的内部版本),还有什么理由继续使用svn+redmine+wiki! @有个梨UGlee 一个人,20年,单枪匹马的干翻了整个计算工业。如果你是程序员,还没有在他写的操作系统上工作,或者还没有开始使用他缔造的版本管理系统,那么你还是趁早改行吧,你干这行是没希望的。 安装 用ubuntu,让生活更加轻松。 root@ubuntu-chenzhen:/home/gitlab/gitlab# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 12.04 LTS Release: 12.04 Codename: precise 请打开以下地址并收藏:https://github.com/gitlabhq/gitlabhq/blob/stable/doc/install/installation.md 所有的安装只需要一步一步按照说明做就可以完成。以下记录一些中国特色的安装过程。 中国特色 1.安装ruby1.9.3p0 不要下了,打不开的(原因你懂的)。 直接 apt-get install ruby1.9.3 2.补充安装bundler 装完ruby就有gem了,然后把源改在淘宝: gem source -r http://rubygem

Continue reading

Posted in linux | Tagged | 1 Comment

git svn使用手记

以下是一个淡疼的记录,因为从linkedin归来的宝秋叔大力推荐git,而我们现在的代码大多在svn中,所以就有了这一段故事。 一、同步回来svn $git svn clone https://miliaocode/repos/project -T trunk -b branches -t tags 然后进入漫长的等待。 -T trunk -b branches -t tags 告诉 Git 该 Subversion 仓库遵循了基本的分支和标签命名法则。如果你的目录下没有三个标准目录的话还是不要加了。 二、完成同步之后 localhost:xxx chenzhen$ git branch -a * master remotes/git-svn localhost:xxx chenzhen$ git show-ref ecf28daf78732c0538a99e206bd9e6e32cbd1ff3 refs/heads/master ecf28daf78732c0538a99e206bd9e6e32cbd1ff3 …

Continue reading

Posted in linux | Tagged , | Leave a comment

qcon杭州2012读后感

我没有在现场,所以叫读后感,只是看pdf文件之后的总结,如和现场体验有误,以现场为主。 给力排行一:云中的资源管控 淘宝林昊大师:提到2010年时三分之一的虚拟机peak load小于0.5,LXC重度用户,各种资源隔离的坑都被他们解决了。在进一步做动态调度。 腾讯CEE系统介绍:产品细节惊人,疑似依赖LXC。 京东虚拟化:openstack用户、使用传统vm。 CloudFoundry:完整讲述了实现和演进。 盛大游戏私有云:在游戏业务中使用,未明显提及虚拟化的事情,猛一看像是做分配机器之类的事情。 给力排行二:大数据hadoop 阿里巴巴:3000 Servers,正在演进hadoop as service,原来yahoo维护hadoop的大侠们去了那里,这个方向应该是靠谱的。 百度:2500 Servers,与阿里方向侧重不一致。当然了,也有可能是集团利益让牛B的构架师发挥不到极致,如果有这种现像存在,可以考虑来小米。(mail to chenzhen at xiaomi dot com 无耻的广告。。。) 给力排行三:工具和思路 网易:puppet在运维中的各种使用 陌陌:移动运维非常赞!让关注变得更简单更快捷,更容易让团队成员关注系统运行。 支付宝:SOA治理等。

Continue reading

Posted in 架构研究 | Tagged | 7 Comments

cloud foundry - how to bootstrap a system in centos6

1)install febootstrap Febootstrap is a tool like debootstrap in ubuntu. #yum -y install febootstrap #febootstrap centos6 rootfs http://mirror.neu.edu.cn/centos/6.3/os/x86_64/ Threre is a basic centos system in rootfs dir. 2)install ruby 1.9 (optional) yum -y groupinstall "Development Tools" yum -y install openssl-devel …

Continue reading

Posted in 架构研究 | Tagged , | Leave a comment

54chen Twitter memo 2012-10-14

cloud foundry之warden代码解读-part2 http://t.co/czkUa5m0 #

Continue reading

Posted in 生活备份 | Tagged | Leave a comment

cloud foundry之warden代码解读-part3

简介 cloudfoundry是vmvare推出来的开源PaaS平台,warden是其核心部分的资源管理容器,完成了各种资源分配的事情。 代码位置在: https://github.com/cloudfoundry/warden 根据part2里提到的过程,本节以create命令为例进行追踪。 调用过程: bin/warden-repl >> lib/warden/repl.rb >> Warden::Client >> warden.sock >> lib/warden/server.rb receive_request > process(request) > process_container_request(request, container) > base.rb > dispatch(request, &blk) > send(do_method, request, response, &blk) -> linux.rb > do_xxx > shell script 过程放大 一、进入repl命令行 …

Continue reading

Posted in 架构研究 | Tagged , | Leave a comment

cloud foundry之warden代码解读-part2

简介 cloudfoundry是vmvare推出来的开源PaaS平台,warden是其核心部分的资源管理容器,完成了各种资源分配的事情。 代码位置在: https://github.com/cloudfoundry/warden 代码结构 |-- em-warden-client 基于eventmachine的client 依赖 warden-client与warden-protocol 通过 unix socket来通讯 |-- warden 巨复杂的warden实现,大部分是shell脚本+ruby,还有两个c实现。 |-- warden-client 客户端驱动,提供与warden的阻塞式通讯client。依赖warden-protocol。其中的V1.rb对各自command进行解析之后的处理。这里有一个v1mode的概念, v1mode使用字符串,转为pb后与其他的一起使用protobuf。 `-- warden-protocol 依赖beefcake(protobuf library for Ruby)。protocol下有所有支持的pb生成格式。 小坑:ruby中的send方法 send其实就是动态地根据名字调用函数,传递后面的内容作为调用参数,api函数原型为: obj.send(symbol [, args...]) => obj 在V1.rb中,所能的convert_xxxx_request方法都是这样被调用到的。 专注warden实现 src下四个C程序: |-- clone 用来快速复制一个环境 夹杂一堆的shell在其中运行 …

Continue reading

Posted in 架构研究 | Tagged , | Leave a comment
Page 1 of 812345...Last »