本文是数人云CTO 肖德时在 2016 全球运维大会·上海站上的演讲实录。干货连连!走过容器大会探讨完热门的一容器一 IP ,接着来运维大会随小数一起来看一下如何基于 Mesos 打造高可用微服务架构吧:)
很高兴在这里和大家分享一下如何用开源软件打造一个高可用以及微服务的架构。 Mesos 是 Apache 的一个开源项目,其宗旨是像一台电脑一样管理整个集群,它源于 Google 的 Borg 系统,有一套 cluster 管理平台对无数台机器进行管理。 Twitter 、 Airbnb 的服务器及苹果电脑的 Siri 大数据应用都是跑在 Apache Mesos 上面,基于 Apache Mesos 系统我们也做了一个轻量级 PaaS 平台。
高可用
{<1>}
{<2>}
{<3>}
这也是应用跟集群之间松耦合的过程, Mesos 是非常成熟的架构,可以帮助企业实现高可用的架构。
微服务
{<4>}
{<5>}
系统实践
数人云是一家创业公司,我们利用了一些当前比较时髦的一些技术,比如说容器。 Mesos 本身是一个集群系统,但其部署仍较复杂。大家都希望运维能够标准化,一般想到的是 Ansible 和 SaltStack 。
Docker 标准化镜像非常方便,于是我们用 Docker 的方式把这些组件都标准化,打成 image ,通过一个 DSL 的文件撒下去,也同样实现了这样的集群。复制以后,下次不再需要配置,按照这个方式快速地执行。 Ansible 和 Salt 也是一样的过程,那么选择这套方案的原因是,我们认为 image 的管理比对脚本的管理更方便一点,有仓库和版本的概念。我们也利用了 Docker 的一个先进的理念——应用中心导向的 build 、 ship 、 run ,能把所有的配置信息都用一个 DSL 写成一个 Json 文件下发下去,通过控制器在全部的机器上自动部署。基于 Linux 本身的四层的路由 IPVS 进行分化。我们不用 Docker 所有的特性,只需要其 deliver 的特性。
刚才我们混合部署了一套微服务的架构,但真正把它部署下去,监控起来也是非常麻烦的。因为每一个小的 App 都有自己的性能的瓶颈,也有自己的指标,如何把它们汇总起来是一个问题,比如说你的十个 App ,每一个都有自己的指标,撒在不同的机器上,如果按照正常的模式,原来监控的每一个都要监控,然后做汇聚,这与之前 Mesos 用一台电脑管理资源是相违背的。
其实我们并不关心每一个节点上 App 运行的性能,我们需要的是汇总的性能。一个比较好的方式是通过 API 网关,内部的交互完全通过这种 Restful 的 API 网关来去控制。没有达到性能指标,就把它杀掉换在别的机房运行,对外提供统一的定义的这个指标,用网关控制这个指标,我们用的是 eBay 的 proxy 。最简单的方式可以用 HA proxy 去做,但是 fabio 用 go 语言来写,更符合我们数人云的语言技术栈,于是选择它做二次开发,控制整个 API 请求的指标还有响应速度。 Mesos 本身有自己的容灾和调度策略,我们做了一个自动试错三次的上限,除了报警以外,不允许它再扩了。
这种方式整体上把微服务所有模块的组建、所有组件服务的质量都得到了一个可量化的指标。因此能支持多少个请求都是可以快速知道,也是可控的,不需再做实时的评测。正常运营过程中,会在事前做一些压测,但这个压测是理论值,生产环境中业务的质量是需要有一个控制,一个总闸。这也是原来微服架构里面,大家比较容易忽视的地方。
{<6>}
在使用 Mesos 的过程中, Mesos 本身是提供一个资源池,想使用它的时候需要一个入口。我们基本上按照 Mesos 推荐的 Framework ,这里推荐的是 Marathon ,用的本身是 Scala 语言写的一套系统, Mesos 本身的组件已经由原来简单的 protobuf rpc 的交互转变成 Restful API ,开发一个调度 APP 或者 Framework 已经不再需要 mesos 依赖库,现在完全可以通过 HTTP API 的去操作它,因此我们完全可以自己去做开发。 Mesos 的很多特性,例如针对统一的容器管理,不仅仅是针对 Docker , Cgroup 也支持, GPU 也可以管理,未来会支持虚拟机。然而它很多特性我们想用但是用不了,没有这种支持,因此我们考虑在这方面做开源的项目,把 Mesos 的特性真正发挥出来。
众所周知, Twitter 、 Airbnb 以及 Apple 在使用 Mesos 的时候,都是使用自研的 Framework 调度 Mesos 的资源。分布式系统里面最重要的是网络,它支持了当前最流行的 CNI 容器化网络接口。因为这种网络是池内部的网络,跟外界的网络是可以隔离的,因此这个网络可以动态扩缩,也是当前比较时髦的语言, SDN 比较推崇的一种技术。它是一个 Json 定义接口,对接网络的结构,比如 DHCP ,我们可以分网关给它,来做接入。
{<7>}
总结
总结一下。第一,我们认为 Mesos 做高可用的分布式的架构是靠谱的。第二,微服务的架构只是一个理念,它有各种各样的方式,这种混布的架构方式并不是神话,内部并不是如大家想象那样拆成碎片,往里面一放就可以了,它是一个系统工程。你可以在业务层面上去控制 API 网关,治理下面微服务的使用质量,可以可控扩缩微服务的架构。
{<8>}
最后隆重推荐一下孙宇聪老师翻译的《 SRE : Google 运维解密》,小数已经私藏了好多本啦,这个秘密小数只悄悄告诉你,今后它会在我们活动中作为奖品出现哦!
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.