写点什么

企业私有云的换位再思考

2016 年 3 月 13 日

本文是由同程旅游首席架构师王晓波在 ArchSummit 微信群分享内容整理而成,王晓波将担任本届 ArchSummit 深圳“云服务架构探索”专题出品人,更多精彩分享敬请期待。

引言:一个企业私有云的建设是在企业整体技术下的行为,各个方面都有影响,故而不仅仅是个技术的问题,从纯云技术以外的系统架构、管理、运维、开发等角度去讨论一下这话题,也会有更多新收获。

私有云的异和同

随着云计算的概念普及,公众对云计算的概念广泛接受,云的建设投入也越来越大。在这里我们再回头看看企业私有云这块在建设过程中的一些场景,将会发现一个很有意思的现象!每个人眼中的企业的私云,各不相同但又无比的类似。

构建一个企业私有云是一个复杂的命题,在私云开始建设的 N 年后,我们回头来看会发现,大部分企业私有云的建设是为了把资源动态管理起来,对访问控制和资源隔离没有做太多要求。

我们先来说说这个私云建设起初的目的,在面临基础维护的各项压力时的痛点:一、随着应用的增加,服务器的使用每天都在增加,但单机的性能往往利用不充分,单机使用率不高,服务器增加让管理变的一团糟。二、网络的压力,随着用户数量的增多,以及使用量的变大,一个地方出问题整个网络就会出问题。外网、内网、管理网都成了一张张无法管理的大网,管理成本高昂。三、应用的运维工作变的异常复杂,应用部署的复杂度在增加,应用部署的时间在加长,故障响应时间变的越来越长,付出的代价也越来越大。于是很多企业都开辟了一条类似的道路:私有云。

私有云的工作对于不同的企业来说,因为需求不同所以用的方式也不同,有自己慢慢研发的,也有直接使用外部方案的,如:OpenStack 等。但这里面我们会发现这件事情更多变成了为解决服务器、网络等基础问题而专门去做的事了;或者变成了因为要私有云所以要建私有云,变为一件单为解决技术问题去做的事了。

这时我们要是从另一个角度再来看一下私有云这件事会发现,原来很复杂的麻烦事,只是从一个麻烦变为了另一个麻烦。面对一套庞大又复杂的云系统,原来的故障换了一个脸又来了,并且来的更难排查了,因为基础设施变的更复杂,排查的时间更慢。比如,我们的一个产品线曾经直接使用整套开源解决方案,直接部署。在起初一切运行稳定,但是当子项目的流量进一步扩大后需要的基础支持越来越多,这时开始出现了比较大的麻烦,因无法掌控所有开源方案的技术细节,所以系统出现了各种的问题,这些问题有些运维是可以绕过或解决的,但是毕竟运维开发能力不足,我们不得不为每天可能突发的问题配备一个比较专业的开发团队。

整体开源解决方案有很多功能,而我们只是使用了其中的一小部分,为了这一小部分的功能,我们的开发团队不得不熟悉整个项目的代码,维护系统的开发团队的规模也比较大。我们其实给客户提供的只是产品服务,这样每天投入的人力成本非常高,而且对于问题的处理流程也是比较混乱的,最终我们只能退回到原来。所以在建设私有云这事上,我们还是要从整体系统方面来更多的思考。

云化思维解决的困难

从整体系统架构的角度来看看我们的应用系统到底出现了哪些困难,哪些我们是可以用云化来解决的。这里用到了“云化”这个说法,不是私有云。一个系统从应用到基础应该是一个整体,解决问题要从整体来考虑,这个整体包含很多方面:技术文化,开发人员的能力等等。那么具体困难有哪些,我们其实是可以总结一下的,就出现系统架构这一个永恒的课题了,什么样的架构是一个好架构,答案也是一个老声音:最合适的才是最好的(这个好像等于没说)。

那么在系统架构这块往往很多企业因为历史原因存在很多不合理的情况,一时之间也很难完全解决,这才是引发故障最大的核心点之一。比如,缓存这样一件看起来很简单的事情,在起初的系统中引入缓存,因为没有一个很好的架构设计,在一段时间后会发现这个系统中出现了一大堆的缓存服务器,每个缓存服务器中放入的缓存数据也可以用一句话形容:“不知道是什么”。

整个系统在缓存上已经错综复杂,原本为了提高系统性能而设计的缓存变成了一个地雷,任何一个缓存服务器的故障都有可能搞死整个系统。这样一个缓存的问题其实也是很好解决的,就看用什么样的方式来解决,只不过是要花费很多时间来重构整个系统,但是即使本次重构系统完成,可能在不久的将来因为这样凌乱的架构,又会面临再次重构。

这样的例子应该还有很多:数据库,消息队列,各项核心服务等等,但我们回想一下缓存的故事,我们能不能应用云化的想法搞定呢,那么这里的云化,我们就不能单单从基础技术的角度去考虑了,我们要从开发者的文化,后期的运维,架构的可扩展性,使用的便捷性等等方面去想,最后需求归为一句话“要一个缓存的服务在开发者看来它可大可小,数据想怎么放就怎么放,永远也玩不挂,随时能说的清楚里面有什么”。

这时我们就把缓存容器到缓存的调用,整体系统的监控和系统的自动扩容都在后端解决,让开发者使用我们的缓存系统,看上去就像是一个巨大的缓存盒子。把这样的云化工作一件一件的做起来,到最后我们自然就得到了一个真正解决我们困难的私云了。

架构角度的再思考

从系统架构角度的再思考,在这个角度上我们发现一个好的系统往往是一个:大事变小、大系统小做、简单设计、可快速开发、可运维性强的微服务化系统。不会出现一个点出问题,处处有问题的情况。并且对于业务的需求能快速的响应。这时我们私云在这块上就需要更多思考怎么更多的提供可靠的云化中间件,如,缓存,数据代理层,服务发现治理框架等,只有这样才能给应用开发人员提供更多的技术支撑,屏蔽更多的技术细节,让他们能像开发小应用那样,开发大系统。

管理角度的再思考

从管理角度的再思考,在这个角度上,我们经常遇到的一个问题是,对我们的基础资源的整体管理不够,如这个网口上应该是一个什么样的设备;这个服务器是用来做什么的;这个服务器应该安装什么 OS,上面的基础配置应该是什么;这个服务器上部署的是什么业务;同样的应用还有多少台服务器;哪些是正在工作的;这台服务器使用量是什么样的,还能进一步的提高吗;扩容的时候还能再快一点吗;等等。

这样的问题让我们想到了最开始的那个需求“ 把资源动态管理起来”,是的,这个正是我们最基础的那个想法,所以在这角度我们的私云就应该要为它设计一个完善的 CMDB,这个 CMDB 可以从基础资源管理到上层应用管理进行一个全面的掌控,并且数据还能够闭环的自动采集,CMDB 虽然本事技术难度不高,但是它的管理方式的设计会直接影响整个私云的原数据管理。

当然还有一个最重要的基础事项,选择一个合适的虚拟化的方式,当然这个还要考虑应用的现状,成熟的方案有很多,如:Docker 很帅,但你当前如果还有大量的在 windows 上运行的应用,那么就不太合适了。所以最合适的虚拟化方案才是最好的选择。

运维角度的再思考

从运维角度的再思考,在运维这个角度可能大部分的想法是我已经选择了一个比较好的虚拟化方式这就可以了,或者说私云就是为了解决运维的问题而生的,可能还有更激进者认为我们有云了,就不要运维了,只要找几个人把服务上架就行。但是运维真的就这样吗?这里还是先来想一下运维到底应该是个什么样的角色,从传统情况上来说我们的运维可能每天都在忙于发布,回收等常规基础性操作,工作时间长了好像运维只会发布重启一样。

但其实在移动互联网的今天,一个应用的更新迭代的周期是非常快的,这时候会出现;一些应用,产品和开发者都不再维护它了,但是这个应用还继续在线上运行,这就一定要有运维人员在,并对各种问题进行第一时间处理,这时候运维其实更像一名全栈工程师。

