架构
文章平均质量分 89
HelloWorld搬运工
HelloWorld是学习程序的第一个程序,搬运工是将一件东西从一个地方运到另一个地方。HelloWorld搬运工,分享技术知识,有原创也有转发,彼此交流,一起学习,共同进步。
展开
-
为什么禁止MyBatis批量插入几千条数据使用foreach?
的方式来插入,可以提升性能的方式。近日,项目中有一个耗时较长的Job存在CPU占用过高的问题,经排查发现,主要时间消耗在往MyBatis中批量插入数据。所以,如果非要使用 foreach 的方式来进行批量插入的话,可以考虑减少一条 insert 语句中 values 的个数,最好能达到上面曲线的最底部的值,使速度最快。乍看上去这个foreach没有问题,但是经过项目实践发现,当表的列数较多(20+),以及一次性插入的行数较多(5000+)时,整个插入的耗时十分漫长,达到了14分钟,这是不能忍的。原创 2022-11-06 08:34:04 · 1461 阅读 · 0 评论 -
一个非常实用的分布式 JVM 监控工具
该项目为了方便开发者更快监控多个远程主机jvm,如果你的项目是Spring boot那么很方便集成,jar包引入即可,不是Spring boot也不用气馁,你可以快速自行初始化一个Spirng boot程序引入jar包即可。原创 2022-11-06 08:28:19 · 595 阅读 · 0 评论 -
秒杀系统的思考
上图中描述了用户请求到服务器经历了三层的负载均衡,下边分别简单介绍一下这三种负载均衡。① OSPF(开放式最短链路优先)是一个内部网关协议(Interior Gateway Protocol,简称 IGP)OSPF 通过路由器之间通告网络接口的状态来建立链路状态数据库,生成最短路径树,OSPF 会自动计算路由接口上的 Cost 值,但也可以通过手工指定该接口的 Cost 值,手工指定的优先于自动计算的值。OSPF 计算的 Cost,同样是和接口带宽成反比,带宽越高,Cost 值越小。原创 2022-11-06 08:26:24 · 326 阅读 · 0 评论 -
常用开源监控系统分析推荐
在互联网信息爆炸式快速发展的今天,各类复杂多样的平台系统相继涌出。如何选择最佳的监控产品以更好地维护这些平台和系统是每个 IT 人员都需面临的难题。本文将从开源监控产品的起源和发展,详细解析各个时代热门监控产品的优势和劣势,并结合各个监控产品的使用场景,帮你选择出最适合自己的开源监控产品。因篇幅和时间原因,下面介绍的资料和理解可能和实际情况有所偏差,欢迎大家留言或者加入微信群批评指正。作者:Ethan Chen 云智慧解决方案架构师,拥有丰富的运维理论及实战经验。原创 2022-10-23 09:04:52 · 1892 阅读 · 0 评论 -
快速定位 SpringBoot 接口超时问题的神器
有一个诡异的100ms左右的耗时问题,在接口中打印了请求处理时间后,和调用方的响应时间还有差了100ms左右。的调用栈,那么这么长的路径,该trace哪个类呢(这里跳过spring mvc中的过滤器的trace过程,实际排查的时候也trace了一遍,但这诡异的时间消耗不是由这里过滤器产生的)?从名字上看,应该是tomcat加载jar包时的耗时,那么是加载了31个jar包的耗时,还是加载了jar包内的某些资源31次耗时呢?由于启动方式的不同,tomcat使用了不同的类去处理静态资源,所以没问题。原创 2022-10-23 08:59:54 · 305 阅读 · 0 评论 -
300万数据导入导出优化方案,从80s优化到8s
这次工作中遇到的问题也给我留下了深刻印象,同时也是我职业生涯添彩的一笔。最起码简历上可以写上你处理过上百万条数据的导入导出。最后说一下公司之前怎么做的,公司之前做法是限制了用户的下载数量每次最多只能有四个人同时下载,并且控制每个用户最大的导出数据最多只能是20w,与此同时他们也是使用的JDBC分批导入,但是并没有手动控制事务。控制同时下载人数我可以理解,但是控制下载数据最多为20w就显得有点鸡肋了。这也是我后期要解决的问题。原创 2022-10-23 08:58:21 · 1984 阅读 · 0 评论 -
Spring Boot + Netty + WebSocket 实现消息推送
System.out.println(NettyServer.class + " 启动正在监听: " + cf.channel().localAddress());System.out.println(NettyServer.class + " 启动正在监听: " + cf.channel().localAddress());// 关闭服务器通道。// 关闭服务器通道。原创 2022-10-23 08:55:28 · 418 阅读 · 0 评论 -
分页 + 模糊查询 有坑!
不知道你有没有使用过Mysql的like语句,进行模糊查询?不知道你有没有将查询结果,进行分页处理?模糊查询,加上分页处理,会有意想不到的坑,不信我们继续往下看。我之前提供过一个品牌查询接口,给前端品牌选择控件使用的。当时为了性能考虑,怕前端控件因为一次性加载太多的品牌,而导致页面卡死。因此,对品牌查询接口做了分页处理。刚开始品牌表的数据比较少,没有出现什么问题。后来,产品加需求了,在品牌下拉选择控件中,让用户可以输入自定义品牌。原创 2022-10-23 08:32:31 · 707 阅读 · 0 评论 -
Kafka 集群架构原理 10 点介绍
但是,其无法做到真正的负载均衡,因为实际系统中的每个生产者产生的消息量及每个Broker的消息存储量都是不一样的,如果有些生产者产生的消息远多于其他生产者的话,那么会导致不同的Broker接收到的消息总数差异巨大,同时,生产者也无法实时感知到Broker的新增和删除。客户端将请求发送给Acceptor,broker里有3个processor的线程(默认是3),Acceptor不会对客户端的请求做任何的处理,而是封装成socketChannel,然后发送给3个processor线程,形成一个队列。原创 2022-09-18 17:14:06 · 107 阅读 · 0 评论 -
9个很酷的CMD命令
操作方法:在提示符状态输入命令“netsh wlan show profile SSID key=clear”,输入完成后Windows会自动返回当前已连接WIFI的详细信息,包括SSID和连接密码。操作方法:在需要导出结果的命令后方添加“|”,再加入导出位置就可以了。操作方法:和ipconfig一样,net user也有很多衍生的命令后缀,比方说“net user xxx 123456 /add”,输入后就会在系统中创建一个名为“xxx”的新用户,而新用户密码则是“123456”。原创 2022-08-22 19:39:43 · 2057 阅读 · 0 评论 -
RabbitMQ、RocketMQ、Kafka 三元归一
Kafka Broker有一个参数,log.segment.bytes,限定了每个日志段文件的大小,最大就是1GB。一个Topic,代表逻辑上的一个业务数据集,比如订单相关操作消息放入订单Topic,用户相关操作消息放入用户Topic,对于大型网站来说,后端数据都是海量的,订单消息很可能是非常巨量的,比如有几百个G甚至达到TB级别,如果把这么多数据都放在一台机器上可定会有容量限制问题,那么就可以在Topic内部划分多个Partition来分片存储数据,不同的Partition可以位于不同的机器上,相当于。原创 2022-08-22 19:37:26 · 117 阅读 · 0 评论 -
用命令手写mysql常用监控指标
任何东西不应过重关注其外表,要注重内在的东西,往往绚丽的外表下会有对应的负担和损耗。mysql 数据库的监控支持通过 SQL 方式从 performance_schema 库中访问对应的表数据,前提是初始化此库并开启监控数据写入。对于监控而言,不在于手段的多样性,而需要明白监控的本质,以及需要的监控项内容,找到符合自身项目特色的监控方式。在选择监控工具对 mysql 监控时,需要关注监控工具本身对于数据库服务器的消耗,不要影响到其自身的使用。原创 2022-08-22 19:21:40 · 626 阅读 · 0 评论 -
延时任务实现方案总结
# 引言在开发中,往往会遇到一些关于延时任务的需求。例如 生成订单30分钟未支付,则自动取消 生成订单60秒后,给用户发短信 对上述的任务,我们给一个专业的名字来形容,那就是延时任务。那么这里就会产生一个问题,这个延时任务和定时任务的区别究竟在哪里呢?一共有如下几点区别 定时任务有明确的触发时间,延时任务没有 定时任务有执行周期,而延时任务在某事件触发后一段时间内执行,没有执行周期 定时任务一般执行的是批处理操作是多个任务,而延时任务一般是单原创 2021-08-30 19:45:23 · 551 阅读 · 1 评论 -
23 种设计模式详解
设计模式是对大家实际工作中写的各种代码进行高层次抽象的总结,其中最出名的当属Gang of Four(GoF) 的分类了,他们将设计模式分类为 23 种经典的模式,根据用途我们又可以分为三大类,分别为创建型模式、结构型模式和行为型模式。有一些重要的设计原则在开篇和大家分享下,这些原则将贯通全文: 面向接口编程,而不是面向实现。这个很重要,也是优雅的、可扩展的代码的第一步,这就不需要多说了吧。 职责单一原则。每个类都应该只有一个单一的功能,并且该功能应该由这个类完全封装起来。 ..原创 2021-07-29 19:27:34 · 1256 阅读 · 0 评论 -
RabbitMQ 延迟队列实现定时任务的正确姿势
场景开发中经常需要用到定时任务,对于商城来说,定时任务尤其多,比如优惠券定时过期、订单定时关闭、微信支付2小时未支付关闭订单等等,都需要用到定时任务,但是定时任务本身有一个问题,一般来说我们都是通过定时轮询查询数据库来判断是否有任务需要执行。也就是说不管怎么样,我们需要先查询数据库,而且有些任务对时间准确要求比较高的,需要每秒查询一次,对于系统小倒是无所谓,如果系统本身就大而且数据也多的情况下,这就不大现实了。所以需要其他方式的,当然实现的方式有多种多样的,比如Redis实现定时队列、基于优先级队列原创 2021-06-23 21:12:51 · 223 阅读 · 1 评论 -
Spring IOC容器BeanFactory 和 ApplicationContext
1. 引言Spring框架附带了两个IOC容器–BeanFactory和ApplicationContext.BeanFactory是IOC容器的最基本版本,ApplicationContext扩展了BeanFactory的功能。那么本篇文章中,我们将通过实际例子了解这两个IOC容器之间的显著差异。2. 延迟加载 vs. 预加载BeanFactory 按需加载bean,而 ApplicationContext 则在启动时加载所有bean。因此,BeanFactory与Applicatio...原创 2021-02-08 13:36:07 · 150 阅读 · 0 评论 -
阿里Arthas 在做 Java 应用诊断上应用
早就听闻阿里开源的 Arthas 在做 Java 应用诊断上十分牛逼,身边也有很多同事在使用,因此决定开一个坑,自己从零学习下这个工具的使用,本系列使用的版本是当前最新版 3.4.5。由于 Arthas 经过这么长时间的发展,本身文档、在线教程已经十分健全了,同时还有第三方的 IDEA 插件、许多教学视频去帮助我们入门使用,因此这个系列的文章定位是个人笔记,而并非教程,希望不要误人子弟。概述https://arthas.aliyun.com当你遇到以下类似问题而束手无策时,Arthas可原创 2021-02-08 13:22:02 · 140 阅读 · 0 评论 -
分布式事务解决方案优缺点对比
背景分布式事务是企业集成中的一个技术难点,也是每一个分布式系统架构中都会涉及到的一个东西,特别是在微服务架构中,几乎可以说是无法避免。ACID指数据库事务正确执行的四个基本要素:原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持久性(Durability)CAPCAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容忍性(Partition tolerance)。原创 2020-10-29 15:04:06 · 464 阅读 · 1 评论 -
Redis实现延迟队列
个人博客请访问http://www.x0100.top我们都知道Redis是一种基于内存的单进程单线程数据库(Redis6.0开始之后支持多线程啦!),处理速度都非常快。那么为何Redis又能慢呢?原来,这里说的慢是指Redis可以设置一些参数达到慢处理的结果。(这就是为什么Redis既能快又能慢啦!)那接下来开始讲讲我们的Redis在队列中如何实现延时的情况:在我们日常生活中,我们可以发现: 在淘宝、京东等购物平台上下单,超过一定时间未付款,订单会自动取消...原创 2020-08-31 07:49:30 · 822 阅读 · 0 评论 -
rabbitmq如何保证消息可靠性
个人博客请访问http://www.x0100.top 如何保证消息的可靠性? 消息队列如何进行限流? 如何设置延时队列进行延时消费? 1. ????如何保证消息的可靠性?先来看看我们的万年老图,从图上我们大概可以看出来一个消息会经历四个节点,只有保证这四个节点的可靠性才能保证整个系统的可靠性。 生产者发出后保证到达了MQ。 MQ收到消息保证分发到了消息对应的Exchange。 Exchange分发消息入队之后保证消息...原创 2020-08-31 07:42:32 · 1258 阅读 · 0 评论 -
Java并发编程之LookSupport
个人博客请访问http://www.x0100.topjava.util.concurrent 中源码频繁使用的 LockSupport 来阻塞线程和唤醒线程,如 AQS 的底层实现用到 LockSupport.park()方法和 LockSupport.unpark()方法。LockSupport 到底是什么?同样是阻塞和唤醒线程为什么不用 Object 的 wait()/notify 方法?1. LockSupprot 方法介绍LockSupport 提供 ...原创 2020-07-03 16:21:45 · 497 阅读 · 0 评论 -
Java并发编程之CAS应用
个人博客请访问http://www.x0100.top1. CAS 介绍CAS,Compare And Swap,即比较并交换。Doug lea 大神在同步组件中大量使用 CAS 技术鬼斧神工地实现了 Java 多线程的并发操作。整个 AQS 同步组件、Atomic 原子类操作等等都是以 CAS 实现的。可以说 CAS 是整个 J.U.C 的基石。CAS 比较交换的过程 CAS(V,A,B):V-一个内存地址存放的实际值、A-旧的预期值、B-即将更新的值,当且仅当预期...原创 2020-07-03 15:15:22 · 281 阅读 · 0 评论 -
Java并发编程之线程调度
个人博客请访问http://www.x0100.top1. 优先级每个线程执行时都有一个优先级的属性,优先级高的线程可以获得较多的执行机会,而优先级低的线程则获得较少的执行机会。操作系统采用时分的形式调度运行的线程,操作系统会分出一个个时间片,线程会分配到若干时间片,当线程的时间片用完了就会发生线程调度,并等待着下次分配。线程分配到的时间片多少也就决定了线程使用处理器资源的多少,而线程优先级就是决定线程需要多或者少分配一些处理器资源的线程属性。Thread 类...原创 2020-07-03 14:50:23 · 268 阅读 · 0 评论 -
Java并发编程之线程状态
个人博客请访问http://www.x0100.top1. 创建启动线程两种方法创建和启动线程两种方法:继承 Thread 类、实现 Runable 接口。方法一:继承 Threadpublic class Test { public static void main(String[] args) { MyThread thread = new MyThread(); thread.start(); }}c...原创 2020-07-03 11:20:11 · 591 阅读 · 0 评论 -
Java并发编程之synchronized锁优化
个人博客请访问http://www.x0100.top1. 为什么需要优化?synchronized监视器锁在互斥同步上对性能的影响很大。Java的线程是映射到操作系统原生线程之上的,如果要阻塞或唤醒一个线程就需要操作系统的帮忙,这就要从用户态转换到内核态,状态转换需要花费很多的处理器时间。所以频繁的通过Synchronized实现同步会严重影响到程序效率,这种锁机制也被称为重量级锁,为了减少重量级锁带来的性能开销,JDK对Synchronized进行了种种优化。2...原创 2020-07-03 10:28:56 · 286 阅读 · 0 评论 -
从Jedis看TCP常用的参数设置
个人博客请访问http://www.x0100.top背景由于微服务的兴起,以及公司内部各种服务间的各种调用,最近也遇过几次线上大量TIME_WAIT的问题,虽然知道怎么解决,但也点燃了我对tcp协议重新温习学习的兴趣。从何学习呢?重新看下几百多页的《TCP/IP详解》,那太花时间了,以前页看过一次。不如从一些优秀的开源项目里,看下他们是怎么使用tcp建立连接的?那就从jedis开始吧。????源码分析步骤下载源代码git clone https:/...原创 2020-06-03 09:47:07 · 600 阅读 · 0 评论 -
kafka里的offset管理和Consumer Rebalance
个人博客请访问http://www.x0100.top1、Consumer与Consumer Groupconsumer group是kafka提供的可扩展且具有容错性的消费者机制。组内可以有多个消费者或消费者实例(consumer instance),它们共享一个公共的ID,即group ID。组内的所有消费者协调在一起来消费订阅主题(subscribed topics)的所有分区(partition)。consumer group下可以有一个或多个consu...原创 2020-05-29 15:07:12 · 920 阅读 · 0 评论 -
最新MQ与RabbitMQ面试题
个人博客请访问http://www.x0100.top为什么使用MQ?MQ的优点简答 异步处理 - 相比于传统的串行、并行方式,提高了系统吞吐量。 应用解耦 - 系统间通过消息通信,不用关心其他系统的处理。 流量削锋 - 可以通过消息队列长度控制请求量;可以缓解短时间内的高并发请求。 日志处理 - 解决大量日志传输。 消息通讯 - 消息队列一般都内置了高效的通信机制,因此也可以用在纯的消息通讯。比如实现点对点消息队列,或...原创 2020-05-28 14:55:47 · 369 阅读 · 0 评论 -
Kafka+Flink+Redis架构电商大屏实时计算
个人博客请访问http://www.x0100.top前言实时大屏(real-time dashboard)正在被越来越多的企业采用,用来及时呈现关键的数据指标。并且在实际操作中,肯定也不会仅仅计算一两个维度。由于Flink的“真·流式计算”这一特点,它比Spark Streaming要更适合大屏应用。本文从笔者的实际工作经验抽象出简单的模型,并简要叙述计算流程(当然大部分都是源码)。数据格式与接入简化的子订单消息体如下。{"us...原创 2020-05-18 14:55:37 · 803 阅读 · 0 评论 -
牛人总结6种延时队列实现方法,总有一款能满足你的业务需求
个人博客请访问http://www.x0100.top一、延时队列的应用什么是延时队列?顾名思义:首先它要具有队列的特性,再给它附加一个延迟消费队列消息的功能,也就是说可以指定队列中的消息在哪个时间点被消费。延时队列在项目中的应用还是比较多的,尤其像电商类平台:1、订单成功后,在30分钟内没有支付,自动取消订单2、外卖平台发送订餐通知,下单成功后60s给用户推送短信。3、如果订单一直处于某一个未完结状态时,及时处理关单,并退还库存4、淘宝新建商户一个月内...原创 2020-05-15 14:36:37 · 893 阅读 · 0 评论 -
Kafka知识点大全整理
个人博客请访问http://www.x0100.top一、kafka概述1.1、定义Kakfa是一个分布式的基于发布/订阅模式的消息队列(message queue),主要应用于大数据的实时处理领域1.2、消息队列1.2.1、传统的消息队列&新式的消息队列的模式上面是传统的消息队列,比如一个用户要注册信息,当用户信息写入数据库后,后面还有一些其他...原创 2020-05-07 10:30:24 · 532 阅读 · 0 评论 -
日志采集的几种方式
个人博客请访问http://www.x0100.top由于nginx功能强大,性能突出,越来越多的web应用采用nginx作为http和反向代理的web服务器。而nginx的访问日志不管是做用户行为分析还是安全分析都是非常重要的数据源之一。如何有效便捷的采集nginx的日志进行有效的分析成为大家关注的问题。本文通过几个实例来介绍如何通过filebeat、logstash、rsysl...原创 2020-05-06 15:06:59 · 9995 阅读 · 0 评论 -
以面试的方式了解消息中间件MQ与RabbitMQ
个人博客请访问http://www.x0100.top为什么使用MQ?MQ的优点简答 异步处理 - 相比于传统的串行、并行方式,提高了系统吞吐量。 应用解耦 - 系统间通过消息通信,不用关心其他系统的处理。 流量削锋 - 可以通过消息队列长度控制请求量;可以缓解短时间内的高并发请求。 日志处理 - 解决大量日志传输。 消息通讯 - 消息...原创 2020-04-29 15:11:31 · 289 阅读 · 0 评论 -
Nginx在高并发下的性能优化点
个人博客请访问http://www.x0100.top例如:Nginx 的进程模型本篇,我们则来讲讲Nginx的几种性能优化方式。目录[-]1、Nginx运行工作进程数量Nginx运行工作进程个数一般设置CPU的核心或者核心数x2。如果不了解cpu的核数,可以top命令之后按1看出来,也可以查看/proc/cpuinfo文件 grep ^processor /proc/...原创 2020-04-21 16:54:46 · 285 阅读 · 0 评论 -
主流的扫码登录技术原理
个人博客请访问http://www.x0100.top1、引言扫码登录这个功能,最早应该是微信的PC端开始搞,虽然有点反人类的功能(不扫码也没别的方式登录),但不得不说还是很酷的。下面这张图,不管是IM开发者还是普通用户,应该很熟悉:于是,搞IM产品的老板和产品经理们,从此又多了一个要抛给程序员们的需求——“为什么微信有扫一扫登录,而我们的没有?”。好吧,...原创 2020-04-20 16:33:35 · 644 阅读 · 1 评论 -
Elasticsearch 在互联网公司大量真实的应用案例
个人博客请访问http://www.x0100.top国内现在有大量的公司都在使用 Elasticsearch,包括携程、滴滴、今日头条、饿了么、360安全、小米、vivo等诸多知名公司。除了搜索之外,结合Kibana、Logstash、Beats,Elastic Stack还被广泛运用在大数据近实时分析领域,包括日志分析、指标监控、信息安全等多个领域。它可以帮助你...原创 2020-04-17 16:02:53 · 290 阅读 · 0 评论 -
一口气说出 4种 “附近的人” 实现方式
个人博客请访问http://www.x0100.top引言昨天一位公众号粉丝和我讨论了一道面试题,个人觉得比较有意义,这里整理了一下分享给大家,愿小伙伴们面试路上少踩坑。面试题目比较简单:“让你实现一个附近的人功能,你有什么方案?”,这道题其实主要还是考察大家对于技术的广度,本文介绍几种方案,给大家一点思路,避免在面试过程中语塞而影响面试结果,如有不严谨之处,还望亲人们温...原创 2020-04-17 15:07:47 · 715 阅读 · 0 评论 -
Netflix之第一个Hystrix程序(十三)
个人博客请访问http://www.x0100.topHystrix出现的原因我先展示一个在前面博客里出现过的架构图,如果我的“Eureka客户端(服务调用者)”是用做于限时抢购的,从业务逻辑的判断到操作数据库都需要一定的时间才能完成,在我的一个业务还没处理完成的情况下,这个时候又有新的请求进来了,请求就会被堆积,等待着处理。而对于用户来说,如果你的网站服务等待了半天还没...原创 2020-04-09 14:33:47 · 202 阅读 · 0 评论 -
Nginx 一个牛 X 的功能,流量拷贝!
个人博客请访问http://www.x0100.top1. 需求将生产环境的流量拷贝到预上线环境或测试环境,这样做有很多好处,比如: 可以验证功能是否正常,以及服务的性能; 用真实有效的流量请求去验证,又不用造数据,不影响线上正常访问; 这跟灰度发布还不太一样,镜像流量不会影响真实流量; 可以用来排查线上问题; 重构,假如服务做了...原创 2020-04-09 07:27:24 · 197 阅读 · 0 评论 -
一文讲透单点登录原理与简单实现!
个人博客请访问http://www.x0100.top一、单系统登录机制1、http无状态协议web应用采用browser/server架构,http作为通信协议。http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关联,这个过程用下图说明,三次请求/响应对之间没有任何联系但这也同时意味着,任何用户都能...原创 2020-04-07 22:15:51 · 274 阅读 · 0 评论