EDAS:快速搞定分布式应用

简介: 谁又动了我模块接口?谁又改了我模块逻辑??? 有bug!模块之间的调用跟个蜘蛛网一样,我怎么排查! 这么复杂的调用逻辑,我的自动化测试用例咋写?! 。。。作为一个开发者,你是否经历过这样的咆哮?这样的场景出现,不是谁的脾气有bug,而是打开方式或许不对。

本期分享嘉宾: 滨雨
多年IT领域工作经验,先后在华为、阿里基础架构部担任软件工程师、项目经理。目前从事存储、cdn、视频、中间件等技术领域的支持,喜欢新技术,喜欢新挑战,喜欢钻研。

  • 攻城狮:谁又动了我模块接口?谁又改了我模块逻辑???

  • 运维:有bug!模块之间的调用跟个蜘蛛网一样,我怎么排查!

  • 测试:这么复杂的调用逻辑,我的自动化测试用例咋写?!

  • 架构师:业务上升了,系统要部署到多台服务器才行,这我怎么拆?!

  • 新人入职后:代码太难理解,想shi的心都有了…….

  • 老板:为啥大半年过去了需求还没搞定!!!
作为一个开发者,你是否经历过这样的咆哮?
这样的场景出现,不是谁的脾气有bug,而是打开方式或许不对。今天我们就通过一个真实案例,来看看分布式开发对消灭吐槽,促进团队和谐的作用。

单体应用很丰满,现实很骨感

X公司是一个秉承传统的开发方式的典型,如下图的架构图是一个实际场景中的架构图,按照传统的开发方式,业务模块层按照“高内聚低耦合”的原则划分成不同的模块,所有模块的开发人员都是在一个大工程下进行编码测试,模块之间的业务划分的很清晰。

2ca17d8ae4d343ad2dbb39b86bde52b6f3cab8d9
X公司架构图
但理想是丰满的,现实很骨感,按照很“完美”的模块划分后,在一个大的应用工程下进行开发进行开发,但随着系统功能越来越强大,,软件复杂度急剧增加,开发人员的新旧交替,慢慢的单体应用给开发团队、产品发展等造成的直接弊端,系统维护变得异常艰难。
一切不完美,都可以坦然面对

在这种情况下,估计很多的开发团队估计都会想到用分布式应用来解决。但是,分布式应用就一定是完美的吗?答案当然是否定的。分布式应用也难免存在很多问题,例如:
  • 如何保证服务之间调用链路的稳定性
  • 如何保证服务调用安全性
  • 遇到应用需要扩容时候该怎么办
  • 应用拆分了,都需要单独部署,我能怎么更方便管理应用部署问题
  • 服务调用的性能能保证吗
  • 毕竟是由本地调用改为了rpc方式,我需要怎样更方便的监控调用链路呢?
  • 分布式事务的问题要如何解决呢?
这些问题其实如果要全部解决,也是个浩大的工程。还好,不完美的世界不需要一个人面对,总有些人在寻找解决方案。比如阿里云中间件产品EDAS,就是为分布式开发的不完美提供了不少解决方案。

什么是EDAS
企业级分布式应用服务(Enterprise Distributed Application Service, 简称 EDAS)以阿里巴巴中间件团队多款久经沙场的分布式产品作为核心基础组件,面向企业级云计算市场提供高可用分布式解决方案,是阿里巴巴企业级互联网架构解决方案的核心产品。
EDAS架构解密
15ed4b21d24043b422e7eee90f31dd548ecf5e8b
  • EDAS控制台:对用户操作层,以及对外提供api服务的系统
  • 数据收集系统:包括链路监控、服务监控、基础监控等数据的采集存储和分析
  • 配置注册中心系统:开发分布式应用所依赖的注册中心,包括服务端和消费端服务信息、服务地址信息、配置信息等
  • 监控报警:可以提供报警支持,自定义报警规则,确保业务有风险时负责人能第一时间收到消息
EDAS能做什么
1、搭建分布式应用系统
快速基于EDAS开发好分布式应用,减少大量开发工作,应用可以是服务提供者,也可以是服务消费者,也可以两者都是
0be2667dadf0100dcb3a7080bdbe835795afe7f6
2、应用生命周期管理
5e8ddb381cdb783d34c9875204340a81f2fda78c
3、链路调用监控
实际的大型系统中,都有很复杂的业务链路调用,如果将单体应用重构为分布式应用后,没有一套良好的监控体系,在系统出现问题时定位问题将会异常困难。如图是一个实际场景下的链路调用:
40612c6ca701c480572fc8c63bcb6345d75bd069
EDAS 鹰眼监控系统能够分析分布式系统的每一次系统调用、消息发送和数据库访问,从而精准发现系统的瓶颈和隐患
d68e6a11685f792680f749489cb72847c3265836
根据应用来监控到链路调用信息
89b4d75212f90e5591285f1c00d5fb824c2efa5a
从具体监控信息定位到影响性能的环节
4、分布式事务
当应用拆分成分布式架构后,难免会遇到分布式事务问题,阿里云也提供了对应的产品解决这个问题,全局事务服务(Global Transaction Service,简称 GTS),是一款高性能、高可靠、接入简单的分布式事务中间件,用于解决分布式环境下的事务一致性问题。
经过多年的发展和实践,EDAS等中间件产品已经在阿里内部得到广泛的应用,如图所示的案例场景:
5b063f6049cf0163d3a0140a2f08dd644ed4ff3d