所以私云的基础解决了运维的基础工作(如像 Docker,运维的基础工作变的很少),这样运维需要用更多时间来思考,如何更好的在应用层面运维好一个系统,例如:当一个故障事件发生时,这个异常事件后面是什么,关联事件又是什么,这样就让故障的解决变的更加可控。所以在私云建设中要给应用运维建设一个强大的应用运维平台,让运维的所有数据在这个平台流通和分析,给运维人员最好的数据支撑,这样这个私云就是一个健康的云。

开发工程师角度的再思考

从开发工程师角度的再思考,这里的开发工程师并不是指私云的开发者。这个角度经常会被人忘记,因为很多情况下,大家会感觉私云主要是解决基础问题的,开发的应用只要能在上面跑就可以了,所以和开发者的关系不大。其实这时是忽略一些事情的,私云上乘载的正是这些开发者开发的应用,让它们更好的运行才是私云本质的目的。

但长期以来,应用发布上线,往往需要大量的运维工作,所以这个工作往往是非常忙碌的。那么这里私云需要考虑一下怎么去打通开发者到运维者之间的关系(这也是一对长久欢喜冤家)和减少开发过程对基础环境的影响。这里举个比较 low 的例子:一个故障发生,运维找来了开发人员一起排查故障,几翻苦查之后,发现应用在开发环境和生产环境的基础配置不一样。其实这里反应出来的是一个长久矛盾,开发者不擅长各种运维技能,运维者又不了解开发意途。

这里可能会说我们要‘全栈工程师’但全栈工程师毕竟数量有限,同样我们也可以用一些生硬的管理流程来解决这个问题,但是这样都不是很好的方式,因为我们需要给开发人员更多的自由。所以私云建设在此处就可以做的很好(如:Docker 在这里就给了大家更多新的想法),让开发人员通过私云慢慢融入 devops 的技术文化。

同程旅游的分享

以上正是同程旅游在私云的建设上不同阶段,纯技术角度以外的思考,从这个角度来看:一开始我们对机器进行纯粹的虚拟化,然后把整套开源方案直接拿来使用,接着使用 Docker 等容器加上中间件的云化走轻量之路。一切过程全是为了系统的更快,更稳,更好,让事情变的更简单,让系统变的更轻量。当然这个私云建设是一个整体的方案,我们需要从多种角度去审视它,不应只从纯粹的云技术这一个角度来看,这也是一个需要长期迭代的过程,我们还在路上。

Q&A

1. 问题: 请问同程目前的私有云建设处于何种阶段?如何满足业务的发展需求?

答: 目前同程所有的业务都是跑在我们自己的私有云上带,近一年大量的引入了 docker 容器,目前基本能满足业务的发展,我们还在继续带改进私有云

2. 问题:vmware 和 citrix 的桌面虚拟化您怎么看,会有使用的意愿么?用这两家的产品搭建企业私有云。

答: vmware 和 citrix 的桌面虚拟化只是在做虚拟化,当然虚拟化在云里面是非常重要带一环,但不是全部,如果从虚拟化角度来说它们是挺不错的,但是私有云毕竟以云的方式去做的,虽然不对外公开,除了虚拟化以外,还有做很多其他的工作

3. 问题:docker 的网络用的 ovs 吗?

答: 我们的 docker 没有使用 ovs,在网络这块做的比较保守的

4. 问题:docker 的安全怎么考虑的呢?

答: 我们的安全是从整体出发的,安全团队会有很多扫描器,宿主机上会有安全的 agent 做监控,来保障我们整体业务系统的安全,不知道问的是不是这个安全

5. 问题:您对于微服务和自适应性能水平扩展以及自动发布架构 paas 配置在有效数据监控下的调整有成熟的产品或者成功案例吗?

答: 这块我们仍在不断的改进,部分可以做到根据监控数据,自动弹性扩容,其他还是需要人工的半自动化参与

6. 问题:你们私有云的使用后,开发工程师对 devops 有什么样的参与度?

