云的难处

私有云的难处

——我们为什么需要 CloudEngine?

郑昀 创建于2016/7/31 最后更新于2016/8/3

关键词: 容器、Docker、OpenStack、虚拟机、私有云、Mesos、配置管理、部署、发布


提纲:

  1. Docker+OpenStack,就够了吗?
  2. 累觉不爱的部署
  3. 你家的业务系统能DRP吗?
  4. 大前提:配置管理规范
  5. 还要考虑什么?

  2014年年底,我们开始试着将原有的持续集成和持续发布流程,从 OpenStack 迁移到 Docker 上。后来,我整理过两篇文章讲容器私有云和持续发布都要解决哪些基础问题(III)。

现在,OpenStack 又回来了,与 Docker 并肩作战。不管是容器化 OpenStack,还是 Docker 集群,做到这一步就解决问题了吗?

Docker+OpenStack,就够了吗?

我们要的不仅仅是容器或虚拟机

我们都知道,Docker 实现的只是镜像内部的小环境的一致性,它保证了一个应用程序在不同机器上运行时的一致性。

就我们之前持续经营了五年之久的 O2O 电商平台而言,首先它存在多条业务线:

  • 团购
  • POP 平台
  • 电影订座
  • 网店通
  • ……

其次,它打通了供应链管理的全链条,从商机管理,销售行动管理,签约,终端设备铺设,……,到与商户的资金结算,与销售体系的佣金计算,与第三方支付的自动对账,与流量渠道的佣金对账,各种平台收费的核帐和摊销等等,加上外围技术支撑体系(如天机和鹰眼),里里外外大约近百个 Java 和 PHP 工程,每个工程都是集群

这还不算上那些开源组件所需的集群,如 ZooKeeper,Redis, MyCat,Elastic Search,还不算上商业智能的那套体系。

所以才云科技的张鑫说得对:

然而大中型企业用户很快意识到,真正的难点在于如何保证“大环境”一致,即整个业务系统中众多容器、组件、服务之间如何配置、互联、依赖,如何保证开发、测试、生产环境能相互转化、克隆等。这些环境和配置在容器概念之上,是容器自身无法解决的,只能依赖集群层面的管理工具。

是的,给你一堆虚拟机,给你镜像库和一堆容器,你仍然很难构建出能 Run 起来的业务系统。

累觉不爱的部署

环境维护伤不起

一线互联网公司的技术团队纷纷夸耀自己在生产环境发布的频次。无疑,一天之内发布频次越高,同时发布质量还很稳定,意味着技术管理水平越高超。

好吧,假定我们仅仅是每周发布一个常规版本(少则几个工程,多则几十个工程),每日可能有几次 hotfix。那么在生产环境中,部署时间 30 分钟 还是 2 小时,区别不大,毕竟部署是一次性的工作。

但对于开发联调和测试来说,就完全不一样。如果 1 分钟就能完成一次部署,信手拈来,毫无心理负担,可以测试验证的东西,和几个小时才能完成一次的部署,差异是巨大的。

说白了,分布式系统的线下环境维护,做过的人都知道,伤不起。

你家的业务系统能DRP吗?

如何快速重建

何谓 DRP?

Disaster Recovery Plan,灾难恢复计划是也。

2011年艺龙曾经因为 EMC 存储设备故障而连续 27 个小时无法对外提供服务,在此之后他们做了相应的规范和开发,我去年看到一份资料说,艺龙可以在 30 分钟内异地重建集群。此后适逢著名的携程 5·28 停服 11 个小时的大事件,惊吓之余我们启动了 DRP 计划。

DRP 涵盖的事务有:

  • 代码
  • 配置
  • 数据

DRP 面对的灾难场景:

  • 生产机房物理毁灭,或短时间内网络不通(如光缆被挖断)
  • 线下机房毁灭

想想看,如果你有一整套研发测试运维流程规范,还有:

  1. 代码库备份,
  2. 镜像库(包括了基础镜像)备份,
  3. 分环境的配置管理(一个环境对应一套持久化配置中心),
  4. 运维层面的 CMDB 备份,
  5. 数据库备份(跨机房数据同步),
  6. 在虚拟机和容器集群之上的集群管理工具

那 DRP 可能真的是水到渠成。

大前提:配置管理规范

配置与代码分离

前面说过,给你 OpenStack 和 Docker,你也很难快速构建出可运行的业务系统,那该怎么办?

 

