人工智能时代前沿技术社区

首页 > 热点

饿了么架构演进的核心是——“拆”

笔者提前采访了饿了么高级架构师陈东明,他以饿了么系统架构的演进发展过程为例,为我们分享了企业系统架构随着业务的发展需要做的调整。

作者:谭盼雨 | 2017-01-23 17:24:54

2017年3月25日,由飞马网与中生代技术联合举办的技术嘉年华--软件技术领域顶级盛宴,将在北京隆重开幕。届时,将会有多位业内重量级大咖出席,围绕互联网技术的多个话题展开。

笔者提前采访了饿了么高级架构师陈东明,他以饿了么系统架构的演进发展过程为例,为我们分享了企业系统架构随着业务的发展需要做的调整。

21.png

陈东明,饿了么高级架构师,饿了么北京研发中心架构组负责人。负责饿了么北京研发中心的产品线架构设计以及饿了么基础架构研发工作。曾任百度架构师,负责百度即时通讯产品的架构设计。具有丰富的大规模系统的研发经验,善于复杂业务需求下的大并发系统设计和持续优化。

架构及分工

相信大家对饿了么的系统架构都很好奇,是怎样的架构能够支撑起同一时间段巨额的订单量?同时支持卖家、骑手及买家的同时交易?架构分工又是怎样?......对此,陈东明为我们做了详细解释。

据陈东明介绍,饿了么北京研发中心架构组主要负责两部分的工作:

・ 第一部分是北京研发中心的业务产品的架构工作,包括架构review,方案制定,保证北京研发中心的业务产品具有良好的业务架构和具有高可用、高并发等技术特性。

・ 第二部分是负责饿了么的一些基础技术组件,比如zookeeper的复制组件。

饿了么主要采用Python和Java两种语言,尽管go语言也有在使用,但主要是用来开发基础服务,业务开发采用的是Python或者Java。饿了么早期大量使用的是Python,出于招聘和业务快速开发的考虑,越来越多的使用java。Python和Java两种在饿了么都有各自的自研的服务框架。Python使用thrift作为序列化协议,Java使用Json作为序列化协议,并且服务框架本身实现了2种语言的互通调用。两个服务框架使用同一个服务发现和配置中心,进行服务发现和配置管理,有机的整合在一起。

其次,除了服务框架,饿了么有一个自研的基于4层代理的负载均衡中间件,也与服务和配置中心整合在一起,用来代理那些不是采用Python和Java服务框架开发的应用和一些基础中间件,比如Redis和Mysql。

另外,饿了么主要使用的存储是Mysql和Redis,并且通过一个自研的数据访问代理层,实现对Mysql的分库分表,和对Mysql的访问控制。饿了么的服务框架、负载均衡中间件、数据访问中间件都充分的考虑了服务保护,对服务的限流、熔断、降级有很好的支持。并且这3个层次的中间件也与监控、报警、trace工具打通,方便业务开发进行排障。

饿了么架构演进的核心是——“拆”

任何一个企业的发展过程都是曲折的,饿了么也不例外。陈东明告诉笔者,饿了么的系统架构演进过程中也遇到过不少困难与挑战。

从2011年开始,整个O2O市场以及外卖的份额逐年增加。2014年初,饿了么订单量只有日均10万单,到2014年底超过百万,在2015年突破了日均300万,到2016年5月单日峰值突破500万。快速发展带来了很多问题。饿了么作为业务快速发展的创业公司,在很多方面不是很完善,比如说监控、日志、告警、框架、消息、数据库,这就要求饿了么在保持业务快速迭代的基础上,保证系统的稳定性,系统不能挂、不能出问题,出了问题要第一时间能恢复,并且在这样的要求下,不断演进系统架构。

早期饿了么架构也是一个大而全的服务,所有功能都在一个服务中,业务逻辑严重耦合、代码管理困难。架构演进的核心就是“拆”,根据低耦合、单一职责的原则将原来的大服务拆分成不同的服务。在服务拆分的过程中,也伴随着自研中间件的发展,比如自研数据库访问中间件对拆分出来的订单服务给予很多方面的支持,提供了负载均衡以及读写分离,对用户和商户两个维度水平分表。系统的稳定性、可用性也是饿了么架构演进重要方面,为了提高系统的稳定性,design for failure是饿了么遵循的原则,从主流程补偿到随机故障测试,再到系统多机房灾备,再到目前饿了么正在做的跨机房多活,饿了么通过架构演进不断提高系统的整体可用性。

如何看待“架构师”?

作为一名资深架构师,陈东明认为,架构师的核心价值是发现问题和解决问题,而且是解决几个高级工程师解决不了的问题,优秀的架构师更是如此。而这里说的问题有可能是一个技术问题,这就要求架构师要不断的技术积累,在最新的技术、架构、解决方案、 技术理念等诸多方面的不断积累;也有可能是平衡取舍的问题,在多种因素和条件下选择最合适的设计;还可能非技术问题,协调和沟通多方面的想法,平息成员之间的争论,布道推行最合适系统的架构理念等等。

另外,陈东明还给那些希望成为一名架构师的新人们给出了自己中肯的建议:要对技术有热情,不断的专研;培养逻辑思维能力,善于发现问题,抓住重点;提高表达和沟通能力。

飞马网技术嘉年华内容“剧透”

最后,陈东明给笔者剧透了他即将在飞马网技术嘉年华大会上所做的分享:主要介绍饿了么异地跨数据中心多活实践中非常关键的一环--Zookeeper的跨数据中心。详细讲述饿了么在微服务的场景下如何尝试异地数据中心多活,特别是Zookeeper的使用中遇到的跨数据中心的问题,思考,解决方案以及经验。深入讲解几种常见的Zookeeper的跨数据中心方案,和饿了么如何做出选择。以及未来将在Zookeeper集群系统化管理方面的探索和尝试。

3月25日,飞马网技术嘉年华大会,将会有来自阿里、58、京东、当当、百度等众多知名企业的技术大牛齐聚一堂,只为帮你在技术领域中引领护航。大会在即,你还在等什么呢!


【责任编辑:谭盼雨】