X公司开发案例实战

像开头说到的,当系统到达一定规模后,软件复杂度急剧增加,维护也将变得异常艰难。如何用挽救X公司于水深火热之中?下图是将业务拆分后一部分业务架构:
04b873c9b3a3e017bb7d430e8d3c9c28d10f5ac6
A公司架构图
其中,将资产中心和鉴权中心采用docker部署的方式,docker部署的方式可以支持一台服务器上部署多个应用,这样也有利于节省硬件成本,提高资源利用率。
业务开发
代码工程划分
整体思路是提供一个公共的接口应用,作为公共引入的jar包(这只是其中一种开发模式),其他每个应用一个工程,采用maven工程的模式来开发。本地开发时,如果几个应用工程都在同一个环境下,可以将几个groupId都指向同一个,方便调试。下图是工程划分:
4c6c10b303b9e1bdf35864d8b1c8cc5eedfbfea3
接口应用开发
在接口应用中将需要被不同应用引用的实体以及需要对外暴露的接口都定义好。如图所示
4f0b98400abaf06e241e1fa94fd814401dec8023
创建好后eclipse工程如截图:
c3514df81a5cce01d58a7684fa5470e591e5c26e
部分代码片段:
b03efce27d98aacbef44e358d621cb6bcf43ca4a
引入接口工程
将tradeshop-api工程打成jar包发布到maven仓库,在其他三个工程pom文件引入:
<dependency>
<groupId>com.alibaba.edas.tradeshop</groupId>
<artifactId>tradeshop-api</artifactId>
<version>1.0.2</version>
</dependency>
资产中心开发
产中心要实现的业务是能够被交易中心调用、获取资产信息,所以资产中心需要做的是实现获取资产信息的接口业务,并且用hsf标签对外注册提供服务。例如简单的业务实现代码为:
0ee6aae8e4ab626395bb45ed5e49ae09306b6983
代码实现后,就需要将服务对外暴露,供服务消费端来调用:
c19f733851ee549252ff33b039617ca4eb9ceacf
需要注意的是,发布的服务中version和group固定了,那么消费端在调用的时候,这两者的值必须保持统一。
鉴权中心开发
鉴权中心实现的业务是提供对外的接口用来查询鉴权信息,那么也是需要对外暴露一个服务,开发方式跟资产中心类似,可以参考资产中心的开发。
交易中心开发
交易中心需要有两方面的作用,一是对外暴露服务用于查询交易信息,一个是充当消费端,主动去调用其他服务。充当服务端的代码开发模式和前两个应用类似,充当消费端去调用资产中心和鉴权中心的,就可以采用spring bean加载的方式获取到接口service,然后当做本地方法来调用,如核心代码:
4ce09de0d4bf62b64ba38a4a9fd9eea7c2522203
将依赖的服务和需要发布的服务配置,注意版本号和分组值,以及接口名不能写错。
be58aff243b45d5de0d3c829b4ee2d523c551d55
用户中心开发
用户中心在本案例中充当业务入口,去调用交易服务,所以用户中心只需要注册消费一个服务即可: 12a35b28d69361884aa50136bc236b334a3011a8
消费代码: 88a669dbd2fe8710e7653b88b6898e7744063da9
业务验证
参考EDAS官网文档,创建好应用,并成功将应用部署到线上后,可以在EDAS控制台上很方便的进行业务验证,链路跟踪,也就能很方便的定位到平时业务之间链路的瓶颈所在。
应用服务验证
当应用部署成功后,可以在控制上看到提供的服务和调用的服务,也可以在应用控制台上看到业务运行的日志,如截图所示 4b2565ba243d67cd5456a0fe44f11c87662ca4e5
1b9e20ce15276b60be3666db10043cee1eb06ecf
同样也可以查看到应用中的http服务、hsf服务信息:
e6a419b4c3d961c1d3c45bb0e262bf45b8a9ba13
服务链路验证
通过链路监控,可以很直观的监控到整个业务调用的状态,及时的定位到问题出现的地方
647baf8d65e2973d200289816798f74524c71de9 3c08183d78c236b41b25a6d890075c2a34470da9


