开发者社区> 【云行】> 正文

微服务架构如何实现网站服务垂直化拆分

简介: 3月10日,2017阿里云网站行业热点问题和解决方案线下研讨会在上海举行。阿里云产品专家银时为大家带来《微服务架构如何实现网站服务垂直化拆分》精彩演讲。主要从服务化的缘起、微服务架构的形成,以及在大规模的服务化过程中所面临的一些挑战以及解决方案,跟大家分享整个微服务。
+关注继续查看

3月10日,2017阿里云网站行业热点问题和解决方案线下研讨会在上海举行。阿里云产品专家银时为大家带来《微服务架构如何实现网站服务垂直化拆分》精彩演讲。主要从服务化的缘起、微服务架构的形成,以及在大规模的服务化过程中所面临的一些挑战以及解决方案,跟大家分享整个微服务。

 

以下内容根据现场分享和讲师PPT整理而成。

 

关于讲师:

 

倪超,阿里花名银时,阿里巴巴企业互联网架构平台产品专家、国家认证系统分析师、IT畅销书作者,著有《从Paxos到ZooKeeper》一书,2015年国内新书畅销榜Top10。2010年,以实习生身份加入阿里,入职中间件技术团队,经历了阿里中间件技术从1.0到3.0的变革,目前负责商用软件EDAS。


53fe4be1d2f031aea302fa3c5bfa97fa7ce56b6f 

 

关于Aliware


 43eb8cb5bb0f647522bcc349b503becc5291be90

 

Aliware是阿里巴巴中间件技术品牌,包含5个中间件产品,主要是:EDAS、DRDS、MQ、ARMS、CSB。Aliware从2007年开始,经历了8年多的双11大促,每次大促都能使产品体系更上一个台阶。像JStorm、Dubbo、Rocketmq等等一系列的开源产品,无论在GitHub还是Apache这些顶级项目上,都是非常火的项目。

 

服务化缘起


c09baf13a92848efd5ea8103e71aad3d48400103 

 

在2007年的时候,阿里技术研发团队大概是500人左右,主要业务是淘宝网站点,都是都在一个单一的WAR包进行部署,基于传统JAVA EE应用开发架构,使用的是Oracle数据库和JBoss服务器。当时整个淘宝网就是两个WAR包,一个是前台的,就是淘宝网;还有一个是后台的CRM系统,是给所有的客户支持人员使用的。


 2dacf9ae92f341a67f8d3023490b0758b4a02acd

 

在当时那个阶段,我们面临着非常多的问题:第一个问题,是系统的研发成本非常高。

 

首先,上百人维护一个核心工程,源代码冲突严重,协同成本极高。淘宝网当时是单独的一个WAR包,在运行的时候,就是一个工程,都是一份代码。无论是以前的SVN,还是今天用了Git等一系列工具,代码冲突的问题是逃不掉的。

 

其次,项目发布周期太长。当年的淘宝网,是一个烟囱式的网站。它底层就是一个数据库,然后上层是所有业务逻辑的一个DAO层,专门负责访问数据库,再上层可能是业务层。所有模块的逻辑都在一个系统里面,都在一起部署。这样会因为某几个模块的开发效率低,影响整个站点的发布。

 

然后,错误难以隔离。这个是当时比较致命性的问题。比如说一个大的活动,我如果对时间的一个模块或者其中的一个if判断逻辑进行一些变更的话,整个活动页面会出问题,会导致整个站点都不可用。

 

 15e4bd80abbf9b1e3aa6a114df1d612c63007273

第二个问题,是数据库能力达到上限。

 

淘宝早期是用oracle数据库,单机的oracle数据库连接数捉襟见肘,单机IOPS达到瓶颈,每天数据库CPU90%的负载运转,每年Down机最少一次。

 

 6517786762eb142f6e64fe4ab0c45cc7aa09a1e2


第三个问题,是数据孤岛。当时淘宝、天猫、聚划算,万网等业务系统之间,数据是完全隔离的,数据不一致,无法复用,账号不统一,不能进行关联推荐,也无法进行大数据分析。

 

微服务架构的形成

 

在这三大问题出现之后,淘宝网开始做一些服务化探索。从2007年开始,进行了一些微服务架构改造。


3adce3b5311ce247a510b756d0bffbfe4fb50c61 

 

RPC框架:微服务架构的核心基础

 

