私有云的难处

2024-03-08 22:40
文章标签 私有 难处

本文主要是介绍私有云的难处,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

  现在,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-

欢迎长按二维码订阅我的微信订阅号『老兵笔记』

转载时请注明“转载自郑昀-旁观者”或者给出本文的原始链接。

转载于:https://my.oschina.net/zhengyun/blog/733504

这篇关于私有云的难处的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/788644

相关文章

js私有作用域(function(){})(); 模仿块级作用域

摘自:http://outofmemory.cn/wr/?u=http%3A%2F%2Fwww.phpvar.com%2Farchives%2F3033.html js没有块级作用域,简单的例子: for(var i=0;i<10;i++){alert(i);}alert(i); for循环后的i,在其它语言像c、java中,会在for结束后被销毁,但js在后续的操作中仍然能访

Python中的私有属性与方法:解锁面向对象编程的秘密

在Python的广阔世界里,面向对象编程(OOP)是一种强大而灵活的方法论,它帮助我们更好地组织代码、管理状态,并构建可复用的软件组件。而在这个框架内,私有属性与方法则是实现封装的关键机制之一。它们不仅有助于隐藏类内部的具体实现细节,还能保护数据免受外部干扰。今天,让我们一起探索Python中私有属性与方法的魅力所在,了解它们如何在实际开发中发挥重要作用。 引言 随着软件系统变得越来越复杂,维

电子电气架构---私有总线通信和诊断规则

电子电气架构—私有总线通信和诊断规则 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明自己,无利益不试图说服别人,是精神上的节能减排。 无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事.而不是让内心的烦躁、

一种在C++中外部强行访问私有成员的方法

问题 C++在设计上,是不允许类的私有成员在外部被访问读写的。 然而,有时是想要在外部访问私有成员的。我目前常见的情况是:想要访问UE引擎代码中的类的私有成员,但又不想“污染”其源代码将其private改为public。 方法 一种方法是,再建立一个完全相同结构的类,只不过将成员改为public: class MyClassA_MirrorPublic{public:int dat

Windows系统使用小皮面板搭建Kodcloud结合内网穿透体验私有云盘

文章目录 1.前言2. Kodcloud网站搭建2.1. Kodcloud下载和安装2.2 Kodcloud网页测试 3. cpolar内网穿透的安装和注册4. 本地网页发布4.1 Cpolar云端设置4.2 Cpolar本地设置 5. 公网访问测试6.结语 1.前言 本文主要为大家介绍一款国人自研的在线Web文件管理器可道云,能够支持在线管理图片、播放音乐视频、编辑和查看文件

如何在本地服务器部署SeaFile自托管文件共享服务结合内网穿透打造私有云盘?

文章目录 1. 前言2. SeaFile云盘设置2.1 Owncould的安装环境设置2.2 SeaFile下载安装2.3 SeaFile的配置 3. cpolar内网穿透3.1 下载安装3.2 Cpolar注册3.3 Cpolar云端设置3.4 Cpolar本地设置 4.公网访问测试5.结语 1. 前言 本文主要为大家介绍,如何使用两个简单软件,SeaFile云存储平台和cpo

实习三十九:harbor私有仓库管理

一、harbor私有仓库管理 是python的包管理工具,和yum对redhat的关系是一样的 yum -y install epel-release yum  -y install python2-pip pip install --upgrade pip pip list  pip 8x pip install --upgrade pip pip install --upgrade pip=

Python习题 163:类的方法访问私有变量

(编码题)设计一个 Python 类 Person,表示一个人。这个类应该具有私有变量 __name 和 __age,以及以下功能: 构造方法 __init__ 接受两个参数 name 和 age,用于初始化私有变量 __name 和 __age。方法 get_info 返回一个字符串,包含该人的姓名和年龄信息。 class Person:def __init__(self, name,

“搭建与配置私有Docker镜像仓库实战指南“

前言 在当今快速迭代的软件开发环境中,Docker已成为容器化应用部署的事实标准,极大地提升了应用的可移植性、一致性和开发效率。随着企业级应用对容器技术依赖的日益加深,私有Docker镜像仓库的重要性愈发凸显。它不仅关乎于镜像的安全存储与高效分发,更是实现团队间高效协作与持续集成/持续部署(CI/CD)流程的关键一环。 然而,对于许多开发者和IT管理人员而言,搭建并配置一个稳定、高效且安全的私

如何搭建私有的Git中心服务器

http://www.toutiao.com/a6353567317053784322/?tt_from=mobile_qq&utm_campaign=client_share&app=explore_article&utm_source=mobile_qq&iid=5840657922&utm_medium=toutiao_ios 相信点开这篇文章的朋友都是了解和使用过Git的,所