基于阿里企业级分布式应用服务(EDAS)的敏捷服务开发与架构实践

简介:

本文主要从高速增长的阿里业务开始谈起,讲述当年面对的业务场景和背景,碰到了什么样的技术挑战,且用什么样的思路去解决它,最后和大家分享了解决后产生的产品Aliware中非常重要的EDAS。

PDF下载:点此进入

以下是演讲内容整理:


高速业务增长带来的挑战

大型电子商务平台吸引了大量卖家和买家,图为2014年IPO时候截得的图,可以看到在阿里上有10亿多件商品等,现在仍然以非常高的速度在增长。

图为2003年到2010年淘宝网注册用户数,用户数从非常低的值逐渐涨到近40000万人,这些用户突然来到我们的网站,就会给网站非常多的访问压力。2003年到2006年我们主要是想尽方法以业务为核心积累技术,到后来互联网人群在高速增长,整个体系面临的技术挑战就会非常多,具体有以下四点:

  • 业务需求爆发式增长
  • 开发人员快速扩张
  • 系统代码量越来越多
  • 系统压力越来越大

综合来看,一个技术性网站最重要的技术挑战在于考虑业务的高速增长、用户数量的高速增长导致下层原来看不见的问题变成了新的问题。

挑战与解决之道

阿里前期技术团队规模500人左右,单一War应用,是以PHP为核心构建的系统,PHP+MySQL+Linux+Apache标准的LAMP的系统架构,后来逐渐用一些开源的技术替换掉了原来的商业产品,随着业务的不断发展,不断的把新的代码加入到系统中,我们研发了一套分布式存储架构,搜索也是自己构建的。

技术问题

随着技术快速增长和演进,随着人员的增加,我们发现很多严重的问题展现出来。

业务支持缓慢,牵一发而动全身

很多人同时维护一个核心工程,不同人有不同的理解,会导致源代码冲突严重,很难做项目管理,协同成本非常高,进而项目发布周期就会很长,迭代速度变慢,且错误难以隔离。

数据库能力达到上限

只有一个数据库的问题是很大的,发布一个新的系统可能会导致宕机,由于数据库里本身的索引建错了,建错是因为库是重建的,Oracle的索引重建机制还没有来得及更新柱状图。所以,只有一个Oracle数据库时,连接数捉襟见肘,单机IOPS达到瓶颈,CPU 90%以上,每年宕机最少一次。

数据孤岛

多套用户体系导致用户不知道到底在哪个网站登录,我们想知道用户的画像,分析用户的购买行为,但两个不同网站的相同用户名不确定是否为同一用户,所以没办法进行后续的大数据分析。随着系统越来越多,我们发现大量的用户在系统出现时,比如查询用户的方法,在不同的业务系统里出现多次,每一次都不完全一样,数据隔离、重复建设,数据不一致,这是项目管理和代码管理的乱象。

基于EDAS进行服务化改造

没有任何服务化的经验去借鉴,我们只能一步一步的摸着石头过河。我们做了几个关键性的努力,首先是用户中心迁出,从一个大的系统里拆出一小块放到外面,这就是用户中心,用户中心是一个比较简单纯粹的处理用户登录的系统,当时在内部就有六、七种登录方式,我们把这些方式全部代理出来,变成一个单独的服务中心。如果我们不把系统代码进行革新,就没有办法支撑,紧接着,我们就开始做自己的中间件的研发,千岛湖项目产生时,EDAS、MQ、DRDS就随着它一步步的演进到现在。交易中心是整个系统里最复杂的业务流程,几乎和所有业务系统有关联,当它用一些中间件完成整个系统的突破时,我们就可以认为看起来中间件和应用都准备好了。接着我们进行了第三个五彩石项目,商城和淘宝各有一套购买流程,我们需要用EDAS进行服务化改造,把这两套流程融合到一起,使之能同时支撑两个不同的出口,完成下一步的延伸。

服务化以后的架构演进

服务化以后,开始时业务应用很少,随着系统往下延伸,很多人开始做服务化系统,服务之间也会进一步的复杂,从而会形成一个复杂的网状结构,那么,依赖很多,如何进行准确的梳理呢?

当系统变成网状结构后,一定会有一些业务系统是重要业务,一些业务系统是非重要业务,这些非重要业务突然出现小的故障时,整个系统就会宕机,我们成立了稳定性小组进行业务梳理,以交易流程为核心,哪些系统划成重要系统,哪些系统为非重要的业务系统,但是,系统在不断的变化,我们没有办法准确知道每一次变化后它的依赖关系是怎样的,很难进行梳理,必须通过系统的方式来解决问题。

鹰眼系统

我们把整个系统现象成一个高速公路的路网,流量进来就如同行驶的汽车,如何能够知道汽车从哪里进来又从哪里出去呢?在高速公路上做很多的关卡,这样可以准确的追踪到所有连接的道路和通信,这样,哪里有问题都可以通过非常简单的方式得到检测,而这个检测对于发现和解决问题是非常简单的一件事,才有可能摆脱在服务化以后,复杂的系统运维和管控。

