- 博客(190)
- 资源 (4)
- 收藏
- 关注

原创 浅谈高性能高并发高可用
整个软件的发展历程是一部软件复杂性对抗史,软件的复杂性分为技术复杂性和业务复杂性,业务复杂性主要是建模和抽象设计,技术复杂性主要是三高(高性能,高并发,高可用)的应对,C端的业务一般以技术复杂性为主,业务复杂性为辅,而B端或者M端的业务通常以业务复杂性为主,技术复杂性为辅。本篇文章主要是从后端研发的视角结合自己多年的B、C端系统建设实践谈下三高系统的建设方法论和实践,希望和大家相互交流,共同进步。
2025-01-14 14:05:06
949

原创 jvm-Stop the world
Stop the world 介绍什么是Stop the world?Java中Stop-The-World机制简称STW,Java中一种全局暂停现象,全局停顿,所有Java代码停止,native代码可以执行,但不能与JVM交互。等待所有用户线程进入安全点后并阻塞,做一些全局性操作的行为。在执行垃圾收集算法时,Java应用程序的其他所有线程都被挂起(除了垃圾收集帮助器之外)。Stop-The-World对系统性能存在影响,因此垃圾回收的一个原则是尽量减少“Stop-The-World”的时间
2020-07-29 19:55:29
1433