首先我们要明白,要做到真正的大环境一致,必须将配置完全与代码分离,这里的配置不仅仅是服务之间的 IP 地址/内部域名/自动发现,还包括不同环境下不同应用的配置参数等。

我们要求的是,线下测试环境测试通过的包(或镜像),可以直接上预发环境,上生产环境,一路穿行没有障碍。

我们不希望看到的是,不同环境需要打不同的包/镜像。

因此,首先我们要一套环境对应一个持久化配置中心,与环境有关的参数都存储在配置中心里。

其次,每个应用都有自己的配置模板,不同环境部署的应用默认继承配置模板,人们可以通过集群管理工具(或配置中心的管理界面)对本环境配置做一些微调。

一定要能管到应用层面

自研的 Java/PHP 工程,中间件,开源组件,这些都叫“应用”。

我们在集群管理工具里,操作的对象是“应用”而不是裸机(当然你也能申请裸虚拟机)。

重要的是,将镜像的构建与代码库的分支构建整合

想想看,

你自己的应用,应用的元信息里已经指定好了代码仓库地址,你本次只需要指定分支(一套环境对应一个分支,如测试环境对应于测试分支),选择虚拟化技术(虚拟机还是容器),指定节点数量;

开源组件,比如你选择构建一个 Redis 集群,你只需要选择相应的镜像,指定节点数量,微调下配置;

几分钟后一切成为现实,网络已经配置好了,内部域名就位,你能立刻开始联调测试,是不是很美好?

背后对应哪些事情?我们以阿里的 ACP 给应用分配虚拟机资源为例吧:

  1. 分配机器
  2. 服务器初始化
  3. 天网
    1. 创建安全扫描黑盒任务
    2. 添加监控
    3. 添加ssh
    4. 安装ccbin
    5. 安装httpd/jboss/tomcat/resin等
    6. 安装jdk
    7. 安装acc
    8. 初始化sharedata
  4. 下载代码/镜像
  5. 凤蝶
    1. 下载额外流代码
    2. 配置assert
    3. 获取antx
    4. 初始化template目录
    5. 初始化uiweb
  6. build
  7. 部署前自检
  8. deploy
  9. checkservice

我们的应用申请容器资源,背后的步骤大致为:

  1. 发送容器创建请求
  2. 从 iDB(注:自研的数据库自动化运维系统) 获取数据源配置:这样应用访问哪些数据库,用什么工程帐号,都自动解决了;
  3. 上传配置(含要注入的环境变量)和 Dockerfile 至 Git
  4. 创建 Jenkins Job
  5. 从 TouchStone(注:自研的容器私有云管理系统)  获取配置
  6. 下载代码
  7. 编译
  8. 打包
  9. 构建 Docker 镜像
  10. 镜像上传
  11. 部署信息结果处理
  12. Haproxy 配置文件生成
  13. Marathon 镜像创建
  14. DNS 配置
  15. checkservice
  16. 容器创建结果返回

还要考虑什么?

大致想来,集群管理工具还需要解决:

  • 灰度发布;
  • 安全管理:如何在虚拟机和容器的基础上做好安全检测,就像上面阿里 ACP 的“创建安全扫描黑盒任务”之类的步骤一样;
  • ……

上面说了这么多,这个集群管理工具就是我们的 CloudEngine,之前我在《CloudEngine:大杀器如何炼成》里介绍过。

-EOF-

时间: 2024-10-15 15:11:21

云的难处的相关文章

阿里云ubuntu配置------jdk安装和配置