阿里经过验证的件——EDAS

高性能服务框架

EDAS是一个高性能的服务框架,EDAS是由很多技术体系组成的一个整体包,如果想写一个web应用,使用这个开发套件,所有在业务开发需要的功能都集成在里面,所有和业务中间件相关的应用也集成到里面了,最关键之一就是HSF,HSF在阿里90%以上应用上使用,相对比较成熟,支持分布式事务,经历过七次双十一大促的考验,日均有千亿级的调用量。

同时,我们也支持Dubbo,Dubbo也是阿里开发出来的市面上应用非常广泛的开源软件,已经有4000多个开源分支。

分布式事务

在服务框架之上,还有分布式事务,在分布式应用里应该怎样完成单机应用中常见的一些事务操作呢?此时就需要使用分布式事务组件,它能够将服务和服务之间多个不同库之间的数据集中到一起去,从而提供一个整体的服务能力,看起来像写单机业务系统一样去写分布式事务服务框架。去中心化服务化框架,只是一个简单的开始。

分布式配置管理

可以在网站查询配置哪些机器收到、哪些机器没有收到,毫秒级推送,可以变更历史记录,推送轨迹追踪等。

立体化监控服务

资源+容器+应用 = 立体化监控服务

监控是我们非常关注的事情,对于系统整体的性能指标也非常重要,所以,我们会尝试从不同层面收集信息,具体包括以下三大方面:

系统资源:负载,CPU、内存、磁盘、网络
容器:堆内存、类加载、线程池、连接器
应用:响应时间、吞吐率、关键链路分析

容器监控

容器监控要监控堆内存与非堆内存使用情况,类加载情况(对于排查线上启动问题非常方便),线程运行情况,连接器情况。

应用监控

应用监控主要从服务接口、方法的实时调用情况进行分析,以及调用QPS、响应时间分析,

快速感知系统流量变化,从而让我们知道系统的问题所在。监控和报警在这里得到很好的体现,但这仅仅算是刚刚进阶。

EDAS鹰眼跟踪

鹰眼监控就是解决内部非常复杂的多样链路的时候,怎样进行持续的收集、跟踪、统计,以帮助我们进行链路梳理的工具。比如从前面开始调用链路时有哪些异常,出现故障的地方都可以从这个调用链路上得到展现。

同时,通过海量调用链进行统计分析,得到链路各个依赖的稳定性指标。比如,某个地方的QPS很高,但这个系统不该有这么高的QPS,就可以认为这是一个依赖压力问题。

除了链路分析功能,EDAS还有容量规划的重要功能。通过线上真实引流到系统内进行压测分析,然后根据设定的运行水位计算系统承载的最高容量,从而到最后可以实现机器按需的上线和下线,把这些系统融会贯通在一起,就是整体的容量规划提供的功能。

EDAS限流降级

限流降级是阿里最有特色的功能之一,我们会面对非常强大的挑战就是双十一网购狂欢节,我们需要在成本和体验中选择一个好的平衡点,要利用这个平衡点我们必须要保证系统的可用性,不能因为用户多导致系统无法服务,就像排队买票一样,我们需要对自己的系统进行优化,具体表现在一下两方面:

  • 限流:针对非核心服务调用者限制请求量
  • 降级:针对系统的非核心服务依赖

应用发布和管理系统

以前是集中化的发布方式进行管理的,这对于一、二百台机器是没有问题的。然而,现在需要同时发布五、六百台机器甚至更多,发布就会成为瓶颈。对此,我们内部引入EDAS燎原P2P发布系统,它能够让系统内进行P2P多点式的多host发布,使整个系统的应用发布能力得到快速提升。

EDAS燎原实现超大规模集群闪电发布,图中可以看出发布耗时随着机器数量增加变化趋势。采用EDAS燎原发布系统,随着应用实例的增加,发布的时间几乎保持不变。有利于进行紧急发布时候的业务处理,实现快速回滚。

阿里十年技术精华沉淀

综合来说,EDAS并不是简单的服务化工具,它希望在整个应用的编写周期里都可以进行操作,所以它结合了HSF、鹰眼、燎原等等。现在,它在公有云和专有云里都有输出。

阿里巴巴核心技术架构

  • 自主创新走出技术困境,沉淀一大批成熟中间件技术;
  • 共享服务体系打破应用“烟囱式”建设方式,支撑业务快速创新;
  • 云化基础架构高效支撑业务增长,灵活的弹性伸缩带来巨大的成本节约。

企业级互联网架构Aliware,让您的业务能力云化:https://www.aliyun.com/aliware

