从航空母舰上起飞,是怎样一种体验----EDAS带你快速搞定分布式应用

本文主要是介绍从航空母舰上起飞,是怎样一种体验----EDAS带你快速搞定分布式应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【EDAS最近更新】

  • 2.13.1 版本:提供对本地方法执行追踪; 支持租户内服务鉴权与授权。
  • 2.13.0 版本:Http流量管理功能上线,提供了对应用运行时线程堆栈和内存分布的查看。
  • 2.12.3 版本:链路分析功能上线全新视觉界面;调用链支持多维查询。
  • 2.12.2 版本:服务监控上线全新视觉界面;PaaS 平台机器接入层架构升级,支持无限水平扩容。

背景:

  • 攻城狮:谁又动了我模块接口?谁又改了我模块逻辑???
  • 运维:有bug!模块之间的调用跟个蜘蛛网一样,我怎么排查!
  • 测试:这么复杂的调用逻辑,我的自动化测试用例咋写?!
  • 架构师:业务上升了,系统要部署到多台服务器才行,这我怎么拆?!
  • 新人入职后:代码太难理解,想shi的心都有了…….
  • 老板:为啥大半年过去了需求还没搞定!!!

作为一个开发者,你是否经历过这样的咆哮?
这样的场景出现,不是谁的脾气有bug,而是打开方式或许不对。今天我们就通过一个真实案例,来看看分布式开发对消灭吐槽,促进团队和谐的作用。

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

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

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

一切不完美,都可以坦然面对

在这种情况下,估计很多的开发团队估计都会想到用分布式应用来解决。但是,分布式应用就一定是完美的吗?答案当然是否定的。分布式应用也难免存在很多问题,例如:

  • 如何保证服务之间调用链路的稳定性
  • 如何保证服务调用安全性
  • 遇到应用需要扩容时候该怎么办
  • 应用拆分了,都需要单独部署,我能怎么更方便管理应用部署问题
  • 服务调用的性能能保证吗
  • 毕竟是由本地调用改为了rpc方式,我需要怎样更方便的监控调用链路呢?
  • 分布式事务的问题要如何解决呢?

这些问题其实如果要全部解决,也是个浩大的工程。还好,不完美的世界不需要一个人面对,总有些人在寻找解决方案。比如阿里云中间件产品EDAS,就是为分布式开发的不完美提供了不少解决方案。

EDAS能够带来什么?

1、搭建分布式应用系统

快速基于EDAS开发好分布式应用,减少大量开发工作,应用可以是服务提供者,也可以是服务消费者,也可以两者都是。

2、应用生命周期管理

3、链路调用监控

实际的大型系统中,都有很复杂的业务链路调用,如果将单体应用重构为分布式应用后,没有一套良好的监控体系,在系统出现问题时定位问题将会异常困难。如图是一个实际场景下的链路调用:


EDAS 鹰眼监控系统能够分析分布式系统的每一次系统调用、消息发送和数据库访问,从而精准发现系统的瓶颈和隐患。

根据应用来监控到链路调用信息

从具体监控信息定位到影响性能的环节

4. 单机进程内方法追踪

当当当当~~

最新重量级功能隆重登场:方法追踪。
让你以火箭般的速度,打通应用诊断的“最后一公里”。EDAS基础版里即可使用~嘘~

EDAS 方法追踪能够帮助用户在应用运行时出现问题时,进行快速的问题排查,典型的场景包括:

  1. 应用运行时突然发现执行某一个业务逻辑耗时很长,此时希望能够有一种方式定位运行时代码各个部分的耗时,以确定耗时点在什么地方。
  2. 应用运行时一切正常,绝大部分情况下,业务运行都非常顺畅,但某一例用户反馈,当传入XXX参数时,业务响应非常缓慢。此时希望能够有一种方式针对特定的方法入参来观察代码执行情况。
  3. 一个比较复杂的程序方法,其中业务逻辑较为复杂,在真正运行时,无法确定具体调用了那些逻辑,以及调用时序。此时希望能够有一种方式详细的展现出方法执行的具体逻辑、时序等。

此外,以上的任何一种场景,都希望代码无入侵,可以在应用运行时不停机的情况下,定位问题。

EDAS 方法追踪采用 JVM 字节码增强的技术,对选中方法的所有方法调用增加必要的耗时与调用序列记录的增强,从而达到观看执行过程中的具体执行序列的目的。

EDAS 单击进程内方法追踪和RPC框架无关,属于 EDAS 基础版功能,提升用户应用诊断能力。方法追踪是对当前分布式调用链路追踪的补充,解决在使用调用链路追踪功能定位到单机某一个服务的问题后,进一步诊断该服务方法本地执行的时序细节、各执行环节的耗时、入参/返回值和异常情况。

X公司开发案例实战

像开头说到的,当系统到达一定规模后,软件复杂度急剧增加,维护也将变得异常艰难。如何用挽救X公司于水深火热之中?下图是将业务拆分后一部分业务架构:

其中,将资产中心和鉴权中心采用docker部署的方式,docker部署的方式可以支持一台服务器上部署多个应用,这样也有利于节省硬件成本,提高资源利用率。

业务开发

代码工程划分

整体思路是提供一个公共的接口应用,作为公共引入的jar包(这只是其中一种开发模式),其他每个应用一个工程,采用maven工程的模式来开发。本地开发时,如果几个应用工程都在同一个环境下,可以将几个groupId都指向同一个,方便调试。下图是工程划分:

接口应用开发

在接口应用中将需要被不同应用引用的实体以及需要对外暴露的接口都定义好。如图所示

创建好后eclipse工程如截图:

部分代码片段:

引入接口工程

将tradeshop-api工程打成jar包发布到maven仓库,在其他三个工程pom文件引入:

资产中心开发

资产中心要实现的业务是能够被交易中心调用、获取资产信息,所以资产中心需要做的是实现获取资产信息的接口业务,并且用hsf标签对外注册提供服务。例如简单的业务实现代码为:

代码实现后,就需要将服务对外暴露,供服务消费端来调用:

需要注意的是,发布的服务中version和group固定了,那么消费端在调用的时候,这两者的值必须保持统一。

鉴权中心开发

鉴权中心实现的业务是提供对外的接口用来查询鉴权信息,那么也是需要对外暴露一个服务,开发方式跟资产中心类似,可以参考资产中心的开发。

交易中心开发

交易中心需要有两方面的作用,一是对外暴露服务用于查询交易信息,一个是充当消费端,主动去调用其他服务。充当服务端的代码开发模式和前两个应用类似,充当消费端去调用资产中心和鉴权中心的,就可以采用spring bean加载的方式获取到接口service,然后当做本地方法来调用,如核心代码:

将依赖的服务和需要发布的服务配置,注意版本号和分组值,以及接口名不能写错。

用户中心开发

用户中心在本案例中充当业务入口,去调用交易服务,所以用户中心只需要注册消费一个服务即可:

消费代码:

业务验证

参考EDAS官网文档,创建好应用,并成功将应用部署到线上后,可以在EDAS控制台上很方便的进行业务验证,链路跟踪,也就能很方便的定位到平时业务之间链路的瓶颈所在。查看创建及发布应用的文档

应用服务验证

当应用部署成功后,可以在控制上看到提供的服务和调用的服务,也可以在应用控制台上看到业务运行的日志,如截图所示

同样也可以查看到应用中的http服务、hsf服务信息:

服务链路验证

通过链路监控,可以很直观的监控到整个业务调用的状态,及时的定位到问题出现的地方

好了,一套简单的分布式应用系统就开发完成了,so easy!X公司的故事,也不出意外的迎来了happy ending。

相关链接




从航空母舰上起飞是怎样一种体验?立即开通EDAS,你就知道

产品专家建议:各版本特色看这里

0-5个节点推荐:基础版

5-50个节点推荐:高级版

50以上推荐:专业版

EDAS产品详情

申请EDAS产品专家一对一咨询

这篇关于从航空母舰上起飞,是怎样一种体验----EDAS带你快速搞定分布式应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/378864

相关文章

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