答: devops 需要比较多的文化气氛,我们公司一直在积极引导工程师带 devops 实践,目前部分中间件研发团队,都已经进入 devops

7. 问题 : docker 是部署在物理机上还是虚拟机上呢?

答 :docker 部署在物理机上的

8. 问题:在单台服务器上存在多个可选业务组件,它们需要的基础环境不尽相同。我希望使用 docker 封装每个组件。请问这种方案是否可行?是否存在资源占用或其他隐患?

答: 我们的每个 docker 容器都是单一的应用服务,docker 本身的隔离是没有问题的,如果物理机紧张,可以尝试

9. 问题:请问有使用 openshift 之类的软件管理 docker,在一台物理服务器上会出现不同 docker 之间的资源竞争吗?如果有那又如何解决呢?

答 : docker 本身具备很好的资源隔离能力,所以基本不会发生资源竞争,我们在应用过程中没有发生类似问题

10. 问题:目前的云平台,会使用会用到 KVM,Xen 等虚拟化技术吗?底层的 KVM 与 Docker 之间的关系如何?如果出现 KVM 的安全漏洞,是否会影响私有云的安全?

答 : kvm 我们也在使用,目前有大量的 windows 服务是跑在 kvm 上的,我们的安全是整体的安全方案,所以在这一块上是从整体考虑的安全方案,安全措施比较多,基本上入侵检测,到网络监控,主机防御等基本都有一套完整的系统在跑,基本不会担心这个问题

11. 问题:即使单台服务器的场景 docker 也值得应用对吗?

答:可以把底层的基础依赖一起打入容器运行

12. 问题:请问 docker 集群是部署在 coreos 上吗?还是其他的发行版?

答: docker 部署在 centos7 上

13. 问题:有几成业务放在 docker 上跑了,有多少 docker 实例?

答 : 我们除了 windows 上的应用,其他都基本跑在 docker 下面了,大概 3000 个左右的 container,也一直在增加

14. 问题:您公司以后会不会开源一些成熟架构或者开放一部分私有云的 paas 平台给其他开发者比如自动扩容数据反馈架构产品?

答:我们也很想开源出来,目前还需要做更多的工作,以让它变的更好

15. 问题 :kvm 通过 openstack 管理还是 rhev?

答:我们之前也在使用 openstack 来管理,目前正在迁向我们自己研发的一个轻量级管理工具

16 问题 :kvm 和 docker 的异构管理是由统一的云管理平台来负责吗

答:是的,统一归平台管理

17. 问题:数据的安全性是如何整体考虑的, 比如故障恢复之类的

答: 数据库在另外一套数据库的管理集群中,另外还有分布式文件存储系统,docker 本身不存储数据

18. 问题:容器中应用的更新一般怎么做,更新镜像并重启容器吗?

答 : 目前是这么做的

19. 问题 : 数据库放物理机吗?如何和虚拟机(业务层)通讯,三层吗

答 : 目前生产环境的数据库没有使用虚拟机,网络是三层通讯

20. 问题:问个偏业务的问题,像业务上数据有关联的模块,在应用容器开发和部署时,有哪些要注意的?

答:这个问题没太看明白,我们这边的业务模块之间的通信和调用是通过我们的服务治理调度中间件完成的

21. 问题:灰度发布吗,原则是什么?

答 : 是灰度发布的

讲师介绍

王晓波,同程旅游 首席架构师,专注于高并发互联网架构设计、分布式电子商务交易平台设计、大数据分析平台设计、高可用性系统设计。曾设计过多个并发百万以上、每分钟 20 万以上订单量的电商交易平台,熟悉 B2C、B2B、B2B2C、O2O 等多种电商形态系统的技术设计,熟悉电子商务平台技术发展特点,拥有十多年丰富的技术架构、技术咨询经验,深刻理解电商系统对技术选择的重要性。

