作为互联网企业,上线发布肯定是少不了。无疑,凡事也有个渐进过程,今天和大家吹吹水聊一下企业上线发布,还有几天就是过年,时间飞逝,转眼间又一年,本博在此祝各位新年快乐,提前给大家拜个早年。

一、小型创业公司代码上线经典案例

背景:小型企业可能只有几个开发,几台服务器,一般开发兼运维,并不会单独聘请运维工程师。由于服务器较少,通常使用手动拷贝,有部分还会使用FTP上传代码(如下图所示)

简单总结:
  • 优点:
    1、 上线流程快
    2、 可以减少公司的运营成本
    ……
  • 缺点:
    1、 流程不规范
    2、 手动发布容易出问题,例如替换错文件等等
    3、 开发往往很多不懂运维的专业知识,例如可能直接开放外网端口、直接开放ssh端口等,容易被黑客攻击、使用root启动,有些开发为了方便可能在线调试程序等
    ……

二、中小型公司代码上线经典案例

背景:中型网站一般具备运维人员,但是运维人员相对不多,通常先会在内网测试,测试通过后才会发布外网,通常中小型使用shell脚本发布居多。

简单总结:

  • 优点:
    1、 存在运维人员,服务器权限管理相对有了规范
    2、 使用脚本式批量发布程序,上线或者回滚速度有效加快
    ……
  • 缺点:
    1、 每次上线/回滚可能需要登录服务器上操作
    2、 当项目较多时候容易出错
    ……

三、中型公司代码上线经典案例

背景:中型企业通常存在运维团队(人数达一定量),此时,运维人员一般会制定代码tag、程序路径、备份路径、脚本路径、启动用户等相关规范,同时流程相对较为规范。技术选型上可以采取jenkins/walle+ansible/ saltstack+sonar/jacoco等

简单描述下整个流程:
  • 1、 开发提供代码到gitlab或者svn
  • 2、 触发钩子调用jenkins(或者手动构建),Jenkins集成Sonar扫描,部分会接入jacoco生成代码覆盖率。当然这个需要达标才能正式上线
  • 3、 测试进行测试环境测试
  • 4、 开发提单上线,测试进行预发布环境测试(预发布环境部分公司存放在内网、部分会存放在正式环境上,通过网络隔离做成预发布环境)
  • 5、 预发布测试通过后测试拉单到运维审核,同时开发人员需要在gitlab/svn按照规范打tag
  • 6、 运维基于tag构建jenkins,拉取代码(java需要使用mvn/ant编译),调用ansible/saltstack上线发布,并发邮件通知相关人员
  • 7、 产品验收并结单

四、中大型及以上公司代码上线经典案例

中大型及以上公司通常存在多个运维团队(业务划分等),也有不少运维开发,所以通常会由自己的运维发布平台,当然上线流程基本并无差异,大体由以下类型组成:

  • 1、 确定语言类型,php还是java还是其它(Java重启tomcat)
  • 2、 获取代码
  • 3、 编辑(可选)使用ant maven
  • 4、 打包命名
  • 5、 文件分发 (scp salt-cp rsync ansible puppet saltsack)
  • 6、 将待部署节点,从集群中摘除(是否存在灰度坏境)
  • 7、 是否存在灰度坏境,先灰度发布
  • 8、 解压源码包
  • 9、 创建软链接
  • 10、 重启web服务(java需要重新启动)
  • 11、 测试验证
  • 12、 加入集群
  • 13、 回滚
但是中大型及以上公司可能会存在其它小、中型公司不一样的特色,以下简单列举几个:
  • 1、HTTP动态负载均衡
    例如当负载均衡层我们使用nginx时候,后端服务器列表变更时候需要到服务器修改upstream规则,这样容易出错,同时也需要经常reload,消耗系统性能,这里简单说下实现原理:

    1.1 当程序启动时候insert或者delete数据库信息(数据库可使用consul/etcd)
    1.2 Nginx定期获取数据库信息并生成配置信息
    分享几个参考给大家:
    微博:upsync+consul: https://github.com/weibocom/nginx-upsync-module
    又拍云开源slardar: balancer_by_lua+consul: https://github.com/upyun/slardar
    京东:openresty balancer_by_lua+consul

  • 2、配置中心
    部分公司会存在配置中心,当程序启动时候,首先到配置中心获取配置。这样的好处也杜绝了账号密码经过开发手中,减少配置泄露性。有些配置中心能实现热更新,
    当修改配置中心配置时候,下发配置更新信息,程序能重新加载配置信息。
    分享开源配置中心给大家:
    分布式配置管理平台:https://github.com/knightliao/disconf

  • 3、上线发布多彩
    蓝绿发布/小版本发布:不停老版本,部署新版本然后进行测试,验证通过后,将流量切到新版本,同时老版本也升级到新版本。
    灰度/金丝雀发布:新老版本并行跑一段时间,部分用户访问老版本,待功能验证后再全量更新。

Comments

2018-02-11