47

AppBoxFuture: 服务模型的在线调试与性能监测

 4 years ago
source link: https://www.tuicool.com/articles/M7za2um
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

框架内的服务模型(ServiceModel)用于处理各类业务逻辑(如最简单的CRUD操作),在设计时以类似于伪代码的形式存在,发布时后端会通过Roslyn转换并编译为运行时代码。为了方便开发者作者初步实现了在线调试服务与监测服务调用性能的功能,下面分别介绍。

一、服务在线调试

1.1 实现原理

原本想参照VSCode实现调试功能,但VSCode使用的vsdbg调试器有许可限制,无法用于第三方IDE,好在GitHub上的netcoredbg项目使用MIT许可且支持VSCode的调试协议。作者画了个流程图简要说明一下调试流程:

yemyYnj.png!web
  1. WebIDE定位需要调试的服务方法并设置相应的断点后启动调试(如果方法有参数则需要输入参数值);
  2. 服务端DebugService收到调试请求后转换并编译Debug版本的服务代码,然后启动netcoredbg子进程(需要重定向标准输入输出,netcoredbg通过标准输入输出接收调试指令并响应),初始化调试子进程后发送运行命令启动AppContainer子进程,AppContainer子进程在启动时加载已编译好的目标服务实例并注入容器内;
  3. 服务端DebugService在一切准备就绪后发送调用服务方法(调试目标)的请求至AppContainer子进程,开始调试过程(处理netcoredbg调试事件)。

1.2 调试演示

qMNZFnU.gif

  1. 目前仅实现了通过鼠标定位变量查看相应值;
  2. 尚未实现查看虚拟实体类及其成员的值。

二、服务性能监测

作为一名程序员,系统性能优化是一场持久战,目标是追求用更少的资源来满足系统的运行要求。作者在设计之初就定下了整个架构必须包含完整的系统监控功能,以方便快速定位系统瓶颈。因此作者在服务端的服务实例容器内埋了监测点(Pormetheus的Histogram指标类型),用以监测服务实例的调用次数与响应时间。集群内的Prometheus节点定期采集与存储监测指标,通过运维管理系统的“服务监控”面板(如下图所示)可以查看某一时间范围内服务调用次数与耗时的排名,这样程序员就可以重点分析与优化这些服务模型的代码。

YrIfEnV.png!web

运维管理系统由框架本身实现,入口为http://地址:5000/ops

三、本篇小结

本篇介绍了如何实现IDE的服务模型调试与性能监测功能, GitHub 上的运行时已更新可供测试。一边码代码一边码文实属不易,作者需要您的支持请您多多点赞推荐!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK