- 博客(298)
- 资源 (21)
- 问答 (7)
- 收藏
- 关注
原创 京东App秒级百G日志传输存储架构设计与实战
本文作者:平台业务研发部-武伟峰,数据与智能部-李阳背景在日常工作中,我们通常需要存储一些日志,譬如用户请求的出入参、系统运行时打印的一些info、error之类的日志,从而对系统在运行时出现的问题有排查的依据。日志存储和检索是个很常见且简单的工作,市面也有很多关于日志搜集、存储、检索的框架可供使用。譬如我们只有个位数机器时,可以通过登录服务器,查看log4j之类的框架打印到本地文件的日志。当日志多起来后,可以用elk三剑客处理日志。当日志量进一步增多,我们可以上消息队列,譬如kafka
2021-11-22 11:05:27 4439 4
原创 京东毫秒级热key探测框架设计与实践,已完美支撑618大促
在拥有大量并发用户的系统中,热key一直以来都是一个不可避免的问题。或许是突然某些商品成了爆款,或许是海量用户突然涌入某个店铺,或许是秒杀时瞬间大量开启的爬虫用户, 这些突发的无法预先感知的热key都是系统潜在的巨大风险。风险是什么呢?主要是数据层,其次是服务层。热key对数据层的冲击显而易见,譬如数据存放在redis或者MySQL中,以redis为例,那个未知的热数据会按照hash规则被存在于某个redis分片上,平时使用时都从该分片获取它的数据。由于redis性能还不错,再加上集群模式,每秒我们
2020-06-28 18:38:53 8270 3
原创 任意组合、编排的多线程并发框架,支持任意阻塞、等待、串并行组合,回调、超时、默认值等
并发场景可能存在的需求之——任意编排1 多个执行单元的串行请求2 多个执行单元的并行请求3 阻塞等待,串行的后面跟多个并行4 阻塞等待,多个并行的执行完毕后才执行某个5 串并行相互依赖6 复杂场景并发场景可能存在的需求之——每个执行结果的回调传统的Future、CompleteableFuture一定程度上可以完...
2019-12-25 16:29:53 2623
原创 领域驱动设计(DDD)好书推荐
本书不仅详细讲解了DDD的理论基础,如领域建模、聚合、领域事件、领域服务、限界上下文等,还通过具体的代码实例和项目案例,帮助读者更好地理解这些抽象概念如何在实际开发中落地。在微服务的背景下,越来越多的开发者意识到领域驱动设计的价值,同时微服务的成功也证明了领域驱动设计在解决复杂软件系统设计问题时的有效性。该书全面梳理了DDD的理论体系,深入剖析了DDD的实战细节,旨在帮助开发者快速掌握领域驱动设计的核心思想,并能在实际项目中高效应用。DDD的核心思想是通过创建业务模型,理解并表达领域中的核心业务规则。
2024-12-04 16:50:09 269
原创 Hotkey,某东618用户「丝滑购物」的秘密武器
热key定义(热key危害,可举例吸引眼球的事件);揭秘某东双十一背后的神秘技术—毫秒级热key探测。给出热key定义,并列举列举事件加深印象。只使用它有局限性,如果知道原理那就更好;怎么用导师的开源软件解决热key问题;什么是热key,解决它有什么价值;可以提升你程序的QPS(纵享丝滑)保障业务流程的稳定性(稳如老狗)降低项目硬件的高成本(性能压榨)最后抛出我们有这么一个副本;
2024-11-15 16:33:39 120
原创 录自己一段音频,后续根据文字生成自己音色的音频(java实现)
目前自定义TTS(文字转语音)技术已经比较成熟了,在很多场景都有运用。比较常见的多是一些系统预制好的音色,然后提供文字,即可出来这个音色出来的音频。随着AI技术的不断发展,以及大家对自定义音色的产品诉求有所增加(譬如导航用自己的声音、用女神的声音、录别人一段音然后假装是这个人说话),现在也能比较容易的实现自己录一段音频,然后以此为模板,后续生成该音色的音频,即语音复刻功能。下面我们用java实现一个语音复刻功能,其实比较简单,刻出来的音色也还算可以,听起来和本人相似度8成,好在是免费的。
2024-10-17 10:54:11 882
原创 随机获取某个集合中的某个元素,多次获取时不重复
倘若用random的nextInt方法,当只有两三个元素时,则很可能多次请求返回的都是同一个,体验很差。譬如想随机获取某个集合中的某个数,用户多次请求时尽量不给用户返回重复的数。所以我们应该尽快让多次请求时,返回的不重复。
2024-01-16 17:17:07 797
转载 Java中使用Micrometer来实现监控数据的输出
声明:1.本节以Prometheus作为监控平台来监控,所以Micrometer的实现模块选择的也是Prometheus的2.本节主要展示效果,具体写法请阅读参考文档列出的文章。
2023-11-28 16:03:15 841
原创 中小型公司如何搭建运维平台,rancher、kubersphere、rainbond
很多开发人员应该是了解过运维发布相关的平台或实际操作过应用发布,但又通常不是十分熟悉。在一个初创公司,或者没有成熟的运维发布平台的公司,如果让你来搭建一套发布平台,你应该如何去抉择呢?这里我简单介绍几种。
2023-11-27 16:18:05 1350
原创 springboot2整合nacos云服务,配置基本类型和json类型
nacos springboot2 nacos json类型使用,springboot整合nacos2
2023-09-15 13:32:23 2387
原创 springboot搭建流式响应服务,SSE服务端实现
譬如用户请求一篇长文,在数据库里有很多个段落,我们也不希望一次性全部查询完毕再返回给客户端(耗时太久),而是希望查一段就返回一段,逐次批量返回给客户端。如以上代码,返回的对象是SseEmitter,每次调用emitter.send()方法,客户端就会收到一条消息,即一次响应,响应结束的标志是调用emitter.complete方法。当服务端每次调用emitter.send方法时,客户端的onEvent就会触发一次,同理,onOpen,onClose,onFailure都对应服务端的对应方法调用。
2023-09-04 10:53:39 6965 2
原创 将json字符串从外层到最内层依次连接,平铺成一个List<String>
这样能得到整个json的所有key,如果需要排重,可以用Set。就是将json平铺的功能,如。
2023-03-09 16:09:55 1012 1
原创 java实现简单的字符串解析匹配运算规则引擎
有这样的需求,我有一个map,里面放了一些key-value,自定义了一些规则,如age==24&&name==aom||phone==123456789,希望能有个引擎能判断出这个Map里的值,是否匹配上这个规则,规则里有一些简单的运算,如==、contains等。规则是动态可变的,这样就可以灵活控制命中了规则的数据能进行一些采集。整体比较简单,不支持复杂的(),最好是平铺的一些规则。我做了一个这样简单的工具,目前可以支持。这些常用的一些基本规则。
2023-03-07 18:17:47 919
原创 AbstractProcessor相关的API记录
TreeMaker 里的方法用于构建JCTree某个子类,例:treeMaker.MethodDef(…JCTree的一个子类就是java语法中的一个节点,类、方法、字段等这些都被封装成了一个JCTree子类。Select() 创建域访问/方法访问。Modifiers() 创建访问标志。NewClass() 创建new语句。Assign() 创建赋值语句。Apply() 创建方法调用。Exec() 创建可执行语句。Block() 创建组合语句。
2022-12-22 16:52:19 1002
转载 既然有HTTP协议,为什么还要有RPC
纯裸TCP是能收发数据,但它是个无边界的数据流,上层需要定义消息格式用于定义消息边界。于是就有了各种协议,HTTP和各类RPC协议就是在TCP之上定义的应用层协议。RPC本质上不算是协议,而是一种调用方式,而像gRPC和thrift这样的具体实现,才是协议,它们是实现了RPC调用的协议。目的是希望程序员能像调用本地方法那样去调用远端的服务方法。同时RPC有很多种实现方式,不一定非得基于TCP协议。从发展历史来说,HTTP主要用于b/s架构,而RPC更多用于c/s架构。
2022-09-26 17:20:53 669
转载 Java中的语法树结构
CaseTree 实现了JCStatement,但接口JCCase是继承了Tree。当为 Object o = int.class.toString();下面来看JCNewClass的语法结构,如下截图。实例类与类声明时的两个值不太一样。语法树截取后图如下所示.
2022-09-06 16:42:39 1089
转载 高并发监控[一]:TP90、TP99耗时监控设计与实现
背景性能测试中,我们经常选择TP90、TP95、TP99等指标项作为性能对比的参考水位, 在本文中,我们给出一种计算 TP90、TP95 和 TP99 等水位线的方法,首先我们解释一下TP90、TP95、TP99的含义.TP90: 即 90% 的数据都满足某一条件. TP95: 即 95% 的数据都满足某一条件. TP99: 即 99% 的数据都满足某一条件.我们之所以说其“满足某一条件”,是因为在计算的时候,我们既可以向前计算也可以向后计算,例如:1, 2, 3, …, 98, 99,
2022-04-11 19:13:16 1194 5
原创 关于压缩后字符串写入clickhouse再读取后无法反解压的问题
我们将一个长字符串进行了压缩,采用zstd或者snappy之类的,将字符串压成了byte[],然后将byte[]作为一个属性写入了clickhouse数据库,clickhouse会默认将byte[]转为String进行存储。但是当从数据库读取到该字段,得到一个String类型的值,再用getBytes()方法获取到byte[],再试图用zstd的反解压功能对该byte[]试图还原为压缩前的字符串时,会发现报错,已经无法解压还原了。对应该图的情形,运行会报错那么做了如下修改,设置编码方..
2022-03-15 10:28:49 1650
转载 bytebuf池_Netty默认的Bytebuf是堆内还是堆外?池化or非池化?
开篇Netty的ByteBuf有从不同角度有如下2个分类,4种组合!堆外内存和堆内内存池化和非池化我们在利用Netty做底层通信框架的时候,会默认给我们的到底是哪一种组合了?分析池化分析Netty的Boostrap启动类按照标准模板,通常会添加这个配置option(ChannelOption.ALLOCATOR, ByteBufAllocator.DEFAULT)val serverBootstrap = ServerBootstrap().group(bossGroup,
2022-02-23 10:49:35 1184
转载 netty堆外内存的使用
一、java的堆外内存堆外内存的限额默认与堆内内存(由-XMX 设定)相同,可用 -XX:MaxDirectMemorySize 重新设定1、优缺点优点:(1)可以扩展至更大的内存空间。比如超过1TB甚至比主存还大的空间;(2)理论上能减少GC暂停时间;(3)可以在进程间(系统调用,aio)共享,减少JVM间的对象复制,使得JVM的分割部署更容易实现;(4)它的持久化存储可以支持快速重启,同时还能够在测试环境中重现生产数据(5)堆外内存能减少IO时的内存复制,不需要堆内存Bu
2022-02-23 10:42:17 1799 1
转载 Netty解决粘包和拆包问题的四种方案
在RPC框架中,粘包和拆包问题是必须解决一个问题,因为RPC框架中,各个微服务相互之间都是维系了一个TCP长连接,比如dubbo就是一个全双工的长连接。由于微服务往对方发送信息的时候,所有的请求都是使用的同一个连接,这样就会产生粘包和拆包的问题。本文首先会对粘包和拆包问题进行描述,然后介绍其常用的解决方案,最后会对Netty提供的几种解决方案进行讲解。这里说明一下,由于oschina将“jie ma qi”认定为敏感文字,因而本文统一使用“解码一器”表示该含义1. 粘包和拆包产生粘包...
2022-02-22 16:16:43 1394
转载 工商银行分布式服务C10K场景的解决方案
Dubbo是一款轻量级的开源Java服务框架,是众多企业在建设分布式服务架构时的首选。中国工商银行自2014年开始探索分布式架构转型工作,基于开源Dubbo自主研发建设了分布式服务平台。Dubbo框架在提供方消费方数量较小的服务规模下,运行稳定、性能良好。随着银行业务线上化、多样化、智能化的需求越来越旺盛,在可预见的未来,会出现一个提供方为数千个、甚至上万个消费方提供服务的场景。在如此高负载量下,若服务端程序设计不够良好,网络服务在处理数以万计的客户端连接时、可能会出现效率低下甚至完全瘫痪的情况,即
2022-01-12 16:33:06 630 2
转载 时间轮timewheel算法
时间轮是个不太常见,但在部分场景有较高使用价值的工具。时间轮常用于延时任务,在Netty、akka、Quartz、Zookeeper等高性能组件中都存在时间轮定时器的踪影。
2021-11-18 15:23:46 2414 3
原创 java在filter中修改一个http请求出入参内容
response保存了请求的返回信息,里面有个outputstream,你要返回给页面的流,都在这个地方保存.之前遇到一个问题,想把outputstream修改一下.因为这是个输出流,想要改这个里面的东西不是这么简单的.sun为我们提供了这么一个工具HttpServletResponseWrapper抽象类,利用这个类的子类把servletresponse包装一下,在过滤器中使用,就可以去除response的文件流,对其作出修改.给出一个实现:import javax.servlet.Ser...
2021-08-16 15:41:37 1154
原创 京东app后台多端融合架构代码重构实战
一 简介重构是一个非常常见且古老的课题,涉及重构的文章、书更是不可胜数。但其实做程序做久了就会知道,想把一个复杂的系统做好,尤其是参与人数较多的中大型项目,靠看几本设计模式的书,去试图寻找设计模式的奥秘,其实是不够的。很多时候,看书时觉得很有道理,例子也能理解,但到实际开发时,却无从下手,不知道怎么灵活套用。很多项目,在持续的版本迭代中,还伴随着人员的更替过程,往往为了解决眼前的需求,最常见的就是直接复制类似的逻辑,或者就是在末尾追加逻辑。同时,受限于对老版本的需求理解,很容易出现新需求覆盖老需
2021-08-15 10:02:53 2987 1
原创 java protobuf 服务端接收任意protubuf对象
这个需求还算比较常见的,作为一个统一的服务端项目,有多个其他的服务在往该服务发消息,不同的服务定义的数据对象各不相同,那么如何用一个统一的对象把这些发来的消息都接收下来呢?举例:譬如有10个服务要把自己的出入参发给服务A,服务A用来做出入参日志的记录保存工作,这10个服务都有自己的出入参,对象也各不相同,而且随时有变更的可能。作为服务A肯定是无法把这10个服务的出入参对象都定义出来,然后再做protobuf的解析的。那么就需要一个统一的类对象来接收这么些个不同的对象,本篇就是解决这个问题的。解决方案
2021-08-06 17:58:52 1431
转载 时间轮算法浅析
从定时任务说起自然界中定时任务无处不在,太阳每天东升西落,候鸟的迁徙,树木的年轮,人们每天按时上班,每个月按时发工资、交房租,四季轮换,潮涨潮落,等等,从某种意义上说,都可以认为是定时任务。大概很少有人想过,这些“定时”是怎样做到的。当然,计算机领域的同学们可能对此比较熟悉,毕竟工作中的定时任务也是无处不在的:每天凌晨更新一波数据库,每天9点发一波邮件,每隔10秒钟抢一次火车票。。。至于怎么实现的?很简单啊,操作系统的crontab,spring框架的quartz,实在不行Java自带的Sched
2021-07-21 16:43:48 517 1
原创 京东猎户座发布开源,配置化一键生成cms系统
猎户座核心配置化功能开源啦!在降本提效的大环境下,猎户座系统为了扩展更多应用场景,近期完成了第一阶段的开源工作。此次开源的代码内容涉及两个代码库,内容为CCMS管理系统核心配置化功能以及包含表格列与表单项在内的常用组件。 配置化核心业务逻辑(开源地址) UI实现代码库(开源地址)希望通过开源吸引更多贡献者参与共建,完善对各类表单项、列表项的展示、校验需求的覆盖,促进产品的长期发展。收集Issue以及社区的反馈,不断优化功能的同时全面掌握用户诉求。开源介绍1、简介...
2021-04-16 11:39:37 1117
转载 网络编程入门从未如此简单(二):假如你来设计TCP协议,会怎么做?
本文原题“你管这破玩意儿叫TCP?”,由作者闪客sun发布于“低并发编程”公众号,本次收录时有改动和修订1、引言网络编程能力对于即时通讯技术开发者来说是基本功,而计算机网络又是网络编程的理论根基,因而深刻准确地理解计算机网络知识显然能夯实你的即时通讯应用的实践品质。本文风格类似于52im社区里的《网络编程懒人入门》、《脑残式网络编程入门》两个系列,但通俗又不失内涵,简洁又不简陋,非常适合对计算机网络知识有向往但又有惧怕的网络编程爱好者们阅读,希望能给你带来不一样的网络知识入门视角。本篇将运用通俗
2021-02-23 16:36:11 627
转载 网络编程入门从未如此简单(一):假如你来设计网络,会怎么做?
本文原题“如果让你来设计网络”,有修订和改动,收录已征得作者同意,转载请联系作者。本文已同步发布于52im社区:http://www.52im.net/thread-3330-1-1.html(点击“阅读原文”进入)1、引言网络编程能力对于即时通讯技术开发者来说是基本功,而计算机网络又是网络编程的理论根基,因而深刻准确地理解计算机网络知识显然能夯实你的即时通讯应用的实践品质。本文风格类似于52im社区里的《网络编程懒人入门》、《脑残式网络编程入门》两个系列,但通俗又不失内涵,简洁又不简陋,非常适
2021-02-01 16:30:09 944 2
转载 图解Linux网络包接收过程
转载自:https://mp.weixin.qq.com/s/GoYDsfy9m0wRoXi_NCfCmg因为要对百万、千万、甚至是过亿的用户提供各种网络服务,所以在一线互联网企业里面试和晋升后端开发同学的其中一个重点要求就是要能支撑高并发,要理解性能开销,会进行性能优化。而很多时候,如果你对Linux底层的理解不深的话,遇到很多线上性能瓶颈你会觉得狗拿刺猬,无从下手。我们今天用图解的方式,来深度理解一下在Linux下网络包的接收过程。还是按照惯例来借用一段最简单的代码开始思考。为了简单起见,我们.
2021-01-22 12:11:12 810
转载 漫画 | 花了七天时间测试,我彻底搞明白了 TCP 的这些内存开销!
原创张彦飞allen开发内功修炼实际中 TCP 连接上肯定是要进行数据的收发的,而且还会有 TIME_WAIT 等其它状态。在这些复杂情况下,一条连接占用多大内存呢?飞哥用做了七天的实验结果告诉你!实验1:ESTABLISH空连接实验2:客户端 => 服务器发送数据测试实验3: 服务器 => 客户端发送数据测试实验4:非 ESTABLISH 状态...
2021-01-22 10:55:28 596
转载 IP 基础知识“全家桶”,45 张图一套带走
目录前言正文前菜 —— IP 基本认识网络层与数据链路层有什么关系呢?主菜 —— IP 地址的基础知识IP 地址的分类无分类地址 CIDR公有 IP 地址与私有 IP 地址IP 地址与路由控制IP 分片与重组IPv6 基本认识IPv6 的亮点IPv6 地址的标识方法IPv6 地址的结构IPv6 单播地址类型IPv4 首部与 IPv6 首部点心 —— IP 协议相关技术DNS域名的层级关系域名解析的工作流程ARP那么.
2021-01-05 13:46:31 872
转载 一文讲懂什么是vlan、三层交换机、网关、DNS、子网掩码、MAC地址
很多朋友多次问到什么是网关、dns、子网掩码,三层交换机,它们定位的用途;确实,因为网络技术在弱电中确实应用非常广泛,我们平时在vip技术群中也是不断的讨论到网关、vlan、三层交换机或子网掩码等问题,今天我们就一起用通俗方式一次性了解清楚。一、什么是vlan?VLAN中文是“虚拟局域网”。LAN可以是由少数几台家用计算机构成的网络,也可以是数以百计的计算机构成的企业网络。VLAN所指的LAN特指使用路由器分割的网络——也就是广播域。听上面的概念,肯定有不少朋友是一头雾水的,什么是虚拟局域网?好
2020-12-31 10:24:55 708 1
原创 Java netty获取堆外内存占用
在使用了netty的系统中,有时会出现内存泄露的问题,我们就需要去监控这个堆外内存的占用,以排查是否是堆外泄露,下面的代码就是查看堆外内存的。可以写个定时任务,持续调用doReport方法来获取堆外内存。netty版本需要4.1以上import io.netty.util.internal.PlatformDependent;import org.springframework.stereotype.Component;import org.springframework.util.Refl
2020-10-20 09:57:05 2103 3
转载 蚂蚁集团网络通信框架 SOFABolt 功能介绍及协议框架解析 | 开源
大家好,我是本期 SOFAChannel 的分享讲师丞一,来自蚂蚁集团,是 SOFABolt 的开源负责人。今天我们来聊一下蚂蚁集团开源的网络通信框架 SOFABolt 的框架解析以及功能介绍。本期分享将从以下四个方面展开:SOFABolt 简介; 基础通信能力解析; 协议框架解析; 私有协议实现解析;SOFABolt 是什么SOFABolt 产生背景相信大家都知道 SOFAStack,SOFAStack(Scalable Open Financial Architecture St..
2020-09-22 10:03:17 1197
转载 tcp socket的发送与接收缓冲区
1) 应用程序可通过调用send(write, sendmsg等)利用tcp socket向网络发送应用数据,而tcp/ip协议栈再通过网络设备接口把已经组织成struct sk_buff的应用数据(tcp数据报)真正发送到网络上,由于应用程序调用send的速度跟网络介质发送数据的速度存在差异,所以,一部分应用数据被组织成tcp数据报之后,会缓存在tcp socket的发送缓存队列中,等待网络空闲时再发送出去。同时,tcp协议要求对端在收到tcp数据报后,要对其序号进行ACK,只有当收到一个tcp 数据报的
2020-09-09 19:15:20 3743 1
原创 京东开源热key探测(JD-hotkey)中间件单机qps 提升17倍实战
京东hotkey框架(JD-hotkey)是京东app后台研发的一款高性能热数据探测中间件,用来实时探测出系统的热数据,并将热数据毫秒内推送至系统的业务集群服务器的JVM内存。以下统称为"热key"。该框架主要用于对任意突发性的无法预先感知的热key,包括并不限于热点数据(如突发大量请求同一个商品)、热用户(如恶意爬虫刷子)、热接口(突发海量请求同一个接口)等,进行毫秒级精准探测到。然后对这些热key,推送到所有服务端JVM内存中,以大幅减轻对后端数据存储层的冲击,并可以由使用者决定如何分配、使用这些热
2020-09-01 18:15:57 3692
转载 Netty系列之Netty百万级推送服务设计要点
原文来自于:李林峰https://www.infoq.cn/article/netty-million-level-push-service-design-points/1. 背景1.1. 话题来源最近很多从事移动互联网和物联网开发的同学给我发邮件或者微博私信我,咨询推送服务相关的问题。问题五花八门,在帮助大家答疑解惑的过程中,我也对问题进行了总结,大概可以归纳为如下几类:Netty 是否可以做推送服务器? 如果使用 Netty 开发推送服务,一个服务器最多可以支撑多少个客户端?..
2020-08-10 19:25:35 1729 1
java反编译工具jad
2012-11-10
音乐播放器java制作
2012-11-07
ElasticSearch怎么做查询某个字段大于某个值的查询
2017-09-20
问一个使用hibernate对表排序的问题
2016-10-25
javaweb大神请进,如何在struts的一个action里处理多个数据操作逻辑
2016-07-15
求一个富文本编辑器,生成的网页能在手机上适配。不需要在电脑上适配
2016-06-08
服务器上tomcat需要更新程序时,大家是怎么办的,直接关闭tomcat重启吗?
2016-04-27
TA创建的收藏夹 TA关注的收藏夹
TA关注的人