DaoCloud 郭峰: 分布式平台微服务架构演化实践

2015年8月28日-29日,由 InfoQ 主办的 CNUTCon 在北京成功举办。作为国内容器技术领域的盛宴,CNUTCon 吸引了近千名容器技术的专家和用户,共同探讨容器技术的发展和应用。

作为业界领先的容器云平台和解决方案提供商,DaoCloud 也参与了本次大会。DaoCloud 联合创始人兼研发副总裁郭峰进行了主题为“分布式平台微服务架构演化实践”的精彩演讲。郭峰结合实际案例,深入浅出地介绍了微服务架构实施过程中需要注意的问题,并深度分享了 DaoCloud 分布式平台向微服务架构演进的过程。

golfen

【图1】DaoCloud 公司的联合创始人兼研发副总裁郭峰正在分享“分布式平台微服务架构演化实践”

 

传统应用架构迭代的坑

互联网最大的特点就是需求来的快变化快,必须用最快的迭代速度去满足用户的需求。而事实上,当前很多企业应用都在面临着迭代的陷阱,它们把所有的功能和逻辑实现在一起,通过不断往上加补丁,补 Bug 的形式来迭代。这样的方式会存在很多问题。

郭峰结合一个 O2O 某行业垂直电商的案例,分析了这样的应用架构在迭代中存在的问题。一方面,应用不断打补丁之后,会形成一个巨型应用,使得迭代速度变慢,迭代粒度变大,更新失败率高,经常会出现新功能上线以后整体应用再回滚的现象。另一个问题是,程序内部逻辑非常复杂,组件间耦合关系复杂,导致新加入的开发人员很难迅速参与到开发活动中,团队开发效率很低,bug 率较高,这极大地影响应用开发和迭代效率。第三个非常大的问题,巨型应用都必须要采用同一种语言和技术,很难再用别的技术或者语言去重写或者是加添新的功能模块。

 

微服务架构的优势

微服务架构的出现,可以很好地解决大而全的应用架构引发的问题。郭峰在演讲中提到,

微服务架构可以优化简化开发流程,应用微服务化以后,每个开发者会负责一个对应的模块,这样开发者会有新的动力去做不断改进他们所负责的模块。微服务架构的另一个优势,是它使得升级和替换模块变得更容易了,改一个小 bug,不再需要牵涉到整个应用,只需要修改这个 bug 所在的模块。

尽管微服务架构可以给企业和开发者带来很多好处,但它在实施过程中,也有许多需要注意的地方。

首先,何时实施微服务架构?《企业应用架构模式》的作者 Martin Fowler 的观点代表了业界主流看法,只有当你的应用已经非常复杂了,很难以去维护了,才去考虑微服务。在应用很简单的时候,单块应用往往效率更高。只有当应用越来越复杂的时候,微服务的优势才会逐步体现出来。

郭峰表示,微服务的拆分,不能随意拆分,而是需要遵循一定的原则。比如,迭代很快的模块可以先拆出来;可以独立 scale out 的模块可以先拆分;还可以根据技术栈来考虑是不是要拆出来,然后用新的技术去做;最后是可以根据组织结构来拆分,比如在一个企业中,美国 Team 做后端,中国 Team 做前端,看似分工很明确,但这样互相依赖性很大,并不是非常独立,会导致沟通成本很大。但如果做一个横向切分,比如美国 Team 和中国 Team 分别开发不同的功能,会很大地提升生产效率。

 

DaoHub 的微服务架构演进

最后,郭峰结合 DaoCloud 平台的演进过程,具体介绍了如何逐步将企业应用微服务化。郭峰介绍道,DaoCloud 不仅仅是一个容器云平台,它还为开发者和企业提供 code to Cloud 的能力,开发运维一体化的能力。DaoHub 在 DaoCloud 平台上负责两件事,一是,从 Docker 化应用代码构建镜像;二是,当代码发生变更,触发应用持续集成。

