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


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

关于讲师

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

关于Aliware

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

服务化缘起

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

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

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

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

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

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

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

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

微服务架构的形成

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

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

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

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

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

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

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

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

 大规模配置推送

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

 立体化监控

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

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

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

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

  服务监控

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

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

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

  大规模服务化挑战

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

EDAS鹰眼监控系统 

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

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

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

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

EDAS容量规划

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

EDAS限流降级

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

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

看完本文有收获?请转发分享给更多人


欢迎关注“互联网架构师”,我们分享最有价值的互联网技术干货文章,助力您成为有思想的全栈架构师,我们只聊互联网、只聊架构,不聊其他!打造最有价值的架构师圈子和社区。

本公众号覆盖中国主要首席架构师、高级架构师、CTO、技术总监、技术负责人等人 群。分享最有价值的架构思想和内容。打造中国互联网圈最有价值的架构师圈子。

  • 长按下方的二维码可以快速关注我们

  • 如想加群讨论学习,请点击右下角的“加群学习”菜单入群


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

  1. Spring Cloud构建微服务架构(五)服务网关

    通过之前几篇Spring Cloud中几个核心组件的介绍,我们已经可以构建一个简略的(不够完善)微服务架构了.比如下图所示: alt 我们使用Spring Cloud Netflix中的Eureka实 ...

  2. 一文看懂Java微服务架构,WEB2.0,垂直架构,分布式架构,微服务架构

    Java微服务架构 目录: 了解开发环境&生成环境 WEB1.0 & WEB2.0 垂直架构 分布式架构 微服务架构 1.了解开发环境&生产环境 1.1 开发环境 平时在写代码 ...

  3. Spring Cloud构建微服务架构(一)服务注册与发现

    Spring Cloud简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全局锁 ...

  4. Spring Cloud Alibaba 系统保护:微服务架构雪崩效应与服务限流

    前面我们介绍了 OpenFeign 微服务间通信与 Spring Cloud Gateway 网关通信,这些是日常业务中的正常处理情况,但是在微服务环境下受制于网络.机器性能.算法.程序各方面影响,运 ...

  5. 什么是微服务架构?什么是服务注册与服务发现?

    文章目录 基础名词 分布式 高可用 集群 什么是微服务 服务注册与服务发现 SpringCloud Alibaba 服务关系以及调用关系 服务注册中心 Nacos服务发现的领域模型 Nacos元数据 ...

  6. Spring Cloud搭建微服务架构----使用Zipkin做服务链路追踪

    2019独角兽企业重金招聘Python工程师标准>>> 实例主要有三个工程组成: Server-zipkin:通过ZipkinServer功能,实现收集调用数据,展示: Servic ...

  7. 【五】分布式微服务架构体系详解——服务发现和服务通信

    前言 微服务架构的概念比容器技术早,但是却随着容器技术在13年的兴起,基于容器技术的微服务架构越来越被广泛应用.容器的轻量级部署方式很适合为每个微服务提供基础运行环境. 本文会基于Docker容器,先 ...

  8. 无服务架构faas_金融即服务(FaaS)-现代财务团队的技术栈

    无服务架构faas Software is eating the world. The SaaS (Software As a Service) market is growing by 10% an ...

  9. Spring Cloud构建微服务架构(二)服务消费者

    Ribbon Ribbon是一个基于HTTP和TCP客户端的负载均衡器.Feign中也使用Ribbon,后续会介绍Feign的使用. Ribbon可以在通过客户端中配置的ribbonServerLis ...

  10. 微服务架构在阿里的演化

    摘要: 3 月 10 日,2017 阿里云网站行业热点问题和解决方案线下研讨会在上海举行.阿里云产品专家银时为大家带来<微服务架构如何实现网站服务垂直化拆分>精彩演讲.主要从服务化的缘起. ...

最新文章

  1. FIN_WAIT_2
  2. 66319d电源使用说明书_海尔洗衣机怎么用 海尔洗衣机使用说明【详细介绍】
  3. AI:人工智能实践六大场景(金融信用违约、反欺诈模型、客户偏好洞察、智能推荐、精准营销、客户流失管理)及其对应常用机器学习算法经验总结(不断更新)
  4. linux查域名对应的ip 系统调用,DDNS 的工作原理及其在 Linux 上的实现
  5. PostgreSQL COPY 导入/导出数据
  6. 2059 - authentication plugin 'caching_sha2_password' -navicat连接异常问题解决
  7. 内核级利用通用Hook函数方法检测进程
  8. Visual C++ 时尚编程百例013(CRect类)
  9. 雷电模拟器Android obb,exagear模拟器数据obb包
  10. 分了很多节的word文档,使用尾注插入的参考文献,最后怎么在参考文献之后加入致谢?
  11. ph用计算机换算成离子浓度,PH与氢离子的浓度换算表.doc
  12. 机器学习实战案例—验证码(CAPTCHA)识别基于Logistic
  13. Windows、Unix、Mac不同操作系统的换行问题 回车符\r和换行符\n
  14. iastora怎么改成ahci_WIN7系统硬盘IDE模式转AHCI模式
  15. 在PS里要怎么样才能把一个图片的数字改成另一个数字,还要看不出来?
  16. 一种的STM32的应用喂狗方法
  17. 互联网征信中的信用评分模型(转)
  18. 笔试题目---描述在浏览器中敲入一个网址并按下回车后所发生的事情
  19. 干货 | 如何在京东云上简单实践CI流程
  20. Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded

热门文章

  1. BMW M550i xDrive
  2. 解决Visual C++ for Linux: -L~/projects/path_to_lib_folder 无法设置library search path的问题...
  3. conn.setAutoCommit(true) and conn.close() 关系
  4. ubuntu使用笔记一
  5. leetcode[541]翻转字符串里的单词/reverse words in a string 综合考察了字符串的多种操作
  6. 苹果mac窗口速调辅助工具:Magnet
  7. 在 Mac 上的登录窗口中如何打开辅助功能选项?
  8. 教你如何创建第一个Java应用程序
  9. 《长城保护总体规划》出台 为长城保护提供遵循依据
  10. Java多线程进阶(三六)—— J.U.C之collections框架:DelayQueue