好了,一套简单的分布式应用系统就开发完成了,so easy!X公司的故事,也不出意外的迎来了happy ending。
相关实践学习
使用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&nbsp;
相关文章
|
1月前
|
安全 大数据 Go
Go语言在分布式系统中的应用
【2月更文挑战第20天】Go语言,以其独特的语言特性和出色的性能,逐渐成为分布式系统开发领域的热门选择。本文将深入探讨Go语言在分布式系统中的应用,分析其优势及实际应用案例,旨在为开发人员提供有价值的参考与启示。
|
1月前
|
缓存 NoSQL Java
分布式项目中锁的应用(本地锁-_redis【setnx】-_redisson-_springcache)-fen-bu-shi-xiang-mu-zhong-suo-de-ying-yong--ben-de-suo--redissetnx-springcache-redisson(一)
分布式项目中锁的应用(本地锁-_redis【setnx】-_redisson-_springcache)-fen-bu-shi-xiang-mu-zhong-suo-de-ying-yong--ben-de-suo--redissetnx-springcache-redisson
74 0
|
25天前
|
负载均衡 运维 监控
负载均衡与容错性:集群模式在分布式系统中的应用
本文由小米分享,解释了分布式系统中的集群模式。集群模式是通过组合多个服务器节点,共同提供服务,实现高可用性、负载均衡和扩展性。文章介绍了主控节点的角色及其高可用性策略,如主备模式和选举机制,并以Zookeeper为例详细阐述了其工作机制。集群模式的优势在于高可用性、负载均衡、扩展性和数据一致性,但也面临节点通信、数据一致性、故障检测和管理等挑战。最后,作者鼓励读者讨论和交流相关技术问题。
178 5
|
30天前
|
存储 域名解析 缓存
【域名解析DNS专栏】DNS解析中的分布式哈希表(DHT)应用
【5月更文挑战第29天】为解决DNS性能瓶颈和单点故障问题,分布式哈希表(DHT)技术被引入DNS解析,以实现分布式存储和检索,提高可扩展性和鲁棒性。DHT应用于DNS解析,包括负载均衡与数据分发、缓存优化和安全性增强。示例代码展示了DHT基本概念,但实际应用更复杂,需考虑更多因素。
|
18天前
|
供应链 物联网 分布式数据库
区块链技术作为一种新兴的分布式数据库技术,正逐渐改变着我们的生产和生活方式。而智能合约作为区块链技术的重要应用之一
【6月更文挑战第10天】本文探讨了区块链技术与智能合约的界限及其带来的挑战。区块链,以其不可篡改性和安全性,已广泛应用于金融、供应链和物联网等领域。智能合约作为区块链的关键应用,实现了自动、安全和不可篡改的合约执行。然而,技术上的扩展性、性能问题和安全漏洞,以及法律监管的困境,构成了当前的主要挑战。尽管如此,随着技术进步和应用场景的拓宽,区块链与智能合约有望在未来发挥更大潜力。
59 0
|
1月前
|
分布式计算 负载均衡 Java
构建高可用性Java应用:介绍分布式系统设计与开发
构建高可用性Java应用:介绍分布式系统设计与开发
24 0
|
1月前
|
消息中间件 存储 监控
解析RocketMQ:高性能分布式消息队列的原理与应用
RocketMQ是阿里开源的高性能分布式消息队列,具备低延迟、高吞吐和高可靠性,广泛应用于电商、金融等领域。其核心概念包括Topic、Producer、Consumer、Message和Name Server/Broker。RocketMQ支持异步通信、系统解耦、异步处理和流量削峰。关键特性有分布式架构、顺序消息、高可用性设计和消息事务。提供发布/订阅和点对点模型,以及消息过滤功能。通过集群模式、存储方式、发送和消费方式的选择进行性能优化。RocketMQ易于部署,可与Spring集成,并与Kafka等系统对比各有优势,拥有丰富的生态系统。
339 4
|
1月前
|
存储 供应链 安全
区块链技术原理及应用:深入探索分布式账本技术
【4月更文挑战第30天】区块链,从加密货币的底层技术延伸至多元领域,以其分布式账本、去中心化、不可篡改性及加密技术重塑数据存储与交易。核心组件包括区块、链和节点,应用涵盖加密货币、供应链管理、金融服务等。尽管面临扩展性等挑战,未来潜力无限。
|
1月前
|
存储 消息中间件 监控
搭建分布式应用准备工作(从零到一)
搭建分布式应用准备工作(从零到一)
|
1月前
|
缓存 NoSQL Redis
分布式项目中锁的应用(本地锁-_redis【setnx】-_redisson-_springcache)-fen-bu-shi-xiang-mu-zhong-suo-de-ying-yong--ben-de-suo--redissetnx-springcache-redisson(二)
分布式项目中锁的应用(本地锁-_redis【setnx】-_redisson-_springcache)-fen-bu-shi-xiang-mu-zhong-suo-de-ying-yong--ben-de-suo--redissetnx-springcache-redisson
46 0

热门文章

最新文章