在阿里内部做服务化的最底层、最核心的是两个框架,首先是Dubbo框架。Dubbo框架2010年诞生,2011年对外开源。现在阿里发展到了第三代RPC框架,在内部代号叫HSF的框架,目前90%以上的应用,都在使用这样一个框架。每年双11大促也在用。

 

a291fc3860b2b71629762c64f8d1d0c8799fa95a 


消息队列:异步调用实现系统解耦

                                                          

前面说到的RPC框架,重点是帮助我们解决,一个网站在进行服务化拆分的时候,各个模块之间的联系,需要通过RPC框架来进行一个同步化的调用,那么还有一些场景,它其实是不需要同步化调用的,是可以用异步去解决。

 

比如淘宝网平台上的手机充值业务,看似是一个串行的充值流程,其实可以通过异步结构来解决。首先,通过同步调用帮助用户确保他的下单在电商平台已经完成;其次,通过消息组件进行异步解耦,使得那些耗时长的不是核心链路的一些东西,能够不占据消费者在使用网站、APP上面的主流程时间,优化用户体验。

 

基于此,我们消息中间件主要会去解决三大类的问题。

第一个是可靠同步,它的消息是可靠并且有序的,这是在所有需要稳定性、提高交易链路上用到的。第二个是可靠异步,当有稳定性的诉求,也有吞吐量诉求的时候,可以采用异步的这些逻辑,通过异步反馈,让消息中间件反复去投递,确保稳定性。最后一个是单向,不关注稳定性,只关注吞吐量是否大。

 

大规模配置推送


 2854e52fe18cbffc1f20f091fe4e34829c525e26

 

在进行服务化拆分之后,需要将每一个服务使用的配置进行集中式管理。因此,我们研发了可靠的配置推送服务,能够在毫秒级时间内完成配置推送,同时支持变更历史记录和推送轨迹的查询。

 

立体化监控


 1196102787966676dd2f46b4a9da0eac094e1179

 

监控是我们非常关注的事情,对于系统整体的性能指标也非常重要,所以,我们会尝试从不同层面收集信息,实现对应用立体化的监控,包括资源、容器和服务,具体包括以下三大方面:

系统资源:负载,CPU、内存、磁盘、网络

容器:堆内存、类加载、线程池、连接器

服务:响应时间、吞吐率、关键链路分析

 

服务监控


943899b4cb5262cdfd3aaf1a775b52276f81fe2b 

 

当原本在集中式的系统架构里面,每个页面会贯穿非常多的模块,每个模块都耦合在一个系统中,最终监控出的是表象,无法知道页面打开慢是哪个模块哪个功能逻辑上慢。现在,我们会对每一个服务接口、方法的实时调用情况进行监控,能够细致地将每一个服务的生命周期,每一个服务运行时的监控指标非常细化的监控出来,还会调用QPS、响应时间进行统计,同时快速感知系统流量变化。


f4c5fea4621384e74b3430880b11ab0efa0b9a97 

 

淘宝网围绕EDAS技术体系进行了一整套的服务化改造,在这个改造过程中,首先将数据复用度最高的数据进行拆分,剥离出用户中心这样的共享型的服务层,对上层所有业务进行用户相关的所有逻辑,接下来又陆续有千岛湖项目、五彩石项目,这些项目的背后都是一系列的服务化中心拆分出来的产物,后来经过6-7年的服务化演进,目前服务中心数已达50多个。

 

b1f5be4de7753d08d2b7bd71e43a553e1d6805b2 


图为阿里巴巴核心服务化架构。自主创新走出技术困境,沉淀一大批成熟中间件技术,最底层为共享型中间件和组件,以及阿里云沉淀下来的技术支撑型产品;共享服务体系打破应用“烟囱式”建设方式,支撑业务快速创新;云化基础架构高效支撑业务增长,灵活的弹性伸缩带来巨大的成本节约。

 

大规模服务化挑战


11a0f8521a63af296e27a9f6120dd2c80694868b 

 

随着服务化的拆分,所有的系统会变得越来越多,箭头指向就是底层的服务化中心,上层调用过来就是前端的业务系统。很多系统调用很多的服务中心,这时已经没有架构师能够人为的帮助我们进行服务依赖和架构梳理。

 

EDAS鹰眼监控系统

 

我们在排查一些线上问题的时候,其实不要求说能够非常快速智能化的帮我去解决问题,只要有这样一套系统能够帮我快速的去定位问题就可以,于是阿里内部做了EDAS鹰眼监控这样一个系统。


07d765d6d195a7196d01ffcd4790e9bdc647c017 

 

