AppBoxFuture: 服务模型的在线调试与性能监测
框架内的服务模型(ServiceModel)用于处理各类业务逻辑(如最简单的CRUD操作),在设计时以类似于伪代码的形式存在,发布时后端会通过Roslyn转换并编译为运行时代码。为了方便开发者作者初步实现了在线调试服务与监测服务调用性能的功能,下面分别介绍。
一、服务在线调试
1.1 实现原理
原本想参照VSCode实现调试功能,但VSCode使用的vsdbg调试器有许可限制,无法用于第三方IDE,好在GitHub上的netcoredbg项目使用MIT许可且支持VSCode的调试协议。作者画了个流程图简要说明一下调试流程:

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

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

运维管理系统由框架本身实现,入口为http://地址:5000/ops
三、本篇小结
本篇介绍了如何实现IDE的服务模型调试与性能监测功能,GitHub上的运行时已更新可供测试。一边码代码一边码文实属不易,作者需要您的支持请您多多点赞推荐!
AppBoxFuture: 服务模型的在线调试与性能监测的更多相关文章
- AppBoxFuture: 服务模型的在线调试
框架内的服务模型(ServiceModel)用于处理各类业务逻辑(如最简单的CRUD操作),在设计时以类似于伪代码的形式存在,发布时后端会通过Roslyn转换并编译为运行时代码.为了方便开发者更简 ...
- SignalR系列续集[系列8:SignalR的性能监测与服务器的负载测试]
目录 SignalR系列目录 前言 也是好久没写博客了,近期确实很忙,嗯..几个项目..头要炸..今天忙里偷闲.继续我们的小系列.. 先谢谢大家的支持.. 我们来聊聊SignalR的性能监测与服务器的 ...
- fir.im Weekly - APP 性能监测优化 二三事
每一个成功的 App,都拥有强大的性能体验.本期 fir.im Weekly 整理了微信读书.美团外卖. 天猫.美团点评技术团队的关于性能监测优化方面策略和工具的分享,一起来看看. 微信读书 iOS ...
- Linux 性能监测:工具
一个完整运行的 Linux 系统包括很多子系统(介绍,CPU,Memory,IO,Network,-),监测和评估这些子系统是性能监测的一部分.我们往往需要宏观的看整个系统状态,也需要微观的看每个子系 ...
- 谈谈iOS app的线上性能监测
在移动端开发者中最重要的KPI应该是崩溃率.当崩溃率稳定下来后,工作的重心就应该转移到性能优化上.那么问题来了,如果你的项目也没有接入任何性能监测SDK,没有量化的指标来衡量,那你说你优化了性能领导信 ...
- JMeter性能监测插件介绍(三)
JMeter 性能监测插件介绍 压力测试过程中,能够随时对负载服务器的健康状况的把控是相当重要的,有了这些数据,我们才能准确分析出服务器负载瓶颈.JMeter 插件包现在能够支持服务器监控,可以在所有 ...
- 使用JDK自带的visualvm进行性能监测和调优
使用JDK自带的visualvm进行性能监测和调优 1.关于VisualVm工具 VisualVM 提供在 Java 虚拟机 (Java Virutal Machine, JVM) 上运行的 J ...
- Linux按照CPU、内存、磁盘IO、网络性能监测
系统优化是一项复杂.繁琐.长期的工作,优化前需要监测.采集.测试.评估,优化后也需要测试.采集.评估.监测,而且是一个长期和持续的过程,不 是说现在优化了,测试了,以后就可以一劳永逸了,也不是说书 ...
- Linux 性能监测:介绍
看了某某教程.读了某某手册,按照要求改改某某设置.系统设定.内核参数就认为做到系统优化的想法很傻很天真:)系统优化是一项复杂.繁琐.长期的 工作,优化前需要监测.采集.测试.评估,优化后也需要测试.采 ...
随机推荐
- Visual Studio Code编写C/C++代码常见问题
我会把一些常见问题以及自己编写代码过程中遇到的问题以及解决方案放在这里,各位若是遇到的问题也可以在评论区留言. 一.头文件Error 不会影响编译运行,但会报Warm,如下图 解决方案是安装Inclu ...
- 超实用的SQL语句之嵌套查询
嵌套查询 什么是嵌套查询 . 嵌套查询的意思是,一个查询语句(select-from-where)查询语句块可以嵌套在另外一个查询块的where子句中,称为嵌套查询.其中外层查询也称为父查询,主查询. ...
- go 学习笔记之仅仅需要一个示例就能讲清楚什么闭包
本篇文章是 Go 语言学习笔记之函数式编程系列文章的第二篇,上一篇介绍了函数基础,这一篇文章重点介绍函数的重要应用之一: 闭包 空谈误国,实干兴邦,以具体代码示例为基础讲解什么是闭包以及为什么需要闭包 ...
- NPOI导出数值格式设置(我是保留四位小数,不足补0)
看了网上好多帖子,都是保留两位小数的,写法是: HSSFDataFormat.GetBuiltinFormat("0.00"); 于是想四位小数,就是多加两个00,变成: HSSF ...
- 跟我学SpringCloud | 第十九章:Spring Cloud 组件 Docker 化
前面的文章<跟我学SpringCloud | 第十八篇:微服务 Docker 化之基础环境>我们介绍了基础环境系统和 JRE 的容器化,这一节我们介绍 Spring Cloud 组件的容器 ...
- linux安装couchbase
一.卸载 查看已安装的版本 rpm -qa|grep couchbase 卸载已安装的版本 rpm -e xxxx 二.安装 安装couchbase rpm -i xxxx.rpm 浏览器中访问809 ...
- jmeter 分布式疑难杂症 待完善
完善中....(可能不会完善了) 前景:在window调度机上配置好了jmeter相关的 jmx文件,因需搞分布式所以弄了几台linux. 但是jmx文件请求包含有bean shell脚本,需导入ja ...
- JAVA设计模式---单例模式篇
单例模式(singleton):是JAVA中最简单的一种设计模式,属于创建型模式.所谓单例,就是整个程序有且仅有一个实例. 特点: 构造方法私有化 在本类中实例化一个对象作为本类的属性 对外提供一个访 ...
- c++中不需要显示指出struct
赫 21:48:16请教个问题赫 21:49:53类声明前对私有继承的结构,的struct定义是什么作用?类声明前对该类私有继承的结构,的struct定义是什么作用?赫 21:51:21stru ...
- Eureka参数配置->Client端参数
1.基本参数配置列表: 参数 默认值 说明 eureka.client.availability-zones 告知client有哪些region及availability-zones,支持配置 ...