以应用为中心的微服务PaaS平台---企业级分布式应用服务 EDAS

本文涉及的产品
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 本文主要从高速增长的阿里业务开始谈起,讲述当年面对的业务场景和背景,碰到了什么样的技术挑战,且用什么样的思路去解决它。

【EDAS之灰度发布、流量管理功能正式邀请公测】


近日,EDAS应用多版本部署和流量管理功能正式启动公测,帮助用户实现诸如灰度发布、Http流量隔离和应用性能指标对比等场景。

使用方法:通过设置请求Cookie规则,来引导Http流量的流向。例如:设置所有userId在某一个范围内的请求,全部由192.168.1.2这台机器处理。
公测对象:所有已开通EDAS用户。了解EDAS EDAS基础版1-2个应用实例免费开通
申请方法:通过工单方式提交申请,即可免费试用。现在就提工单


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

高速业务增长带来的挑战

大型电子商务平台吸引了大量卖家和买家,图为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

相关实践学习
使用DAS实现数据库自动SQL优化
本场景介绍如何使用DAS实现数据库自动SQL优化。
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 
相关文章
|
19天前
|
Prometheus 监控 Kubernetes
Prometheus 在微服务架构中的应用
【8月更文第29天】随着微服务架构的普及,监控和跟踪各个服务的状态变得尤为重要。Prometheus 是一个开源的监控系统和时间序列数据库,非常适合用于微服务架构中的监控。本文将详细介绍 Prometheus 如何支持微服务架构下的监控需求,包括服务发现、服务间的监控指标收集以及如何配置 Prometheus 来适应这些需求。
46 0
|
19天前
|
监控 JavaScript 测试技术
从单体应用迁移到微服务的最佳实践
【8月更文第29天】随着软件架构的发展,越来越多的企业开始考虑从传统的单体应用迁移到微服务架构。虽然迁移可以带来诸如更好的可扩展性、更高的灵活性等优势,但这一过程也可能充满挑战。本文将详细介绍如何顺利地进行这一转变,并提供一些实用的步骤和示例代码。
42 0
|
4天前
|
存储 搜索推荐 数据库
MarkLogic在微服务架构中的应用:提供服务间通信和数据共享的机制
随着微服务架构的发展,服务间通信和数据共享成为关键挑战。本文介绍MarkLogic数据库在微服务架构中的应用,阐述其多模型支持、索引搜索、事务处理及高可用性等优势,以及如何利用MarkLogic实现数据共享、服务间通信、事件驱动架构和数据分析,提升系统的可伸缩性和可靠性。
15 5
|
4天前
|
运维 Cloud Native Devops
云原生架构的崛起与实践云原生架构是一种通过容器化、微服务和DevOps等技术手段,帮助应用系统实现敏捷部署、弹性扩展和高效运维的技术理念。本文将探讨云原生的概念、核心技术以及其在企业中的应用实践,揭示云原生如何成为现代软件开发和运营的主流方式。##
云原生架构是现代IT领域的一场革命,它依托于容器化、微服务和DevOps等核心技术,旨在解决传统架构在应对复杂业务需求时的不足。通过采用云原生方法,企业可以实现敏捷部署、弹性扩展和高效运维,从而大幅提升开发效率和系统可靠性。本文详细阐述了云原生的核心概念、主要技术和实际应用案例,并探讨了企业在实施云原生过程中的挑战与解决方案。无论是正在转型的传统企业,还是寻求创新的互联网企业,云原生都提供了一条实现高效能、高灵活性和高可靠性的技术路径。 ##
12 3
|
9天前
|
Cloud Native 持续交付 云计算
云原生之旅:从传统应用到容器化微服务
随着数字化转型的浪潮不断推进,企业对IT系统的要求日益提高。本文将引导你了解如何将传统应用转变为云原生架构,重点介绍容器化和微服务的概念、优势以及实施步骤,旨在帮助读者掌握将应用迁移到云平台的关键技巧,确保在云计算时代保持竞争力。
17 5
|
16天前
|
存储 运维 应用服务中间件
阿里云分布式存储应用示例
通过阿里云EDAS,您可以轻松部署与管理微服务应用。创建应用时,使用`CreateApplication`接口基于模板生成新应用,并获得包含应用ID在内的成功响应。随后,利用`DeployApplication`接口将应用部署至云端,返回"Success"确认部署成功。当业务调整需下线应用时,调用`ReleaseApplication`接口释放资源。阿里云EDAS简化了应用全生命周期管理,提升了运维效率与可靠性。[相关链接]提供了详细的操作与返回参数说明。
|
19天前
|
机器学习/深度学习 分布式计算 PyTorch
大规模数据集管理:DataLoader在分布式环境中的应用
【8月更文第29天】随着大数据时代的到来,如何高效地处理和利用大规模数据集成为了许多领域面临的关键挑战之一。本文将探讨如何在分布式环境中使用`DataLoader`来优化大规模数据集的管理与加载过程,并通过具体的代码示例展示其实现方法。
27 1
|
17天前
|
C# 微服务 Windows
模块化革命:揭秘WPF与微服务架构的完美融合——从单一职责原则到事件聚合器模式,构建高度解耦与可扩展的应用程序
【8月更文挑战第31天】本文探讨了如何在Windows Presentation Foundation(WPF)应用中借鉴微服务架构思想,实现模块化设计。通过将WPF应用分解为独立的功能模块,并利用事件聚合器实现模块间解耦通信,可以有效提升开发效率和系统可维护性。文中还提供了具体示例代码,展示了如何使用事件聚合器进行模块间通信,以及如何利用依赖注入进一步提高模块解耦程度。此方法不仅有助于简化复杂度,还能使应用更加灵活易扩展。
34 0
|
17天前
|
开发者 云计算 数据库
从桌面跃升至云端的华丽转身:深入解析如何运用WinForms与Azure的强大组合,解锁传统应用向现代化分布式系统演变的秘密,实现性能与安全性的双重飞跃——你不可不知的开发新模式
【8月更文挑战第31天】在数字化转型浪潮中,传统桌面应用面临新挑战。本文探讨如何融合Windows Forms(WinForms)与Microsoft Azure,助力应用向云端转型。通过Azure的虚拟机、容器及无服务器计算,可轻松解决性能瓶颈,满足全球用户需求。文中还提供了连接Azure数据库的示例代码,并介绍了集成Azure Storage和Functions的方法。尽管存在安全性、网络延迟及成本等问题,但合理设计架构可有效应对,帮助开发者构建高效可靠的现代应用。
14 0
|
17天前
|
Java 数据库连接 微服务
揭秘微服务架构下的数据魔方:Hibernate如何玩转分布式持久化,实现秒级响应的秘密武器?
【8月更文挑战第31天】微服务架构通过将系统拆分成独立服务,提升了可维护性和扩展性,但也带来了数据一致性和事务管理等挑战。Hibernate 作为强大的 ORM 工具,在微服务中发挥关键作用,通过二级缓存和分布式事务支持,简化了对象关系映射,并提供了有效的持久化策略。其二级缓存机制减少数据库访问,提升性能;支持 JTA 保证跨服务事务一致性;乐观锁机制解决并发数据冲突。合理配置 Hibernate 可助力构建高效稳定的分布式系统。
30 0