6月份的时候,群里有一个小伙伴分享了一道面试题,如下图: 趁着下班的功夫,拆解下这道面试题 可以按顺序添加任意节点形成一个任务链 链表且有序 或者数组(考虑到数组的扩容,直接pass调,用有序链表LinkedList) 添加任意节点(可以指定索引添加) 任务需要按顺序执行,同一个节点可能有多个任务(可以并行执行) 线程池执行 同一个节点的任务,广度优先,可以利用Queue 节点完成可以指定任意个数 Queue需要包装起来 同时需要计数,直接利用CountDownLatch 每个节点都可能失败,失败后可以通过接口进行…

2022/08/25 0条评论 780点热度 0人点赞 阅读全文

昨天刚写了 可编排策略在交易系统的应用,今天小伙伴就给我提了个需求。 背景 最近由于新业务的需要,需要对原有工单的推单逻辑进行变动。我是想着尽可能不对原有逻辑进行改动,毕竟业务还一直在跑,就开启了一个小模块进行代码的组合。 在设计评审中,我一直强调要设计的灵活些。 校验规则一定要原子化,然后可编排在任何一处场景。校验的的入参和出参必须抽取,并标准化。 直接把我昨天写的文章扔过去了。 然后就差一个状态机了,得我就把框架搭起来。 设计 工单的流转完全可以状态驱动,如果发现两个状态都指向了一个处理逻辑,那就说明,你需要加…

2022/08/24 0条评论 677点热度 0人点赞 阅读全文

背景 在2019年的时候,由于组织架构变更,我接手了交易板块。接手后开始找之前的产品、开发沟通了解下这块有什么问题。 综合了下有以下问题: 需求积压严重,开发列了满满一小本子(开发); 需求提出方多,经常功能打架,然后就复制出来了一套(涉及的业务线业比较多)(开发); 需求处理慢(产品); 进入交易系统太慢(1~3秒),好多用户跳出(产品); 生产经常出现各种问题,开发解决速度慢(产品); 产品链路数据无法统计,只能分析出最终结果,具体哪块转化率低,无法统计(产品); 用户转化成本过高(风控); 动一块功能,所有的…

2022/08/24 0条评论 635点热度 0人点赞 阅读全文

引入消息中间件以后,系统交互的复杂性提升,一旦出了问题以后,要想各种各样的解决方案。 如果用消息中间件是为了削峰填谷,那在高峰期积压了慢慢处理即可。 如果用消息中间件只是为了解耦、异步处理,业务对时效性有一定的要求,那么就要求必须尽快处理。 消息积压,一般分为两大类: 生产者生产消息过快 消费者消费过慢 这两个问题,又可能引出别的问题,如中间件的磁盘有限,无法导致 这两大类又可以细分为三种: 生产者消费过快 运营活动(导致单位时间内流量激增) 微信推文 push营销 短信触达 跑批处理,一下子导入过多的数据到消费者…

2021/09/15 0条评论 946点热度 0人点赞 阅读全文

背景 项目DDD重构后,所有依赖重新整理,试运行期间发现链路追踪的抓取信息不够丰富,就翻下原来的项目源码,再看下对应的改造下。 环境依赖 kafka elasticsearch 7.10.0 (jdk11) Kibana 7.10 zipkin server sleuth 随着微服务的应用,我们运维系统时面临以下问题 真实情况的请求链路是什么? 链路请求过程中每个耗时了多少? 请求的参数以及每个系统的响应是什么? 分布式链路追踪解决了以上这些问题(当然需要自己手动扩展下) 分布式链路追踪(Distributed T…

2021/08/08 0条评论 1042点热度 0人点赞 阅读全文

什么是布隆过滤器? 布隆过滤器(Bloom Filter)是1970年由布隆提出的本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构,特点是高效地插入和查询,可以用来告诉你 “某样东西一定不存在或者可能存在”。 特点: 二进制数组+随机hash 空间效率和查询效率都优于一般算法 O(1) 有一定的误识别率(散列冲突) 删除困难(重合) 高并发场景下,防止缓存穿透; 数据结构 如何快速定位一个元素是否存在? 我们通过redis的全局hash表或者hashMap就能解决这个问题; 看上面的数据结构,两个数据结构差…

2021/07/22 0条评论 871点热度 0人点赞 阅读全文

在灰度系列中《基于springcloud的灰度实现方案(二)》,之前规则适配使用数据库+策略模式实现,单个规则还好,多个规则,各种场景使用,还是稍微有点欠缺。就想着用java规则引擎来解决这个问题。 之前在项目中使用过drools,比较重,初始加载复杂,首次执行效率较低,最好预热一下,其次分布式规则处理时的一致性也得自己把控; 之前就了解过aviator,这次就直接用了。 相关资料 # 官网地址https://github.com/killme2008/aviator# 开发文档https://www.yuque.…

2021/07/05 0条评论 1283点热度 0人点赞 阅读全文

5ycode 被管理耽误的架构师。工作、学习过程中的知识总结与分享,jvm,多线程,架构设计,经验分享等。 28篇原创内容 公众号 基于springcloud的灰度实现方案(一) 基于springcloud的灰度实现方案(二) 前两篇介绍了灰度方案以及灰度的实现,这篇从feign底层调用上分析一下是如何实现的。 首先,我们在feign调用时,使用了FeignClient注解。 #接口调用@FeignClient("demo-service")public interface DemoServiceFeginClie…

2021/05/20 0条评论 1542点热度 1人点赞 阅读全文

5ycode 被管理耽误的架构师。工作、学习过程中的知识总结与分享,jvm,多线程,架构设计,经验分享等。 28篇原创内容 公众号 基于springcloud的灰度实现方案(一) 该项目已经上传到github上,地址如下: https://github.com/yxkong/springboot-gray 项目说明 通过eureka的扩展元数据,标记服务是灰度服务 重写Ribbon的RoundRobinRule轮训算法实现灰度路由 项目结构说明 必须有一个eureka lb-common 公共包 com.yxkon…

2021/05/19 0条评论 967点热度 0人点赞 阅读全文

5ycode 被管理耽误的架构师。工作、学习过程中的知识总结与分享,jvm,多线程,架构设计,经验分享等。 28篇原创内容 公众号 前言 目前所有的服务都是基于springboot/springcloud体系,注册中心使用eureka。 背景: 新的功能上线后,特别是大版本上线,不能完全保证新功能的质量,特别是对历史用户,数据差异性比较大,又无法复现; 为了测试哪套流程的转化率比较高; 想要的效果 这里就会有以下几个问题: 如果识别是灰度用户?  如何识别是灰度服务? 如何让灰度用户走灰度服务? 如何让灰…

2021/05/18 0条评论 939点热度 0人点赞 阅读全文