- 博客(464)
- 收藏
- 关注
原创 揭秘登上2021春晚舞台的黑科技-XR技术
我是架构精进之路,点击上方“关注”,坚持每天为你分享技术干货,私信我回复“01”,送你一份程序员成长进阶大礼包。2021牛年春晚的舞台效果太美了,在视觉表现、科技创新上做了诸多尝试,...
2021-02-14 17:16:07 5505 8
原创 系统稳定性建设实践总结
2020年,注定是个不平凡的一年。疫情的蔓延打乱了大家既定的原有的计划,同时也催生了一些在线业务办理能力的应用诉求,作为技术同学,需要在短时间内快速支持建设系统能力并保障其运行系统稳定性...
2020-12-03 12:45:00 2517 1
原创 关于Java程序服务预热那些事
hello,大家好,我是张张,「架构精进之路」公号作者。一、背景1.1 什么是服务预热所谓服务预热,就是在服务启动完成到对外提供服务之前,针对特定场景提供一些初始化准备操作。比如线程池预热、缓存预热、数据库预热、web预热和JVM预热等。1.2 为什么要预热因为服务刚启动的时候需要一段磨合期,这段期间,服务运行状态没有达到最佳。因此,如果这时候一下子将服务流量提升到正常水平,就有可能导致大量请求超...
2024-03-17 08:31:37 886
原创 一文了解限流策略的原理与实现
hello,大家好,我是张张,「架构精进之路」公号作者。引言限流策略主要用来控制在高并发、大流量的场景中对服务接口请求的速率。比如双十一秒杀、抢购、抢票、抢单等场景。举个例子,假设某个接口能够扛住的QPS为1k,这时有1w个请求进来,经过限流模块,会先放1k个请求,其余的请求会阻塞一段时间。不简单粗暴地返回404,让客户端重试,同时又能起到流量削峰的作用。在业务迭代开发过程中,系统的稳定性和可靠性...
2024-03-13 08:31:36 330
原创 为女儿奴程序员打造的“小可爱”
hello,大家好,我是张张,「架构精进之路」公号作者。本文分享一个无代码平台「扣子」搭建陪伴式养成角色-交互工具的使用全流程。1 扣子简介不禁要问,扣子是个啥?扣子(英文名称 Coze,直达官网) 是新一代一站式 AI Bot 开发平台。扣子主要功能:集成了丰富的插件工具,可以极大地拓展 Bot 的能力边界。提供了简单易用的知识库功能来管理和存储数据,支持 Bot 与你自己的数据进行交互。提供了...
2024-02-29 08:31:32 351
原创 让 数据库 和 缓存 数据保持一致的三种策略
hello,大家好,我是张张,「架构精进之路」公号作者。一、背景目前随着缓存架构方案越来越成熟化,通常做法是引入「缓存」来提高读性能,架构模型就变成了这样:先来看一下什么时候创建缓存,前端请求的读操作先从缓存中查询数据,如果没有命中数据,则查询数据库,从数据库查询成功后,返回结果,同时更新缓存,方便下次操作。在数据不发生变更的情况下,这种方式没有问题,如果数据发生了更新操作,就必须要考虑如何操作缓...
2024-02-20 08:31:39 749
转载 RabbitMQ vs Kafka,我到底该如何选?
hello,大家好,我是张张,「架构精进之路」公号作者。介绍作为一名有着大量微服务系统处理经验的软件架构师,我经常遇到一个不断重复的问题:“我应该使用 RabbitMQ 还是 Kafka?”出于某种原因,许多开发人员认为这些技术是可以互换的。虽然在某些情况下确实如此,但 RabbitMQ 还是 Kafka 之间存在根本上的差异。因此,不同的场景需要不同的解决方案,选择错误的方案会严重影响我们的软件...
2024-01-25 08:31:43 88
转载 Redis 实现多规则限流的思考与实践
hello,大家好,我是张张,「架构精进之路」公号作者。简介市面上很多介绍redis如何实现限流的,但是大部分都有一个缺点,就是只能实现单一的限流,比如1分钟访问1次或者60分钟访问10次这种,但是如果想一个接口两种规则都需要满足呢,我们的项目又是分布式项目,应该如何解决,下面就介绍一下redis实现分布式多规则限流的方式。思考如何一分钟只能发送一次验证码,一小时只能发送10次验证码等等多种规则的...
2024-01-03 08:30:22 28
转载 从一笔交易充值,考虑到分布式事务处理
hello,大家好,我是张张,「架构精进之路」公号作者。文章纲要此次分享的缘由目前分布式事务问题是怎么解决的行业中有什么解决方案这些解决方案分别有什么优缺点别人是怎么做的我们可以怎么来做此次分享的缘由支付重构考虑支付重构的时候,自然想到原本属于一个本地事务中的处理,现在要跨应用了要怎么处理。拿充值订单举个栗子吧,假设:原本订单模块和账户模块是放在一起的,现在需要做服务拆分,拆分成订单服务,账户服务...
2023-12-07 08:31:57 42
转载 MySQL查询,是 join性能好,还是in一下更快呢?
hello,大家好,我是张张,「架构精进之路」公号作者。一、表结构1、用户表2、订单表二、先来试少量数据的情况1、join2、分开查3、代码层面三、试下多一些数据的情况1、join2、分开3、代码层面三、试下多一些数据的情况1、join2、分开3、代码层面四、到底怎么才能更好参考资料先总结:数据量小的时候,用join更划算数据量大的时候,join的成本更高,但相对来说join的速度会更快数据量过大...
2023-12-01 08:02:09 155
转载 Redis如何实现分页+多条件模糊查询?答案来了
hello,大家好,我是张张,「架构精进之路」公号作者。导言Redis是一个高效的内存数据库,它支持包括String、List、Set、SortedSet和Hash等数据类型的存储,在Redis中通常根据数据的key查询其value值,Redis没有模糊条件查询,在面对一些需要分页、排序以及条件查询的场景时(如评论,时间线,检索等),只凭借Redis所提供的功能就不太好不处理了。本文不对Redis...
2023-11-17 07:33:08 142
转载 SQL性能优化详解,值得收藏
hello,大家好,我是张张,「架构精进之路」公号作者。很多朋友经常会遇到如下情况:在做数据统计分析时,分析两分钟,跑数两小时......Web开发时候,通常的性能瓶颈,主要出现在数据查询时候.......在使用SQL过程中不仅要关注数据结果,同样要注意SQL语句的执行效率。本文涉及三大部分:1、SQL介绍2、SQL优化方法3、SQL优化实例1、MySQL的基本架构1)MySQL的基础架构图左边...
2023-11-15 08:31:22 55
转载 批量写库操作,如何优化?
hello,大家好,我是张张,「架构精进之路」公号作者。引言数据库插入操作的语句如下:insert into table values (a1, b1)涉及到SQL层和存储层,其中SQL层需要解析SQL语句,生成抽象语法树(AST),计算表达式等,存储层需要判断主键冲突,包括增量数据和基线数据上的主键冲突,如果是非重复主键,则将数据插入到增量数据中。上条插入语句只插入一行数据,称之为单条插入,相应...
2023-11-03 08:31:55 53
原创 MySQL与MongoDB,该如何做技术选型?
hello,大家好,我是张张,「架构精进之路」公号作者。引言一般情况下,会考虑到MySQL与MongoDB如何做技术选型的时候,你一定是遇到了类似于非结构化数据JSON的存取难题,否则大家都直接MySQL开始搞起了。为什么要关注MongoDB呢?下图是DB-Engines 2023年10月数据库的排名统计,可以看到MongoDB总排名在第5,在Nosql数据库中排名第1。既然要做技术选型,那就先要...
2023-10-31 18:30:39 193
原创 应该如何正确理解BFF架构设计?
hello,大家好,我是张张,「架构精进之路」公号作者。一、什么是BFFBFF:Backends For Frontends(服务于前端的后端)。BFF是一种Web架构,微服务设计系列丛书的作者 Sam Newman曾在他的博客中写了一篇相关文章《Pattern: Backends For Frontends》。BFF 的概念最初就是来源于此服务端设计API时会考虑到不同设备的需求,即为不同设备提...
2023-10-27 08:31:09 244
转载 数据库分库分表方案,总结的非常好!
hello,大家好,我是张张,「架构精进之路」公号作者。一、数据切分介绍关系型数据库本身比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。当单表的数据量达到1000W或100G以后,由于查询维度较多,即使添加从库、优化索引,做很多操作时性能仍下降严重。此时就要考虑对其进行切分了,切分的目的就在于减少数据库的负担,缩短查询时间。数据库分布式核心内容就是数据切分(Sharding),以及切分...
2023-10-08 08:30:29 597
转载 聊聊企业级消息推送的架构设计
hello,大家好,我是张张,「架构精进之路」公号作者。架构目标构建企业级统一基础推送服务,支持通过多渠道推送,能够统一集成的电子邮件、短信、聊天、钉钉、企业微信和其他公共社交应用:聊天 - 微信Wechat/QQ站内推送通知(移动设备和Web浏览器)站外推送通知(移动设备,APP没有开启)短信(如登录密码、营销活动)电子邮件钉钉企业微信企业级统一基础推送服务,是一个通用特性,适用于所有现代分布式...
2023-09-20 18:59:58 52
转载 合适的网络流量管理组件,API 网关 vs 负载均衡 究竟该如何抉择?
hello,大家好,我是张张,「架构精进之路」公号作者。由于互联网技术的发展,网络数据的请求数节节攀升,这使得服务器承受的压力越来越大。在早期的系统架构中,通常使用负载均衡来将网络流量平摊到多个服务器中,以此减轻单台服务器的压力。但是现如今,后端服务的种类在不断地变多,每个种类的后端都以 API 的形式对外暴露,这使得 API 的数量也在不断变多。以传统的负载均衡为主的系统架构的局限性就变得明显...
2023-08-23 08:31:48 87
转载 架构师必知必会,聊聊后端架构设计的演进
hello,大家好,我是张张,「架构精进之路」公号作者。你想成为一名架构师,对吗?别对我撒谎,我知道你想成为架构师。即使你不想,你还是想成为一名更好的开发者。否则,你就不会花时间阅读这篇文章????相信每一位程序员都有一颗成为架构师的心。毕竟,我们都希望在自己所从事的领域变得更好,即使不能称为最好。程序员的成长绕不开架构设计,有时架构设计就像鸿沟一样挡在程序员晋升之路上,只要跨过去就可以海阔天空。那么,...
2023-08-16 08:31:53 174
转载 一个高流量高并发系统,设计关注点有哪些
hello,大家好,我是张张,「架构精进之路」公号作者。相信每一位开发同学多多少少都想参与或负责一个高用户、高访问、高并发的系统吧。一来可以增加自己实际的项目经验,有应对高并发场景的解决方案,二来是有个高并发的项目经验无疑是自己简历的一个大大的加分项。但是奈何很多人都没有机会可以参与这样的项目,本文从以下几点介绍一下设计一个高流量高并发的系统需要经历哪些步骤以及考虑哪些因素(文章中的不足之处还请大...
2023-07-26 08:30:37 122
原创 ChatGPT:向未来迈进的智能对话伴侣
hello,大家好,我是张张,「架构精进之路」公号作者。相信最近许多朋友的生活中,可能或多或少都被 ChatGPT 刷屏了。记得 2023 年初时候,正值 ChatGPT 火热的时候,我当时整理过一篇一文看懂:近期不断 “狂飙” 的 ChatGPT。你可能看了很多文章,依然没有搞明白,ChatGPT 究竟是什么,它跟我有什么关系?间隔半年之后,再次重温回顾下 ChatGPT,今天的文章较长,所以...
2023-07-16 08:30:09 3014
转载 私藏多年的系统性能优化十大绝招(万字干货)
hello,大家好,我是张张,「架构精进之路」公号作者。阅读提醒→:本文内容较干,且篇幅较长,感谢打开,剩下的只管交给收藏夹。上篇引言:取与舍软件设计开发某种意义上是“取”与“舍”的艺术。关于性能方面,就像建筑设计成抗震9度需要额外的成本一样,高性能软件系统也意味着更高的实现成本,有时候与其他质量属性甚至会冲突,比如安全性、可扩展性、可观测性等等。大部分时候我们需要的是:在业务遇到瓶颈之前,利用常...
2023-07-05 08:30:13 176
转载 面对复杂业务系统,通用架构设计法则
hello,大家好,我是张张,「架构精进之路」公号作者。一、什么是复杂系统我们经常提到复杂系统,那么到底什么是复杂系统。我们看下维基的定义:复杂系统(英语:complex system),又称复合系统,是指由许多可能相互作用的组成成分所组成的系统。强调了两点:由点组成点之间有各种关联两点的规模和复杂性直接决定了系统的复杂程度。比如就拿我们的电商系统举例,分成很多部分,商品、库存、采购、订单、物流、...
2023-06-20 08:30:21 621
转载 高可用高性能核心原理探究,Kafka 核心全面总结
hello,大家好,我是张张,「架构精进之路」公号作者。引言在探究 Kafka 核心知识之前,我们先思考一个问题:什么场景会促使我们使用 Kafka? 说到这里,我们头脑中或多或少会蹦出异步解耦和削峰填谷等字样,是的,这就是 Kafka 最重要的落地场景。异步解耦:同步调用转换成异步消息通知,实现生产者和消费者的解耦。想象一个场景,在商品交易时,在订单创建完成之后,需要触发一系列其他的操作,比如...
2023-06-16 08:30:36 494
原创 尝试用Go goroutine实现一个简单的聊天服务
hello,大家好,我是张张,「架构精进之路」公号作者。对于聊天服务,想必大家都不会陌生,因为在我们的生活中经常会用到。我们用 Go 并发来实现一个聊天服务器,这个程序可以让一些用户通过服务器向其它所有用户广播文本消息。这个程序中有四种 goroutine。main 和 broadcaster 各自是一个 goroutine 实例,每一个客户端的连接都会有一个handleConn 和 client...
2023-06-08 08:30:12 400
转载 记录一下,亿级别大表拆分的心路历程
hello,大家好,我是张张,「架构精进之路」公号作者。# 前言笔者是在两年前接手公司的财务系统的开发和维护工作。在系统移交的初期,笔者和团队就发现,系统内有一张5000W+的大表。跟踪代码发现,该表是用于存储资金流水的表格,关联着众多功能点,同时也有众多的下游系统在使用这张表的数据。进一步的观察发现,这张表还在以每月600W+的数据持续增长,也就是说,不超过半年,这张表会增长到1个亿!笔者内心:...
2023-05-30 08:30:56 97
转载 聊聊分布式服务下的八种异步实现方式
hello,大家好,我是张张,「架构精进之路」公号作者。前言:异步执行对于开发者来说并不陌生,在实际的开发过程中,很多场景多会使用到异步,相比同步执行,异步可以大大缩短请求链路耗时时间,比如:「发送短信、邮件、异步更新等」,这些都是典型的可以通过异步实现的场景。一、异步的八种实现方式1、线程Thread2、Future3、异步框架CompletableFuture4、Spring注解@Async5...
2023-05-24 08:30:53 478
原创 致那些35岁-45岁的伪“中年人”
hello,大家好,我是张张,「架构精进之路」公号作者。中年人是几岁到几岁?今天特意百度了下:“中年人是几岁到几岁?”给出的答案是:“45周岁到59周岁”说实话,有点儿出乎我的意料,40岁还不算是中年人嘛,造成这种错觉的原因,也许是周围被充斥了太多“35岁职场危机”的消息。近几年,关于年轻人和青年这个话题的讨论就一直占据热门榜,许多带着“35岁”的话题标签接踵而至。在这些讨论中,往往有一个醒目的...
2023-05-19 20:30:49 111
转载 聊聊微服务架构下网关的技术选型
hello,大家好,我是张张,「架构精进之路」公号作者。1、简介当使用单体应用程序架构时,客户端(Web 或移动端)通过向后端应用程序发起一次 REST 调用来获取数据。负载均衡器将请求路由给 N 个相同的应用程序实例中的一个。然后应用程序会查询各种数据库表,并将响应返回给客户端。微服务架构下,单体应用被切割成多个微服务,如果将所有的微服务直接对外暴露,势必会出现安全方面的各种问题,另外内外耦合严...
2023-05-17 08:30:39 188
转载 一文一图,搞懂微服务架构路线图
hello,大家好,我是张张,「架构精进之路」公号作者。我为什么选择微服务架构?众所周知,单体应用程序,由于其种种不足,几乎不支持敏捷方法。如果你想为一个大型或复杂的业务创建一个软件项目,最好从微服务架构开始。微服务架构是一种灵活的架构,可以显著性地提高应用程序灵活性、可扩展性等。微服务架构路线据我了解很多开发者,想知道他们应该如何开始微服务架构旅程,虽然有成千上万的资源可以使用,但是资源到处分散...
2023-05-06 12:30:36 477
转载 浅析分布式系统中的补偿机制设计问题
hello,大家好,我是张张,「架构精进之路」公号作者。在分布式系统越来越普及的今天,补偿机制是程序员在学习分布式开发的时候需要重点掌握的一个编程开发方法,而今天我们就一起来聊聊,补偿机制的应用表现都有哪些实现方法。文章目录一、关于业务补偿机制1、什么是业务补偿2、业务补偿设计的实现方式二、关于回滚1、显示回滚2、回滚的实现方式三、关于重试1、重试的使用场景2、重试策略3、重试时的注意事项四、业务...
2023-05-05 12:31:01 414
原创 聊聊分布式日志系统的设计与实践
hello,大家好,我是张张,「架构精进之路」公号作者。1、什么是日志日志是一种按照时间顺序存储记录的数据,它记录了什么时间发生了什么事情,提供精确的系统记录,根据日志信息可以定位到错误详情和根源。按照APM概念的定义,日志的特点是描述一些离散的(不连续的)事件。由于日志本身固有的特性,记录从左向右开始顺序插入,也就意味着左边的记录相较于右边的记录“更老”, 也就是说我们可以不用依赖于系统时钟,这...
2023-04-29 08:30:11 441
转载 服务接口优化的常见方案实战总结
hello,大家好,我是张张,「架构精进之路」公号作者。一、背景针对老项目,去年做了许多降本增效的事情,其中发现最多的就是接口耗时过长的问题,就集中搞了一次接口性能优化。本文将给小伙伴们分享一下接口优化的通用方案。图片二、接口优化方案总结1.批处理批量思想:批量操作数据库,这个很好理解,我们在循环插入场景的接口中,可以在批处理执行完成后一次性插入或更新数据库,避免多次IO。//批量入库batch...
2023-04-28 08:31:13 105
原创 有没有那么一瞬间,你也曾有过“失业焦虑”?
hello,大家好,我是张张,「架构精进之路」公号作者。每一次新技术潮流到来,都有人宣传它们会让“程序员”失业,比如云服务、低代码等等云原生、DevOps,催生了“运维该集体下岗”的看法生成式 AI 正在颠覆多个行业,专家预言 3 年内将终结编程……今年随着ChatGPT的不断突破创新,具备更完善的能力来被适用于多个工作应用之中。媒体们都在吵着预测这将给全球劳动力市场带来重大颠覆,全球预计将有3亿...
2023-04-21 08:31:29 788
原创 MySQL 索引常见问题汇总,一次性梳理
索引是存储引擎用于提高数据库表的访问速度的一种数据结构。如果 SQL 语句中用到了组合索引中的最左边的索引,那么这条 SQL 语句就可以利用这个组合索引去进行匹配。当遇到范围查询(>、 2 and c = 3,那么a、b个字两段能用到索引,而c无法使用索引,因为b字段是范围查询,导致后面的字段无法使用索引。
2023-04-06 11:33:03 2438
原创 执行个 DEL 竟也会阻塞 Redis?深挖一下果然不简单
忠告各位开发同学,即便Redis提供了lazy-free,我建议还是尽量不要在Redis中存储bigvalue
2023-04-03 10:22:15 889
原创 PHP 中数组是如何灵活支持多数据类型的?
hello,大家好,我是张张,「架构精进之路」公号作者。在PHP中,数组数据结构的应用处理是使用频率非常高的,相对于Java、C++ 这种强类型语言来说,PHP的数组简直可以说是太好用了,可以存储各种类型的数据(如:数字、字符串甚至对象等),为开发带来了极大的便利。基于 PHP 数组的强大特性,我们可以轻易实现更加复杂的数据结构,比如栈、队列、列表、集合、字典等。你是否迫不及待的想要一探究竟:PH...
2023-03-24 08:30:50 152
原创 一文带你看通透,MySQL事务ACID四大特性实现原理
hello,大家好,我是张张,「架构精进之路」公号作者。说起MySQL事务处理的四大特性,相信大家都可以张口就来:ACID!那 MySQL是如何实现ACID的?每种特性的原理又是如何实现的?今天,本文笔者主要探讨MYSQL InnoDB引擎下的ACID实现原理,对事务、锁以及隔离级别等内容统一进行回顾一下。1、ACID特性原子性(Atomicity)单个事务,为一个不可分割的最小工作单元,整个事务...
2023-03-11 09:00:40 1489
原创 通过alter table 来实现重建表,同事大呼开眼界了
hello,大家好,我是张张,「架构精进之路」公号作者。1、应用背景在日常工作开发中,在MySQL中,如果我们对大表频繁进行insert和delete操作,那么时间一长,这个表中会出现很多"空洞",也就是表碎片。碎片产生的原因是insert随机值作为主键id,会产生很多数据页分裂操作;而delete掉一些排列有序的主键值,这些被delete的空间不会直接释放,而是仅仅进行delete的标记,这些空...
2023-03-03 12:20:54 410
原创 实习生疑问:为什么要在需要排序的字段上加索引呢?
hello,大家好,我是张张,「架构精进之路」公号作者。众所周知,为了避免全表扫描,条件句中增加了索引,性能上对比一目了然。组内实习生同学不禁疑问:为什么要在排序的字段上添加索引呢?排序有好多种算法来实现,在 MySQL 中经常会带上一个 limit,表示从排序后的结果集中取前 100 条,或者取第 n 条到第 m 条。要实现排序,我们需要先根据查询条件获取结果集,然后在内存中对这个结果集进行排序...
2023-02-23 08:30:43 543
二维码生成接口(含源码),简单易用
2022-12-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人