全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

JDBC和RestApi调用埋点

发布时间:2022-08-04 16:11:00
发布人:qyf

  JDBC做过java开发的都知道JDBC是干什么的,RestApi其实就是http的调用,http的调用就是调用第三方的服务的时候,第三方的服务并不是在自己的系统范围内,如果出现不稳定挂掉,对自身来说是不可控了,所以第三方服务而言对我们而言是非常的明感的。JDBC和RestApi的监控对系统来讲意义很大,数据库得多重要,在系统的内部进行监控更能良好的反应sql的执行性能。

1

  (一)JDBC调用拦截

  JDBC插桩目的

  哪些监控怼开发运维来说最有用的。

  SQL语句、SQL参数、用了多长时间、SQL类型、结果集大小、返回字段、规范、Join次数

  拦截监听SQL语句

  找出慢查询语句

  模型结构

2

  JDBC插桩位置

  这些user,框架,连接池,驱动都依赖jdbc,jdbc是一个什么东西?jdbc是一种规范,一堆接口组成的规范j2se,由驱动来实现的。servlet也是一种接口规范,是j2ee的规范,由tomcat,jetty等容器实现的。任任何一层都可以做为插桩的切入点,但是选用User 层、框架层、连接池&数据源层、驱动层其实现是多样的,无法做到普适性。所以在此选用JDBC 作为插桩切入 点。

3

JDBC插桩机制

4

  从上图可以分析出JDBC执行过程

  1.从驱动获取连接(Connection)

  2.基于连接构建预处理对象(prepareStatement)

  3.执行SQL

  4.读取结果集(ResultSet)

  5.关闭释放连接。

  其中涉及对象构建逻辑如下:

  Driver==》Connection==》prepareStatement==》ResultSet

5

  (二)Http调用拦截

  Http埋点目的

  很多时候我们会调用第三方API。比如:消息推送、短信发送、第三方支付接口等,因为服务是第三方提供,如果服务出现性能或可用性问题对于我方而言不可控,所以这类接口的稳定性是我们需要重点关注的对象。

  通常这类接口会基于Http协议实现,所对Htpp协议监控,即实现了对第三方接口的监控。

  Http埋点位置

6

  1.user层:无法判断User具体执行方法,基于配置又做不到普适性。

  2.Http协议层:能找到具体方法,也能做到普适性。需要对Http协议进行全面解析,而且Http协议为文本协议,解析难度更大,实现成本居高。

  3.专有SDK、与自定义封装的Http工具包,跟具体业务偶合同样无法做到普适应。

  4.java net URL 与 HttpClient 都是Http client 基于二者实现可以在一定程度上达成我们的目标。

  Http埋点机制(java.net.URL)

  URL常用写法:

  URL url = new URL("https://www.baidu.com");

  URLConnection conn = url.openConnection();

  conn.setDoInput(true);

  conn.setDoOutput(true);

  conn.connect();

  OutputStream output = conn.getOutputStream();

  output.write("a=c&b=1".getBytes());

  InputStream input = conn.getInputStream();

  byte[] bytes = IOUtils.readFully(input, -1, false);

  System.out.println(new String(bytes));

  URL 装载执行过程:

  URL 基于protocol 构建对应 UrlStreamHandler

  UrlStreamHandler.openConnection() 打开连接,返回URlConnection

  URlConnection 设置连接属性

  URlConnection 打开 outPutStream 写入参数

  URlConnection 打开 inPutStream读取结果

  其中涉及对象构建逻辑如下:

  URL==》URLStreamHandler==》URLConnection==》outPutStream、InputStream。

  如果上述过程加一层**静态代理**即可监控这些对象所有的执行过程从而得到所需监控数据:

  URL==》Proxy(URLStreamHandler)》Proxy(URLConnection)》Proxy(outPutStream)、Proxy(InputStream)。

  URL的类结构

7

  怎么样才能加上这层代理呢?其关键方法在于 通过静态代理的方式。 java.net.URL#setURLStreamHandlerFactory。该方法允许用户自定义URL协议实现.

8

  PS:太复杂了,看源码debug看比较好,jdbc和restApi通过的proxy代理的方式。

更多关于“java培训”的问题,欢迎咨询千锋教育在线名师。千锋教育多年办学,课程大纲紧跟企业需求,更科学更严谨,每年培养泛IT人才近2万人。不论你是零基础还是想提升,都可以找到适合的班型,千锋教育随时欢迎你来试听。

相关文章

主机和端系统之间有什么不同?

主机和端系统之间有什么不同?

2023-10-14
进程和线程有什么联系和区别?

进程和线程有什么联系和区别?

2023-10-14
结束任务管理器快捷键是什么?

结束任务管理器快捷键是什么?

2023-10-14
服务器为什么要用Linux?

服务器为什么要用Linux?

2023-10-14

最新文章

常见网络安全面试题:Windows常用的命令有哪些?

常见网络安全面试题:Windows常用的命令有哪些?

2023-10-09
常见网络安全面试题:根据设备告警如何展开排查?

常见网络安全面试题:根据设备告警如何展开排查?

2023-10-09
常见网络安全面试题:mysql加固呢?(数据库加固)

常见网络安全面试题:mysql加固呢?(数据库加固)

2023-10-09
常见网络安全面试题:windows和linux加固?(操作系统加固)

常见网络安全面试题:windows和linux加固?(操作系统加固)

2023-10-09
在线咨询 免费试学 教程领取