惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Docker
I
InfoQ
L
LangChain Blog
阮一峰的网络日志
阮一峰的网络日志
Y
Y Combinator Blog
博客园_首页
Martin Fowler
Martin Fowler
宝玉的分享
宝玉的分享
A
About on SuperTechFans
Apple Machine Learning Research
Apple Machine Learning Research
Vercel News
Vercel News
T
The Blog of Author Tim Ferriss
C
Check Point Blog
B
Blog RSS Feed
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Engineering at Meta
Engineering at Meta
B
Blog
爱范儿
爱范儿
Stack Overflow Blog
Stack Overflow Blog
aimingoo的专栏
aimingoo的专栏
WordPress大学
WordPress大学
F
Fortinet All Blogs
月光博客
月光博客
GbyAI
GbyAI

博客园 - 白菜园

低代码 + AI = 对话方式生成UI AppBox拖拽设计增删改查用户界面 换个方式用C#开发微信小程序 开源高性能结构化日志模块NanoLog AppBox快速开发框架(开源)开发流程介绍 用Roslyn玩转代码之一: 解析与执行字符串表达式 不生成DOM的非主流Blazor UI开源啦! 给我一块画布,我可以造一个全新的跨端UI 拖拽方式生成Vue用户界面 终于可以愉快的撸Java异步代码了! 这么优雅的Java ORM没见过吧! Java“微服务”还能这么玩! AppBoxFuture: Web在线报表设计与PDF生成 AppBoxFuture实战: 如何同步开发与生产环境的模型 一个浏览器搞定前后端开发的低代码框架正式开放源码啦! AppBoxFuture实战: 如何实现一对多表单的增删改查 AppBoxFuture: Sql存储的ORM查询示例 AppBoxFuture: 集成第三方Sql数据库 AppBoxFuture: Raft快照及日志截断回收
AppBoxFuture: 服务模型的在线调试与性能监测
白菜园 · 2019-10-24 · via 博客园 - 白菜园

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

一、服务在线调试

1.1 实现原理

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

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

VSCode调试协议参考:

  1. https://github.com/Microsoft/vscode-debugadapter-node/blob/master/debugProtocol.json
  2. https://github.com/Microsoft/vscode-debugadapter-node/blob/master/protocol/src/debugProtocol.ts

1.2 调试演示

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

二、服务性能监测

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

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

三、本篇小结

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