2019 月 10 月 3 日,Spring Cloud Alibaba 正式 "挂牌" Spring 官方,成为推荐的 Spring Cloud 规范实现之一,官宣地址点击这里。
目前,已包括爱回收、东家、Acmedcare+、生学教育、联想云、凤凰网、平安科技等企业正在通过 Spring Cloud Alibaba 构建自己的微服务架构,并能无缝连接到阿里云的各类服务。
如果您有计划将 Spring Cloud Alibaba 部署到云端,那么本文将提供一种 5 分钟内就能免费体验阿里云 EDAS 的方法。阅读本文,您将了解到如何使用 EDAS 公网体验环境,并了解部分 EDAS 的功能的详情介绍,学习到如何通过 EDAS 来解决 Spring Cloud Alibaba + Dubbo 构建微服务时遇到的痛点。
微服务架构在生产环境落地是一个复杂的工程,以下是您可能会遇到的问题:
- 某个应用提供了哪些服务,应用有哪些具体的服务类型和服务方法 ?他们的 QPS 分别是什么,响应时间快还是慢,服务的健康程度怎样 ?
- 用户反馈服务响应慢,怎么排查 ,如何准确地定位到响应慢的是哪类请求?这些请求的链路里,每一个服务内的处理时间是多少 ?最慢的是哪行代码,该怎么优化 ?
- 能否准确地用一张拓扑图将微服务的架构描绘出来 ?服务之间的互相调用关系是怎样的,会不会出现循环依赖,服务有没有被某个上游偷偷调用 ?
- 用户反馈在某个场景使用的时候出现了问题,怎么定位这次错误?能否迅速地找到出错是哪个服务、哪行代码 ?
- 如何部署和运维服务注册中心,通过鉴权认证保证服务注册和发现的安全,如何保障服务中心控制台安全 ?
上述问题,对大多数公司来说都是痛点和难点。虽然其中的一些问题,开源也提供了解决方案,但是却不能完美地贴合生产环境的最佳实践,在应用到生产之前需要花费大量的精力去研究和修改开源成本。而且在这之后还可能需要付出高昂的计算资源成本和存储资源成本,以及运维时高昂的人力成本。
但是在使用 EDAS 的情况下,以上问题全都可以在低成本的前提下迎刃而解,运维成本大幅下降,监控信息一目了然。
为了帮助用户快速体验 EDAS ,EDAS 最近上线了公网体验环境。在公网体验环境下,您在五分钟之内就可以将本机应用接入 EDAS,快速体验 EDAS 的部分功能,而且完全免费!
为了更好地演示 EDAS 的功能,我们这里提供了一个简易版本的网上商城供您体验,网上商城有三个模块组成,服务框架包含了 Spring Cloud Alibaba 和 Apache Dubbo 。
公网体验操作步骤
- 开通 EDAS,如果已开通请略过。
- 登录阿里云 用户中心 ,查询阿里云
AccessKey ID
和Access Key Secret
。下面简称{阿里云AccessKey}
和{阿里云SecretKey}
-
下载 EDAS 网上商城 Demo 应用
- 打开三个不同的命令行窗口,分别进入到刚才下载 Jar 包的目录,并分别执行如下命令,启动应用。(Mac 系统可以通过 iTerm2 或 Terminal 执行,Windows 系统推荐通过 Cygwin 执行。)
curl http://edas-public.oss-cn-hangzhou.aliyuncs.com/install_package/public-region-trial.sh | bash -s {阿里云AccessKey} {阿里云SecretKey} cartservice-provider.jar
curl http://edas-public.oss-cn-hangzhou.aliyuncs.com/install_package/public-region-trial.sh | bash -s {阿里云AccessKey} {阿里云SecretKey} productservice-provider.jar
curl http://edas-public.oss-cn-hangzhou.aliyuncs.com/install_package/public-region-trial.sh | bash -s {阿里云AccessKey} {阿里云SecretKey} frontend.jar
登录 EDAS 控制台查看基本信息
- 登录 EDAS 控制台,在顶部的地域列表中选择 其他 > 公网。
-
查看应用列表
- 在左侧导航栏中选择 应用管理 > 应用列表。
- 在 应用列表 页面可以看到已经接入了 cartservice-provider、frontend、productservice-provider 三个应用 。
-
查看服务列表
- 在左侧导航栏中选择 微服务管理 > 服务查询。
- 类型选择 全部 ,直接点击 搜索 ,就可以看到已经注册了三个服务。
体验网上商城
在 EDAS 的更多功能之前,我们先使用一下只具备最基础的几个演示功能的简易版网上商城。
- 打开 frontend 项目的首页
127.0.0.1:8080
,可以看到一系列的商品。
- 点击商品对应的
Buy
按钮,跳到商品详情页,查看商品的描述。
- 选择需要购买的数量,点击
Add to Cart
按钮将商品添加到购物车,页面会自动跳转到购物车页面。
- 点击页面左上方的
Hipster Shop
可以跳转到首页。在首页里直接点击右上角的View Cart
也可以直接跳转到购物车页面。
为了在接下来的步骤中能够看到更多链路的信息,建议在购物车中多添加几件商品,甚至可以反复多操作几次。
通过 EDAS 解决微服务痛点
应用监控一直是微服务中的难题,我的服务 QPS 是多少,GC 情况如何,延时怎么样,服务的成功率是多少,服务调用关系是怎样的 ?基于开源方案搭建完整的一套系统需要花费大量的精力去研究和部署,而且耗费的计算和存储资源的成本也非常大,但是借助 EDAS,这些信息却可以在低成本的前提下一目了然。
应用总览迅速了解全貌
在应用的列表页面,点击应用名 frontend
,会跳转应用的详情页,在左侧导航栏选择 应用监控 > 应用总览。可以看应用监控的总览。
应用的总览包含了 总请求量、平均响应时间、Full GC、慢SQL、应用提供服务、应用依赖服务、HTTP-状态码统计、系统信息等内容,这里着重介绍下面的内容。
-
总请求量
,显示应用在所选择的时间内收到的请求的总量。 -
Full GC 次数
,可以看到应用的 Full GC 的情况,更多 GC 详情可以在应用详情
的JVM监控
里查看。 -
应用提供的服务
,查看应用提供的服务类型,以及被调用的情况。本示例中我们可以看到应用提供了 HTTP 服务,在 15:38 到 15:39 这段时间内被调用了6次。 -
应用提供服务的平均响应时间
,显示应用提供服务的平均响应时间,实时地查看应用的状态。本示例中我们可以看到在 15:38 到 15:39 这段时间内,应用提供的 HTTP 服务的平均响应时间为 1.03 s。 -
应用依赖的服务
,查看应用依赖的服务类型,本示例中我们可以看到应用调用了 HTTP 服务和 Dubbo 服务,且在 15:38 到 15:39 这段时间内调用了12次 Dubbo 服务和 4次 HTTP 服务。 -
应用依赖服务的平均响应时间
,本示例中我们可以看到在 15:38 到 15:39 这段时间内,应用调用下游的 Dubbo 服务平均耗时为 34.9 ms,调用下游的 HTTP 服务的平均耗时为 295.3 ms。 -
HTTP 状态码统计
,统计应用提供的 HTTP 服务的状态码,本示例中我们可以看到在 15:38 到 15:39 这段时间内,应用提供了 6 次 HTTP 服务,状态码全是 200。
监控详情精准分析应用
前面介绍了总览,如果想要看到更详细更细化的信息,在左侧导航栏选择 应用监控 > 应用详情。可以看应用监控的详情。
概览
左侧的节点选择中,可以选择此应用下的不同节点,我们这里只有 30.5.125.70 这一台机器接入,所以不需要再选择。
右侧的概览中,EDAS 会绘制此应用上下游的调用路线图,同时还能看到调用的类型、次数 和延迟,将鼠标停留在节点上,会显示下游应用的应用名 productservice-provider
。
在上图中我们可以看到应用的上游是用户,通过 HTTP 调用,调用的频率为 4次/小时,平均耗时为 45.75 ms。
在上图中我们可以看到应用下游有两个应用,其中左侧的应用是通过 Dubbo 调用的,调用的频率为 6次/每小时,平均耗时为 0.83 ms。右侧的应用是通过 HTTP 调用的,调用的频率为 7次 /小时,平均耗时为 3.71 ms。
JVM 监控
选择 JVM 监控页面,可以看到 JVM 监控的详情。
YoungGC 次数和 Full GC 次数
可以看到 frontend
应用在对应时间的 GC 次数。
堆内存的详情
在 15:51到 15:52 这段时间内,堆内存总和为 404.8 M,老年代为 24.6 M,年轻代 Surivor 区为 7.8 M,年轻代 Eden 区为 372.4 M。
元空间详情
元空间比较稳定,一直保持在 71.8 M 大小。
非堆内存的详情
在 15:51到 15:52 这段时间内,提交字节数 110.3M,出事字节数 2.4 M。
直接缓冲区详情
直接缓冲区比较稳定,DirectBuffer 总大小和 DirectBuffer 使用大小 一直保持在 283.8 K。
JVM 线程数
在此示例中我们可以看到线程总数为 103,死锁线程数为 0 ,阻塞线程数为 0 ,Runnable 的线程数为 17,Timed_Waitting 的线程数为 49,Waitting 的线程数为37。
主机监控
SQL 分析
EDAS 提供了 慢 SQL 查询和分析的功能,可以帮您定位、排查应用卡顿问题的原因,找到具体是哪条 SQL 导致了应用的卡顿,从而彻底解决问题。本文所使用的 Demo 中并未涉及到 SQL 调用,所以这里就无法演示此监控功能。EDAS SQL 分析功能底层是基于 ARMS 实现的,详情可参考 ARMS 帮助文档。
异常分析
frontend
提供了 http://127.0.0.1:8080/exception
和 http://127.0.0.1:8080/exception
两个接口来模拟应用出现 Exception 的情况,在调用这些接口之后,就可以看到上图中的信息。
上图中统计了应用出现的异常的类型,对应的代码地址,以及出现的次数,结合下面的接口快照功能,可以查看到完整的信息。
接口快照
在右侧的标签列表中选择 接口快照,可以看到 EDAS 采样上来的调用链信息,可以看到调用产生的时间、接口名称、耗时、状态、以及 TraceId,点击1e057d4615710385566571131d72a1
这条具体调用链可以看到更详细的信息。
在调用链路中,可以看到这次请求完整的调用链,可以看到 /cart
这条链路,调用了两次 cartservice-provider
,都是 com.alibabacloud.hipstershop.CartService@viewCart
方法,在这之后调用了 6 个 productservice-provider 下的 /product/*
接口。
从右边的时间轴还可以看到请求耗时相关的信息,在这里可以看到请求的总耗时为 25 ms,以及看到每一次内部调用的具体耗时。在 方法栈
这一列,还可以看到一个 的按钮,点击之后可以看到调用时方法堆栈的详情。
从上图中可以看到请求调用时具体的堆栈信息,详细到 Java 的类名以及所在行号,右边的时间轴同样显示了这个方法调用的耗时。有了这些信息优化应用的调用时间自然是手到擒来。
接口调用监控快速解决问题
上一节介绍了应用监控详情,如果想要看到更详细更细化的信息,在左侧导航栏选择 应用监控 > 接口调用。可以看应用监控的详情。
概览
接口详情的概览页其实和应用详情的概览页布局比较类似,不过这里左侧的节点选择变成了接口选择,选择具体的请求后,可以看到这个请求对应的拓扑图,以及对应的请求的频率及平均响应时间。
这里可以看到 /cart
请求的平均响应时间是 44.5 ms,总请求数为 22,错误数和异常数都是0。右边的拓扑图中,可以看到/cart
请求的下游调用包含了 2 次 Dubbo 和 5 次 HTTP。对应的请求频率和平均响应时间都在拓扑图中可以看到。将鼠标移动到下游的图标中,会显示下游的具体信息。
链路上下游
链路上下游的信息会显示请求所对应的下游的具体信息,包括所属的应用、应用的接口、请求数、响应时间、错误数。点击全部折叠/展开按钮,还可以看到更详细的图形化信息。
异常分析
公网体验其他注意事项
读完本文之后,您应该已经迫不及待想 免费体验 EDAS 了。为了能更好地使用公网体验环境,您需要 注意 以下几点:
- 公网体验环境最多支持部署 5 个应用。
- 本文提供的应用只是 Demo 应用,您也可以换成其他应用。
- 公网体验环境仅供本地体验和开发提效使用,不保证 SLA,请勿用于生产环境。
- 公网体验环境目前仅提供 EDAS 的部分功能,想要体验完整的 EDAS 功能请切换到其他区域。
- 目前仅支持接入可执行 Jar 包应用。
- 如果您想使用 EDAS 上的
查看服务列表
功能,只有在服务注册中心是 Nacos 的情况下才支持。基于 Eureka、Zookeeper、Consul 等注册中心的应用不支持此功能,但是其他功能均可正常使用。