相关实践学习
通过EDAS实现K8s微服务应用的金丝雀发布
本实验旨在通过使用分布式应用服务EDAS纳管容器服务ACK Serverless,体验微服务应用的部署、访问和高级发布能力。
SpringMVC框架入门
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts2等。 相关的阿里云产品企业级分布式应用服务 EDAS:企业级分布式应用服务 EDAS(Enterprise Distributed Application Service)是一个应用托管和微服务管理的 PaaS 平台,提供应用开发、部署、监控、运维等全栈式解决方案,同时支持 Spring Cloud、Apache Dubbo(以下简称 Dubbo )等微服务运行环境,助力您的各类应用轻松上云。产品详情: https://www.aliyun.com/product/edas 
相关文章
|
5天前
|
存储 SQL 监控
转转平台IM系统架构设计与实践(二):详细设计与实现
以转转IM架构为起点,介绍IM相关组件以及组件间的关系;以IM登陆和发消息的数据流转为跑道,介绍IM静态数据结构、登陆和发消息时的动态数据变化;以IM常见问题为风景,介绍保证IM实时性、可靠性、一致性的一般方案;以高可用、高并发为终点,介绍保证IM系统稳定及性能的小技巧。
20 6
|
25天前
|
存储 缓存 关系型数据库
社交软件红包技术解密(六):微信红包系统的存储层架构演进实践
微信红包本质是小额资金在用户帐户流转,有发、抢、拆三大步骤。在这个过程中对事务有高要求,所以订单最终要基于传统的RDBMS,这方面是它的强项,最终订单的存储使用互联网行业最通用的MySQL数据库。支持事务、成熟稳定,我们的团队在MySQL上有长期技术积累。但是传统数据库的扩展性有局限,需要通过架构解决。
65 18
|
1月前
|
搜索推荐 NoSQL Java
微服务架构设计与实践:用Spring Cloud实现抖音的推荐系统
本文基于Spring Cloud实现了一个简化的抖音推荐系统,涵盖用户行为管理、视频资源管理、个性化推荐和实时数据处理四大核心功能。通过Eureka进行服务注册与发现,使用Feign实现服务间调用,并借助Redis缓存用户画像,Kafka传递用户行为数据。文章详细介绍了项目搭建、服务创建及配置过程,包括用户服务、视频服务、推荐服务和数据处理服务的开发步骤。最后,通过业务测试验证了系统的功能,并引入Resilience4j实现服务降级,确保系统在部分服务故障时仍能正常运行。此示例旨在帮助读者理解微服务架构的设计思路与实践方法。
103 17
|
1月前
|
存储 消息中间件 小程序
转转平台IM系统架构设计与实践(一):整体架构设计
本文描述了转转IM为整个平台提供的支撑能力,给出了系统的整体架构设计,分析了系统架构的特性。
75 10
|
1月前
|
负载均衡 Serverless 持续交付
云端问道9期实践教学-省心省钱的云上Serverless高可用架构
详细介绍了云上Serverless高可用架构的一键部署流程
58 10
|
1月前
|
存储 人工智能 运维
面向AI的服务器计算软硬件架构实践和创新
阿里云在新一代通用计算服务器设计中,针对处理器核心数迅速增长(2024年超100核)、超多核心带来的业务和硬件挑战、网络IO与CPU性能增速不匹配、服务器物理机型复杂等问题,推出了磐久F系列通用计算服务器。该系列服务器采用单路设计减少爆炸半径,优化散热支持600瓦TDP,并实现CIPU节点比例灵活配比及部件模块化可插拔设计,提升运维效率和客户响应速度。此外,还介绍了面向AI的服务器架构挑战与软硬件结合创新,包括内存墙问题、板级工程能力挑战以及AI Infra 2.0服务器的开放架构特点。最后,探讨了大模型高效推理中的显存优化和量化压缩技术,旨在降低部署成本并提高系统效率。
|
2月前
|
运维 监控 安全
天财商龙:云上卓越架构治理实践
天财商龙成立于1998年,专注于为餐饮企业提供信息化解决方案,涵盖点餐、收银、供应链和会员系统等。自2013年起逐步实现业务上云,与阿里云合作至今已十年。通过采用阿里云的WA体系,公司在账号管理、安全保障、监控体系和成本管控等方面进行了全面优化,提升了业务稳定性与安全性,并实现了显著的成本节约。未来,公司将持续探索智能化和全球化发展,进一步提升餐饮行业的数字化水平。
|
监控 应用服务中间件
如下请问EDAS的这个问题怎么解决? 应用id:2b0e6935-47fb-40ec-a11d-7dac320aecc1 集群中的节点内存是足够的,部署跑不起来 可以帮忙看看吗,以前集群下应用发布都是正常的,最近集群下应用部署基本都报错跑不起来,提示节点不可用
如下请问EDAS的这个问题怎么解决? 应用id:2b0e6935-47fb-40ec-a11d-7dac320aecc1 集群中的节点内存是足够的,部署跑不起来 可以帮忙看看吗,以前集群下应用发布都是正常的,最近集群下应用部署基本都报错跑不起来,提示节点不可用
153 2
|
Kubernetes 负载均衡 Serverless
通过EDAS部署并访问应用
本实验旨在通过使用分布式应用服务EDAS纳管容器服务ASK,掌握微服务应用的部署和访问。
|
Kubernetes Serverless 应用服务中间件
通过EDAS实现K8s微服务应用的金丝雀发布
本实验旨在通过使用分布式应用服务EDAS纳管容器服务ASK,体验微服务应用的部署、访问和高级发布能力。