架构设计
文章平均质量分 84
CoLiuRs
菜鸟。
展开
-
电商系统价格字段的后端存储设计
在电商系统中,价格是一个核心数据元素,其存储设计直接影响系统的性能、可靠性和可扩展性。本文将详细探讨价格字段的数据库设计和相关接口设计。1.1 表结构1.2 分片策略对于大规模系统,可以考虑按product_id进行分片,以提高查询效率和系统扩展性。2.1 价格查询接口2.2 价格设置接口2.3 批量价格更新接口3.1 缓存策略3.2 并发控制3.3 数据验证3.4 日志和审计3.5 性能优化。原创 2024-08-11 11:42:55 · 783 阅读 · 0 评论 -
代码分支管理规范
在使用 Git 的过程中如果没有清晰流程和规划,否则,每个人都提交一堆杂乱无章的 commit,项目很快就会变得难以协调和维护。Git 版本管理同样需要一个清晰的流程和规范,Vincent Driessen 为了解决这个问题提出了 A。原创 2024-08-07 09:30:00 · 332 阅读 · 0 评论 -
如何熟悉一个新系统
要一个测试账号,把相关功能走一遍,这样能非常快地了解一个系统的功能;看现有的服务,业务的技术,产品文档,快速了解当前业务看关键的核心表结构,这样可以快速了解系统的领域模型;根据功能步骤找到系统对外的接口列表,了解系统的L0业务流程;下载系统工程,熟悉整个工程结构和模块职责;以一个最重要的流程为入手点,阅读代码,看清楚核心的执行逻辑,可以变看边画时序图制造一个debug场景,以debug方式走一遍流程,这样可以实际加深一下做一个小需求,掌握相关的流程和权限;原创 2024-05-31 00:43:05 · 111 阅读 · 0 评论 -
Redis常见集群方案
Redis集群方案目前主流的有三种,分别是Twemproxy、Codis和Redis Cluster。原创 2023-01-07 20:38:06 · 737 阅读 · 0 评论 -
分布式系统架构
分布式系统:硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。原创 2023-01-04 18:33:38 · 1812 阅读 · 1 评论 -
消息队列应用与原理剖析
消息队列:在消息的传输过程中保存消息的容器,生产者和消费者不直接通讯,依靠队列保证消息的可靠性,避免了系统间的相互影响。系统间的数据流通道原创 2023-01-03 16:28:37 · 351 阅读 · 0 评论 -
配置中心应用与原理剖析
配置中心:分布式系统中集中化管理线上应用程序配置项的管理中心。原创 2022-10-09 17:44:35 · 494 阅读 · 0 评论 -
注册中心:Consul原理分析
Consul是一个高可用的分布式服务注册中心,由HashiCorp公司推出,Golang实现的开源共享的服务工具。Consul在分布式服务注册与发现方面有自己的特色,解决方案更加“一站式”,不再需要依赖其他工具。原创 2022-10-08 19:23:39 · 1709 阅读 · 0 评论 -
注册中心原理分析
CAP中,其中有一个P是不能保证的,因为在现实的网络环境中,不能保证一定不能出现网络分区,在出现网络分区的时候,我们应该怎么选择A 或者 C?提到服务的可用性,就会出现一个非常重要的CAP 定理。对于注册中心来说,我们应该选择一个什么样的可用性呢?原创 2022-09-23 18:38:28 · 1422 阅读 · 0 评论 -
RPC 核心原理理论分析
RPC 的全称是 Remote Procedure Call,即远程过程调用。简单解读字面上的意思,远程肯定是指要跨机器而非本机,所以需要用到网络编程才能实现。从业务角度来看,RPC有两个作用从技术角度来看,RPC有这几个作用。原创 2022-09-09 19:33:36 · 974 阅读 · 0 评论 -
微服务API网关
微服务的架构体系中,可以简单的看做是一个大应用拆分为多个小应用,小应用可以自成体系,可以拥有自己的数据库、框架甚至于语言等等,各个小应用一般通过Rest接口的形式被第三方、H5或者APP去调用。这个时候必然会存在一种情况,某些页面需要多个服务组合才能得到用户需要的信息。举个栗子:我们不做任何处理的时候,调用的时候是这样:该处的缺点就是前端需要调用多次服务才能拿到我们想要的数据,为了解决这个问题我们可以做一层中间的聚合层,聚合层也就是我们通常所说的BFF。原创 2022-09-05 19:35:00 · 787 阅读 · 0 评论 -
性能优化究竟应该怎么做
在高并发系统中,业务往往想提高系统的性能,降低接口的延迟,提高用户体验。本文介绍如何提供系统服务的一些参考方法。原创 2022-08-28 11:38:41 · 741 阅读 · 0 评论 -
Redis的事务,Go+lua
Redis的事务,Go+luaRedis 事务Redis的基本事务(basic transaction)需要用到MULTI命令和EXEC命令,这种事务可以让一个客户端在不被其他客户端打断的情况下执行多个命令。和关系数据库那种可以在执行的过程中进行回滚(rollback)的事务不同,在Redis里面,被MULTI命令和EXEC命令包围的所有命令会一个接一个地执行,直到所有命令都执行完毕为止。当一个事务执行完毕之后,Redis才会处理其他客户端的命令。Redis事务在执行的中途遇到错误,不会回滚,而是继原创 2022-05-10 23:55:00 · 649 阅读 · 0 评论 -
缓存数据一致性,雪崩,大Key,热Key问题解决方案
使用缓存为什么使用缓存缓存就是数据交换的缓冲区(称作Cache),目的就是提高我们的接口性能,特别是那些需要大量CPU计算和I/O获取的数据。使用缓存带来的问题缓存虽然能够提高应用程序的性能,但也会带来一些问题。比如:缓存失效,缓存击穿,缓存雪崩,数据一致性问题缓存雪崩缓存失效为什么会带来问题呢?试想一下,单个的缓存失效其实并不会引发多大的问题,问题在于当大量的Key同时失效时,在高并发的情况下,大量的请求同时到数据库层,会给数据库层带来压力,从而引发其他的问题。解决方案优化过期时间既然是原创 2022-05-10 00:57:46 · 1252 阅读 · 0 评论 -
Prometheus监控业务指标
Prometheus是一个开源的监控系统和告警工具,支持多维数据指标, 可以给一条数据打上多个标签, 在查询时根据这些标签做过滤支持PromQL, 可以非常灵活地查询和汇总需要地数据支持图形界面可视化展示, 如grafana等Prometheus架构Prometheus Server 是普罗米修斯的核心服务,提供了对外的HTTP服务以及数据存储, 它将数据存储在时序数据库中.普罗米修斯支持主动和被动方式收集指标数据, 即我们常说的pull模式和push模式. 普罗米修斯会通过配置job/原创 2022-04-28 15:52:51 · 4907 阅读 · 0 评论 -
实现延迟队列的几种方案
背景实际项目当中,经常会使用延迟队列,执行一些延迟任务,比如:如果第一次通知失败,就延迟 X 分钟再通知一次,这在构建webhook的项目中很常见。如果用户成功消费,X 天后没有评论,就默认给予好评。这些任务具有的共同点可以抽象为:在某项任务执行完毕后,延迟一定时间执行另外一项任务。我们需要什么延迟队列:一种带有 延迟功能 的消息队列延时队列模型,就是将未来执行的事件提前存储好,然后不断扫描这个存储,触发执行时间则执行对应的任务逻辑可以选择的技术方案定时扫表服务启动时,开启一原创 2022-04-17 20:56:41 · 5301 阅读 · 0 评论 -
微服务架构熔断设计分析
服务雪崩效应微服务系统有多个系统组成,但由于某些原因(到达性能极限、未知bug、网络分区等)导致访问上游很慢,这时如果没有服务的熔断与降级那么调用者服务会因为上游异常而积累过多请求导致产生大量等待请求,进而调用者服务也会引发访问慢或中止服务的问题,从而引发其他系统问题,如此一来,由上游本身的问题而引发依赖服务的整个链路都出问题,这就是典型的服务雪崩效应。原创 2022-04-13 22:12:47 · 2964 阅读 · 0 评论 -
项目设计-服务可靠性建设
软件工程有两个显著特点,一是具备规模化快速复制扩散的能力,二是在竣工之后依然可以被改造并保持高速进化。这也就导致了软件工程一点点的不足也可能被快速扩散、无限放大造成大规模损失,进化中既有的稳定性结构可能会被不断打破,可能导致大量的救火投入,疲于奔命,极大地消耗有效而宝贵研发资源,阻碍软件的进行甚至带来灾难性后果。‘所以,我们在项目设计时需要考虑到服务的可靠性建设,稳定性保障围绕的核心在业务团队进行服务设计的时候,稳定性保障涉及应用架构代码质量、流量与封网管控、故障复盘、监控等,是一项非常系统化的工程。原创 2021-12-19 01:23:38 · 519 阅读 · 0 评论 -
Go-Redis 使用与源码分析
通常,连接错误记录是读多写少的,所以采用读写锁来保证该记录的并发安全(读写锁在该场景下性能更佳)。// 加锁 p . lastDialErrorMu . RLock() err := p . lastDialError。原创 2021-09-14 01:03:42 · 1774 阅读 · 0 评论 -
MySQL 日志类型
MySQL 日志类型事务的4大特性ACID原子性(Atomicity):一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚。一致性(consistency):数据库总是从一个一致性的状态转换到另一个一致性的状态。(其实原子性和隔离性间接的保证了一致性)隔离性(isolation):通常来说,一个事务所做的修改在最终提交以前,对其他事务是不可见的。持久性(durability):一旦事务提交,则其所做的修改就会永久保存到数据库中。bin log原创 2021-08-28 14:37:41 · 427 阅读 · 0 评论 -
服务端接口限流设计
限流简介什么是限流在不同场景下限流的定义也各不相同,可以是每秒请求数、每秒事务处理数、网络流量。通常我们所说的限流指的是限制到达系统并发请求数,使得系统能够正常的处理部分用户的请求,来保证系统的稳定性。为什么限流接口无法控制调用方的行为。热点业务突发请求、恶意请求攻击等会带来瞬时的请求量激增,导致服务占用大量的 CPU、内存等资源,使得其他正常的请求变慢或超时,甚至引起服务器宕机。按照请求次数进行收费的接口需要根据客户支付的金额来限制客户可用的次数。限流的行为拒绝服务:把多出来的请求拒原创 2021-08-27 00:57:49 · 589 阅读 · 0 评论 -
服务接口反爬虫设计
服务接口反爬虫设计反爬虫设计为什么要反爬虫免费查询的资源被批量抓走,丧失竞争力恶意抓取信息,造成信息泄露反什么样的爬虫成型的商业对手恶意爬虫有什么反爬虫方法论基本框架对请求进行预处理,便于识别;识别是否是爬虫;针对识别结果,进行适当的处理;反爬虫手段基于身份识别进行反爬爬虫默认情况下不会带上referer字段,服务器端通过判断请求发起的源头,以此判断请求是否合法, 如果没有referer字段,直接拒绝请求爬虫默认情况下没有User-Agent,或者使用默认的Us原创 2021-08-18 00:50:06 · 1452 阅读 · 0 评论 -
项目重构-项目代码分层的意义
项目重构-项目代码分层的意义分层设计是什么?有什么好处?分层设计将软件划分成若干层,每一层只解决一部分问题,通过所有层的协作来完成整体的目标。一个复杂的问题通过分解成一系统子问题,这样就有效的降低了每个子问题的规模与复杂度。分层设计带来的好处:降低了系统软件的复杂度。将一个复杂问题通过分解,分而治之。功能的复用和封装。项目分层的目的保证多成员参与的项目保持视觉一致性;迭代与交接可以更加无缝;减少设计出错率;提升团队工作效率;直接目的是约束设计行为,最终目的是确保设计合理统一如原创 2021-08-17 00:50:28 · 1065 阅读 · 0 评论