当你申请完阿里云服务器后,该做如下配置: 第一步:更新资源库: apt-get update 第二步:安装jdk7 apt-get install openjdk-7* 第三步:配置jdk环境给以后安装的其他程序需要的环境: 首先: 选择 路径 优先级 状态 update-alternatives --config java (这里的话,复制一下路径,再按ctrl+z,然后后面配置就行了 有 2 个候选项可用于替换 java (提供 /usr/bin/java). * 0 /usr/lib/jv

LEDAPS1.3.0版本移植到windows平台----HuCsm云掩膜模块

这个是2012年左右放在百度空间的,谁知百度空间关闭...转移到博客园. 最近项目用到3.1.2版本的LEDAPS,新版本的使用情况会在后续文章中慢慢丰富. HuCsm是将LEDAPS项目中的TM/ETM+大气校正流程系列算法中的云掩膜模块由linux系统移植到windows下的产物,代码本身改动不大,使用接口不变. 包含文件: HuCsm.exe hd423m.dll hm423m.dll 编译程序需要包含的静态库有: gctp.lib hdfeos.lib hd423m.lib hm423m

阿里云服务器 ECS 部署lamp:centos+apache+mysql+php安装配置方法 (centos7)

1.效果图 1 2. 部署步骤 1 1. mysql安装附加(centos7) 7 3.错误注意****** 10 1.效果图 2.部署步骤 链接 http://jingyan.baidu.com/article/870c6fc31218e8b03fe4be16.html 首先安装apachecentos可以直接yum安装apache ?. 命令:yum install httpd ? //根据提示,输入Y安装即可成功安装? 然后启动apache,并且设置系统让?Apache 开机自动启动. 命

华为云桌面

FusionAccess在解决方案中的位置 关键特性关键特性 FusionAccess的网络位置和功能 一.FusionAccess功能之资产管理 FusionAccess可创建虚拟桌面并分配给用户 "域"是FusionAccess的基础 2.1 "域帐号"标识用户 2.2 "计算机名称"标识虚拟桌面. 绑定用户与虚拟桌面关系的操作称为"关联(Attach)" 二. FusionAccess功能之用户接入 用户通过浏览器就可以

经济动能转换现万亿商机,腾讯云造人工智能数字商业

2017年6月,发改委印发<服务业创新发展大纲(2017-2025年)>(以下简称<大纲>),大纲指出我国正处于工业转型升级.新型城镇化推进和消费结构升级的大趋势中.预计到2025年,服务业增加值占GDP比重提高到60%. 根据国家统计局,2016年我国服务业增加值占GDP的比重达到51.6%.按2016年中国74万亿GDP估算,未来8年我国服务业增加值将有6.2万亿的增长空间.而数字经济和数字服务则是服务业增加值新增长的来源,对于企业来说则要把握历史机遇.加快推动数字商业创新发展

原创:Docker在云家政的应用 谢绝复制粘贴内容

我们公司目前大规模使用了Docker,目前除了数据库应用,其他所有应用都在Docker容器内运行,下面我就Docker在公司的应用做一些分享.. 首先我介绍一下公司的背景,公司属于中小型创业公司,服务器数量不多,但是为了解决一些问题,我们引入了现在比较火的Docker技术. 看一下我们在没用Docker之前遇到的问题: 1.线上环境和测试环境不完全一致,导致测试好的功能上线后会出现一些BUG. 2.部署新项目步骤繁琐,批量部署运行环境后,需要根据每个项目不同的情况,手动修改配置参数. 3.新项目

杰云科技发布高性能通用ARM云终端

随着云计算产业在国内的蓬勃发展,ARM云终端以其优良的可靠性.超长的使用寿命.安全的软件系统,超高的性价比等特点,越来越受到市场的青睐.深圳市杰云科技有限公司率先基于国产高性能ARM处理器,发布了最新款的J90系列云终端,从指标上看,该型号云终端是目前硬件规格最高.软件特性最丰富的云终端软硬件平台之一. 图 1 杰云J90系列云终端 鉴于目前国内云终端方案长时间"借用"平板(机顶盒)方案的现状,杰云科技的技术团队在2016开始,联合深圳市中兴微电子技术有限公司(前中兴通讯微电子研究院)

THINKPHP3.2.3增加阿里云短信接口思路整理

https://help.aliyun.com/document_detail/55359.html?spm=5176.product44282.4.7.O4lc1n 阿里云短信服务地址,感冒的下载看看 1 文件存放位置的问题 阿里云的短信接口 属于第三方扩展 所以文件放在 thinkphp\vendor\ 比如起名message 把SDK的文件都存到里面 2 把实现功能的代码 写好 放在message目录 不过注意文件的路径 代码里面的文件头 引用的文件地址用类似的 require_once

如何有效防止API的重放攻击(转自阿里云)

API重放攻击(Replay Attacks)又称重播攻击.回放攻击,这种攻击会不断恶意或欺诈性地重复一个有效的API请求.攻击者利用网络监听或者其他方式盗取API请求,进行一定的处理后,再把它重新发给认证服务器,是黑客常用的攻击方式之一.HTTPS数据加密是否可以防止重放攻击? 否,加密可以有效防止明文数据被监听,但是却防止不了重放攻击.使用签名防止重放攻击 使用签名之后,可以对请求的身份进行验证.但不同阻止重放攻击,即攻击者截获请求后,不对请求进行任何调整.直接使用截获的内容重新高频率发送请