电脑桌面文件删除了怎么找回来?别急,快速恢复攻略在此

在日常使用电脑的过程中,我们经常会遇到这样的情况:一不小心,桌面上的某个重要文件被删除了。这时,大多数人可能会感到惊慌失措,不知所措。 其实,不必过于担心,因为有很多方法可以帮助我们找回被删除的桌面文件。下面,就让我们一起来了解一下这些恢复桌面文件的方法吧。 一、使用撤销操作 如果我们刚刚删除了桌面上的文件,并且还没有进行其他操作,那么可以尝试使用撤销操作来恢复文件。在键盘上同时按下“C

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

hdu 4565 推倒公式+矩阵快速幂

题意 求下式的值: Sn=⌈ (a+b√)n⌉%m S_n = \lceil\ (a + \sqrt{b}) ^ n \rceil\% m 其中: 0<a,m<215 0< a, m < 2^{15} 0<b,n<231 0 < b, n < 2^{31} (a−1)2<b<a2 (a-1)^2< b < a^2 解析 令: An=(a+b√)n A_n = (a +

v0.dev快速开发

探索v0.dev:次世代开发者之利器 今之技艺日新月异,开发者之工具亦随之进步不辍。v0.dev者,新兴之开发者利器也,迅速引起众多开发者之瞩目。本文将引汝探究v0.dev之基本功能与优势,助汝速速上手,提升开发之效率。 何谓v0.dev? v0.dev者,现代化之开发者工具也,旨在简化并加速软件开发之过程。其集多种功能于一体,助开发者高效编写、测试及部署代码。无论汝为前端开发者、后端开发者

利用Django框架快速构建Web应用:从零到上线

随着互联网的发展,Web应用的需求日益增长,而Django作为一个高级的Python Web框架,以其强大的功能和灵活的架构,成为了众多开发者的选择。本文将指导你如何从零开始使用Django框架构建一个简单的Web应用,并将其部署到线上,让世界看到你的作品。 Django简介 Django是由Adrian Holovaty和Simon Willison于2005年开发的一个开源框架,旨在简

一种改进的red5集群方案的应用、基于Red5服务器集群负载均衡调度算法研究

转自: 一种改进的red5集群方案的应用: http://wenku.baidu.com/link?url=jYQ1wNwHVBqJ-5XCYq0PRligp6Y5q6BYXyISUsF56My8DP8dc9CZ4pZvpPz1abxJn8fojMrL0IyfmMHStpvkotqC1RWlRMGnzVL1X4IPOa_  基于Red5服务器集群负载均衡调度算法研究 http://ww

分享5款免费录屏的工具,搞定网课不怕错过!

虽然现在学生们不怎么上网课, 但是对于上班族或者是没有办法到学校参加课程的人来说,网课还是很重要的,今天,我就来跟大家分享一下我用过的几款录屏软件=,看看它们在录制网课时的表现如何。 福昕录屏大师 网址:https://www.foxitsoftware.cn/REC/ 这款软件给我的第一印象就是界面简洁,操作起来很直观。它支持全屏录制,也支持区域录制,这对于我这种需要同时录制PPT和老师讲

CentOs7上Mysql快速迁移脚本

因公司业务需要,对原来在/usr/local/mysql/data目录下的数据迁移到/data/local/mysql/mysqlData。 原因是系统盘太小,只有20G,几下就快满了。 参考过几篇文章,基于大神们的思路,我封装成了.sh脚本。 步骤如下: 1) 先修改好/etc/my.cnf,        ##[mysqld]       ##datadir=/data/loc

SAM2POINT:以zero-shot且快速的方式将任何 3D 视频分割为视频

摘要 我们介绍 SAM2POINT,这是一种采用 Segment Anything Model 2 (SAM 2) 进行零样本和快速 3D 分割的初步探索。 SAM2POINT 将任何 3D 数据解释为一系列多向视频,并利用 SAM 2 进行 3D 空间分割,无需进一步训练或 2D-3D 投影。 我们的框架支持各种提示类型,包括 3D 点、框和掩模,并且可以泛化到不同的场景,例如 3D 对象、室