ArchSummit 全球架构师峰会 2016(深圳站)有幸邀请王晓波出任“云服务架构探索”专题出品人。大会 15 大专题,3 位联席主席,15 位出品人,10 位大咖讲师,火币网的创始人兼 CEO 李林、饿了么 CTO 张雪峰、阿里巴巴速卖通技术部总监郭东白、Uber 高级软件工程师魏凯…他们会给大会带来什么不一样的精彩呢?让我们拭目以待!7 折购票倒计时最后一周,了解更多大会详情,点击这里

本文根据 ArchSummit 微信大讲堂上期期邀请讲师,同程旅游首席架构师王晓波为大家线上分享内容和提问环节整理而成,该微课堂是 ArchSummit 全球架构师峰会运营大会之外的一个线上交流的平台,定期组织分享活动。在这里可以提前聆听讲师及所在团队的线上分享,了解大会最新动态。想参与的读者可以扫描二维码,回复“架构师”,获取参与方式…

2016 年 3 月 13 日 16:342115

评论

发布
暂无评论
发现更多内容

数据人必须知道的SQL概念(A—Z)

大唐小生

sql 数据 职场成长

基于 Golang的侵入式 Opentracing实现全链路追踪 ----实践篇

是老郭啊

财务分析与主要的模型

松子(李博源)

微软苏州集体抵制来自阿里、华为的跳槽者:请停止你的“奋斗逼”行为!网友:看到 955 不加班的公司名单,我酸了

程序员生活志

加班 程序员生活 996

阿里云 EMAS HTTPDNS 联合函数计算重磅推出 SDNS 服务,三大能力获得突破

应用研发平台EMAS

多线程 & 并发架构

石印掌纹

授人以渔:stm32资料查询技巧

华为云开发者社区

架构 armv8 芯片 华为云 二进制

实用!一键生成数据库文档,堪称数据库界的Swagger

程序员内点事

Java MySQL

在人工智能时代追逐的“后浪”

华为云开发者社区

AI 开发者 技术社区 程序员成长 华为云

第九周作业

方堃

iOS身份证号码识别

高丰

计算机网络基础(十一)---网络层-OSPF协议

书旅

计算机网络 网络 协议栈 OSPF

你问我答:微服务治理应该如何去做?

博云技术社区

微服务 PaaS API 容器云 博云

Vue中使用装饰器,我是认真的

前端有的玩

Java Vue 装饰器

华为云GaussDB(DWS)内存知识点,你知道吗?

华为云开发者社区

数据库 数据 大数据处理 内存 华为云

将信将疑,将中台进行到底

郭华

阿里云移动研发平台 EMAS 助力银行业打造测试中台,提升发版效能

应用研发平台EMAS

Java字符串拼接,去首尾, 判空, 类型转换

狸猫换太子

Java 类型推断 字符串

无接触,云办公!5天完成手机淘宝新版本迭代,揭秘阿里工程师协同研发“神器”

应用研发平台EMAS

《深度工作》学习笔记(3)

石云升

学习 深度工作 工作哲学

数据库系统设计概述

码哥字节

数据库 redis mongodb elasticsearch 数据库设计

阿里云小程序云发布小程序跨平台开发框架,助力开发者一次开发,多端运行

应用研发平台EMAS

JVM系列之:JIT中的Virtual Call

程序那些事

Java JVM JIT

云小课 | IPv4枯了,IPv6来了

华为云开发者社区

IP 公有云 虚拟私有云 华为云 虚拟化

第九周

hdhdh

秒杀系统问题与方案设计

superman

秒杀 架构总结

原创 | 使用JPA实现DDD持久化-O与R:两个世界

编程道与术

Java hibernate DDD JDBC jpa

相聚“云”课堂,智微智能“双师课堂”促进优质教育资源共享

DT极客

架构师第九周作业

傻傻的帅

架构师 课程作业

学编程没人带?推荐10个免费学编程的最佳网站给你

代码制造者

学习 编程 编译器、程序语言、CPU 编程网站

厦门航空牵手阿里云打造航空业移动研发中台,研发效率提升50%

应用研发平台EMAS

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

企业私有云的换位再思考-InfoQ