A1-系统设计与架构
文章平均质量分 69
系统设计
乐之者v
一生编程,快乐编程。
展开
-
常见的系统设计
建一个任务表,当任务失败时,写入到任务表中。通过定时任务,扫描任务表,对逻辑进行补偿。一般用 mysql。数据量达到两千万以上的考虑分库分表。当业务逻辑执行失败时,可以做一些补偿处理。根据业务,设置重试的次数、重试的时间间隔。多次自动补偿,仍失败的,考虑人工补偿。高并发场景,考虑加入缓存。原创 2024-07-10 19:46:55 · 185 阅读 · 0 评论 -
记一次接口超时
近期,收到线上告警,某个接口在中午12点时,突然超时了。原创 2024-07-07 00:10:40 · 192 阅读 · 0 评论 -
接口异步回调
比如 , 系统A 的 A1接口调用 系统B 的 B1接口, 系统B在完成功能后,系统B 回调系统A 的 另一个接口 A2。如果先调用系统 B,有可能系统 B 回调太快, 系统 A的数据表还没插入成功,导致数据没有更新成功。如果系统A 需要在数据表插入数据, 最好先插数据,再调用 系统 B,最后根据回调结果更新数据表。比如逻辑更新成功,返回一个特定的响应码code,这样第三方系统就不再回调了。执行逻辑成功后终止回调,可以减少对系统的网络连接,节省系统的资源。有些系统会要求在逻辑成功后,终止回调。原创 2024-06-21 13:54:02 · 174 阅读 · 0 评论 -
系统稳定性概览
如果存在大量的永久key,会占用过多的redis内存空间。慢sql会长时间占用 数据库连接数,如果项目中有大量的慢sql,那么可用的数据库连接数就会变少,进而会影响业务。系统在同一时间,能处理的请求数量是有限的,高耗时接口会长时间占用请求数量,影响系统可用性。微服务,通过traceId 链路追踪,分析在各个服务的耗时。阿里云告警、webhook推送告警、接口错误率告警、接口超时告警、错误日志告警。对于要求低延时的业务,及时关注 kafka的消息堆积。系统稳定性,包括:监控、 告警、慢sql、耗时接口。原创 2024-05-30 22:18:43 · 391 阅读 · 0 评论 -
限流及限流算法
限流:限流的目的是通过对并发访问/请求进行限速,或者对一个时间窗口内的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务、排队或等待、降级等处理。滑动窗口算法:将时间窗口分为多个小窗口,每个小窗口都有自己的计数器。随着时间的滑动,过期的小窗口数据被删除,这样可以更精确地控制流量。滑动窗口所允许通过的请求数:当前窗口的请求数 + 之前窗口的请求数* 滑动窗口和之前窗口的重合率。缓存:缓存的目的是提升系统访问速度和增大系统处理容量。漏桶算法,有一个固定容量的漏桶。限流是高并发的处理方法之一。原创 2024-05-27 00:11:30 · 167 阅读 · 0 评论 -
Mysql自增id、uuid、雪花算法id的比较
雪花算法生成的 id,包括 符号位(1位),时间戳( 41位) ,数据中心ID (5位), 机器ID(5位), 序列号(12位)。序列号 (12位) :对于某个机器/进程, 每生成 一个ID,序列号就加1,这个数字每毫秒开始时都会被重置 为0。雪花id 的生成依赖于机器的时钟,如果时钟回拨或者时钟不同步,可能会导致生成的id不唯一。雪花id 占用的存储空间较大,通常为64位,如果作为主键,会占用更多的存储空间。雪花算法,可以生成唯一id,id 只包含数字, 长 64位。1.不适用于分布式系统。原创 2024-05-24 23:47:00 · 425 阅读 · 0 评论 -
系统之间的一致性问题 -- 支付成功显示未支付
支付之后,主动查询,如果查询到的支付状态是未支付,那么服务端可以把订单放到延时队列中,1秒后再次查询,如果1秒后还是未支付,再次放入延时队列。如果付款之后,展示 “未支付”, 用户可能会投诉,但是如果 付款之后,展示的是 “支付中”, 用户或许会主动刷新页面,等待最新的支付结果。客户端重试,不需要做太多次,可以每隔一秒查询一次支付结果,如果是未支付就继续查询,最多三次。用户支付之后,如果第三方系统的支付状态还是未支付,当前系统可以展示 为 “支付中”。接入第三方系统的支付接口,支付成功后,却显示未支付。原创 2024-04-26 16:04:13 · 297 阅读 · 0 评论 -
支付功能设计及实现思路
订单日志表,记录下所有的操作,包括生成订单,提交订单,支付回调,支付状态,操作记录(是第三方回调,还是前端轮询,还是定时任务)等。可以用另一个新的Redis队列,当失败达到一次的次数后,就用新队列来存放这些未支付或者支付失败的订单。当回调结果为支付成功,而且数据库的支付状态不是支付成功时,才将支付状态改为支付成功,并执行业务功能。支付系统:指的是提供聚合支付服务的系统,同时提供微信支付,支付宝,银联等多种支付方式。性能太差,应付不了并发。订单日志表,最主要的就是订单号,支付状态,操作记录,支付渠道。原创 2024-02-21 23:55:06 · 1058 阅读 · 0 评论 -
后端的技术设计文档
拆解成多个工作项,每个工作项,需要多少人力。原创 2024-02-07 23:37:37 · 1326 阅读 · 0 评论 -
app跳转小程序免登录
code2Session接口文档:(5) 前端根据 wx.request 向服务端发起业务请求, 参数带上自定义登录态。wx.request的接口文档:原创 2024-01-13 00:52:11 · 632 阅读 · 0 评论 -
《凤凰架构》读书笔记
第一章 服务架构演进史架构演进原始分布式时代。当时计算机硬件局促的运算处理能力,已直接妨碍到了在单台计算机上信息系统软件能够达到的最大规模。为突破硬件算力的限制,各个高校、研究机构、软硬件厂商开始分头探索,寻找使用多台计算机共同协作来支撑同一套软件系统运行的可行方案。这一阶段是对分布式架构最原始的探索。调用远程方法遇到的问题,比如,远程的服务在哪里(服务发现),有多少个(负载均衡),网络...原创 2022-03-28 10:53:00 · 119 阅读 · 0 评论 -
分布式系统的简单理解
思考:尽可能说出自己的理解,用大白话讲述,而不是复制粘贴资料。重点:分布式事务,分布式搜索,分布式缓存,分布式锁,分布式消息队列,分布式session,分库分表集群、分布式1.集群:同一个业务,部署在多个服务器上(不同的服务器运行同样的代码,干同一件事)2.分布式:一个系统分拆多个子模块,部署在不同的服务器上(不同的服务器,运行不同的代码,协同完成功能)3.当今是个分布式、集群、云计...原创 2018-09-03 21:08:00 · 35 阅读 · 0 评论 -
需求评估-不同数据量和场景的技术选型
评估一个需求时,一定要搞清楚数据量和业务场景。不同的数据量,不同的业务场景,使用的技术是不一样的。数据常用的中间件mysql数据量:百万级别事务:支持事务并发:不支持高并发mysql分库分表数据量:千万级别事务:支持事务。并发:支持高并发全文检索:不支持,左模糊不走索引,性能较差。es数据量:亿万级别全文检索:es尤其擅长。需要搜索时,基本会用es。事务...原创 2023-07-07 23:55:00 · 66 阅读 · 0 评论 -
java后端解决问题的思路
实际中遇到的问题,可能会更加复杂,还是需要多思考,多分析,多解决实际问题。无他,唯手熟尔。原创 2023-11-08 22:52:51 · 430 阅读 · 0 评论 -
接口设计-增删改查
关于增删改查的 接口设计,比较简单,有一些固定的做法可以使用。原创 2023-11-05 00:00:44 · 298 阅读 · 0 评论 -
如何提高系统的可用性/高可用
提高系统可用性常用的一些方法,有缓存、异步、重试、幂等、补偿、熔断、降级、限流。原创 2023-10-25 20:15:14 · 808 阅读 · 0 评论 -
如何写好一个接口
关键的日志用 info级别,调试的日志用 debug 级别,错误日志用 error 级别。VO对象,哪怕是没有值的属性,最好也设置一个值,否则前端获取到对象后还得判断是否存在对应的属性。异常日志,最好打印出异常的方法栈,以及对应的参数,能够还原现场,定位问题。入参用 DTO,出参用 VO,数据库对应的用 Entity或者DO。在做重构的时候,有单元测试可以测试,不用担心重构出错。关键的入参,最好打印日志,否则出了问题,很难定位。关键的方法,在结束前,可以打印日志。异常处理,返回用户能理解的异常提示。原创 2023-10-09 21:07:26 · 167 阅读 · 0 评论 -
接口性能优化
一、耗时统计在做接口的性能优化时,最重要的是知道时间消耗在哪里。可以用StopWatch,进行耗时统计。详情见: https://www.cnblogs.com/expiator/p/17045089.html二、链路追踪如果团队使用了Skywalking,可以用来进行链路追踪,耗时统计。时间主要消耗在哪些服务,哪些方法,通过traceid一看便知。Skywalking非常有用,哪...原创 2023-02-05 23:22:00 · 61 阅读 · 0 评论 -
导入导出的系统设计
导入导入在系统中属于比较常见的功能。新增数据时,每次只新增一条数据,会比较慢。可以通过导入excel文件,进行批量导入。导入的主要流程(1)用户点击下载excel导入模板(2)用户填写模板数据后,点击上传文件,选中文件进行上传(3)解析导入文件(4)校验字段,并给出提示数据全部校验通过,就批量新增/更新,导入成功后提示成功。部分数据校验不通过,不导入数据,直接提示失败的行数/...原创 2022-08-27 23:56:00 · 99 阅读 · 0 评论 -
审批流程的设计
应用场景在项目开发中,有时会遇到一些审批流程的需求,流程大同小异,可以根据需求进行设计开发。表结构示例CREATE TABLE `tt_audit` ( `id` int(10) NOT NULL COMMENT '流水号', `submit_date` date NOT NULL COMMENT '提交日期', `submit_reason` varchar(500) DE...原创 2023-02-22 00:04:00 · 182 阅读 · 0 评论