图中从上至下可以看出,鹰眼监控系统能够非常快速的定位故障在哪里,并且通过可视化的手段,能够在系统上面发现是由于哪台机器上的哪一段日志导致的。这是鹰眼监控做的第一个事情。


3ccd12465196615810c2a037c4b95c6fb57c21e3 

 

鹰眼监控做的第二个事情是什么呢?当我们把类似的请求调用链路全部汇总起来进行分析后,就可以在很短时间内进行数据采集,并且有数据化的运营出来。峰值的QPS是指今天在某一个业务高峰时,某一个业务的服务,在分钟级别的服务化的调用过程中,达到的最大的QPS。如图中标记可以看出,即使页面暴露在最前端,但不一定是压力最大的,这就算数据可视化带给我们的价值。我们还要对数据进行决策上的帮助,数据最大的价值在于可以精准化的通知我们最大压力点。

 

某个页面打开经过一系列的系统调用时,总会在某一个点出现问题,称之为易故障点。我们可以直观的看到在过去的一天里,到底所有的请求在哪一个组件的出错率最高,就可以针对性的解决。

 

EDAS容量规划


ba10c0e572b1513663c0d2c2424ae67c52f83be0

 

阿里内部如何去做一些容量性的一些规划?首先我们会去制造一些流量,通过真实流量压测部分单机性能,然后根据设定的运行水位计算系统承载的最高容量,从而到最后可以实现机器按需的上线和下线,把这些系统融会贯通在一起,就是整体的容量规划提供的功能。所有的压测在单机上都会定一些指标,当我们进行集群中把一半机器流量全部引到另一半时候,所有流量的QPS就会翻倍,当单机性能如果没有达到运行水位时,就会继续引流,直到达到指标为止。

 

EDAS限流降级


199e20818e4e96cd58c6f03ddd4d1365853b6746

 

在整个双11期间,在不同的时间点,我们所面临服务的核心和非核心是不一样。比如在双11零点的时候是流量高峰,基本上来自于所有的支付环节,因此在那个阶段,我们要把所有的资源全部倾向于交易、倾向于支付。而到了第二天早上起床的时候,物流服务会成为核心。今天我们会从业务的角度,去发现网站的核心和非核心。EDAS里面会有一个可视化的配置界面,去帮助你在某个阶段,哪个服务是核心服务,那么这个核心服务能够去调用更多的底层资源,但在其它点的时候,它就会被限流住。

 

在公有云和专有云提供商业化服务


7e58b51fd47b2b058c74ba83d85b8bb6b0aa9675

 

 


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
服务企业上云,实现业务转型
2017年是以数字经济为核心的新经济在助推政府、企业快速向数字化转型,也推动了产业互联网、智慧互联网的快速发展。企业上云不仅仅只是一个口号,是以运营商、政府、云企业共同推动,正在一步步落实,并且给企业带来“普惠”价值。
3755 0
这家在线旅游企业将 Serverless 和微服务进行了完美结合
由于 SAE 属于应用层的 Serverless 方案,对于之前通过 Spring Cloud 框架构建的微服务应用,可以非常平滑的逐步迁移到 SAE 平台上,不涉及任何代码和业务逻辑的修改,这一点也是百富旅行全面拥抱 SAE 方案最重要的原因。
1637 0
微服务和容器技术有风险,望君三思而后行
本文讲的是微服务和容器技术有风险,望君三思而后行,【编者的话】微服务和容器技术拥有令人兴奋的潜力,强烈建议客户开始研究这些技术。但是,这并不是说客户应该立即全面采用。上述技术领域的发展太快了,必须清晰地了解这些技术能干什么,不能干什么,才能够决定是否采用这些技术。
1044 0
如何快速实现一个基于Nginx的网站监控场景 – 操作篇
还记得小明的老板给他布置的任务吗?本文将具体阐述,如何实现Nginx的监控场景,快来围观,看小明如何破局。
8105 0
微服务网关SIA-GateWay使用指南
微服务网关SIA-GateWay使用指南
1970 0
网站建设教程:PageAdmin网站系统标签功能的实现
司之前老网站采用的织梦网站系统,由于最近被黑客攻击导致挂马,并且官方停止了更新,领导要求新的网站采用pageadmin网站系统重新改版,小编在学习和使用中学到了有很多实用的技巧,其中标签这块制作很多做seo优化的朋友都会用到。
1452 0
+关注
【云行】
下载频道官方账号。
84
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载