- 博客(183)
- 收藏
- 关注
原创 Kafka 多线程开发消费者实例
目前,计算机的硬件条件已经大大改善,即使是在普通的笔记本电脑上,多核都已经是标配了,更不用说专业的服务器了。如果跑在强劲服务器机器上的应用程序依然是单线程架构,那实在是有点暴殄天物了。不过,Kafka Java Consumer 就是单线程的设计,你是不是感到很惊讶。所以,探究它的多线程消费方案,就显得非常必要了。
2025-03-29 20:28:55
1086
原创 聚合根的特性
聚合根和聚合根所在层的领域服务都可以组合多个实体完成领域逻辑,但为了DDD分层架构的职责单一,聚合根最好只承担聚合管理职能,只实现聚合内实体和聚合根本身相关的业务逻辑,而跨多个实体的复杂领域逻辑统一放到领域服务中实现。聚合根是聚合对外唯一的接口人,聚合之间以聚合根ID关联的方式接受聚合的外部任务和请求,聚合外不能通过对象引用的方式访问聚合内的对象。聚合根是实体,拥有实体的业务属性和行为,同时也是聚合的管理者,负责协调聚合内的实体和值对象,按照固定的业务规则,完成业务逻辑。
2025-03-29 20:25:52
190
原创 内存模型以及分区,需要详细到每个区放什么。
实现通过类的权限定名获取该类的二进制字节流的代码块叫做类加载器。主要有一下四种类加载器:启动类加载器(Bootstrap ClassLoader)用来加载 java 核心类库,无法被 java 程序直接引用。扩展类加载器(extensions class loader):它用来加载 Java 的扩展库。Java 虚拟机的实现会提供一个扩展库目录。该类加载器在此目录里面查找并加载 Java 类。
2025-03-19 08:58:39
971
原创 技术架构:作为开发,你真的了解系统吗
对于开发人员来说,我们每天都在用技术。但你要知道,我们写的代码,其实只是系统的一小部分,我们了解的技术,也只是系统用到的一小部分。要深入掌握技术架构,我们就需要了解整体的系统。面对一个复杂的系统,我想你可能经常会有以下困扰:1. 不清楚系统整体的处理过程,当系统出问题时,不知道如何有针对性地去排查问题。2. 系统设计时,经常忽视非业务性功能的需求,也不清楚如何实现这些目标,经常是付出惨痛的教训后,才去亡羊补牢。技术架构是从物理层面 定义系统,并保障系统的稳定运行。
2025-03-19 08:39:31
401
原创 什么是零拷贝(Zero Copy)技术?它如何减少在数据传输过程中的性能开销?
零拷贝(Zero Copy)技术是一种在计算机系统中优化数据传输的方法。传统上,在数据从一个地方传输到另一个地方时,需要多次的内存拷贝操作,这会导致性能开销。零拷贝技术的目标就是减少或避免这些不必要的内存拷贝,从而提高数据传输的效率。零拷贝技术通过优化这些步骤,以减少或避免不必要的数据拷贝。零拷贝技术的好处在于它可以大幅减少数据传输过程中的内存拷贝次数,从而降低了CPU和内存的负载,提高了数据传输的效率。这对于高性能的数据传输场景,如网络数据传输、大规模文件操作等,尤其有益。
2025-03-03 16:16:56
262
原创 基于企业架构视角建模
业务的变量(比如客户C、产品P、渠道C和合作方P),形成汇总的企业级流程,容客户、产品、渠道及合作方的差异,支持线上线下全渠道整合,体现端到端的完。业务创新,流程模型体现运营模式,数据模型体现业务模式。整业务处理流程,为客户提供跨渠道的、一致的体验和一站式的产品服务。,主要包括产品分类结构、产品组件、产品条件和产品参数,以及可。,是业务模型的主线,描述了客户端到端的业务操作流程;,是将流程模型以及产品模型中产生的所有数据需求进行逻辑化和抽。中由产品确定的相关业务规则形成企业级的产品模型。
2025-02-24 08:23:57
575
原创 银行业务建模之三级模型
三级模型的建立意味着流程模型框架的确定,同时流程模型所具有的关键特性也能显现出来,本标准三级模型映射到“活动”。三级模型体现了流程模型价值驱动的特征。每个活动代表一段业务流程,具有明确的业务目的。三级模型体现了流程模型企业级的特征。每个活动代表着为外部客户或利益相关方等创造的价值。三级模型体现了流程模型标准化的特征。标准化的流程是可衡量的、可评价的、可共用的、标准的、灵活的流程。这样的流程能为客户提供标准化、高质量服务,能具备与企业战略目标相匹配的流程能力。
2025-02-23 12:46:53
730
原创 基于企业架构视角建模
基于企业级架构视角的模型建设有助于打破组织内IT系统的孤岛式建设,核心任务是对银行内战略的分解、传导,帮助企业将零散的能力“聚沙成塔”,确保战略意图和绩效指标逐层落实到每一个流程步骤、程序模块、操作规范中。业务的变量(比如客户C、产品P、渠道C和合作方P),形成汇总的企业级流程,保证渠道、产品线之间业务流程的一致性以提供卓越的客户体验;流程模型能够包容客户、产品、渠道及合作方的差异,支持线上线下全渠道整合,体现端到端的完整业务处理流程,为客户提供跨渠道的、一致的体验和一站式的产品服务。
2025-02-23 11:11:41
300
原创 Netty的线程模型怎么设计的
Netty 的线程模型旨在高效地处理并发连接和请求,以优化网络应用程序的性能。其线程模型包括了多种优化技术,例如。这些机制使 Netty 能够高效处理大规模并发连接和请求,是其在高性能网络编程中广泛应用的基础。等,用于在高负载下保持高效稳定的性能。下面详细介绍 Netty 的线程模型及其提升性能的方法。示例代码:简单的 Netty 服务器线程模型。Netty 线程模型概述。2. Worker 线程。Netty 的线程模型。1. Boss 线程。3. 用户自定义线程。
2025-02-22 09:39:41
794
原创 什么是HTTP/2协议?NGINX如何支持HTTP/2并提升网站性能?
HTTP/2是一种用于在Web浏览器和服务器之间进行通信的协议,旨在提高网站性能和加载速度。它是HTTP/1.1的继任者,引入了许多优化和改进,以适应现代Web应用的需求。HTTP/2的主要目标是减少延迟、提高效率,以及更好地支持并发请求。通过启用HTTP/2并进行相应的优化,你可以显著提升网站性能,改善用户体验,以及减少资源消耗。需要注意的是,HTTP/2在大多数现代浏览器中得到支持,但仍建议进行兼容性测试,以确保在不同的浏览器中都能正常工作。
2025-02-22 09:32:26
552
原创 180Wtps超高并发、大流量生产案例-通用模式抽象
在经历过春节超大流量活动后的设计与实现后,有一些总结和经验与大家一起分享一下。大流量场景,为了保证活动最终上线效果,容灾是一定要做好的。参考业界通用实现方案,如降级、限流、熔断、资源隔离,根据预估活动参与人数和效果进行使用存储预估等。1)限流方面应用了api层nginx入流量限流,分布式入流量限流,分布式出流量限流。这几个限流器都是字节跳动公司层面公共的中间件,经过大流量的验证。2)首先进行了实际单实例压测,根据单实例扛住的流量与本次春节活动预估流量打到该服务的流量。
2025-02-21 16:48:52
393
原创 如何写架构设计⽂档
在软件设计的不同阶段应该设计不同的UML模型,将不同阶段输出的UML模型图放在⼀个⽂档中,对每张模型图配以适当的⽂字说明,就构成⼀篇设计⽂档。对于规模不太⼤的软件系统,我们可以将概要设计⽂档和详细设计⽂档合并成⼀个设计⽂档。这⾥,我会展现⼀个设计⽂档示例模板,你可以参考这个模板编写你的设计⽂档。⽂档开头是设计概述,简单描述业务场景要解决的核⼼问题领域是什么。⾄于业务场景,应该在专⻔的需求⽂档中描述,但是在设计⽂档中,必须要再简单描述⼀下,以保证设计⽂档的完。
2025-02-19 21:55:54
975
原创 Kafka副本机制详解
在讨论具体的副本机制之前,我们先花一点时间明确一下副本的含义。我们之前谈到过,Kafka 是有主题概念的,而每个主题又进一步划分成若干个分区。副本的概念实际上是在分区层级下定义的,每个分区配置有若干个副本。
2025-02-19 16:51:21
738
原创 基于流程建模业务组件的构建方法
以表格形式描述业务组件定义,包括的信息名称业务组件名称描述描述业务组件的目的、定义、范围任务描述业务组件所包含的任务首责实体描述业务组件所包含的数据模型的首责数据实体以存款为例名称存款描述目的:客户视角:客户(对公客户、个人客户)根据收益需要和结算需要选择存款产品,利用现有渠道,突破时间和空间限制,合理选择各种支付结算工具方便快捷地进行查询、存款、取款、转账等业务。
2025-02-18 16:28:59
577
原创 银行IT治理——安全架构定义
安全架构的定义安全架构的定义安全架构是指为应对新的安全威胁,以及IT技术和业务的发展过程中形成的新安全态势,所提出的安全防护理念、安全技术、安全组件、安全服务及管控模式等应对措施的集合。企业应结合自身特点和业务发展开展安全架构的建设工作。安全架构原则安全架构设计遵循以下原则::将适应业务发展作为安全服务、安全基础框架建设的目标和方向。将安全管理由传统的以技术领域划分转变为以业务应用场景和流程划分,从信息系统安全延伸到应用安全、业务安全,从单点控制提升到企业级、全局风险管控的管理高度。
2025-02-18 15:57:58
714
原创 什么是堆外内存
堆外内存(Off-Heap Memory)是指Java应用程序在堆内存之外的内存区域进行的内存分配。JVM的堆内存(Heap Memory)是用于大部分Java对象的分配,而堆外内存允许在JVM控制之外管理内存,这种内存通常是通过操作系统的直接内存分配来实现的。堆外内存的特点如何使用堆外内存在Java中,使用堆外内存的常见方法是通过NIO(New I/O)中的ByteBuffer类来实现。示例代码注意事项。
2025-02-17 19:16:19
439
原创 如何使用 Ollama 在本地设置和运行 DeepSeek R1
了解如何使用 Ollama 在本地安装、设置和运行 DeepSeek-R1 并构建一个简单的 RAG 应用程序在本教程中,我将逐步介绍如何在本地运行以及如何使用 Ollama 进行设置。我们还将探索使用 R1 模型、LangChain 和 Gradio 构建一个简单的 RAG 应用程序,该应用程序可在您的笔记本电脑上运行为什么要在本地运行 DeepSeek-R1?在本地运行 DeepSeek-R1 可以让您完全控制模型执行,而无需依赖外部服务器。隐私和安全:没有数据离开您的系统。不间断访问。
2025-02-17 19:11:20
1159
原创 线程池中线程复用原理
线程复用的关键是将任务的提交和线程的创建、管理、执行分离,通过线程池来统一管理和调度,减少了创建和销毁线程的开销,提高了系统的效率。同时,由于线程池的复用特性,可以有效控制并发度,避免大量线程的创建和销毁导致的系统负载过大。线程池中的线程数量是有限的,核心线程数通常是固定的,最大线程数可以设置,超过最大线程数后,任务会被拒绝。线程池会对线程进行封装,核心原理在于将线程的创建和管理与任务的执行分离。线程池的线程复用原理是指,将线程放入线程池中重复利用,,如果是,则新建一个线程来执行任务;
2025-02-11 09:03:51
373
原创 实现:多活的基础中间件
API Router是一个HTTP反向代理和负载均衡器,部署在公有云中作为HTTP API流量的入口,它能识别出流量的归属shard,并根据shard将流量转发到对应的ezone。API Router支持多种路由键,可以是地理位置,也可以是商户ID,订单ID等等,最终由API Router映射为统一的。GZS维护着整个多活的路由表,其他所有的服务都从GZS订阅路由信息。切换机房的操作也在GZS控制台中完成。路由表包括:地理围栏信息,shard到。
2025-02-11 09:00:58
1236
原创 使用 ArchiMate 和 EA 进行企业架构建模
企业架构设计到战略、业务、数据、应用、技术等多个层次,每个层次都有很多内容,这就需要在概 念上区分清楚,对不同的概念采用不同的符号,以便:描述清晰,理解明确,行动有方向。ActiMate是企业架构建模的标准语言,支持企业架构的所有层次的建模:1.企业战略2.业务架构3.数据架构4.应用架构5.技术架构6.实现迁移如下是使用ArchiMate建立的一个企业架构的多层次简图:ArchiMate建模企业架构的6个层次:1.战略层:指定企业架构的战略目标、成长路线图。
2025-02-10 10:51:11
577
原创 ArchiMate 和 TOGAF (the Open Group Architecture Framework) 的关系
我们给一个产品做架构时,一开始肯定不是直接出功能模块、数据关系等,最重要的是要从金字塔上端开始,从到(这些更有可能公司制定),才到目标。目标主要做的就是分析到,这个也是项目组在做业务规划和架构时需要花时间的明确地方,相关涉众必须在。如果使命、愿景和测路是大方向,那么目标就是具体做事情前的指导,如果这个错了,则会对后续工作造成不可想象的后果。目标确定后,我们要做的就是作具体的As-Is分析以及To-Be了。那么我们下面看看做架构时,我们需要关注哪些方面呢?
2025-02-10 09:14:22
513
原创 超高并发直播弹幕方案
推送器推送,哪个地方看到的最多,视频网站,我们看到视频节目的时候,大家要对这个节目进行欢乐,吐槽和评论。这个就是我们看到的弹幕服务器推送技术干嘛用?就是让用户在使用网络应用的时候,不需要一遍又一遍的去手动刷新就可以及时获得更新的信息。大家平时在上各种视频网站时,对视频节目进行欢乐的吐槽和评论,会看到各种弹幕,当然,他们是用flash技术实现的,对于我们没有用flash的应用,一样可以实现弹幕。又比如在股票网站,往往可以看到,各种股票信息的实时刷新,上面的这些都是基于服务器推送技术。对于没有flash的应用,
2025-02-07 16:44:55
930
原创 互联网分布式ID解决方案
1. 基于UUID2. 基于DB数据库多种模式(自增主键、segment)3. 基于Redis4. 基于ZK、ETCD5. 基于SnowFlake6. 美团Leaf(DB-Segment、zk+SnowFlake)7. 百度uid-generator()
2025-02-07 16:10:19
601
原创 Kafka 无消息丢失最佳实战
1. 不要使用 producer.send(msg),而要使用 producer.send(msg, callback)。记住,一定要使用带有回调通知的 send 方法。2. 设置 acks = all。acks 是 Producer 的一个参数,代表了你对“已提交”消息的定义。如果设置成 all,则表明所有副本 Broker 都要接收到消息,该消息才算是“已提交”。这是最高等级的“已提交”定义。3. 设置 retries 为一个较大的值。
2025-02-07 09:25:14
414
原创 深入运行时数据区
首先“aaaa”会被认为字面量,先在字符串常量池中查找(.equals()),如果没有找到,在堆中创建“aaaa”字符串对象,并且将“aaaa”的引用维护到字符串常量池中(实际是一个hashTable结构,存放key-value结构数据),再返回该引用;首先“aaaa”会被认为字面量,先在字符串常量池中查找(.equals()),如果没有找到,在堆中创建“aaaa”字符串对象,然后再在堆中创建一个“aaaa”对象,返回后面“aaaa”的引用;:类,接口,方法,字段等相关的描述信息。最多创建一个字符串对象。
2025-02-06 16:22:13
622
原创 如何使用缓存优化系统性能?
平时使用拦截器(例如 Fiddler)或浏览器 Debug 时,我们经常会发现一些接口返回 304 状态码 + Not Modified 字符串,如下图中的极客时间 Web 首页。如果我们对前端缓存技术不了解,就很容易对此感到困惑。浏览器常用的一种缓存就是这种基于 304 响应状态实现的本地缓存了,通常这种缓存被称为协商缓存。协商缓存,顾名思义就是与服务端协商之后,通过协商结果来判断是否使用本地缓存。一般协商缓存可以基于请求头部中的 If-Modified-Since 字段与返回头部中的 Last。
2025-02-06 15:18:20
802
原创 图解Java类文件到虚拟机
虚拟机把Class文件加载到内存并对数据进行校验,转换解析和初始化形成可以虚拟机直接使用的Java类型,即查找和导入class文件1)通过一个类的全限定名获取定义此类的二进制字节流2)将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构3)在Java堆中生成一个代表这个类的对象,作为对方法区中这些数据的访问入口Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。在 Java堆中生成一个代表这个类的。
2025-02-06 14:05:11
648
原创 如何优化垃圾回收机制?
掌握 GC 算法之前,我们需要先弄清楚 3 个问题。第一,回收发生在哪里?第二,对象在什么时候可以被回收?第三,如何回收这些对象?JVM 的内存区域中,程序计数器、虚拟机栈和本地方法栈这 3 个区域是线程私有的,随着线程的创建而创建,销毁而销毁;栈中的栈帧随着方法的进入和退出进行入栈和出栈操作,每个栈帧中分配多少内存基本是在类结构确定下来的时候就已知的,因此这三个区域的内存分配和回收都具有确定性。那么垃圾回收的重点就是关注堆和方法区中的内存了,堆中的回收主要是对象的回收,方法。
2025-02-05 20:28:46
1171
原创 G1相对于CMS的的优势
G1常用参数: -XX: +UseG1GC 开启G1垃圾收集器 -XX: G1HeapReginSize 设置每个Region的大小,是2的幂次,1MB-32MB之间 -XX:MaxGCPauseMillis 最大停顿时间 -XX:ParallelGCThread 并行GC工作的线程数 -XX:ConcGCThreads 并发标记的线程数 -XX:InitiatingHeapOcccupancyPercent 默认45%,代表GC堆占用达到多少的时候开始垃圾收集。1.G1在压缩空间方面有优势。
2025-02-05 20:14:54
332
原创 在 DDD 中,如何处理跨多个实体的复杂业务?
处理跨多个实体的复杂业务是DDD中的一个关键挑战,需要深入理解业务领域、合理划分聚合、制定适当的领域服务和规则,以及不断进行建模和迭代来满足实际需求。领域驱动设计的方法和模式可以帮助团队更好地理解和应对这种复杂性。在DDD中,跨多个实体的复杂业务通常需要交由领域服务进行协调。
2025-02-05 15:58:43
292
原创 定制化企业架构元模型
普华永道与某保险集团基于TOGAFADM企业架 构开发方法论,结合某保险集团实际情况,定制化企业架构模型框架。对企业架构进行分类,分别为业务架构、应用架构、数据架构、技术架构。基于分类,参考 ArchiMate架构元模型(一种图形语言),围绕某保险集团实际情况,定制化构建企业架构元模 型,即元模型元素和元素间的关系,如业务流 程、应用功能、数据实体等。对企业架构进行分类,分别为业务架构、应用架构、数据架构、技术架构。定制化企业架构元模型,即元模型元素和元素间的关系、如业务流程、应用功能、数据实体等。
2025-02-05 14:26:27
410
原创 解释建造者模式的作用及其在什么场景下使用。
建造者模式(Builder Pattern)是一种创建型设计模式,其主要作用是将一个复杂对象的构建过程和其表示分离,以便同样的构建过程可以创建不同的表示。建造者模式通过将对象的构建细节隐藏在具体的建造者类中,使得客户端代码可以更简洁地构建对象,同时也提供了更好的可维护性和扩展性。总之,建造者模式适用于构建复杂对象的场景,将构建过程分解为多个可复用的步骤,提供更好的灵活性和可维护性。
2025-02-04 21:28:24
26
原创 架构规划之任务边界划分过程中承接分配
任务 a 的备份任务是 b,如果 b 成功,那么 a 成功。任务 a 强依赖于任务 b,如果 b 失败,那么 a 失败。这种关系是传递的,即:a->b&b->c=> a->c。在这张图中,一个架构活动强依赖于任务 a,任务 a 则强依赖于互为备份的任务 b 和任务。所谓任务边界划分,就是判定某个任务在多个承接方中,应该归属到哪个承接方的过程。这种关系是传递的,即:a>b&b>c=>a>c。这种关系也是自反的,它们不是对称的。任务与任务之间的关系分为两种基本类型,一种是强依赖关系,另一种是备份关系。
2025-02-04 21:25:24
467
原创 智能家居监控系统数据收集积压优化
亮点:RocketMQ 消息大量积压问题的解决假设我们正在开发一个智能家居监控系统。该系统从数百万个智能设备(如温度传感器、安全摄像头、烟雾探测器等)收集数据,并通过 RocketMQ 将这些数据传输到后端进行处理和分析。在某些情况下,比如突发事件或系统升级时,可能会导致消息处理速度跟不上消息生产速度,从而造成消息积压。通过以上方案,我们能够有效地处理 RocketMQ 消息积压问题,确保智能家居监控系统能够及时处理大量设备数据,特别是在数据突增的情况下。
2025-01-30 22:31:59
976
原创 MySQL 索引存储结构
B+Tree 索引和 Hash 索引是我们比较常用的两个索引数据存储结构,B+Tree 索引是通过。创建的主键索引默认使用的是 B+Tree 索引。如果我们使用的是 InnoDB 存储引擎,由于 InnoDB 使用的是聚族索引,聚族索引中的叶。树的 serial_no,找到对应的叶子节点,获取主键值,然后再通过聚族索引中的 B+ 树检索。如果我们使用的是 MyISAM 存储引擎,由于 MyISAM 使用的是辅助索引,索引中每一个。此时创建的索引是一个辅助索引,与 MyISAM 存储引擎的主键索引的。
2025-01-30 22:20:57
1555
蚂蚁金融智能中台的数据底座建设与应用场景
2025-02-06
腾讯社交网络APM端到端运维监控体系解析及其应用场景
2025-01-20
对于MySQL调优,需要确认业务表结构设计是否合理,SQL语句优化是否足够,该添加的索引是否都添加了,是否可以剔除多余的索引等等
2025-01-17
基于Activiti的低代码办公平台设计与开发:实现流程与表单自动化管理
2025-01-11
银行业IT治理最佳实践-构建安全、高效的IT治理框架以适应数字化转型
2025-01-10
华为变革及流程管理框架:IPD和ISC流程的详细解析
2024-12-18
领域驱动设计中实体与限界上下文的重构方法
2024-12-17
构建高效研发体系:IPD理论及案例解析
2024-11-01
领域驱动设计(DDD)中统一语言的开发方法与实践
2024-10-26
代码为王时代:车企软件开发能力转型策略解析
2024-10-21
云闪付微服务基础设施建设及分布式ID实践
2024-10-10
业务结果驱动型企业架构的分阶段规划
2024-09-24
加州政府企业架构框架V2.0
2024-09-24
TOGAF系列指南:企业架构中的业务场景方法论
2024-09-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人