郭峰介绍了 DaoHub 从最初的 DaoHub 单块应用模式逐步转变成微服务架构的演进过程。最初的 DaoHub 是一个单机的部署模式,不能 scale out,只能 scale up,并且会出现单点故障,日志相关接口负载较大。于是 DaoCloud 把日志功能拆分出来,做成一个单独的服务,构建过程中产生的日志由 DaoHub 服务存日志数据库,日志服务读取数据库并对外暴露日志查询接口,这样就没有单点故障了,并且可以横向扩展。但进而又发现现有架构导致 Builder、CI 必须一起更新,而且  Daohub 和日志服务看似拆开了,但又耦合在数据模型上。于是,DaoCloud 进一步把 Build 和 CI 拆分成两个服务,实现单独更新,同时他们都通过日志模块接口存放日志数据,使得数据模型不再耦合;但随后又发现 Build 和 CI 两个服务都会去连接 Docker 集群,并且各自维护调度逻辑,导致代码逻辑的冗余,以及很难做到统一智能的调度规划。在最后一个阶段,DaoCloud 改造 Docker 集群,增加统一的调度服务,集群通过消息总线异步自发现,这样一来,一个应用变成了 6 个服务,微服务的拆分已经基本完成。

2

【图2】DaoCloud 微服务架构

 

拆分完以后,接下来就要面临多个服务的开发,测试,运维问题——如何在微服务架构中实现持续交付?因为微服务架构是一个多样化的架构,不同的服务可以采用不同的技术和语言开发,这会给持续交付带来巨大的困难。Docker 的出现,为微服务化架构的持续交付带来了非常好的解决方案。Docker 把不同的内容抽象成容器集装箱里,形成了一个统一的格式,有了这个前提,自动化和持续交付变得容易了。

郭峰表示,DaoCloud 一共30人的团队,平台有 50 多个组件,横跨全球多个数据中心,但却只有半个运维。能够实现高效运维主要有四个方面的原因:首先,DaoCloud 要求所有 DaoCloud 开发的组件都是 Docker 化的,无论是用什么语言开发的组件,都要求开发者将其封装成 Docker。这样,我们运营的对象都是 Docker 容器;第二,DaoCloud 要求开发者不仅仅是做开发,还要做DevOps,开发人员不仅要保证代码质量,还要能做到线上发布;第三点,代码驱动的自动化;第四点,eat your own dogfood,自己用自己的产品,通过 DaoCloud 提供的开发运维一体化能力实现服务的持续自动化交付 。

除了 DaoCloud 公有云平台之外,郭峰还带领 DaoCloud 团队为金融、政府、电商、汽车等行业的企业用户提供微服务架构的咨询、设计和实践方案,帮助企业用户享受微服务架构带来的IT架构的灵活性和快速交付能力。“身经百战”的他对于微服务架构的设计有着深刻的理解,也因此被业界称为“教授”。

作为国内领先的企业级容器云平台和解决方案提供商,DaoCloud 提供的一站式容器化应用管理平台(www.daocloud.io)就是基于 Docker 容器技术打造的微服务架构。目前,DaoCloud 已经为全球数万个用户提供容器云管理服务,同时运行的容器数量达到数万个。据悉,为了快速响应用户需求,DaoCloud 一站式容器化应用管理平台的迭代速度非常快,几乎每周都会迭代 3-4 次。如此快的迭代速度和强大的服务能力都要归功于微服务架构的灵活性。

 

郭峰简介:DaoCould 联合创始人,研发副总裁。他 2007 年毕业于同济大学,获计算机科学硕士学位,同年夏天作为第一批员工加入 EMC 中国研发中心。曾担任 EMC 中国研究院云平台的主任工程师,也是中国最早接触 CloudFoundry、OpenStack 及 Docker 的技术人员,在开源社区拥有很高的声誉。郭峰拥有 20 多项美国专利申请,专长于云平台及服务构建、分布式系统、虚拟化技术、企业应用及数据平台化,曾参与 Spring 框架项目开发,是一名业内顶尖的应用架构专家。

 

郭峰 CnutCon 现场 ppt  火速下载http://7u2psl.com5.z0.glb.qiniucdn.com/microservice-in-distributed-platform.pdf

Leave a Reply

Your email address will not be published. Required fields are marked *