![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
架构
文章平均质量分 79
奔向理想的星辰大海
这个作者很懒,什么都没留下…
展开
-
MQ组件重磅更新,灵活切换Rocket/Redis/Kafka/Rabbit多种实现
*** MQ事件监听器,配合MQEvent使用*/// 消费者组,不设置默认为当前启动的应用名${spring.application.name},一般多实例同一个消费者需要保持一致,避免同一业务重复消费// 主题,大分类,消费线程隔离,用于区分不同业务。也可作为小分类使用// 标签列表,小分类,同一主题下共享消费线程,支持:通配符*、或||、非-,支持复合表达式如:A || B -C/*** MQ事件基类*/@Data// 消息ID,默认当前时间戳。原创 2024-08-25 17:07:02 · 263 阅读 · 0 评论 -
Kafka架构演化与升级
数据分片存储是一种将大量数据分散存储在多个不同位置或设备上的技术。在数据量庞大的情况下,为了提高数据的存储效率、访问性能和可扩展性,将数据分割成较小的片段,然后分别存储在不同的节点或存储设备中。提高性能:通过将数据分散存储,可以并行地处理数据请求,从而加快数据的读取和写入速度。例如,在一个分布式数据库中,不同的分片可以同时响应查询,减少了总体的响应时间。增强可扩展性:当数据量不断增长时,可以方便地添加更多的分片来扩展存储容量,而无需对整个系统进行大规模的重构。原创 2024-08-25 16:52:42 · 609 阅读 · 0 评论 -
RocketMQ结合实际场景顺序消费
为了保证消息的顺序性,我们必须保证同一个消息队列在同一时刻只能被消费者组内一个消费者消费,从负载均衡方面,向Broker发起锁定该消息队列的请求,上锁成功则新建一个拉取任务PullRequest,从消息消费方面,批量拉取消息成功后,进行提交消费请求,消息提交到内部的线程池,为了保证消息的顺序性,我们必须为消费队列上锁,来保证同一时刻消费队列只会被线程池中的一个线程消费。原创 2024-08-23 14:39:32 · 7 阅读 · 0 评论 -
Redis List/Set/Hash 的元素设置单独的过期时间
通过合理的数据结构选择和巧妙的应用,我们成功地解决了为 List、Set 和 Hash 结构中的字段设置单独过期时间的问题。这个方案在实际项目中得到了验证,并取得了显著的效果。对比其它的延时队列,或者 etcd 的 field 过期方案,Redis 的实现相对而言更为便捷,理解起来也更为简单。原创 2024-08-23 13:55:48 · 886 阅读 · 0 评论 -
八大系统设计常见问题
集中式日志记录和监控:使用ELK堆栈(Elasticsearch、Logstash、Kibana)等工具实现集中式日志记录和监控系统,以聚合日志和指标,设置警报,并深入了解系统性能和健康状况。例如,使用多个数据库副本或集群解决方案,以在发生故障时不出现停机。使用缓存:实现缓存机制(如Redis、Memcached),将常访问的数据存储在内存中,减少数据库读取次数,加快响应速度。没有适当的监控,系统中的问题可能无法及时发现,导致长时间的停机或性能下降。随着数据库的增长,查询速度可能变慢,影响系统性能。原创 2024-08-23 11:43:11 · 238 阅读 · 0 评论 -
Python构建你自己的RSS提示系统
在本教程中,我们学习了如何使用 Python 去创建一个简单的 sqlite 数据库、解析一个 RSS 源、以及发送电子邮件。原创 2024-08-23 11:20:16 · 10 阅读 · 0 评论 -
大模型终端部署新趋势:硬件直接支持混合矩阵乘法
当前,前沿加速器正在将更低比特的计算单元,如 FP32、FP16,甚至 FP8 的运算集成到新一代的架构中。然而,受限于芯片面积和高昂的硬件成本,每个加速器只能为标准的数据类型提供有限类型的计算单元,比如 NVIDIA V100 TENSOR CORE GPU 仅支持 FP16,而 A100 虽然加入了对 int2、int4、int8 的支持,但并未涵盖更新的 FP8 或 OCP-MXFP 等数据格式。原创 2024-08-19 17:03:49 · 1115 阅读 · 0 评论 -
揭开神秘面纱:深入了解语音识别算法
从跨平台的语音助手到转录服务和辅助工具,再到最近成为大型语言模型(LLM)差异化的关键要素——语音输入已成为日常的用户界面。根据预测,语音用户界面(VUI)的市场规模将从2023年至2028年以23.39%的复合年增长率增长,可以预见将有更多的科技公司采用这一技术。以下从剖析和定义使语音识别成为可能的最常见技术开始。原创 2024-08-19 16:03:32 · 342 阅读 · 0 评论 -
微服务架构拆分的七大黄金法则
如何合理拆分微服务却成为许多开发者的难题。本文将揭秘 7 大拆分原则,助你轻松驾驭微服务架构,提升系统性能和可维护性。无论你是架构师还是开发者,这些原则都将为你带来实实在在的帮助。今天,码哥带大家从不同角度来剖析微服务架构设计的 7 大原则,做到合理且正确地拆分出微服务,避免打造一个被人诟病的伪微服务架构大单体,徒增运维和开发成本。原创 2024-08-17 13:00:55 · 864 阅读 · 0 评论 -
GitHub主要仓库泄露访问令牌,代码与云环境面临风险
大型公司的开源库中GitHub Actions工作流生成的构建工件进行的分析显示,这些工件中包含了对第三方云服务以及GitHub本身的敏感访问令牌,此外,GitHub在今年对工件功能进行的一项改动引入了一种竞争条件,攻击者可以利用这一点来滥用此前无法使用的GitHub令牌。原创 2024-08-17 12:57:53 · 774 阅读 · 0 评论 -
数据中心运维常见异常及解决方案
数据中心作为企业IT基础设施的核心,其稳定运行对于业务连续性至关重要。然而,在日常运维过程中,各种异常情况难以避免。本文将探讨数据中心运维中常见的异常情况,并提供相应的解决方案,以帮助运维人员更好地应对这些挑战。原创 2024-08-15 11:14:09 · 447 阅读 · 0 评论 -
强大的分布式锁框架——Lock4j
*** 自定义分布式锁执行器*/@Component@Overridereturnnull;@Override。/*** 自定义分布式锁key生成器*/@Component/*** 自定义抢占锁失败执行策略*/@Component@Override默认的锁获取失败策略为。原创 2024-08-15 11:00:22 · 269 阅读 · 0 评论 -
自定义的拦截器搞定 SpringBoot 接口恶意刷新和暴力请求
代码中redis的使用的是分布式锁的形式,这样可以最大程度保证线程安全和功能的实现效果。代码中设置的是1S内同一个接口通过同一个ip访问5次,就将该ip禁用1个小时,根据自己项目需求可以自己适当修改,实现自己想要的功能;在实际项目使用中,必须要考虑服务的安全性,当服务部署到互联网以后,就要考虑服务被恶意请求和暴力攻击的情况,下面的教程,通过。在一定时间内访问的次数来将ip禁用,可以根据自己的需求进行相应的修改,来打打自己的目的;自己可以写一个for循环来测试方面的功能,这里就不详细介绍了。原创 2024-08-15 09:49:00 · 265 阅读 · 0 评论 -
账户合并实战案例详解
秉承专款专用的原则,前期不同业务线的保证金可能存放在不同的银行账户中,既然业务系统以及会计系统都完成了余额的转移,那么对应的银行账户的资金业务相应的进行调拨处理,假如我们又开了一个新的银行账户T,这就需要根据系统记录的转移的余额X进行资金的调拨,如果资金不足或者调拨后有结余,就需要进行历史资金账务的核算,以找到账务出现差错的原因,进行对应的差错处理;对于一个多业务线的平台来说,可能会存在每个业务线都需要缴纳不同种类的保证金,比如你在A业务线需要缴纳A保证金,在B业务线需要缴纳B保证金;原创 2024-08-09 15:44:45 · 753 阅读 · 0 评论 -
账户迁移的“兼平切”方法论
为了构建统一中台账户服务,围绕中台统一账户管理支持各业务线客户账户以及账务处理能力,需要将各业务线分散的账户业务全部切入中台账户服务中心,并且稳定后下线旧账户服务。原创 2024-08-09 15:41:21 · 325 阅读 · 0 评论 -
一点三线就是支付体系的骨骼
而面对这个问题时,你就不应该用“用不用负号这个功能去回应”,而是“如何反应流水的方向”,当触达最本质的问题时,我们才能到达最关键的十字路口“选择”,一个产品面对问题时应该具备选择的能力;当你再思考这个功能怎么设计的时候,不妨回到起点,问问自己我要解决什么样的问题,期望达到什么样的效果,我有多少可选的方案,当下的这个让我百思不解的功能是唯一答案么!产品的意义是什么,是做出一个“牛逼”的系统么,是做出一个“正确”的功能么,是遵守一个通用的规范么?什么是支付过程呢,我们可以将支付分为三个阶段:交易,清算,结算。原创 2024-08-09 14:08:16 · 888 阅读 · 0 评论 -
图解“交易·支付·清结算·账务”全局
这个过程大致是这样的,用户先到平台选择喜欢的“餐品”,然后“下单”,生成交易“账单”,用户选择支付方式进行“支付”,支付成功后平台要履行承诺把餐送到,“履约”完成以后平台就开始进行各方利益的“清分”,计算清楚应给谁多少钱,并“记账”,最后将款项“结算”给商家,这个过程如图7所示。交易系统请求订单系统创建订单,因为不清楚平台和商家之间的清结算协议,所以暂且认为所有优惠由平台提供给用户,后续平台再基于协议跟商家之间做优惠的分摊,将上述商品、优惠、计价等信息集成到一起,就得到了完成的订单信息了,如表4所示。原创 2024-08-09 14:05:10 · 510 阅读 · 0 评论 -
支付内核图解分析
在算账过程中不同的交易会涉及到不同的对象关系,有没有代理商、有没有分账方等,对象关系不同涉及到的算账目标和任务不一样,例如需不需要算分账、需不需要算分润、分给谁等,因此在商户入网时构建该商户的关系模型,在实际算账过程中调用该模型关系,计算对应目标。交易处理成功以后,将交易数据推送至清算中心,清算中心通过商户编号获取到该笔交易的对象模型,以及计费配置(包括费率、分成比例等),然后计算个对象的应入金额、分账金额、分润金额,调用入账服务进行入账,并将结果通知交易核心。原创 2024-08-09 11:50:32 · 496 阅读 · 0 评论 -
单体架构 vs 微服务架构的全面比较
软件架构是指软件系统的高层设计和组织方式。它定义了系统的结构、组件、它们之间的交互以及它们如何满足系统的需求。有各种软件架构模式,每种都有其自身的优点和权衡。两种常见的架构模式是微服务架构和单体架构。原创 2024-08-09 11:13:27 · 1003 阅读 · 0 评论 -
超级“支付清算架构”图,将颠覆支付认知
演而优则导,画的多则通,突然,脑子里就又打通了一层,这些架构图在大脑中悄然的融合到了一起,产生了很强烈的化学反应,新图构想就产生了,那就试试画出来吧!随着文章写的越来越多,越来越深,模型抽象度也会越来越高,就像下面几张也是最近搭建出来的更高维度的架构图,大家应该还没见过,因为都是线下课的课件中的内容。随着这些图的产生,其实,大家的支付认知和思维也会跟着潜移默化的得到提升,因此,后续也会推出更高维度的深度解析长文,来一层层的进行支付认知升维!在整个支付清算中的角色而绘制的,重点突出的是清算转接的框架。原创 2024-08-09 09:51:55 · 428 阅读 · 0 评论 -
分布式ID生成的9种不同方式
等这批号段ID用完,再次向数据库申请新号段,对max_id字段做一次update操作,update max_id= max_id + step,update成功则说明新号段获取成功,新的号段范围是(max_id ,max_id +step]。workId,占用了22个bit位,时间占用了28个bit位,序列化占用了13个bit位,需要注意的是,和原始的snowflake不太一样,时间的单位是秒,而不是毫秒,workId也不一样,而且同一应用每次重启就会消费一个workId。答案是可以的,但是并不推荐!原创 2024-08-09 09:32:15 · 706 阅读 · 0 评论 -
高可用解决方案详解(八大主流架构方案)
比如:大型网站都是集群的时代,Web服务器集群、应用服务器集群、后端的服务器集群...等等,当别的服务器故障时,集群的其它服务器,仍然能够正常提供服务。通过将多个服务器、或节点,组合成一个集群来实现,当某个节点出现故障时,其他节点可以接管其工作,从而确保服务的连续性。使用自动化工具、和技术来,监测系统组件的健康状态,并在检测到故障时自动进行故障转移、或重启,以减少对用户的影响。在热备方案中,一个备用服务器实时同步主服务器的数据,当主服务器故障时,备用服务器立即接管。原创 2024-08-08 13:41:37 · 312 阅读 · 0 评论 -
详细解析RocketMQ的工作原理
Apache RocketMQ作为一款高性能、高可靠性的分布式消息中间件,通过其独特的架构设计和高效的消息处理机制,为分布式系统提供了强大的消息传递能力。原创 2024-08-06 09:53:37 · 11 阅读 · 0 评论 -
Flink支持的增量连接组件详解
代码地址:https://github.com/apache/flink-cdc/tree/master/flink-cdc-connectFlink CDC (Change Data Capture) Connect 是 Apache Flink 提供的一组连接器,专门用于捕获和处理数据库中发生的数据变化。Flink CDC 通过实时监控数据库的变更,能够将数据变更事件流化,从而实现高效的数据集成、同步和处理。这些连接器可以与 Flink 的流处理引擎无缝集成,用于构建实时数据管道和数据处理应用。原创 2024-08-05 09:29:16 · 89 阅读 · 0 评论 -
Nginx 常用配置:从入门到实战
Nginx 由俄罗斯人 Igor Sysoev 开发,开源且轻量级。它的设计目标是高效处理高并发连接,支持高达 50,000 个并发连接。Nginx 还支持热部署,可以在不中断服务的情况下更新配置或升级软件。Nginx 是一款功能强大的 Web 服务器和反向代理服务器,通过合理的配置可以显著提高系统的性能和稳定性。原创 2024-07-31 09:58:40 · 297 阅读 · 0 评论 -
图解Java 集合类核心知识全面回顾
在 Java 中,集合大致可以分为两大体系,一个是 Collection,另一个是 Map,都位于java.util包下。Collection :主要由 List、Set、Queue 接口组成,List 代表有序、重复的集合;其中 Set 代表无序、不可重复的集合;Java 5 又增加了 Queue 体系集合,代表队列集合。Map:则代表具有映射关系的键值对集合。很多书籍将 List、Set、Queue、Map 等能存放元素的接口体系,也归纳为容器,因为他们可以存放元素!原创 2024-07-30 10:57:38 · 959 阅读 · 0 评论 -
经常使用的第三方类库总结
在项目开发过程中,一般我们都会用到很多类库,比如 spring,guava,hutool,apache io/commons等等等等相关一堆类库。本文就来介绍一下常见的类库以及使用方式,以作备忘和学习。Guava是一个基于Java的开源库,包含许多Google核心库,这些库在许多项目中都有使用使用他有助于我们去学习最佳编码方式,并且帮助我们减少编码错误, 它为集合,缓存,并发,通用注释,字符串处理,I/O和验证等相关编程过程中的需求, 提供了大量开箱即用的方法。原创 2024-07-29 11:38:53 · 706 阅读 · 0 评论 -
使用 SpringBoot + Screw 实现生成数据表数据字典功能开发
Screw 是一款功能强大、易于使用的数据库文档生成工具。它旨在帮助开发人员快速、准确地获取和整理数据库的结构信息,从而提高开发效率和减少因数据库结构不清晰而导致的错误。多数据库支持:它能够处理多种主流数据库,如 MySQL、Oracle、SQL Server、PostgreSQL 等,具有广泛的适用性。丰富的文档格式:支持生成多种常见的文档格式,如 HTML、Word、Markdown 等,满足不同场景下的需求。原创 2024-07-29 10:31:15 · 223 阅读 · 0 评论 -
不推荐使用 keySet() 遍历HashMap,建议使用entrySet()
在Java编程中,HashMap是一种非常常见的数据结构。我们经常需要对其中的键值对进行遍历。通常有多种方法可以遍历HashMap,其中一种方法是使用keySet()方法。然而,很多Java大佬并不推荐这种方法。为什么呢?keySet()原创 2024-07-29 09:54:18 · 1279 阅读 · 0 评论 -
Service层异常:抛到Controller层处理或直接处理?
在典型的MVC架构中,Service层负责处理业务逻辑,Controller层则负责接收用户请求并调用Service层的方法。当Service层在处理业务逻辑时遇到异常,开发者通常有两种选择:一是在Service层直接处理异常,二是将异常抛给Controller层处理。Service层异常抛到Controller层处理或直接处理,各有利弊。在实际开发中,应根据项目的具体情况和需求选择合适的处理方式。原创 2024-07-29 09:35:28 · 509 阅读 · 0 评论 -
AI变革客户成功策略的全面指南
客户成功(CS)似乎正处于GenAI首波影响的核心,最近的一些迹象包括Klarna部署AI客户支持代理取得的显著成果,以及许多初创公司(最著名的是Brett Taylor的Sierra)进入这一领域。一个重要原因是客户成功在产品知识和客户需求之间起到了翻译层的作用,这是大型语言模型(LLM)非常适合的工作描述,解决方案架构师在客户工作流程和产品配置之间进行翻译,成功的经理在产品路线图和追加销售机会之间进行翻译,支持代理在客户的痛点和产品文档之间进行翻译。原创 2024-07-26 10:56:39 · 696 阅读 · 0 评论 -
开放API接口签名验证的设计方案
为开发者分配AccessKey(开发者标识,确保唯一)和SecretKey(用于接口加密,确保不易被穷举,生成算法不易被猜测)。原创 2024-07-25 14:40:44 · 705 阅读 · 0 评论 -
一个注解+AOP实现接口限流、防抖、防重
/锁自动过期时间为 lockTime 秒,确保即使程序异常也不会永久锁定资源,尝试加锁,最多等待0秒,上锁以后5秒自动解锁 [lockTime默认为5s, 可以自定义]接口防抖是一种常见的前端性能优化策略,用于限制在一定时间内连续触发的函数只会执行一次,常用于搜索框的输入监听、按钮防连击等情况,以减少不必要的计算或网络请求。//使用 tryLock 尝试获取锁,如果无法获取(即锁已被其他请求持有),则认为是重复提交,直接返回null。// 如果距离上次调用时间小于指定的防抖时间,则直接返回,不执行方法。原创 2024-07-25 10:29:31 · 688 阅读 · 0 评论 -
一个注解就搞定接口统一返回、统一异常处理、加签、验签、加密、解密
RequestBodyAdvice 和 ResponseBodyAdvice 是Spring框架中的两个接口,主要用于实现全局的请求体(RequestBody)和响应体(ResponseBody)的处理,它们在Spring MVC中用于拦截和修改进入控制器方法的请求数据以及从控制器方法返回的响应数据。这两个接口的设计遵循了Spring的AOP(面向切面编程)思想,使得开发者可以在不改动原有业务逻辑的前提下,对数据进行统一的处理,比如日志记录、数据加密解密、结果封装等。请检查诸如编码等格式是否正确。原创 2024-07-25 10:10:37 · 898 阅读 · 0 评论 -
一个注解解决接口幂等问题
Inherited/*** 幂等操作的唯一标识,使用spring el表达式 用#来引用方法参数*//*** 有效期 默认:1 有效期要大于程序执行时间,否则请求还是可能会进来*//*** 时间单位 默认:s*//*** 提示信息,可自定义*/String info() default "重复请求,请稍后重试";/*** 是否在业务完成后删除key true:删除 false:不删除*/原创 2024-07-25 10:04:29 · 617 阅读 · 0 评论 -
java 短链接服务设计方案
因此,我们将所有以字母“A”开头的url保存在一个分区中,将以字母“B”开头的url保存在另一个分区中,以此类推。我们可以使用一个链接哈希图或类似的数据结构来存储我们的url和哈希值,这也将跟踪最近被访问的url。0.2 * 17亿 * 500B = 170GB 这里需要注意的一件事是,由于会有很多重复的请求(相同的URL),因此,我们的实际内存使用量将小于170GB。如果KGS在将所有加载的密钥分配给某个服务器之前失效,那么我们将浪费这些密钥—鉴于我们拥有的密钥数量巨大,这是可以接受的。原创 2024-07-25 09:38:32 · 732 阅读 · 0 评论 -
Netflix系统架构的研究
Netflix如今成为了一个集娱乐、追尴和尖端流媒体服务于一体的术语。Netflix的迅速走红可能要归功于其庞大的内容库、遍布全球的业务以及富有弹性和创造性的架构。从1997年提供DVD租赁服务开始,到如今发展成为一家全球主要的流媒体公司,Netflix一直在使用尖端技术来彻底革新媒体消费方式。Netflix系统架构旨在高效可靠地同时为数百万消费者提供内容。考虑到Netflix在全球190多个国家拥有2亿多会员,其基础设施的可扩展性至关重要。原创 2024-07-25 09:20:42 · 872 阅读 · 0 评论 -
系统架构设计--第5章 系统可靠性分析与设计
系统可靠性是系统在规定的时间内及规定的环境条件下,完成规定功能的能力,也就是系统无故障运行的概率。平均故障间隔时间 → (MTBF) MTBF = MTTR + MTTF。平均故障修复时间 → (MTTR) MTTR=1/μ,μ为修复率。平均无故障时间 → (MTTF) MTTF=1/λ,λ为失效率。在实际应用中,一般MTTR很小,所以通常认为MTBF≈MTTF。系统可用性 → MTTF/(MTTR+MTTF)×100%系统可用性是指在某个给定时间点上系统能够按照需求执行的概率。原创 2024-07-24 16:18:22 · 383 阅读 · 0 评论 -
BPMN—工作流技术的理论与实践
19世纪70年代,流程管理思想萌芽阶段。怎样提高工作效率?泰勒:标准化个人操作流程亨利·福特:规定标准时间定额标准化、精简化、通用化、专业化。20世纪70年代,工作流技术起源于办公自动化领域的研究。由于当时计算机尚未普及,网络技术水平还很低以及理论基础匮乏,这项新技术并未取得成功,许多公司采用纸张表单,手工传递的方式,一级一级审批签字,工作效率非常低下。20世纪90年代,信息技术驱动流程自动化阶段。信息技术开始引入管理领域,对传统的业务进行自动化改造。原创 2024-07-24 09:46:13 · 978 阅读 · 0 评论 -
DDD领域驱动设计的四重边界
领域驱动设计(Domain-Driven Design, DDD)是一种针对复杂业务场景的软件设计方法,其核心思想是将业务领域知识贯穿整个软件开发生命周期,通过构建领域模型来指导设计和开发。DDD通过规划四重边界,将领域知识进行了合理的固化和分层,确保了系统的有序性和可维护性。本文将深入探讨DDD的四重边界,并通过代码示例来展示这些边界在实际项目中的应用。原创 2024-07-23 14:20:18 · 420 阅读 · 0 评论