- 博客(412)
- 资源 (8)
- 问答 (1)
- 收藏
- 关注
原创 微服务架构深度解析与最佳实践(全篇汇总,2.4万字)
微服务架构的概念,现在对于大家应该都不陌生,无论使用 Apache Dubbo、还是 Spring Cloud,都可以去尝试微服务,把复杂而庞大的业务系统拆分成一些更小粒度且独立部署的 Rest 服务。但是这个过程,具体应该怎么做?现有的条件下到底要不要做微服务?服务拆分成什么粒度才是合适的?遗留的老系统需要如何考虑重构改造?有哪些坑需要我们注意?系统怎么在分布式服务下实现数据的一致性和...
2020-04-26 19:11:48 3379
原创 百亿流量微服务网关的设计与实现
目录API网关概述1. 什么是API网关(API Gateway)2. 分布式服务架构、微服务架构与API网关3. API网关的技术趋势API网关的定义、职能与关注点1. API网关的定义2. API网关的职能3. API网关的关注点API网关的分类与技术分析1. API网关的分类2. 流量网关与WAF3. 业务网关开源网关的分析与调研1. ...
2020-04-13 15:20:48 1992
原创 讨论:无法访问不同网段的Kafka问题
X同学:A网段的机器,访问B网段部署的Kafka集群,中间做了网络映射,映射成A网段可以访问的IP地址,A网段程序里配置bootstrap.servers就是这些可以访问的地址。然后我们发现B在一个集群里,还有一个节点C IP为10.1.2.103,A请求B后,会拿到这个C的信息,也就是10.1.2.103,然后发起访问。这时候我们会发现A是无法访问C的,而且上面的办法也不能对C来使用,因为C的IP地址是B给的。这个问题的本质是,redis/kafka 集群不是被设计成跨不同的网络访问区来使用的。
2024-09-09 17:07:50 390
原创 关于群里读书的讨论2024-09-08
现在,我是特为来告诉你,对我来说,我觉得现在你比年轻的时候更美,那时你是年轻女人,与你那时的面貌相比,我更爱你现在备受摧残的面容。许三观用自己的血获取赖以生存的资源,而我们用自己的青春,时间,健康和快乐交换金钱,许三观卖血后用黄酒和猪肝补偿自己,而我们购买护肤品,衣服,包,游戏机等等慰藉辛苦工作的自己,我们都是许三观,只是我们今天卖的不是血而已。KK:余华有一种把超过我们想象中的苦难,揉碎了,把细节一点点展现 给我们看的残忍,而从作者叙事的视角,又是非常的冷酷平静的。喜剧的内核是悲剧,这句话是陈佩斯说的。
2024-09-09 16:59:10 199
原创 关于群里读研的讨论2024-09-09
读研究生的痛苦就在于,已经年纪不小了,还在读书,工作的同学都已经有收入了,自己还是穷的要死,在学校里所有的事儿都很简单,慢慢的会意识到学校的很多东西并没有什么用处,研究生毕业并不比本科毕业进入职场有多大优势。可乐:大家好,我有个朋友在读学硕,她老师前两年让她干特别多的活,她感觉这些没什么帮助,也不知道怎么去推掉,想问问怎么去处理和导师之间的关系呢。先跟着老师干,就可以了。可乐:老师,我觉得大概率是吐槽[让我看看],毕竟都干了两年多了,还有一年毕业了,要想解决早就解决了。KK:那你提供情绪价值就好了。
2024-09-09 16:56:12 62
原创 Spring Native提升Java应用百倍启动速度
找一台Linux机器(比如Ubuntu/RedHat/CentOS),这里用了一台腾讯云的CentOS,然后安装git/OpenJDK11/maven/docker这几个软件。接着设置JAVA_HOME和M2_HOME,并加入到PATH变量,然后下载编译native代码。可以看到,启动原生应用程序,只用了0.022s,比之前的方式快了146倍。可以看到启动花了3.219s。然后可以浏览器或者命令行访问。效果跟上面使用JVM运行相同。
2024-09-04 23:47:20 715
原创 谈谈AI领域的认知误区、机会点与面临的挑战
最近2年,AI 技术的火爆,到处都能看到大家在讨论AI 的发展与机会。这里我们讨论一下AI 认知的误区,机会点和面临的挑战。 by kimmking
2024-09-04 22:55:04 1073
原创 Spring Cloud各个微服务之间为什么要用http交互?难道不慢吗?
但是反过来,1s序列化20万次,跟1s序列化22万次,虽然性能相差了10%,但是我们一次RCP请求里,相对于几ms的网络,几ms的数据库处理,10-200ms这个区间的RT来看,HTTP和JSON序列化的这点性能损失,在99%的场景下可以直接作为误差忽略掉。拿通信协议来说,HTTP肯定比TCP慢,HTTP协议本身有一个变长的头,TCP不需要这个东西,但是反过来,HTTP这个头可以用来做很多扩展性的东西,用TCP就需要一些自己定义一个类似的头,这么来看,TCP的复杂度就上升了。
2024-09-03 01:50:08 475
原创 如何评价MyBatis-Plus?
想想看,国内一般公司,一个人天卖2000左右,tw要卖5-6000,那么怎么着也需要证明我tw的人,跟一般公司的人,要更nb,更有价值。单独写CRUD,大家既然拉不开差距,那么我说我的人都是专家,都会DDD,都会测试驱动开发,,,所以我卖得贵呀。因为包装一下,能把乙方的人天,卖更多钱,这样才有大把的利润。补充1:做小项目,业务也不复杂,交付了就成,怎么快怎么搞。这里改一下,如无需要,勿啥几把增方法论,或者ORM框架。至于后续的维护,功能的增加和变更,商务来聊二期好了。很多项目并不是需要这些东西的,硬上。
2024-09-02 13:50:41 326
原创 程序员为啥突然会变成这么辣鸡的一个行业?
但是后来,我慢慢发现,我实际的行业,并不是IT软件行业,而是金融/金融IT行业,电商/电商IT行业,数字货币行业。记得刚踏出学校,开始工作的时候,作为一个软件行业的从业者,我一直都在考虑,如何精进自己的技术,去研究一些底层的技术,哪怕工作中根本用不到这些东西。就是有一定专业技能,像是几百年前的木匠,铁匠,皮匠,比一般的农业劳动者,能生活的好一些,体面一些,饿不死,温饱线以上。甚至更进一步实现业务技术融合,因为在我心目中,我所属的行业是IT行业,技术是才是IT行业的根本,其他的业务,都是增删改查,有手就行。
2024-09-02 13:48:31 948
原创 说一说业务架构和应用架构
所以,后面又引入了一些DDD之类的方法论,指导大家去实现业务模型到代码结构的映射关系。我们常规聊的技术架构,都是为了搞定技术复杂度的,解决技术难题,引入开源组件这些。而业务复杂度,我们一般用业务架构,,或者工程方法论,或者叫”系统设计“来解决。深入懂业务的不懂代码,深入懂技术的不了解业务。到这个层次,大家应该明白,上面提到的所有的东西,都是为了解决业务复杂度的。大家都知道,我们搞软件研发的,面临两大复杂度,业务复杂度和技术复杂度。2、当业务发生变化时,能迅速的调整业务模型,并更新应用和系统代码结构。
2024-08-27 22:14:37 351
原创 挂个人-CSDN Java优秀内容博主rundreamsFly抄袭
昨天下午因为在微信群里讨论了这个话题,我就在18点左右把这个文章,发布到知识星球,知乎和CSDN,让大家可以通过免费的公共渠道看到。抄袭者文章 发布于2024-8-26 19:37:41秒,比我发布晚一个半小时,标注了是他“原创”。看到抄袭者发布的虽然还贴心的加了两张图,但是通过有目录可以看到应该是从zhihu抄过去的。本来不准备管的,一看还是一个“Java 领域优质创作者”,估计是个惯犯,这我可忍不了了。
2024-08-27 20:16:57 1192 2
原创 redis单线程 ,当redis在执行lua脚本的时候,会执行其他redis操作吗?
我们之前做分布式缓存平台的时候,为了数据保持版本一致性,给各个redis写操作命令都加了一个LUA脚本,脚本多了以后,为了考虑各种通用场景和条件判断,加了很多函数、字符串处理、多层循环,后来就发现这个方式虽然使得我们的脚步通用性和可维护性好了不少,但是缓存性能下降了一个数量级,RT从1ms级别到10ms级别,我们预期是3ms级别可以接受。这个期间来做其他操作。Redis执行Lua脚本,已经数据操作本身,都是在主线程中完成的。所以回到本问题,答案就是,Lua脚本执行过程中,其他的数据操作被阻塞,不会执行。
2024-08-26 18:09:57 672
原创 【0101】技术的定位:程序员是这个时代的手艺人
就是有一定专业技能,像是几百年前的木匠,铁匠,皮匠,比一般的农业劳动者,能生活的好一些,体面一些,饿不死,温饱线以上。其实就是对未知的好奇,求知的渴望,做事的敬畏,对时间的敏感,事实的接纳。资源都是外在的,不是自身的能力,而且资源现在有,不代表将来也有,总有消失的那一天,因为有时候:成也资源,败也资源。2、不陷入过去的选择,自己做过的选择就是必然的选择,接受自己选择带来的后果,再去设想哪些你没有选择的可能性,对现状于事无补,实际上哪怕你重新选过也不会比现在好多少,都是徒增烦恼。毕竟未来的世界,是数字化的。
2024-08-26 18:01:47 855
原创 不同GC下ParallelGCThreads和ConcGCThreads的计算公式
目录计算公式结论Parallel GC下验证CMS GC下验证G1 GC下验证前面的文章(JVM认知的常见10个误区 - kimmking的文章 - 知乎JVM认知的常见10个误区 - 知乎)里,我们提到了CMS下的这两个参数的关系。其实我们可以全面的看一下Parallel/CMS/G1 GC下的这个关系。计算公式结论这里先总结一下,具体的验证过程见下面的步骤:三种GC下,ParallelGCThreads默认值都是CPU线程数(想想为什么?) 并行Parallel GC.
2021-11-25 21:35:07 1534
原创 JVM认知的常见10个误区
目录1、OpenJDK8的默认GC是不是CMS/G1?2、默认最大堆内存是不是物理内存的1/4?3、默认的年轻代最大值是不是一定是堆内存的1/3?4、给JVM分配内存越多越好吗?5、堆外内存很小,所以不用管?6、所有的GC都会暂停(Stop The World)吗?7、并发线程是CPU的1/8,并行线程是CPU的5/8吗?8、是不是GC停顿越短系统性能就越好?9、G1会不会发生长时间停顿的Full GC?10、ZGC到底比G1/CMS/ParallelGC好在哪儿..
2021-11-25 19:07:03 817
原创 江同学的ShardingSphere编译指北
今天第一次给ShardingSphere提pr的一个同学写的江伟楷:ShardingSphere编译指北说实话 我第一次看见这么大个repo是有点发怵的 公司也有个repo 里头7 8个module 连编译带test要二三十分钟 点下去了 如果你要等着他干活意味着上个厕所回来再泡杯茶 而shardingsphere几十个模块 光文件夹都看着晕。。。在看见一些小伙伴早已编译好了之后拿到了小任务 我又开始打起了主意要把这个repo弄好 于是乎就有了这篇踩坑记1. 克隆项目前期准备:想给开源
2020-11-20 20:38:16 1616
原创 Snakeyaml的一个bug
Snakeyaml的一个bug反序列化一个Properties类型,会直接当做Map处理。就是说把num: 1变成一个String的key(num)和一个Integer的value(1),然后put到Properties对象,而不是使用setProperty方法。java.util.Properties虽然是个继承HashTable的Map,但是一般我们都用setProperty和getProperty,这两个方法写死了只处理string。特别是getProprety里判断了一下如果value不
2020-11-18 22:29:57 775 1
原创 我想对读者说的话
课程背景近些年来,无论是使用规模、开发者人数,还是技术生态成熟度、相关工具的丰富程度,Java 都当之无愧是后端开发语言中不可撼动的王者,也是开发各类业务系统的首选语言。时至今日,整个 IT 招聘市场上,Java 开发工程师依然是缺口最大,需求最多的热门职位。另外,从整个市场环境看,传统企业的信息化,传统 IT 系统的互联网化,都还有非常大的发展空间,由此推断未来 Java 开发的市场前景广阔...
2020-09-22 12:07:19 1509
原创 环境准备:千里之行,始于足下
Java 语言编写代码非常简单,也很容易入门,非常适合开发各种企业级应用和业务系统。一个众所周知的事实是: 用起来越简单的系统, 其背后的原理和实现就越复杂。道理很容易理解, 系统的内部实现考虑了各种极端的情况,对用户屏蔽了各种复杂性。作为支撑庞大的 Java 生态系统的基石, JVM 内部实现是非常复杂的。据统计,OpenJDK 的实现代码已经超过 1000 万行。JVM 难不难? 自然是 “...
2020-09-22 12:07:17 970
原创 常用性能指标:没有量化,就没有改进
前面一节课阐述了 JDK 的发展过程,以及怎么安装一个 JDK,在正式开始进行 JVM 的内容之前,我们先了解一下性能相关的一些基本概念和原则。如果要问目前最火热的 JVM 知识是什么? 很多同学的答案可能是 “JVM 调优” 或者 “JVM 性能优化”。但是具体需要从哪儿入手,怎么去做呢?其实“调优”是一个诊断和处理手段,我们最终的目标是让系统的处理能力,也就是“性能”达到最优化,...
2020-09-22 12:07:16 832
原创 JVM 基础知识:不积跬步,无以至千里
前面的章节我们介绍了 JDK 和 JVM 的关系以及环境准备等,本节我们来探讨一下 JVM 的基础知识,包括以下内容:常见的编程语言类型关于跨平台、运行时(Runtime)与虚拟机(VM)关于内存管理和垃圾回收(GC)3.1 常见的编程语言类型我们都知道 Java 是一种基于虚拟机的静态类型编译语言。那么常见的语言可以怎么分类呢?1)编程语言分类首先,我们可以把形形色色的编程从底...
2020-09-22 12:07:14 803
原创 Java 字节码技术:不积细流,无以成江河
Java 中的字节码,英文名为 bytecode, 是 Java 代码编译后的中间代码格式。JVM 需要读取并解析字节码才能执行相应的任务。从技术人员的角度看,Java 字节码是 JVM 的指令集。JVM 加载字节码格式的 class 文件,校验之后通过 JIT 编译器转换为本地机器代码执行。 简单说字节码就是我们编写的 Java 应用程序大厦的每一块砖,如果没有字节码的支撑,大家编写的代码也就...
2020-09-22 12:07:13 647
原创 Java 类加载器:山不辞土,故能成其高
前面我们学习了 Java 字节码,写好的代码经过编译变成了字节码,并且可以打包成 Jar 文件。然后就可以让 JVM 去加载需要的字节码,变成持久代/元数据区上的 Class 对象,接着才会执行我们的程序逻辑。我们可以用 Java 命令指定主启动类,或者是 Jar 包,通过约定好的机制,JVM 就会自动去加载对应的字节码(可能是 class 文件,也可能是 Jar 包)。我们知道 Jar 包...
2020-09-22 12:07:11 561
原创 Java 内存模型:海不辞水,故能成其深
了解计算机历史的同学应该知道,计算机刚刚发明的时候,是没有内存这个概念的,速度慢到无法忍受。 直到冯诺依曼提出了一个天才的设计才解决了这个问题,没错,这个设计就是加了内存,所以现代的电子计算机又叫做“冯诺依曼机”。JVM 是一个完整的计算机模型,所以自然就需要有对应的内存模型,这个模型被称为 “Java 内存模型”,对应的英文是“Java Memory Model”,简称 JMM。Java 内...
2020-09-22 12:07:09 538
原创 JVM 启动参数详解:博观而约取、厚积而薄发
JVM 作为一个通用的虚拟机,我们可以通过启动 Java 命令时指定不同的 JVM 参数,让 JVM 调整自己的运行状态和行为,内存管理和垃圾回收的 GC 算法,添加和处理调试和诊断信息等等。本节概括的讲讲 JVM 参数,对于 GC 相关的详细参与将在后续的 GC 章节说明和分析。直接通过命令行启动 Java 程序的格式为:java [options] classname [args]ja...
2020-09-22 12:07:08 1101
原创 JDK 内置命令行工具:工欲善其事,必先利其器
很多情况下,JVM 运行环境中并没有趁手的工具,所以掌握基本的内置工具是一项基本功。JDK 自带的工具和程序可以分为 2 大类型:开发工具诊断分析工具JDK 内置的开发工具写过 Java 程序的同学,对 JDK 中的开发工具应该比较熟悉。下面列举常用的部分:工具简介javaJava 应用的启动程序javacJDK 内置的编译工具javap反编译...
2020-09-22 12:07:06 629
原创 JDK 内置图形界面工具:海阔凭鱼跃,天高任鸟飞
GUI 图形界面工具,主要是 3 款:JConsole、JVisualVM、JMC。其实这三个产品可以说是 3 代不同的 JVM 分析工具。这三个工具都支持我们分析本地 JVM 进程,或者通过 JMX 等方式连接到远程 JVM 进程。当然,图形界面工具的版本号和目标 JVM 不能差别太大,否则可能会报错。下面分别对它们进行介绍。JConsoleJConsole,顾名思义,就是“Java 控...
2020-09-22 12:07:04 982
原创 JDWP 简介:十步杀一人,千里不留行
Java 平台调试体系(Java Platform Debugger Architecture,JPDA),由三个相对独立的层次共同组成。这三个层次由低到高分别是 Java 虚拟机工具接口(JVMTI)、Java 调试连接协议(JDWP)以及 Java 调试接口(JDI)。模块层次编程语言作用JVMTI底层C获取及控制当前虚拟机状态JDWP中间层C定义 J...
2020-09-22 12:07:03 783
原创 JMX 与相关工具:山高月小,水落石出
Java 平台提供了全面的 JVM 监控和管理措施。在 Java SE 5 之前,虽然 JVM 提供了一些底层的 API,比如 JVMPI 和 JVMTI,但这些 API 都是面向 C 语言的,需要通过 JNI 等方式才能调用,想要监控 JVM 和系统资源非常不方便。Java SE 5.0 版本引入了 JMX 技术(Java Management Extensions,Java 管理扩展),J...
2020-09-22 12:07:01 495
原创 常见的 GC 算法介绍(Parallel/CMS/G1):温故而知新
GC 是英文词汇 Garbage Collection 的缩写,中文一般直译为“垃圾收集”。当然有时候为了让文字更流畅,也会说“垃圾回收”。一般认为“垃圾回收”和“垃圾收集”是同样的意思。此外,GC 也有“垃圾收集器”的意思,英文表述为 Garbage Collector。本节我们就来详细讲解常用的 GC 算法。闲话 GC假如我们做生意,需要仓库来存放物资。如果所有仓库都需要公司自建,那成本...
2020-09-22 12:06:59 1700
原创 常见的 GC 算法(Parallel/CMS/G1)
学习了 GC 算法的相关概念之后,我们将介绍在 JVM 中这些算法的具体实现。首先要记住的是,大多数 JVM 都需要使用两种不同的 GC 算法——一种用来清理年轻代,另一种用来清理老年代。我们可以选择 JVM 内置的各种算法。如果不通过参数明确指定垃圾收集算法,则会使用相应 JDK 版本的默认实现。本章会详细介绍各种算法的实现原理。串行 GC(Serial GC)串行 GC 对年轻代使用 m...
2020-09-22 12:06:57 2065
原创 Java11 ZGC 和 Java12 Shenandoah 介绍:苟日新、日日新、又日新
随着互联网的迅速发展和计算机硬件的迭代更新,越来越多的业务系统使用大内存。 而且这些实时在线业务对响应时间比较敏感。比如需要实时获得响应消息的支付业务,如果JVM的某一次GC暂停时间达到10秒,显然会让客户的耐心耗尽。还有一些对延迟特别敏感的系统,一般要求响应时间在100ms以内。 例如高频交易系统,业务本身就有一些运算耗时,如果GC暂停时间超过一半(>50ms),那很可能就会让某些交易策...
2020-09-22 12:06:56 727
原创 Oracle GraalVM 介绍:会当凌绝顶、一览众山小
GraalVM 简介与特性前面了解了那么多的 JVM 相关技术,我们可以发现一个脉络就是 Java 相关的体系越来越复杂,越来越强大。放眼看去,最近十年来,各种各类的技术和平台层出不穷,每类技术都有自己的适用场景和使用人群。并且伴随着微服务和云原生等理念的出现和发展,越来越多的技术被整合到一起。那么作为目前最流行的平台技术,Java/JVM 也自然不会在这个大潮中置身事外。本节我们介绍一个语言...
2020-09-22 12:06:54 1130
原创 GC 日志解读与分析:千淘万漉虽辛苦,吹尽狂沙始到金
本章通过具体示例来演示如何输出 GC 日志,并对输出的日志信息进行解读分析,从中提取有用的信息。本次演示的示例代码为了演示需要,我们先来编写一段简单的 Java 代码:package demo.jvm0204;import java.util.Random;import java.util.concurrent.TimeUnit;import java.util.concurrent....
2020-09-22 12:06:53 472
原创 JVM 的线程堆栈等数据分析:操千曲而后晓声、观千剑而后识器
Java 线程简介与示例多线程的使用和调优也是 Java 应用程序性能的一个重要组成部分,本节我们主要来讨论这一部分内容。线程(Thread)是系统内核级的重要资源,并不能无限制地创建和使用。创建线程的开销很大,由于线程管理较为复杂,在编写多线程代码时,如果有哪里未设置正确,可能会产生一些莫名其妙的 Bug。开发中一般会使用资源池模式,也就是“线程池”(Thread Pool)。通过把线程的...
2020-09-22 12:06:51 412
原创 GC 日志解读与分析(实例分析上篇)
上一节讲述了 GC 日志相关的基础信息和配置。需要提醒的是,这些参数是基于 JDK 8 配置的。在 JDK 9 之后的版本中,启动参数有一些变化,继续使用原来的参数配置可能会在启动时报错。不过也不用担心,如果碰到,一般都可以从错误提示中找到对应的处置措施和解决方案。例如 JDK 11 版本中打印 info 级别 GC 日志的启动脚本:# JDK 11 环境,输出 info 级别的 GC 日...
2020-09-22 12:06:50 888
原创 内存分析与相关工具上篇(内存布局与分析工具)
通过前面的课程,我们学习了“内存溢出”和“内存泄漏”的区别。简单来说,Java 中的内存溢出就是内存不够用,一般是堆内存报错,当然也可能是其他内存空间不足引起的。下面我们详细讲解 Java 对象的内存相关知识。Java 对象内存布局简介 请思考一个问题: 一个对象具有 100 个属性,与 100 个对象每个具有 1 个属性,哪个占用的内存空间更大?为了回答这个问题,我们来看看 JV...
2020-09-22 12:06:48 361
原创 GC日志解读与分析(实例分析中篇)
CMS 的 GC 日志解读CMS 也可称为“并发标记清除垃圾收集器”。其设计目标是避免在老年代 GC 时出现长时间的卡顿。默认情况下,CMS 使用的并发线程数等于 CPU 内核数的 1/4。通过以下选项来指定 CMS 垃圾收集器:-XX:+UseConcMarkSweepGC如果 CPU 资源受限,CMS 的吞吐量会比并行 GC 差一些。示例:# 请注意命令行启动时没有换行,此处是方便...
2020-09-22 12:06:46 330
本文使用74页分析了国内重点银行核心系统的数据库选型方案和细节,以及国内主流分布式数据库的优缺点
2024-09-03
0101技术的定位:程序员是这个时代的手艺人
2024-08-27
百亿流量API网关的设计与实现.pdf
2020-04-22
Apache-ShardingSpher-20200421.pdf
2020-04-22
如何在android系统中实现pkcs11,或者有什么可用的开源类库?
2013-03-26
TA创建的收藏夹 TA关注的收藏夹
TA关注的人