<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Deligent_lvan的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Deligent_lvan</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Deligent_lvan]]></copyright><item><title><![CDATA[nginx实现同一个端口监听多个服务]]></title><link>https://blog.youkuaiyun.com/Deligent_lvan/article/details/147457199</link><guid>https://blog.youkuaiyun.com/Deligent_lvan/article/details/147457199</guid><author>Deligent_lvan</author><pubDate>Wed, 23 Apr 2025 23:02:38 +0800</pubDate><description><![CDATA[受同一个系统中多个 TCP 服务进程无法绑定同一个端口这个概念的影响，误以为在nginx也无法配置通过同一个端口无法转发到多个不同域名的后端服务，于是本文使用配置来验证，实际是完全可以在同一端口上配置转发多个服务​​，且​​无需依赖不同协议。如果两个 TCP 服务进程同时绑定的 IP 地址和端口都相同，那么执行 bind() 时候就会出错，错误是“Address alreadyin use”。]]></description><category></category></item><item><title><![CDATA[通俗地讲述DDD的设计]]></title><link>https://blog.youkuaiyun.com/Deligent_lvan/article/details/147031412</link><guid>https://blog.youkuaiyun.com/Deligent_lvan/article/details/147031412</guid><author>Deligent_lvan</author><pubDate>Sun, 06 Apr 2025 22:36:46 +0800</pubDate><description><![CDATA[平时我们在谈论到DDD（驱动领域设计）的时候，往往感觉讳莫如深，特别是市面上对于它的定义、落地实现策略这些，都没有明确的解释，似乎一百个人有一百种解释，以至于我们在设计架构层级以及具体代码实现时，都不会用到DDD的设计思想，于是本文会按笔者理解DDD的概念以及设计原则去通俗描述，尽量让诸位培养成下意识使用它的习惯；DDD的真正价值在于​​建立业务与技术的统一语言​​。建议采用渐进式改造：从核心子域开始试点建立领域字典统一术语通过持续重构优化模型。]]></description><category></category></item><item><title><![CDATA[springboot实现异步导入Excel的注意点]]></title><link>https://blog.youkuaiyun.com/Deligent_lvan/article/details/146418187</link><guid>https://blog.youkuaiyun.com/Deligent_lvan/article/details/146418187</guid><author>Deligent_lvan</author><pubDate>Sun, 30 Mar 2025 22:49:16 +0800</pubDate><description><![CDATA[前文介绍了使用断点续传优化同步导入Excel，即使并发上传分片，依然会因上传耗时对用户体验感不好，故上文只起到抛砖引玉的作用，生产上使用较多的还是异步导入的方式。]]></description><category></category></item><item><title><![CDATA[Springboot实现使用断点续传优化同步导入Excel]]></title><link>https://blog.youkuaiyun.com/Deligent_lvan/article/details/146417039</link><guid>https://blog.youkuaiyun.com/Deligent_lvan/article/details/146417039</guid><author>Deligent_lvan</author><pubDate>Fri, 21 Mar 2025 12:40:23 +0800</pubDate><description><![CDATA[在跨境电商系统中，其中下单方式之一就是通过Excel记录多个用户该下单哪些商品实现批量下单，就需要实现导入Excel的方案，最简单的就是同步导入Excel，但同步导入大Excel文件时，网络原因抑或误刷新了页面，就需要重新上传，这就造成用户体验感不好，于是引入断点续传来优化同步导入Excel。]]></description><category></category></item><item><title><![CDATA[剖析sentinel的限流和熔断]]></title><link>https://blog.youkuaiyun.com/Deligent_lvan/article/details/146267666</link><guid>https://blog.youkuaiyun.com/Deligent_lvan/article/details/146267666</guid><author>Deligent_lvan</author><pubDate>Sun, 16 Mar 2025 22:57:18 +0800</pubDate><description><![CDATA[平时发起一个请求，在系统内部微服务之间调用就会形成一条调用链路，那对于每个服务要起到保护的作用，如何保护呢？本文就来做一个介绍，笔者平时是使用sentinel居多，是通过其提供的限流和熔断的措施来保护的，于是文本来剖析sentinel的限流和熔断；例如a1服务——》b服务——》c服务；a2服务——》b服务——》c服务；a3服务——》b服务；d服务——》a3服务；]]></description><category></category></item><item><title><![CDATA[GC安全点导致停顿时间过长的案例]]></title><link>https://blog.youkuaiyun.com/Deligent_lvan/article/details/146117261</link><guid>https://blog.youkuaiyun.com/Deligent_lvan/article/details/146117261</guid><author>Deligent_lvan</author><pubDate>Sun, 09 Mar 2025 10:27:24 +0800</pubDate><description><![CDATA[前段时间在使用G1垃圾收集时，因服务读写压力过大，于是将-XX:MaxGCPauseMillis参数调整为500ms，运行一段时间后发现垃圾收集的停顿时间经常达到3s以上，但实际垃圾收集器进行回收的动作就只占其中的几百毫秒。MaxGCPauseMillis：最大停顿时间，默认200ms。顾名思义，G1是garbage first。垃圾优先。G1在该最大停顿时间的指定范围内优先收集收益最大（标记垃圾对象最多）的region。user：进程执行用户态代码所耗费的处理器时间。]]></description><category></category></item><item><title><![CDATA[回忆Redis的持久化机制]]></title><link>https://blog.youkuaiyun.com/Deligent_lvan/article/details/145939522</link><guid>https://blog.youkuaiyun.com/Deligent_lvan/article/details/145939522</guid><author>Deligent_lvan</author><pubDate>Sun, 02 Mar 2025 22:59:17 +0800</pubDate><description><![CDATA[大家都知道，Redis是内存数据库，也就是说client与Redis交互的过程，无论是读key还是写key都是直接访问Redis的内存即可，但对于宕机备份容灾等问题，就需要引入持久化，Redis提供RDB或AOF，还有从版本4.0开始引入这RDB和AOF两种的混合持久化方式。]]></description><category></category></item><item><title><![CDATA[istio介绍补充以及使用篇]]></title><link>https://blog.youkuaiyun.com/Deligent_lvan/article/details/145771388</link><guid>https://blog.youkuaiyun.com/Deligent_lvan/article/details/145771388</guid><author>Deligent_lvan</author><pubDate>Fri, 21 Feb 2025 10:42:30 +0800</pubDate><description><![CDATA[前篇istio介绍了引入istio前以及k8s的关系，下文主要做出补充以及对它的使用pilot：负责服务发现与路由规则（平面数据规则），pilot只提供服务注册接口，真正注册的工作还是会对接真正的注册中心nacos这些；数据平面下发规则：Mixer：该组件不是必须的，主要有两个功能，在调用服务时决定是否满足调用权限；收集上游和下游服务envoy日志；（这两个功能分别由mixer里的两个组件，policy和另一个组件来完成）catedel：该组件也不是在架构中必须的。]]></description><category></category></item><item><title><![CDATA[聊聊istio服务网格]]></title><link>https://blog.youkuaiyun.com/Deligent_lvan/article/details/145770663</link><guid>https://blog.youkuaiyun.com/Deligent_lvan/article/details/145770663</guid><author>Deligent_lvan</author><pubDate>Fri, 21 Feb 2025 10:32:54 +0800</pubDate><description><![CDATA[特点：非侵入性；解决了服务与服务之间通讯的问题。通讯包括服务发现、负载均衡、监控、AB测试、速率限制、访问控制；引入istio，可以做到用户代码几乎不需要改动，而且可以做到用户代码与服务治理无感；]]></description><category></category></item><item><title><![CDATA[在后端服务和redis的方式实现概率抽奖逻辑]]></title><link>https://blog.youkuaiyun.com/Deligent_lvan/article/details/145559134</link><guid>https://blog.youkuaiyun.com/Deligent_lvan/article/details/145559134</guid><author>Deligent_lvan</author><pubDate>Mon, 10 Feb 2025 22:53:58 +0800</pubDate><description><![CDATA["999"类似于这样的逻辑。但随着需求变更，代码版本也需要迭代，每次保险代理人开单满多少金额就拥有一次抽奖机会，而且是开单金额越高，抽到一等奖的概率就越高，这种情况就要配置概率，例如有888、666、233、10元红包，所有概率加起来为1，开单10w以下，概率分别为“0.1”，“0.2”，“0.2”，“0.4”，10w以上，概率就配置为“0.4”，“0.3”，“0.2”，“0.1”，类似于这样的配置，这种配置的好处是扩展性啊，后续有关于新的活动上线，配置其他中奖概率即可。]]></description><category></category></item><item><title><![CDATA[响应式编程与协程]]></title><link>https://blog.youkuaiyun.com/Deligent_lvan/article/details/145421823</link><guid>https://blog.youkuaiyun.com/Deligent_lvan/article/details/145421823</guid><author>Deligent_lvan</author><pubDate>Mon, 03 Feb 2025 22:57:22 +0800</pubDate><description><![CDATA[后来，操作系统开始提供多线程的支持，靠应用自己模拟多线程的做法自然是变少许多，而是演化为用户线程继续存在，也就说虚拟线程是在用户线程的基础上创建的，无论是创建和销毁都无需切换到内核态，性能自然高，而且一个协程的栈通常在几百个字节到几KB之间，所以Java虚拟机里线程池容量达到两百就已不小了，而支持协程的应用中，同时存在的协程数量可数以十万计；内核线程直接由操作系统内核支持的线程，这种线程由内核来完成线程切换，内核通过操纵调度器对线程进行调度，并负责将线程的任务映射到各个处理器上。]]></description><category></category></item><item><title><![CDATA[步入响应式编程篇（三）之spring webFlux与R2DBC]]></title><link>https://blog.youkuaiyun.com/Deligent_lvan/article/details/145309264</link><guid>https://blog.youkuaiyun.com/Deligent_lvan/article/details/145309264</guid><author>Deligent_lvan</author><pubDate>Sun, 26 Jan 2025 07:07:15 +0800</pubDate><description><![CDATA[前面介绍响应式编程主要用到基于Stream API的Reactor API的方式，但如今业务操作需结合springboot，所以spring webFlux使用的更多，它是类似于spring mvc的web框架，不像springmvc的阻塞操作，一个请求通常对应一个线程，而spring webFlux响应式编程，天然支持异步+非阻塞+信号驱动；而且即使web框架用到响应式编程，但瓶颈仍然可能会出现在与关系型数据库的交互，遂引入了R2DBC等响应式方式与DB交互；]]></description><category></category></item><item><title><![CDATA[步入响应式编程篇（二）之Reactor API]]></title><link>https://blog.youkuaiyun.com/Deligent_lvan/article/details/145192394</link><guid>https://blog.youkuaiyun.com/Deligent_lvan/article/details/145192394</guid><author>Deligent_lvan</author><pubDate>Tue, 21 Jan 2025 11:05:40 +0800</pubDate><description><![CDATA[对于响应式编程的基于概念，以及JDK自带的落地实现，可以查看步入响应式编程篇（一）本篇将介绍Reactor API的使用：reactor官网介绍，响应式编程是一种与数据流和变化传播相关的异步编程范式。这意味着可以通过所采用的编程语言轻松表达静态（例如数组）或动态（例如时间发射器）数据流；]]></description><category></category></item><item><title><![CDATA[步入响应式编程篇（一）]]></title><link>https://blog.youkuaiyun.com/Deligent_lvan/article/details/145180925</link><guid>https://blog.youkuaiyun.com/Deligent_lvan/article/details/145180925</guid><author>Deligent_lvan</author><pubDate>Thu, 16 Jan 2025 18:39:12 +0800</pubDate><description><![CDATA[而且在查DB和访问第三方接口，各自维护一个异步线程，都有IO阻塞，为了解决这个问题，就要使用非阻塞的方式，而NIO就叩开了非阻塞的大门，其连接、读、写都是非阻塞的，只需一个线程就可以处理以上两步骤，节省JVM维护多个线程的成本。而响应式编程，是基于Stream流，可看做水流，简单来说，是定义流源头，然后往下流，使用链式处理多个步骤，最后流向最后，就是异常或响应信号。传统编码，操作流程常见的是命令式编程范式，如对于一个请求或操作来说，都是串行执行，直到异常或执行结束；命令式编程和响应式编程都是一种编程范式；]]></description><category></category></item><item><title><![CDATA[【设计模式篇】几分钟快速上手建造者模式]]></title><link>https://blog.youkuaiyun.com/Deligent_lvan/article/details/145082819</link><guid>https://blog.youkuaiyun.com/Deligent_lvan/article/details/145082819</guid><author>Deligent_lvan</author><pubDate>Sat, 11 Jan 2025 22:37:40 +0800</pubDate><description><![CDATA[在开发时，类似于以上方式使用构造器来创建对象，是最常见的，①参数过多赋值属性时，容易赋值位置错误，如第一个参数和第二个都是String类型，所以第一个容易赋值到第二个参数那里去了；如//赋值乱了②有些参数用不到时，可以使用多个参数互相组合来构造不同的构造器，但又因参数过多而组合过多，需创建多组构造器，这又是一个问题；如//创建多组构造器③使用set对属性赋值，但是如果设置一个变量需要依赖另一个变量，就需要严格按照赋值的顺序，并且set破坏了”不可变对象“的密封性；]]></description><category></category></item><item><title><![CDATA[使用模板方法模式+责任链模式优雅校验入参]]></title><link>https://blog.youkuaiyun.com/Deligent_lvan/article/details/144894576</link><guid>https://blog.youkuaiyun.com/Deligent_lvan/article/details/144894576</guid><author>Deligent_lvan</author><pubDate>Thu, 02 Jan 2025 21:32:39 +0800</pubDate><description><![CDATA[无论是对于前端发起调用接口，抑或是内部RPC等方式调用接口，对于一个下游接口来说，众所周知，毫无疑问，一开始要做的肯定是对入参进行校验，但直接在controller写校验，或者封装一个校验方法（将多种类型的校验，如判空、判长度等），都违背了设计模式的单一职责，显得太不优雅。文本将介绍使用模板方法模式+责任链这两种设计模式，优雅地解决入参校验问题！因本文重要是介绍如何解决入参，故而模板方法模式和责任链模式是简单介绍。]]></description><category></category></item><item><title><![CDATA[【Elasticsearch篇】使用Reindex修改索引字段的解决方案]]></title><link>https://blog.youkuaiyun.com/Deligent_lvan/article/details/144795371</link><guid>https://blog.youkuaiyun.com/Deligent_lvan/article/details/144795371</guid><author>Deligent_lvan</author><pubDate>Sat, 28 Dec 2024 22:46:12 +0800</pubDate><description><![CDATA[平时我们业务上，对于一个已建的索引，需要修改它的字段，或者新增字段是很平常的需求。对于新增字段，无论是索引已建还是未建情况，ES提供dynamic Mapping的方式都可以解决：是根据添加文档时，ES帮我们根据文档的信息自动推算出了各个字段的信息。但是啊，推算的东西它不一定是准确的，很多时候并不是我们想要的东西！所以我们一般是提前定义索引的mapping，而不是使用dynamic Mapping，避免在添加文档时让ES推断新增的字段类型！但需求要在已有的索引上添加字段，]]></description><category></category></item><item><title><![CDATA[【操作系统篇】白话讲Linux进程如何被CPU调度]]></title><link>https://blog.youkuaiyun.com/Deligent_lvan/article/details/144645311</link><guid>https://blog.youkuaiyun.com/Deligent_lvan/article/details/144645311</guid><author>Deligent_lvan</author><pubDate>Sun, 22 Dec 2024 13:40:46 +0800</pubDate><description><![CDATA[CPU调度分为主动式调度和抢占式调度。其实通常不采用主动式调用，而是采用抢占式调用；举例：先有一块CPU，然后有a进程和b进程启动；]]></description><category></category></item><item><title><![CDATA[关于k8s的无状态服务Deployment的滚动更新]]></title><link>https://blog.youkuaiyun.com/Deligent_lvan/article/details/144489390</link><guid>https://blog.youkuaiyun.com/Deligent_lvan/article/details/144489390</guid><author>Deligent_lvan</author><pubDate>Sun, 15 Dec 2024 23:35:40 +0800</pubDate><description><![CDATA[无状态的服务是指不会对本地环境产生任何依赖。例如不会存储数据到本地磁盘，如Nginx。不像MySQL或Redis强依赖本地存储的数据；Deployment：可以理解为控制器，每个服务是部署在pod中，pod是由replica Set管理，Deployment通过selector标签管理replica Set。在K8s中通过编写资源清单yml文件来创建Deployment进而控制容器；滚动更新触发时机：只有修改了Deployment配置文件中的template中的属性后，才会触发更新操作；]]></description><category></category></item><item><title><![CDATA[JVM初始化时发生了死锁，该怎么办呢？]]></title><link>https://blog.youkuaiyun.com/Deligent_lvan/article/details/144326448</link><guid>https://blog.youkuaiyun.com/Deligent_lvan/article/details/144326448</guid><author>Deligent_lvan</author><pubDate>Sun, 08 Dec 2024 16:10:03 +0800</pubDate><description><![CDATA[最近发现在启动一个项目花的时间很长，结果是一直卡死，启不起来。static {System.out.println("初始化类1……");try {static {System.out.println("初始化类2……");try {/*** @Describe 多线程同时创建两个对象*/System.out.println("开始执行……");}).start();}).start();执行结果发生了死锁。]]></description><category></category></item></channel></rss>