随笔分类 - 架构
摘要:【IT老齐026】分布式架构公共表 被其他业务模块共享的基础数据表,被称为公共表 比如:系统用户表、行政区划、组织机构、系统配置 问题 假如用户表有4000万数据,在查询时不小心没有索引,导致磁盘io直接拉满,其他表访问就会出现高延迟 方案 实时数据,将公共表下沉为基础服务 业务模块上浮为业务服务
阅读全文
摘要:【IT老齐025】JWT续签 情况 不允许改变Token令牌实现续签 允许改变JWT实现续签 refresh_token和access_token的设计最根本的原因是因为 token验证服务器 和 token分发服务器 是分离的,换句话说 refresh_token 从来没有发送到真正执行验证的业务
阅读全文
摘要:【IT老齐024】前后端分离JWT Json Web Token (JWT) JWT是一个经过加密的,包含用户信息的且具有时效性的固定格式字符串 组成 JWT的创建与校验 具体方案 网关统一校验 JWT校验无感知,验签过程无侵入 执行效率低,适用于低并发企业级应用 应用认证 控制更加灵活,有一定代码
阅读全文
摘要:【IT老齐044】慢SQL优化 表结构 CREATE TABLE `a`( `id` int(11) NOT NULL AUTO_INCREMENT, `seller_id` bigint(20) DEFAULT NULL, `seller_name` varchar(100) CHARACTER
阅读全文
摘要:【IT老齐020】接口幂等性 传统方案 业务代码增加前置判断 if(数据未更新){ 更新数据 } 缺点 判断因素过多 技术问题干扰业务代码 通用方案 幂等表 架构方案 nginx+lua+redis 请求经过nginx转发到redis,redis查找幂等表是否存在请求id(uuid或请求hash)对
阅读全文
摘要:【IT老齐019】Seata分布式事务解决方案 Seata 是一款开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。在 Seata 开源之前,其内部版本在阿里系内部一直扮演着应用架构层数据一致性的中间件角色,帮助经济体平稳的度过历年的双11,对上层业务进行了有力的技
阅读全文
摘要:【IT老齐018】Redis高可用Sentinel架构方案 主从复制 master主要负责写入,slave负责读取。有读写分离的功能 主从同步原理 slave执行命令向master建立连接 master执行bgsave(后台存储),生成rdb快照(redis备份方式,data以二进制方式保存在本地)
阅读全文
摘要:【IT老齐016】MySQL高可用MHA架构方案 MHA是日本程序员yoshinorim开发的MySQL高可用方案 采用Perl语言开发 MHA是最成熟MySQL高可用方案 场景:主服务器挂了,从服务器不会切换到主服务器,从而引出高可用MHA方案 。 MHA故障发现与转移 故障发现 启动:前置检查
阅读全文
摘要:【IT老齐014】阿里Canal实现MySQL异构数据同步 场景 商户在后台系统添加数据,消费者需要在前台获取数据。这时候需要将后台的数据同步到es中。mysql的数据跟es存储的数据不一样,称为异构数据。 原始做法:团队A在java代码中新增mysql数据时,调用团队B的接口新增es商品数据。 缺
阅读全文
摘要:【IT老齐012】外键约束 优点 保证数据的完整性和一致性 级联操作方便 数据一致性交给数据库,代码量小 缺点 性能问题 额外的数据一致性校验查询 并发问题 外键约束会启用行级锁主表写入时会进入阻塞 级联删除问题 多层级联删除会让数据变得不可控 数据耦合问题 数据库层面数据关系产生耦合,数据迁移维护
阅读全文
摘要:【IT老齐011】负载均衡器 作用 高可用 设备压力平均分配 支持故障发现和转移 种类 硬件负载均衡(F5) 软件负载均衡 4层代理(指网络7层模型(OSI)的传输层,TCP)LVS 7层代理(指网络7层模型(OSI)的应用层,HTTP)Nginx 负载均衡策略 LVS 轮询、加权轮询、最小连接、加
阅读全文
摘要:【IT老齐010】CAP定理 分布式架构的基本理论。 指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。 C:更新操作成功后,所有节点在同一时间的数据完全一致。(复习:事务的一致性:事务前后的数据完整
阅读全文
摘要:【IT老齐009】IP直连 问题 IP直连存在强耦合问题,因为业务更新可能发生代码修改,编译,部署,走流程等。 线上建议用域名代替ip地址。 解决方案 内部DNS 建立一个域名解析服务器,直接访问数据库ip对应的域名,域名解析服务器根据配置解析该域名对应的IP返回。 优点 IP地址迁移变得灵活,后续
阅读全文
摘要:【IT老齐008】布隆过滤器 缓存穿透 绕过缓存服务器进入数据库查询 场景举例:正常redis有1000条缓存数据,忽然遭到爬虫/流量攻击攻击,大量不存在的于redis的数据批量查询,由于redis不存在这些数据,会到数据库进行查询。由于数据库对于瞬时高并发访问的承载能力弱,所以可能对数据库造成影响
阅读全文
摘要:【IT老齐007】水平分表严禁自增主键 自增主键在分布式环境下不适用 由于自增主键必须连续,所以只能按照范围法进行分片。 引发问题 ID的数量已固定。无法进行动态扩展,会有资源浪费。 产生“尾部热点”效应,最后分片压力极大。 UUID不能替代自增主键 uuid,唯一无序。无序导致索引重排。主键有序的
阅读全文
摘要:【IT老齐004】多级缓存架构 客户端、应用层、服务层、数据层 客户端缓存 主要对浏览器的静态资源进行缓存 通过在浏览器设置Expires或者Cache-control,时间段内以文件形式把图片保存在本地,减少多次请求静态资源带来的带宽损耗(解决并发手段) 浏览器只负责读取Expires或者Cach
阅读全文
摘要:【IT老齐003】数据垂直分表 水平分表 范围法和hash法 针对数据量大的存储问题 垂直分表 将一张大表按列切分多张小表分别存储,通过主外键关联查询数据 基本情况 基本数据单位为行,管理数据单位为页(默认大小16k),保存页的单位为区(默认大小1m,最大64个页)。 根本原因 innodb1.0引
阅读全文
摘要:【IT老齐002】MySQL集群模式与应用场景 单库模式 优点 简单粗暴 适合数据量干万以下小型应用 企业网站,创业公司首选 缺点 不具备可用性与并发性 读写分离集群模式 读写分离中间件 insert、update、delete负载均衡到从库 select路由到主库 MySQL主从复制 binlog
阅读全文
摘要:【IT老齐001】单体架构升级问题 不谈场景的架构设计都是耍流氓 架构没有对不对,只有合不合适 架构是宏观设计的标准 框架是具体实现的规则 架构是取舍的艺术 场景举例 系统面临大量文件读写影响服务器磁盘IO导致数据库查询高延迟 初级解决方案 Redis 通过在内存中的高吞吐完成无事务的操作 问题 架
阅读全文