原创 JVM参数调优总结 -Xms -Xmx -Xmn -Xss
“-Xmx1024m -Xms1024m -Xmn512m -Xss256k”——Java运行参数(转)JVM的堆的内存,是通过下面面两个参数控制的-Xms最小堆的大小,也就是当你的虚拟机启动后,就会分配这么大的堆内存给你-Xmx是最大堆的大小当最小堆占满后,会尝试进行GC,如果GC之后还不能得到足够的内存(GC未必会收集到所有当前可用内存),分配新的对象...
2020-04-08 10:17:45
47266
3
原创 StarRocks
StarRocks 凭借其高性能、实时性和易用性,成为国内分析型数据库领域的重要选择,尤其适合需要兼顾实时数据处理和复杂查询的企业级场景。,专注于解决大规模数据分析和实时查询场景的需求。它基于 MPP(大规模并行处理)架构设计,具备高并发、低延迟、易扩展等特点,被广泛应用于数据分析、实时报表、用户行为分析、日志分析、金融风控等领域。强(原生支持星型 / 雪花模型)较强(支持宽表和部分关联)MPP + 向量化执行。MPP + 向量化执行。较好(需批量写入优化)兼容 MySQL 协议。兼容 MySQL 协议。
2025-06-05 13:45:09
428
原创 百万级群聊的设计实践
不同的群聊产品,采用的技术方案是不同的,为了理解接下来的技术选型,需要先了解下这群聊产品的特性。单群成员需要支撑百万人,同时在线百万级。功能、体验要接近纯客户端实现方案。用户端完全用H5承载。在本文中,笔者介绍了从零开始搭建一个生产级百万级群聊的一些关键要点和实践经验,包括通信方案选型、消息存储、消息顺序、消息可靠性、高并发等方面,但仍有许多技术设计未涉及,比如冷热群、高低消息通道会放在未来的规划里。
2025-06-05 13:43:57
1285
原创 网站应用攻击与防御(常见9种攻击方式)
XSS全称为Cross Site Script,即跨站点脚本攻击,一般攻击者通过篡改网页 注入恶意HTML脚本,在用户浏览网页时就能执行恶意的操作,像html、css、img都有可能被攻击。
2025-06-05 13:42:13
709
原创 构建完善微服务——服务安全
相同的明文数据经过相同的消息摘要算法会得到相同的密文结果值。数据经过消息摘要算法处理,得到的摘要结果值,是无法还原为处理前的数据的。数据摘要算法也被称为哈希(Hash)算法或散列算法。消息摘要算法一般用于签名验签。消息摘要算法主要分三类:MD(Message Digest,消息摘要算法)、SHA(Secure Hash Algorithm,安全散列算法)和MAC(Message Authentication Code,消息认证码算法)。
2025-06-05 06:45:00
694
原创 架构设计技巧——数据迁移与架构推导
数据迁移与架构演进是系统升级的核心挑战,二者必须协同设计。实现新架构落地保障业务连续性新架构的技术栈、数据模型存量数据结构、数据量、一致性要求数据库选型、服务拆分策略迁移窗口期、数据校验机制新系统无法正常运行业务数据丢失/错乱共享数据库解耦按领域拆分数据库定义服务边界(Bounded Context)跨服务数据一致性采用Saga分布式事务事件驱动架构设计历史数据归属划分数据所有权映射表+数据路由中间件服务发现机制扩展load data📌。
2025-06-05 06:30:00
894
原创 架构设计技巧——架构设计模板
需求介绍主要描述需求的背景、目标、范围等性能问题:当用户发布了一条微博后,微博发布子系统需要同步调用“统计子系统”“审核子系统”“奖励子系统”等共 8 个子系统,性能很低。耦合问题:当新增一个子系统时,例如如果要增加“广告子系统”,那么广告子系统需要开发新的接口给微博发布子系统调用。效率问题:每个子系统提供的接口参数和实现都有一些细微的差别,导致每次都需要重新设计接口和联调接口,开发团队和测试团队花费了许多重复工作量。基于以上背景,我们需要引入消息队列进行系统解耦,将目前的同步调用改为异步通知。
2025-06-04 11:08:40
943
原创 架构设计技巧——如何画好架构图
为什么画 > 画什么 > 怎么画 > 用什么画。永远从目的和受众出发。分层抽象是核心武器。用多张图从不同视角描述系统。一致性是清晰度的保障。符号、颜色、标注要规范统一。简洁明了胜过面面俱到。突出主干,合理省略。架构图是活的文档。及时更新,纳入版本管理。工具服务于目的。draw.io和Mermaid是强大且免费的起点。好的架构图像一份精准的地图:它能引导开发者穿越复杂系统的迷宫,让运维预见瓶颈所在,帮新人快速把握全局。开始动手吧,先明确目标,然后从最顶层的Context图开始,逐层深入。记得,
2025-06-04 10:48:13
834
原创 Java的Spring Cloud生态中实现SSE(Server-Sent Events)服务端实践
本文介绍了在Spring Boot中实现服务器发送事件(SSE)的三种方法:1)使用@RestController返回SseEmitter对象;2)原生Servlet异步处理;3)集中式管理多个客户端连接。核心要点包括遵循SSE数据格式规范(以data:开头,\n\n结尾)、异步处理机制、超时与重连控制。文章对比了SSE与WebSocket的特性差异,建议SSE适用于服务端单向推送场景,并提供了客户端监听示例、跨域配置方案以及性能优化建议。最后针对常见问题给出排查方向,如数据格式验证、连接稳定性处理和高并发
2025-05-27 16:45:03
271
原创 实时技术对比:SSE vs WebSocket vs Long Polling
本文介绍了三种实现实时通信的技术:SSE(服务器推送事件)、WebSocket和长轮询。SSE适用于单向数据流场景(如股票行情、新闻推送),基于HTTP协议实现简单。WebSocket支持双向通信(如聊天应用),但实现较复杂。长轮询作为传统过渡方案,兼容性好但效率低下。文章通过具体场景对比了三种技术的优缺点:SSE轻量高效但仅支持单向;WebSocket功能全面但复杂度高;长轮询简单兼容但资源消耗大。最后针对股票交易、即时聊天等典型场景给出了技术选型建议,并特别总结了SSE在各种单向实时推送场景中的优势与应
2025-05-27 16:43:14
1276
原创 Redisson使用分布锁的详解
本文详细介绍了Redisson在Spring Boot项目中的整合与使用方案。主要内容包括:1) 通过pom.xml引入Redisson依赖;2) 配置Redisson客户端,支持单节点、哨兵和集群模式;3) 分布式锁的实现与高级特性(自动续期、公平锁、联锁);4) 异常处理与最佳实践;5) 高可用配置方案;6) 监控与调试方法。同时提供了完整的参数解释和性能优化建议,包括连接池配置、重试机制和订阅设置等,帮助开发者根据业务需求合理调整配置参数。通过订单处理服务示例,展示了分布式锁在实际业务中的应用场景。
2025-05-26 15:23:46
954
原创 工业互联网
工业互联网作为推动中国制造2025战略目标的关键路径,自2017年提出以来,已连续八年被写入政府工作报告,显示出国家对其发展的高度重视。工业互联网通过新一代信息通信技术与工业经济的深度融合,构建起覆盖全产业链、全价值链的制造和服务体系,是第四次工业革命的重要基石。其核心产业包括网络、标识、平台、数据、安全及工业控制与装备、系统集成七大部分,应用场景广泛,涵盖研发、生产、管理、运维和协同等方面。预计2024年,我国工业互联网核心产业增加值规模将达到1.53万亿元,对经济的带动作用显著。地域发展上,东部地区最为
2025-05-15 19:24:32
787
原创 浅谈异地多活
无论是高可用计算架构,还是高可用存储架构,其本质的设计目的都是为了解决部分服务器故障的场景下,依然能够保证系统能够继续提供服务。但在一些极端场景下,有可能所有服务器都出现故障。例如,典型的有机房断电、机房火灾、地震、水灾……这些极端情况会导致某个系统所有服务器都故障,或者业务整体瘫痪,而且即使有其他地区的备份,把备份业务系统全部恢复到能够正常提供业务,花费的时间也比较长,可能是半小时,也可能是 12 小时。因为备份系统平时不对外提供服务,可能会存在很多隐藏的问题没有发现。
2025-05-05 06:45:00
1022
原创 高可用架构设计——故障响应
查看基于时间序列的监控项的报表,是理解某个系统组件工作情况的好办法,可 以通过几个图表的相关性来初步进行问题根源的判定。这里的日志是广义的,它包括监控系统背后的各类观 测指标的时序数据,以及应用程序的程序日志。通过对关键服务进行定期的故障演练,我们可以在真正的业务故障发生之前识别潜在的弱点和风险点,并制定相应的应对措施。从理论上讲,将故障排查过程定义为反复采用假设 - 验证排除手段的过程:针对某系统的一些观察结果和对该系统运行机制的理论认知,不断提出一个造成系统问题的假设,进而针对这些假设进行测试和排除。
2025-05-05 06:15:00
972
原创 高可用架构设计——服务接口高可用
例如,最常见的数据库慢查询将数据库的服务器资源耗尽,导致读写超时,业务读写数据库时要么无法连接数据库、要么超时,最终用户看到的现象就是访问很慢,一会访问抛出异常,一会访问又是正常结果。假设这个请求的吞吐量为20qps,言下之意,很短的时间内,所有的100个工作线程都会被卡在这个第三方超时等待上,而其他N-1个原本没有问题的接口,也得不到工作线程处理。低优先级的服务通过启动不同的县城或者部署在不同的虚拟机进行隔离,而高优先级的服务则需要部署在不同的物理机上,核心服务和数据甚至需要部署在不同地域的数据中心。
2025-05-04 07:00:00
692
原创 高可用架构设计—降级、限流、资源隔离
通常,动态流控是分级别的,不同级别有不同的流控阈值,系统上线后会提供默认的流控阈值,不同留空因子的流控阈值不同,业务上线之后通常会根据现场的实际情况做阈值调优,因此流控阈值需要支持在线修改和动态生效。如果要保证当服务器宕机时不影响部署在上面运行的服务,需要采用分布式集群部署,而且要采用非亲和性安装:即服务实例需要部署到不同的物理机上,通常至少需要3台物理机,假如单台物理机的故障发生概率为0.1%,则3台同时发生故障的概率为0.001%,服务的可靠性将会达到 99.999%,完全可以满足大多数应用场景。
2025-05-04 06:30:00
843
原创 高性能架构设计-高可用
在大多数情况下,这样的操作是经由一个外部系统来实现的,它会监控实例的健康,并在它们较长时间处于错误状态的情况下,重新启动应用程序。最常见的客户端滥发请求的行为,是配置更新间隔的设置问题。对于稳定性要求很好的关键系统,在成本可接受的情况下,同时维护一套保障主链路可用的备用系统和架构,在核心依赖服务出现问题能做一定时间周期的切换过渡(例如mysql故障,阶段性使用KV数据库等),例如钉钉IM消息核心系统就实现对数据库核心依赖实现一套一定周期的弱依赖备案,在核心依赖数据库故障后也能保障一段时间消息收发可用。
2025-05-03 06:30:00
957
原创 高可用架构设计—补偿与熔断
假如服务提供者出现故障,短时间内无法恢复时,无论是超时重试还是双发不但不能提高服务调用的成功率,反而会因为重试给服务提供者带来更大的压力,从而加剧故障。针对这种情况,就需要服务消费者能够探测到服务提供者发生故障,并短时间内停止请求,给服务提供者故障恢复的时间,待服务提供者恢复后,再继续请求。这就好比一条电路,电流负载过高的话,保险丝就会熔断,以防止火灾的发生,所以这种手段就被叫作“熔断”。简单来讲,熔断就是把客户端的每一次服务调用用断路器封装起来,通过断路器来监控每一次服务调用。
2025-05-03 06:30:00
782
原创 高性能架构设计-高性能可伸缩架构
系统是一个整体,如果只是节点级别的伸缩,可能要对多个节点分别进行操作,而且不同节点的资源配置会相互影响,这样对各个节点的调整就非常复杂,影响了系统 的可伸缩能力。系统处理请求不一定要实时同步,请求流量的高峰期时间往往很短,所以有些时候,可以延长系统的处理时间,只要在一个相对合理的时间内,系统能够处理完请求就可以了,这是一种异步化的处理方式。系统的可伸缩也有两种实现方式。:异步处理给系统的处理增加了弹性空间,可以利用更多的处理时间,来降低系统对资源 的实时需求,在保证系统处理能力的同时,降低系统的成本。
2025-05-02 07:00:00
568
原创 高性能网站高可用架构-设计基础及FMEA简介
高可用的大前提:所有事物都不是100%可靠的从人的层面:人都是有可能犯错的。从软件层面:软件都是有可能有BUG的。从硬件层面:硬件都是有可能会坏的。不可抗力:地震,水灾,火灾FMEA(Failure mode and effects analysis,故障模式与影响分析)又称为失效模式与后果分析、失效模式与效应分析、故障模式与后果分析等,专栏采用“故障模式与影响分析”,因为这个中文翻译更加符合可用性的语境。
2025-05-02 07:00:00
717
原创 高性能架构设计-高性能缓存
缓存提升性能的幅度,不只取决于存储介质的速度,还取决于缓存命中率。为了提高命中 率,缓存会基于时间、空间两个维度更新数据。在时间上可以采用 LRU、FIFO 等算法淘汰 数据,而在空间上则可以预读、合并连续的数据。如果只是简单地选择最流行的缓存管理 算法,就很容易忽略业务特性,从而导致缓存性能的下降。
2025-05-01 07:15:00
2319
原创 高性能架构设计-NOSQL基础
(1)关系数据库存储的是行记录,无法存储数据结构以微博的关注关系为例,“我关注的人”是一个用户 ID 列表,使用关系数据库存储只能将列表拆成多行,然后再查询出来组装,无法直接存储一个列表。(2)关系数据库的 schema 扩展很不方便。
2025-05-01 07:00:00
640
原创 高性能架构设计-分库分表
如果预计三年后的数据量根本达不到这个级别,请不要在创建表时就分库分表。单表行数超过1000万行或者单表容量超过4GB,才推荐分库分表。
2025-04-30 16:31:50
750
原创 高性能架构设计-数据库(读写分离)
读写分离:将访问压力分散到集群中的多个节点,没有分散存储压力分库分表:既可以分散访问压力,又可以分散存储压力。
2025-04-30 16:29:55
1014
原创 网站高性能架构设计——池化
JDK 1.5 中引入的 ThreadPoolExecutor 就是一种线程池的实现,它有两个重要 的参数:coreThreadCount 和 maxThreadCount如果线程池中的线程数少于 coreThreadCount 时,处理新的任务时会创建新的线程;如果线程数大于 coreThreadCount 则把任务丢到一个队列里面,由当前空闲的线程执 行;当队列中的任务堆积满了的时候,则继续创建线程,直到达到 maxThreadCount;
2025-04-26 07:15:00
473
原创 网站高性能架构设计——web前端
动静分离”就是把用户请求的数据(如 HTML 页面)划分为“动态数据”和“静态数据”。简单来说,“动态数据”和“静态数据”的主要区别就是看页面中输出的数据是否和 URL、浏览者、时间、地域相关,以及是否含有 Cookie 等私密数据。很多媒体类的网站,某一篇文章的内容不管是你访问还是我访问,它都是一样的。所以 它就是一个典型的静态数据,但是它是个动态页面。如果现在访问淘宝的首页,每个人看到的页面可能都是不一样的,淘宝首页中包含 了很多根据访问者特征推荐的信息,而这些个性化的数据就可以理解为动态数据了。
2025-04-25 07:15:00
554
原创 架构设计基础
迭代的过程就是一个否定之否定的过程,随着分解的逐步推进或系统的架构演化,后面的分解除了会识别出新的架构元素,也可能会对先前识别出的架构作出调整。有了 TP99 这样的概念,就可以定义系统的 SLA 了,SLA 是 Service-Level Agreement, 它是系统对于它的客户所承诺的可以提供的服务质量,既包括功能,也包括性能。应该认真分析当前业务的特点,明确业务面临的主要问题,针对核心需求,设计合理的架构,快速落地以满足业务需要,然后在运行过程中不断完善架构,不断随着业务演化架构。
2025-04-25 06:45:00
1447
原创 网站高可用架构设计基础——高可用策略和架构原则
在大多数情况下,这样的操作是经由一个外部系统来实现的,它会监控实例的健康,并在它们较长时间处于错误状态的情况下,重新启动应用程序。最常见的客户端滥发请求的行为,是配置更新间隔的设置问题。对于稳定性要求很好的关键系统,在成本可接受的情况下,同时维护一套保障主链路可用的备用系统和架构,在核心依赖服务出现问题能做一定时间周期的切换过渡(例如mysql故障,阶段性使用KV数据库等),例如钉钉IM消息核心系统就实现对数据库核心依赖实现一套一定周期的弱依赖备案,在核心依赖数据库故障后也能保障一段时间消息收发可用。
2025-04-24 19:49:52
927
原创 网站高可用架构设计——监控理论简介
监控体系首先要保障一定能发现异常,如果监控无法发现异常一切都没有意义。快速发现异常:也就是要保障监控的时效性,监控和报警的响应速度直接影响故障的恢复速度。好的监控一定要保证快速发现问题。快速定位问题:在快速发现问题的基础上,优秀的监控体系还应该能迅速定位问题的根源。不仅仅是识别问题,更重要的是能够指出问题的具体位置。给出影响评估:对于大规模故障,监控体系不仅要能发现和定位问题,还应能提供准确的影响评估。
2025-04-24 19:48:06
1131
原创 服务远程调用组件 Spring Cloud Feign 架构原理及用法
最后总结一下,Feign 是一个轻量级的 HTTP 客户端框架,使用者能够以一种更简洁、易于维护的方式来实现 HTTP 服务请求。与原生 Feign 组件相比,Spring Cloud Feign 还扩展了对 Spring MVC 注解的支持,同时还整合了 Ribbon 提供客户端的负载均衡实现,以及 Hystrix 服务熔断器。传统的模式下,当我们要对某个接口发起 HTTP 请求时,首先会封装 HTTP 请求报文,然后发起请求,最后处理响应结果。,通过定义的 feign 客户端来调用服务提供方的接口。
2025-04-23 06:45:00
1029
原创 SpringCloud 整合 Nacos 构建分布式服务注册中心
Nacos 可以作为统一的服务配置中心,连接各个业务微服务,实现对各个微服务的配置文件进行集中式管理,同时也可以在运行时动态更新配置信息,而无需重新启动微服务。根据上文的架构图所示,Nacos 的集群部署完成之后,我们还需要一个统一的入口用来维护 Nacos 的访问,能用的组件有很多种,比如 DNS、Nginx 等,以此来实现 Nacos 的负载均衡访问。对于要求高可用的服务,通常会采用 3 个及以上的节点来部署,Nacos 也不例外,集群架构图可以用如下图来描述。下载完成之后,解压。
2025-04-23 06:00:00
857
原创 使用Nacos 打造微服务配置中心
Nacos 作为服务注册中心的使用方式,同时 Nacos 还可以作为服务配置中心,用于集中式维护各个业务微服务的配置资源。作为服务配置中心的交互流程图如下。这样设计的目的,有一个明显的好处就是:有利于对各个微服务的配置资源进行统一维护和管理,尤其是要更新某个配置参数时,能避免大量人肉运维工作。今天通过一些案例我们一起来了解一下,如何使用 Nacos 来实现服务配置中心的管理。
2025-04-22 16:40:50
1582
2
原创 mermaid绘图的语法详细
Mermaid 是一种基于文本的绘图工具,可通过简单的文本描述生成流程图、序列图、甘特图等多种类型的图表。以下是对其常见绘图类型语法的详细介绍:Mermaid 是一种基于文本的图表生成工具,支持多种图表类型(如流程图、序列图、甘特图等)。
2025-04-22 09:24:43
1808
原创 如何开一个线上故障复盘会
线上故障复盘会是团队总结经验、优化流程的重要环节,开好复盘会需要聚焦问题根源、避免甩锅文化、推动改进落实。复盘不是甩锅大会,是总结大会。
2025-04-18 15:36:11
370
原创 深入理解分布式缓存 以及Redis 实现缓存更新通知方案
分布式缓存:指将应用系统和缓存组件进行分离的缓存机制,这样多个应用系统就可以共享一套缓存数据了,它的特点是共享缓存服务和可集群部署,为缓存系统提供了高可用的运行环境,以及缓存共享的程序运行机制。轻量级实时通知:选择Pub/Sub,代码简单,适合对可靠性要求不高的场景(如社交动态更新)。高可靠消息队列:选择,适合订单状态同步、库存扣减等关键业务。扩展方案:若需严格保证缓存与数据库一致性,可结合MySQL Binlog 监听(如 Canal)同步到 Redis。
2025-04-18 15:06:43
789
原创 RocketMQ 的详细使用教程
RocketMQ 的核心使用流程包括安装部署、Topic 管理、消息生产与消费,高级功能涵盖事务消息、延迟消息和高可用集群配置。实际应用中需根据业务场景选择刷盘策略(同步/异步)和复制方式(同步/异步主从),并结合控制台监控优化性能。在两台服务器上分别部署 NameServer 和 Broker,配置文件。:RocketMQ 的注册中心。
2025-04-18 15:04:08
1552
DeepSeek:从入门到精通-清华大学团队打造的强大国产开源AI推理模型
2025-03-26
propties配置管理jar
2018-01-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人