- 博客(158)
- 资源 (4)
- 收藏
- 关注
原创 JMX Exporter源码解读+生产环境最佳实践+解决其抓取指标超时问题
在这一版的配置中,我没有将所有的MBean的不关心的Attribute都配置上,仅配置了jvm相关的MBean和部分MBean,主要是拿这一版的配置来验证下我的猜想。还有一个问题,由于我们代码中使用Ehcache,每一个Cache都会注册自己的MBean到JMX中,所以Cache非常多的时候,JMX里的MBean是非常多的。既然还是超时,我认为问题可能出在jvm本身收集的指标太多了,一旦jvm负载较高,有可能增加查询MBean的时间,我决定直接将源码中JavaAgent的。负责真正的MBean查询。
2024-11-15 19:32:08
820
原创 脚本自动化创建AWS EC2实例+安装ElasticSearch和Kibana+集成OpenTelemetry监控
所有服务器部署流程使用同一个部署脚本来保证部署流程标准化每个服务器的server.properties和user-data.txt不一样,每次部署只需要提供这两个文件即可对于部署之后的验证也可写成脚本集成到部署流程中来。
2024-09-29 15:56:25
1216
原创 Java中的锁(四)利用读写锁实现高性能网页缓存
看了上面的逻辑和读写锁的特性,实现起来就很简单了自定义一个Filter,该Filter在缓存网页时使用Ehcache3。具体做法是将网页的Response放到Ehcache中那怎么提高 高并发下对同一个网页的访问性能呢?使用读写锁每个需要缓存的网页url中应该都有一个标识,此标识作为缓存的key当多个并发请求都请求同一个网页时,拿到key去cache中找,找到则直接返回找不到则开始获取读锁,拿到读锁什么都不做,直接释放;如果拿不到读锁,则等待。
2024-09-01 10:45:07
1062
原创 在业务开发中使用ElasticSearch的指导手册+附真实业务优化ElasticSearch场景
有很多场景使用内置的分词器可能不满足,例如:使用ES完全达到和数据库like的效果。自定义分词只需要看官方文档下面几个内容创建自定义分词器为某个字段指定分词器创建完自定义分词器切记不要忘了上面一条,要先测试过确保没问题,才可进行下一步上述所有项都是在业务开发中值得注意的地方。我并没有把每一步的解决方案都详细的写出来,是因为解决方案里链接了大量的官方文档,跟着官方做就可以实现。真正写代码往往是上述大部分问题都已经确定了之后才开始。如有更好的开发实践,欢迎留言讨论。
2024-05-26 13:43:02
914
原创 跟着官方文档一步一步搭建Elastic Stack(3节点ES集群+Kibana+Filebeat+Metricbeat)+ 零停机由单节点切换到集群解决方案
从去年开始负责搭建公司内部的ELK,到今天才断断续续把中间的思路、踩的坑整理成文章,希望对看博文的你有所帮助。本文尽管已经搭建了一个初具规模的Elastic Stack。
2024-03-21 20:51:37
1921
原创 Kafka(六)利用Kafka Connect+Debezium通过CDC方式将Oracle数据库的数据同步至PostgreSQL中以及实现缓存一致性
sourceConnector.jar,将源数据导入至Kafka的topic中sinkConnector.jar,将Kafka topic中的数据导入至目标源但是Kafka并没有提供特别丰富的connector,那么Debezium就出现了。你可以把Debezium简单理解成是CDC技术的一种实现,并提供了很多数据库的sourceConnector.jar和sinkConnector.jar。
2023-12-02 15:53:24
2511
2
原创 Kafka(五)消费者回调 +定时重试 + 理解Rebalance
至此为止,利用Kafka实现一个消息系统就基本完成了,所有关键的代码都在不同的博文中并进行了详细说明,说过想要体会完整的设计、实现思路,请移步源码仓库获取完整代码。下一篇关于Kafak的博文打算分享一下如何利用Kafka Connect将Oracle数据库的数据同步到Postgre SQL中。
2023-11-25 08:47:43
2547
原创 Kafka(四)消费者消费JSON消息+使用统一反序列化器+提升吞吐量
在生产者端,我们发送自定义的对象时,利用自定义序列化类将其序列化为JSON。在消费者端,我们同样需要自定义反序列类将JSON转为我们之前的对象@Override在处理消费者相关逻辑时,我们重点关系如何确保消息不重复消费以及如何增加消费者的吞吐量消费逻辑尽可能保证处理速度快,尽量减少耗时的逻辑。
2023-11-18 15:16:13
1842
原创 Kafka(三)生产者发送JSON消息+使用统一序列化器+提升吞吐量
消息格式为JSON, 使用Jackson将类序列化为JSON字符串@Override在实际编码过程中,可以参考官方写的Kafka权威指南对应章节书写,或者参考各大云服务厂商的Kafak的开发者文档。不过我建议还是看Kafka权威指南, 我看了阿里云和华为云的,虽然都号称兼容开源Kafka,但是发现其版本和开源版本之间存在一定的滞后性,许多最佳实践已经过时Kafka生产者端没什么特别的,主要是根据业务场景设计消息格式,以及如何尽可能的减小消息体积。
2023-11-13 20:23:42
3832
原创 Kafka(二)将邮件发送从业务系统中解耦之消息系统设计
当多个系统之间通过Kafka来解耦时,在系统设计初期,基本的要求都是相似的,只不过是消费消息时的业务逻辑可能不同。本文以业务系统和邮件系统解耦作为示例。业务系统需要发送邮件时,不在自身服务器上发送邮件, 不通过RPC的方式调用邮件系统,而是通过将发送邮件需求以消息的形式发送到Kafak, 邮件系统通过从Kafka中消费消息来发送邮件。通过这样的解耦有以下几点好处由于业务系统不直接调用邮件系统,所以不会将压力给到邮件系统,避免两个系统因大量的请求响应而出现的系统不稳定问题。
2023-11-04 19:34:25
1043
4
原创 用JMeter对HTTP接口进行压测(一)压测脚本的书写、调试思路
本博文没有对JMeter中的各个组件及其概念做过多介绍,我认为,这些基础的东西看看官方文档,自己多配置几个脚本就基本知道这些组件到底是干嘛的了,官方文档已经是最精华的教学文档了,我就不必在这里再次赘述了。希望想要学习JMeter的同学,多读官方文档,遇到概念不清楚、配置不清楚的问题按图索骥即可。刚上手的同学建议多读FAQ以及Best Practices部分。
2023-10-05 15:13:30
2889
1
原创 Kafka(一)使用Docker Compose安装单机Kafka+Kafka UI+Prometheus JMX Exporter
这里我们的配置是选择的是KRaft,因为Kafka官方已经计划在Kafak中移除Zookeeper。对于UI配置项没什么特别要说的,这里只是提一下,注意这里的docker-compose.yml中environment的写法,和上面的Kafka镜像中environment的写法不同,这是两种不同的写法。> 文档网址 > Compose examples 下面可以找打很多Kafak ui的compose文件示例,不仅对UI的配置很有帮助,而且对刚入门Kafka的同学,也提供了非常好的示例,
2023-09-30 14:43:33
11345
6
原创 理解HTTPS/TLS/SSL(二)可视化TLS握手过程并解密加密数据
已经在本地使用了生成自签名证书,并使浏览器认为该证书是合法的,并且可以看到有了HTTPS,通过WireShark抓出来的包看不到请求内容和响应内容了。看了网上很多分析HTTPS握手的文章,每次看过之后,总是过段时间就忘记了,所以自己决定动手抓下包,看下整个过程。
2023-09-16 16:13:46
1921
原创 理解HTTPS/TLS/SSL(一)基础概念+配置本地自签名证书
对于HTTPS、TLS、SSL相关的概念,平时也是时常接触到。看过几篇文章之后,总以为自己真正了解了,实际上碰到问题时才知道,自己恐怕连入门都算不上。所以打算入个门,补上这一部分的基础知识,对于更深层次的东西,例如各种标准的解读,则不打算深入。
2023-08-27 16:26:29
2943
原创 Log4j2的使用(三)不同的环境使用不同的配置
上面两种方式适合新项目适和部署周期较短的项目。由于上面两种方式需要在JVM启动的时候添加额外的参数,那这一部分工作是由运维来负责,虽然只是添加一个参数,假设服务器数量较多,那么代码需要等到JVM参数添加到所有服务器之后才可以,也就相当于部署了两次。在这种背景下,我在想,能不能把设置查找SystemProperty这一部分工作也在代码里完成呢?好在Log4j2提供了Plugins机制,允许我们可以自己拓展} else {} }
2023-07-15 13:01:19
2217
1
原创 C语言VS Code 开发环境搭建
由于之前使用VS Code较少,缺少在VS Code上开发C程序的经验。本篇博文主要记录使用VS Code开发C程序时,环境搭建步骤。
2023-06-28 21:05:16
1036
原创 Eclipse Krazo(Jakarta MVC)的使用
虽然官方提供了一个默认的实现CsrfExceptionMapper,但是我们想CSRF校验失败时,自己控制跳到自己项目里的页面// 两种写法都可以 // servletContext.getRequestDispatcher("/WEB-INF/views/csrf.jsp").forward(request, response);} }csrf校验失败:
2023-06-17 17:58:40
1157
1
原创 编程可视化网站与软件(长期更新)
我在学习并理解一个知识的时候,一直在思考一个问题,为什么我们有的时候学一个东西学过总忘,或者说学知识时当时好不容易理解了,但是过几个月又忘了。说到底,其实还是没有根本上理解所学的知识是具体怎样运行的,或者说脑海中没有它具体运行时的形态。当回忆起某个知识时,自然是只能想起来干巴巴的文字,而不是一幅幅动态的画面。幸好有许多前辈已经做了很多这样的事情,让我们站在他们的肩膀上更容易、更高效的理解一个知识或技能在实际运行中究竟是怎样的,
2023-04-15 08:55:14
333
原创 使用Filebeat和AWS CloudWatch Logs将EC2上的Tomcat的access_log传送到Elasticsearch中并使用ILM完成日志的自动管理
把一个东西用起来仅仅是最初级的部分,如何把一个东西用好并比较好的支持当前所需场景才是最重要的。如果在调试过程中遇到什么问题,没有头绪的时候,一定要去看看服务器日志,例如Filebeat的日志或者ES的日志。切记不要把自己的需求放到网上去Google,例如为什么Filebeat延迟很高之类的,因为同样的需求面对的场景不一样,给出的答案完全不一样且不一定适用你。大部分关键的配置已经都给了出来,所以这里就不再提供源码了。因为上述配置都在filebeat.yml。
2023-03-12 16:39:30
640
原创 使用Lua Script实现不同的限流算法
固定窗口的问题是:当在10:01:59请求了2次,在10:02:01也请求了2次,这就导致在短短2秒内请求了4次,已经超过了3次的限制。按照固定窗口的逻辑来判断,这两次在各自的时间窗口内是合理的,但是在这种边界时,是不正确的。可能大家想到的一种方式是在确定是第一次请求的时候,将剩余的时间给计算出来,等到后面的请求过来的时候,只需要自增即可。上面这种实现方式就是简化了一下代码,即使到了10:02,因为key变了,所以获取不到10:01的key,这个key自然会在最后一次被设置完过期时间并达到60s后删除。
2022-12-31 16:56:50
1587
1
原创 使用Filebeat和AWS CloudWatch Logs将EC2上的Tomcat的access_log传送到ELK
但是我自己测试的时候是使用单独的Filebeat,当然最终在产品环境部署的时候肯定是和上面的docker-compose.yml一起的。对于第二点,方案则是:通过AWS CloudWatch Logs收集各个EC2 实例上的Tomcat的acceess_log,通过Filebeat拉取AWS CloudWatch Logs里收集到的日志,然后发送到ELK中。因为经过上面的配置,filebeat已经可以访问ELK的网络了。机器都在AWS上,这两部分的日志都要发送到Docker搭建的ELK环境中。
2022-12-30 09:29:31
1333
原创 Hibernate-Validator的使用(一)
key用{}括起来}这里定义两个文件ValidationMessages_zh_CN.properties和ValidationMessages_en_US.properties来做测试。二者均放在resource目录下ValidationMessages_en_US.properties的内容userName.invalid= userName ${validatedValue} is invalid。
2022-12-25 21:58:11
2466
原创 MySQL手记
VARCHAR是可变字符串,M最大值为65535,如果VARCHAR类型的字段存储值未超过255个字节,则VARCHAR前缀占用1个字节,如果超过了255个字节,则VARCAHR前缀占用2个字节。即使Spring是在代码层面做了限制,那么其实MyIsam存储引擎是不支持事务的,所以,一旦在数据入库的过程中失败,那么即使代码层面没有报错,数据的ACID是保证不了的。结合下面例子看,更容易懂。,既然有符号,就要分正负,则要把这个数分成两部分,肯定要在正常的基础上除以2,指数运算,两个数相除,则指数相减。
2022-09-22 21:10:04
749
原创 PostgreSQL(一)环境搭建
我们原来学习一项技术的时候,最开始的时候,最头疼的就是安装软件、并且配置环境变量等。一旦哪一步没做对,或者步骤正确但是就会出一些稀奇古怪的问题。于是就开始在搜索引擎上找各种答案、尝试、未解决、接着循环…等最终环境安装好了,学习的兴趣早就没了。所以我非常推荐利用Docker来学习各种技术,只要镜像一拉,环境就搭好了。等学完了,容器一删,干干净净,多方便。可以看到创建volume、创建容器、以及启动成功的信息。到此为止,PostgreSQL的学习环境就搭建好了。这几项都是定义在上述==.env==文件中的。..
2022-07-23 15:23:46
1861
原创 ElasticSearch Java API的使用
Search API 官方文档我们都知道,Elasticsearch的各种API都是很标准的Restful风格,一个标准的请求如下target是我们要查询的index的名字,关键是request body。我们平时的一般开发场景request body里的属性基本是下面这些。也就是我的过滤条件是什么?返回结果如何排序?如何只返回部分字段?如何分页?这几种常见需求大方向其实也就6种,下面简单逐一解释query部分是查询的核心,里面需要书写我们各种各样的查询条件sort不难理解是排序search_af
2022-07-04 20:52:22
1710
原创 Log4j2的使用(二)动态修改日志级别
在实际生产环境中,我们一般配置的日志级别为INFO或者WARN级别及以上。当生产环境某项业务忽然出现问题,此时看WARN日志找不出什么线索,最好能在不重启服务器的情况下,将WARN级别改为DEBUG级别,查看更多的日志来判断情况。这就需要能够动态调整Log4j2的日志级别Log4j2官方提供了对JMX的支持,可以很方便的进行配置的修改启动应用启动JConsole,并点击MBean一栏找到log4j2的MBean,通过getConfigText获取此时的配置此时访问应用,日志会打印出INFO级别的日志,说明
2022-06-20 19:41:15
2008
原创 ELK生成PEM格式的ca证书、设置Https并使用Elasticsearch Java Client连接
文章目录前提条件生成CA证书根据CA证书生成用于各个节点通信加密的证书为其他组件Kibana、Logstash生成证书配置elasticsearch.yml配置kibana.yml配置logstash.confJava代码使用HTTPS连接ES为什么使用ca.crt而不是官方推荐的ca.p12?官方文档前提条件本地下载安装好Elasticsearch、Kibana、Logstash,并可以正常启动本文所使用的ELK的版本为8.2.0Elasticsearch 8.2.0 版本,安装好之后
2022-05-28 08:57:13
3683
7
原创 Log4j2的理解与使用(一)
文章目录Log4j2和Slf4j理解Log4j2的架构了解UML类图UML类图示例UML类图的主要表示方法UML 类图常见的主要有以下几种关系在Markdown中画UML类图理解Log4j2中各个组件的作用LoggerContextConfigurationLoggerLoggerConfigFilterAppenderLayout示例配置Log4j2中的各种桥接器使用异步日志开启异步日志引入依赖启动配置如何确定开启异步日志?好的资源源码仓库关于Log4j2、JUL(java.util.logging)、
2022-05-22 19:58:29
1676
原创 Docker官方文档阅读笔记
文章目录Dockerfile的书写Dockerfile常见问题RUN 和CMD的区别通过Dockerfile构建应用启动应用利用Volume持久化Container数据到宿主机上(named volume)创建volume启动容器时候使用-v参数volume所同步的容器数据在宿主机哪里?利用bind mounts将宿主机的数据同步至ContainerCompose将多个容器整合成一个完整的应用利用docker-compose.yml将多个应用整合在一起启动Docker各个命令快速查阅使用Docker Des
2022-04-16 19:07:37
1365
原创 JMX的快速入门与使用+使用JMX Exporter监控+集成OpenTelemetry
文章目录JMX应用场景JMX使用定义一个MXBean实现该MXBean将MXBean注册到JMX中去使用Jconsole监控JMX官方文档源码地址JMX应用场景用来监控JVM内各种对象的信息。一个经典场景就是,某一天我们忽然被前方告知,业务大面积瘫痪,这时经过排查,发现由于bug导致数据库连接使用完了没有被释放,导致后续业务没有可用的数据库连接而超时报错。假如我们使用JMX来监控我们系统中数据库连接池的信息,当数据库连接池出现短时间内连接被大量使用,这个时候可以搭配我们的监控报警系统(如Nagios)
2022-03-15 20:02:20
9971
原创 SpringBoot使用Velocity发送电子邮件
文章目录使用Velocity发送电子邮件简介Velocity能用来干什么?入门页面引用指令Java代码集成发送电子邮件前提编码配置文件发送邮件发送结果官方文档示例代码使用Velocity发送电子邮件简介Velocity能用来干什么?我认为大家熟知的什么用Velocity页面当做MVC的页面来呈现这种方式,但在当今前后端分离的时代,我觉得很大一部分公司前端页面都是使用的React,Vue等纯前端框架。使用各大模板引擎当做页面应该很少除了这个,官方文档提到了一个很重要的一个应用场景,就是发送电子邮件。
2022-03-03 14:23:26
2656
原创 React应用入门(二)发送请求并Mock数据
文章目录React应用入门(二)发送请求并Mock数据环境准备发送请求axios全局实例具体API请求具体组件中调用发起API调用的函数Mock数据mockjs验证后续资源React应用入门(二)发送请求并Mock数据上一篇文章中,写了一个简单的Form表单,但是并没有提到前端向后端发送请求、以及接收到响应之后表单如何处理。本篇文章将完成这一部分环境准备在项目根目录下安装axios,qs,mockjs,运行下列命令npm install axios qs mockjs查看控制台是否有报错注意
2022-01-23 11:29:17
2055
原创 React的表单组件-Formik和前端验证库-Yup的使用
文章目录React的表单组件-Formik和前端验证库-Yup的使用推荐阅读一个简单的表单提交初始代码表单验证增加用户体验的显示方式第三方验证库Yup的使用简化代码内容React的表单组件-Formik和前端验证库-Yup的使用推荐阅读强烈推荐Formik官方教程,其实根据官方教程能完全解决Formik的使用。所以本篇文章只是记录下Formik的学习过程。更多详细内容请移步官方文档一个简单的表单提交初始代码内容来自于官方文档中提供的基本代码在initialValues中填写表单的每一项imp
2022-01-15 11:36:08
1616
原创 React应用入门(一)搭建最简单的基本应用
文章目录React应用入门(一)搭建最简单的基本应用开发环境配置nvm安装检查是否安装成功查看具体帮助npm安装检查是否安装成功WebStrom搭建应用初始化应用配置Babel为当前项目安装Babel添加Babel配置文件配置Webpack为当前项目安装Webpack添加Webpack配置文件书写React代码安装React在src文件夹下创建index.js在src文件夹下创建App.js在src文件夹下创建App.css启动打包项目结构项目仓库地址拓展参考资料React应用入门(一)搭建最简单的基本应
2022-01-11 21:40:57
751
原创 自定义实现OAuth2.0 授权码模式
文章目录OAuth2.0 授权码模式 实践依赖知识术语授权码流程认证服务器拉起请求用户授权页面用户手动授权提交授权、生成code下发Token第三方应用收到code并请求Token访问受保护的资源项目结构项目部署项目完整代码相关文章OAuth2.0 授权码模式 实践本篇文章不适合作为授权码模式的入门文章来阅读,适合想要自己实现授权码模式或体验授权码模式的开发者阅读依赖知识RestEasynimbus-jose-jwtJPACDIjavax.security术语Resource Ow
2021-12-15 14:53:56
4912
原创 RestEasy的入门与使用
文章目录RestEasy的入门与使用背景传统ServletJAX-RS和JSR为什么要看规范?简单解读JSR370ApplicationsResourcesProvidersRestEasy的基本使用建立Restful风格的JavaEE应用RestEasy是如何接管了应用呢?接受Restful风格的HTTP请求基本使用进阶使用全局异常的处理备注RestEasy的入门与使用大家在国内IT环境下,用的最多的应该就是SpringBoot,SpringMVC了。但是也有另外一派,就是使用完全实现JavaEE标准
2021-12-04 13:49:38
4119
6
my.cnf .txt
2020-06-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人