- 博客(50)
- 资源 (11)
- 收藏
- 关注
原创 从源码看Kafka的日志及索引的实现原理
近期对Kafka源码进行了学习,对Kafka的日志模块有了更深入的了解,日志模块是Kafka最重要的模块之一,是其实现高性能消息处理的基础。因此对这部分内容进行了整理,在此做一个分享,主要包括日志和索引的结构,消息格式,以及核心的读、写逻辑。基于Kafka官方代码仓库3.0版本分支:https://github.com/apache/kafka/tree/3.0日志结构在Kafka服务端,一个分区副本对应一个日志(Log),一个日志会分配成多个日志分段(LogSegment),Log在物
2021-12-08 08:00:00 1134 7
原创 TransmittableThreadLocal(TTL)实现线程变量传递的原理分析
TransmittableThreadLocal(TTL)是阿里开源的,用于解决异步执行时上下文传递的问题的组件,在InheritableThreadLocal基础上,实现了线程复用场景下的线程变量传递功能。TTL做的实际上就是将原本与Thread绑定的线程变量,缓存一份到TtlRunnable对象中,在执行子线程任务前,将对象中缓存的变量值设置到子线程的ThreadLocal中以供run()方法的代码使用,然后执行完后,又恢复现场,保证不会对复用线程产生影响。
2020-08-07 12:20:33 17638 4
原创 初窥Sentinel集群流控:从源码分析到效果测试
Sentinel从1.4.0 开始引入了集群流控模块,用于控制应用集群内某个 API 的总 QPS 。在Sentinel集群流控中,主要有两种身份:Token Client和Token Server,实现集群流控的流程就是应用实例(Token Client)向Token Server请求令牌,TokenServer根据集群流控规则来控制总体的QPS。待解决的问题:1. 通过Nacos流控规则配置不直观2. SentinelCluster无官方高可用方案
2020-07-31 10:29:06 5151
原创 初探Pinpoint Agent 启动源码
Pinpoint通过字节码增强技术来实现无侵入式的调用链采集。其核心实现是基于JVM的Java Agent机制。我们使用Pinpoint时,需要在Java应用启动参数上加上-javaagent:$AGENT_PATH/pinpoint-bootstrap-$VERSION.jar参数,这样,当我们的Java应用启动时,会同时启动Agent。Pinpoint Agent在启动的时候,会加载plugin文件夹下所有的插件,这些插件会对特定class类修改字节码,在一些指定的方法调用前后加上链路采集逻辑
2020-05-30 19:21:19 2519
原创 Sentinel指标数据传输过程简述:从流量控制到控制台实时展示
一个应用如果要接入Dashboard并与之通信则需要引入transport组件(sentinel-transport-netty-http)接入Sentinel后,资源请求的相关指标(qps、通过请求数、拒绝请求数等)会以内存和日志文件两种形式存储下来...整个Sentinel客户端(应用)与控制台之间传输监控数据的流程就总结一下,就是两部分内容:1.应用产生并缓存监控数据,上报心跳到Dashboard,并提供http接口2.Dashboard轮询应用接口,保存监控数据,展示到前端界面
2020-03-01 10:02:34 4226
原创 Sentinel流控功能核心源码浅析
Sentinel是阿里开源的一个面向分布式服务架构的轻量级高可用流量控制组件。本文主要通过对源码加以注释的方式,来简单的讲解Sentinel的代码逻辑,目的在于梳理其核心的功能代码结构,便于后续对相关问题的解决处理,也希望通过阅读源码来加强编码技能。由于整个Sentinel开源项目下的子项目众多,这里我们仅针对实现核心流控功能的sentinel-core项目来分析。
2020-02-22 10:08:22 6845 1
原创 采集Hystrix线程池指标并使用influxDB+Grafana实时监控(HystrixDashboard升级方案)
我们的网关采用了Hystrix来发送http请求,在分析HystrixDashboard的数据采集过程后决定自己来实现一套Hystrix指标监控系统。其实通过InfluxDB+Grafana监控服务器指标或Jvm指标等通用指标数据的教程有很多,这里主要是帮助大家如何通过InfluxDB的java客户端来上报自定义的指标数据,可以是文中的Hystrix的线程执行指标,也可以是各类业务指标。总之,最终目的就是希望通过可视化的界面,来快速掌握分析应用的运行状况,来进行实时监控乃至后续的优化。
2019-05-25 18:47:17 2648 2
原创 HystrixDashboard数据从何而来:HystrixMetrics指标采集源码解读
使用hystrix dashboard和turbine来查看hystrix指标数据...分析HystrixDashboard中的数据是怎么产生、流转最后展示到界面上的...每次创建一个HystrixCommand,其属性都会被保存至HystrixCommandMetrics的静态变量中,并在hystrix.stream的请求到来时,返回并展示到dashBoard......
2019-04-19 08:18:05 3574
原创 记录一次生产环境下的jvm内存泄露问题和分析解决过程
发现异常首先通过我们内部搭建的日志平台发现我们线上环境一个java应用有大量的http接口请求超时,登录linux服务器查看网络环境没有问题,判断是应用自身运行异常,重启应用后发现异常还在,开始查找问题。初步查找问题通过指令:jstat -gcutil查看jvm内存占用和gc情况: 发现老年代内存占用比例过高,并且每次fullGC后并没有有效回收。老年代内存占用百分比变化...
2018-11-27 15:50:34 4868
原创 《代码整洁之道-程序员的职业素养》读书笔记
如何成为一个专业的程序员?作者在书中介绍了真实软件技艺中的各项原则、技术、工具和实践,展示了怎么以良好的心态进行软件开发,怎么取得卓越表现和丰硕成果,怎么做到有效沟通和确切估算,怎么以坦诚的心态面对困难,并引导读者认识到专业程序员肩负的责任重大,阐述了什么才是程序员的职业素养。本书是作者四十余年开发经验的传承,作者以自己职业生涯中层翻下的各种错误和不堪往事为载体,现身说法。
2021-08-11 11:19:54 290
原创 单元测试新手上路——个人实践总结
软件要易于修改:最近在看一本书《代码整洁之道:程序员的职业素养》,这本书里面说到,代码设计要遵循一个重要的原则-易于修改,并且要实现这个目标就应该经常修改它,而不是等到大量积累了臃肿代码之后再进行深度重构。 一套完善的测试用例是修改代码的安全保障:而如何保证在频繁修改优化代码之后,不影响其原本的功能呢?那就是要编写一套完善的测试用例,能覆盖到所有的链路场景,通过测试用例的执行结果来确保代码修改的正确性。<br />特别是我们做金融场景业务的开发,尤其要注意代码的正确性、安全性,那么写好单测是不可或缺的
2021-07-26 12:36:38 401
原创 Pinpoint关闭指定Plugin
Pinpoint默认加载全部Plugin,对相应的类进行增强。通过在resources目录下新增一个pinpoint.config文件,并配置profiler.plugin.disable=XxxPlugin即可完成对特定Plugin进行禁用。此配置在源码中是由DefaultProfilerConfig类加载,并在DefaultProfilerPluginContextLoader加载Plugin时应用
2020-12-22 16:20:21 1301 1
原创 IDEA升级至2020.2.x出现的部分问题解决(mac系统)
IDEA升级至2020.2.x出现的部分问题解决(mac系统):(1)复制过来的空格,显示为NBSP;(2)2020.1.4之后,移除了IDE界面字体渲染中 Subpixel的选项,只能选Greyscale,导致界面与Editor的字体渲染不一致,尤其是在外接显示器上,显得字体很细。
2020-12-08 17:16:46 2358 2
原创 Java开发避坑指南 - 常见易错点总结
业务开发中的细节问题非常多,每个开发者都或多或少踩过坑。有些细节问题,可能只会在某些特定情况下(比如高并发、多线程)出现,一经出现便会成为重大的生产事故;有些细节问题,可能暂时只会影响程序运行的性能,在量变到质变的瞬间爆发;还有些细节问题,比如所谓的服务器不稳定问题,或许运维同学改改配置、时不时重启下系统也能解决,但没从代码层面解决,就意味着程序里始终有一颗定时炸弹。其实,我们不是不重视这些细节,更不是不想从根儿上解决问题,只是不知道问题到底出在了哪里。而要做好这些细节、避开这些坑,第一步就得知道它
2020-10-24 09:58:45 2231
原创 一个简单的Quarkus CRUD入门
Quarkus是一个由Red Hat开源的 Java 微服务框架,根据2020年8月18日发布的《 2020 年微服务领域开源数字化报告》,Quarkus 作为云原生微服务框架,在微服务框架中活跃度排名第一,全球 GitHub 开源项目活跃度中排名 40,也具有着巨大的影响力。前面已经简单尝试过web服务构建,现在来试试实现CRUD数据操作。
2020-09-04 11:02:46 2657 2
原创 Quarkus整合Hibernate ORM下实现自定义命名策略(表、字段命名映射)
表和字段的命名都是使用蛇形(下划线)命名法,Java实体类设计时使用驼峰命名法,存在一个映射的过程,有两种解决办法:1. 显式声明实体属性对应的字段名2. 通过命名策略来实现自动映射属性较多时,通过注解显式声明比较麻烦,最好能自动映射,在spring-data整合的Hibernate实现中,Spring提供了默认从驼峰到蛇形命名的映射,但Quarkus和Hibernate本身并没有提供这种映射策略,因此需要自己实现PhysicalNamingStrategy
2020-09-03 18:31:54 2377
原创 一个简单的Quarkus web服务入门
Quarkus是一个由Red Hat开源的 Java 微服务框架,根据2020年8月18日发布的《 2020 年微服务领域开源数字化报告》,Quarkus 作为云原生微服务框架,在微服务框架中活跃度排名第一,全球 GitHub 开源项目活跃度中排名 40,也具有着巨大的影响力。虽然目前SpringBoot拥有着几乎不可动摇的地位,但对于其他的微服务框架,还是可以了解下的,下面就来看下如何使用Quarkus来构建一个web服务吧。
2020-08-28 17:52:28 4032
原创 Caffeine/Guava性能对比测试
项目中使用Guava作为内存缓存,最近需要替换为Caffeine,网上有很多性能测试的文章,但基本都是引用的官方测试结果和图片,因此尝试自己来测试一下,对比Caffeine和Guava的性能差别,下面是测试过程:......
2020-08-18 12:15:53 3320 2
原创 Dubbo从2.5.3升级到2.7.7记录(避免Dubbo远程代码执行漏洞)
近日 Dubbo 官方报告了一个 Dubbo 远程代码执行问题(CVE-2020-1948),该问题由 Provider 反序列化漏洞引起。根据介绍,攻击者可以使用无法识别的服务名称或方法名称,并带上一些恶意参数有效载荷发送 RPC 请求。当恶意参数反序列化后,将执行一些恶意代码。我们之前是使用的2.5.3版本的dubbo,这次需要升级到2.7.7以避免该漏洞,而由于dubbo 在2.6.x之后就托管到Apache了,其包名都替换了,很多地方需要修改。
2020-07-05 17:31:29 5112 1
原创 手把手教你自定义一个Druid Filter记录sql,并结合Nacos实现动态开关和判断阈值调整
基于springboot、mybatis、nacos;Durid是一款应用比较广泛的数据库连接池,其性能优越、监控机制强大,并且还支持通过filter的机制进行扩展。Druid自带一个StatFilter可以进行慢sql记录,但是有两个缺点:1.此Filter打印日志为ERROR级别,当系统监控ERROR日志时可能会频繁触发告警,2.判断阈值只能在配置文件中进行设置,不支持动态调整,因此尝试使用一个自定义的Filter来打印日志,并实现动态开关及阈值调整。
2020-06-29 09:55:39 6073
原创 阿里开源Sentinel流控框架基本介绍与简单使用
1. Sentinel 是什么?Sentinel是去年7月由阿里中间件团队开源的,面向分布式服务架构的轻量级高可用流量控制组件。随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。(引自[官方文档])2. 主要优势和特性轻量级,核心库无多余依赖,性能损耗小。方便接入,开源生态广泛。丰富的流量控制场景。易用的控制台,提供实时监控、机器发现、规则管理等能力完善的扩展性设计,提供多样化的 SPI接口
2019-12-27 11:50:15 3438
原创 程序化广告(6):相关技术
(一)RTB竞价逻辑1、竞价逻辑- 说明: - 竞价请求一般会携带的信息:时间、请求识别号、IP地址、网页URL、广告位信息... - 广告投放管理平台:广告主在广告投放管理平台设置投放时间、预算、地区定向、用户属性等投放策略 - 算法引擎:主要的决策部分,主要围绕投放需求、媒体质量、人群属性、创意内容、用户场景...2、AdX/SSP竞价结算规则 广义第二价格(Generalized Second Price,简称GSP),即出价最高的赢得竞价,用比出价第二高多0.01元的价格进行结算
2019-11-20 13:40:58 3429 1
原创 程序化广告(5):广告投放
(一)投放计划1、供应商入库部分品牌广告主会要求合作伙伴先进行入库申请流程,符合一定标准的供应商才有资格入库。主要关注指标有:公司情况、媒体资源、技术能力、数据实力、算法能力、服务能力、收费模式2、比稿...(二)广告策划/提案广告提案(proposal):广告公司通过PPT或者其他表现方式向广告客户描述广告投放解决方案的报告,目的在于获取客户的认可和支持,赢得客户的广告投放预算。广告提案重点要分析广告投放目标和KPI需求。以人为中心,根据品牌信息找准TA(目标受众),围绕用户旅程(user
2019-11-14 10:32:34 4834 1
原创 程序化广告(4):考核指标
(一)广告效果的定义- 狭义:通过广告传播带来的直接经济效益,即提升直接转化(如产品销售),如游戏行业比较关心的数据有点击、注册、下载用户数及相应的获客成本等。- 广义:通过广告传播影响受众的认知、心理、行为和态度,由此带来的直接或间接广告效益的总和。这个定义比较接近“品效合一”的概念,直接广告效益可以理解成转化效果,间接广告效益可以理解成品牌知晓度、美誉度、忠诚度等。- 程序化广告的KPI评估主要围绕广告效果、成本收益和投放保障三大方面。......
2019-11-11 10:00:25 2322
原创 程序化广告(3):交易模式
(一)交易模式种类1、RTB实时竞价(Real-Time Bidding)广告主可以在RTB交易市场自由挑选媒体资源,竞价购买目标人群。媒体可以接入RTB交易市场,获取更多广告主,迅速实现流量的变现。 公开竞价(Open Auction,Open RTB):广告主可以在公开交易市场进行实时竞价购买2、程序化直接交易(Programmatic Direct) 1. 首选交易(Preferred Deals) 2. 程序化保量3、头部竞价(Header Bidding)
2019-11-06 19:15:06 3228
原创 程序化广告(2):程序化广告的参与者
(一)需求方需求方即广告主(Advertiser),是购买流量进行广告投放的最终需求方。需求方也可以是代理商(Agency),即广告主的业务代理人,负责对接广告主需求,并代表广告主寻找媒体渠道进行合作。(二)需求方服务需求方平台(Demand-Side Platform,简称DSP)DSP为需求方(即广告主或代理商)提供实时竞价投放平台。需求方可以在平台上管理广告活动及其投放策略,包括设置目标受众的定向条件、预算、出价、创意等。DSP通过技术和算法自动优化投放效果并提供数据报告。......
2019-10-29 14:18:07 2921
原创 程序化广告(1):程序化广告概述
(一)互联网展示广告发展史启蒙时代:1993~1996GNN出售第一个可点击的Banner广告宣告互联网广告的诞生美国成立世界上最早、规模最大的Ad Network(广告网盟)平台Double Click...(二)程序化广告程序化广告的定义:以人为本的精准广告定向;媒体资源的自动化、数字化售卖与采购。程序化广告的价值与传统广告的区别...
2019-10-29 14:15:10 3797 2
原创 关于Hystrix超时机制和线程状态的测试观察和个人理解
我们有个项目中是手动创建HystrixCommand来包裹RestTemplate发起请求的。但是在服务运行过程中,发现一个情况,就是当HystrixCommand超时返回fallback结果后,RestTemplate请求过程还没有结束,导致线程池占用较多。HystrixCommand执行过程中,有两个线程,一个是HystrixCommand任务执行线程,一个是等着给HystrixCommand判定超时的线程(HystrixTimer)。当其中一个线程完成自己的逻辑时,会尝试将HystrixComman
2019-09-04 17:29:47 2278
原创 Undertow容器获取端口号的方法
Undertow是红帽公司开发的一款基于 NIO 的高性能 Web 嵌入式服务器。springboot也将Undertow作为可选的内嵌容器,为其提供支持。作为公司的中间支撑团队,我们为其他团队提供了一些通用功能的jar包,比如统一的日志采集和jvm指标监控等,其中有一些需要获取到java应用的端口。而最近有一个业务团队将springboot中的容器换成了undertow,原本的获取端口的工...
2019-08-19 09:40:29 2971
原创 Kafka核心设计与实践原理总结:进阶篇
kafka作为当前热门的分布式消息队列,具有高性能、持久化、多副本备份、横向扩展能力。我学习了《深入理解Kafka:核心设计与实践原理总结》一书后,对其中主要的知识点进行了总结,便于理解和掌握kafka的原理和应用。在这里分享出来,希望也能帮助到大家。总结的知识点分为两部分:基础篇:基本概念、生产者和消费者的使用和原理,以及主题和分区的管理...进阶篇:深入解析kafka服务端(broker)、客户端的进阶原理(包括重分配、事务等)、kafka的高级应用...
2019-08-01 16:11:40 2138
原创 Kafka核心设计与实践原理总结:基础篇
kafka作为当前热门的分布式消息队列,具有高性能、持久化、多副本备份、横向扩展能力。我学习了《深入理解Kafka:核心设计与实践原理总结》一书后,对其中主要的知识点进行了总结,便于理解和掌握kafka的原理和应用。在这里分享出来,希望也能帮助到大家。总结的知识点分为两部分:基础篇:基本概念、生产者和消费者的使用和原理,以及主题和分区的管理...进阶篇:深入解析kafka服务端(broker)、客户端的进阶原理(包括重分配、事务等)、kafka的高级应用...
2019-07-23 13:15:15 2041
原创 快速上手jvm调优:GC调优思路及参数设置
作为Java语言的核心之一,JVM垃圾回收帮我们解决了让我们很头疼的垃圾回收问题。我们依然会遇到内存泄露问题,如果我们想提高我们程序的稳定性和其他性能我们能从什么地方下手?相信这些问题是我们程序过程中不可逾越的。了解GC调优相关知识,对于程序性能的优化和提升还是很有必要的。本文介绍了垃圾回收器的选择、GC基础调优,以及Parallel GC,CMS,G1这三种垃圾回收器做了针对性的说明。
2019-07-06 22:05:52 2468
原创 两行代码获取java程序实时内存指标数据——内存管理MXBean使用简介
作为一个java后端开发,关注线上java程序的运行指标数据是非常重要的。我们会对运行在jvm上的程序的cpu、内存、GC等数据进行实时采集和监控。而JDK提供了一些JVM检测的API,这就是有名的java.lang.management 包,包里提供了许多MXBean的接口类,可以很方便的获取到JVM的内存、GC、线程、锁、class、甚至操作系统层面的各种信息。
2019-06-23 00:34:44 7812
原创 一篇文章带你构建"分布式架构"知识图谱——极客时间《左耳听风》分布式系列专题总结
最近几年,我们一直在谈论各式各样的架构,如高并发架构、异地多活架构、容器化架构、微服务架构、高可用架构、弹性化架构等。我在极客时间上我订阅了陈皓开设的《左耳听风》专栏,其中有针对分布式架构的一系列文章,这里对主要的知识点进行简单的总结,作为学习分布式架构的纲要。分布式系统架构的冰与火;分布式系统的难点;分布式系统的技术栈;分布式系统关键技术:全栈监控;分布式系统关键技术:服务调度;分布式系统关键技术:流量与数据调度;洞悉PaaS平台的本质
2019-06-14 17:54:33 1900
原创 JMC(Java Mission Control)在mac下无法启动和显示界面
JMC(Java Mission Control)在mac下无法启动和显示界面,只显示了按钮。这个问题是由于Eclipse/SWT老版本的bug导致的,可以通过替换相关jar解决。bug reference: JMC-5139
2019-05-10 10:36:18 9463 12
原创 Sharding-jdbc设置defaultDatasource无效问题解决和源码分析思路
概要:sharding-jdbc中设置defaultDataSourcceName要配合setBindingTableGroups使用,否则默认数据源的配置无效。背景:使用sharding-jdbc进行分库分表的开发过程中,我们使用了3个数据源...在对sharding-jdbc源码进行debug分析后,发现只配置defaultDataSourcceName是不会生效的,必须要配置bindingTableGroups,将所有需要按默认规则路由的表配置进去,这里官方文档有点坑,并没有说明这两个配置...
2019-04-25 08:56:36 15788 7
原创 Sharding-jdbc分库分表入门实例
业务背景:由于公司的用户表中保存接近1亿行数据(单表),担心可能很快会单库的性能瓶颈,所以准备做水平分表分片方案设计:用户表主要以userid(long)为逻辑主键进行查询,因此准备以userid取模分为32张分表,分别存放于4个分库github完整示例代码springboot starter快速整合application.yml分片规则算法配置
2019-04-04 18:30:42 2261
原创 SpringCloud整合NacosConfig异常:create config service error! (NacosException: null)
在使用nacos作为配置中心整合springcloud时,项目启动会报错,导致nacos的配置功能无法启用:异常信息:2019-03-13 19:32:07.019 ERROR 19543 --- [ main] o.s.c.a.nacos.NacosConfigProperties : create config service error!propert...
2019-03-14 10:23:01 56628 20
原创 Nacos快速入门(4):整合SpringCloud实现配置管理和服务发现
系列文章目录Nacos快速入门(1):启动Nacos ServerNacos快速入门(2):整合SpringNacos快速入门(3):整合SpringBootNacos快速入门(4):整合SpringCloudNacos整合示例完整代码地址:https://github.com/mrKyleWang/nacos_demo一、springcloud应用接入Nacos启动Nacos...
2019-03-14 09:55:46 15170
原创 Nacos快速入门(3):整合SpringBoot实现配置管理和服务发现
Nacos整合示例完整代码地址:https://github.com/mrKyleWang/nacos_demoNacos快速入门(1):启动Nacos ServerNacos快速入门(2):整合SpringNacos快速入门(3):整合SpringBootNacos快速入门(3):整合SpringCloud(暂无)一、springboot应用接入Nacos启动Nacos Ser...
2019-03-04 23:49:40 16902 34
nacos-1.3.1.tar.gz
2020-07-28
nacos-1.3.0.tar.gz
2020-07-28
奔跑吧,程序员:从零开始打造产品、技术和团队.pdf
2019-06-28
《深入理解Kafka:核心设计与实践原理》.pdf.zip
2019-06-28
企业IT架构转型之道:阿里巴巴中台战略思想与架构实战.pdf
2019-05-15
Java性能权威指南(高清+目录)
2019-04-23
图解Java多线程设计模式-[日]结城浩 (高清+完整目录)
2019-04-23
深入拆解java虚拟机-极客时间 (带目录)
2019-03-21
Go语言实战(非扫描高清带目录)
2019-03-18
Kafka权威指南(高清带目录)
2019-03-18
程序员的数学_3_线性代数.pdf
2019-02-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人