随笔分类 - 架构
摘要:大家好,我是Java烘焙师。如何更新缓存和DB、做到性能和一致性的取舍,是一个很常见的话题。下面结合笔者的经验和思考,系统性地总结一下缓存更新模式,讲透讲明白。 1、旁路缓存(cache-aside) 实现方案 查询:先查缓存,查不到缓存时再查DB,并把DB内容写入缓存、设置合适的过期时间 更新:先
阅读全文
摘要:背景 在跨系统之间的数据写入场景下,上下游系统极有可能因为网络超时/抖动、或写本地DB与调外部接口不能同时成功等原因,而出现数据不一致的问题,因此需要有及时发现不一致问题、并自动修复的能力。下面结合笔者的经验,把对账做个总结。 需要注意的是,这里提的对账不特指资金对账,而是跨系统的字段对账,如B端与
阅读全文
摘要:业务发展过程中,增加字段是很常见、频繁的,因此怎么存储新增的字段是要重点考虑的因素。下面结合笔者的经验,总结一下各种业务扩展模式选型的优缺点、适用场景,如何让系统保持良好的业务扩展性。
阅读全文
摘要:正如飞机在起飞前,机长、副机长要过一遍checklist检查,确认没问题了才能起飞。楼主也整理了一个系统容量现状checklist,方便对照检查。本文搭配架构师必备:如何做容量预估和调优,食用更佳。 作为架构师,不要觉得系统容量是运维工程师才关心的问题,而应当对系统容量现状做到了如指掌。这样才能知道
阅读全文
摘要:首先要回答一个问题,为何要使用HBase? 随着业务不断发展、数据量不断增大,MySQL数据库存在这些问题: MySQL支持的数据量为TB级,不能一直保留历史数据。而HBase支持的数据量为PB级,适合存储久远的历史冷数据 新增列的代价较高,数据量越大耗费时间越长。而HBase可以随意增加列,空列不
阅读全文
摘要:背景 有2种常见的多维度查询场景,分别是: 带多个筛选条件的列表查询 不含分库分表列的其他维度查询 普通的数据库查询,很难实现上述需求场景,更不用提模糊查询、全文检索了。 下面结合楼主的经验和知识,介绍初级方案、进阶方案(上ElasticSearch),大部分情况下推荐使用ElasticSearch
阅读全文
摘要:结论 有以下几种Redis集群方案,先说结论: Redis cluster:应当优先考虑使用Redis cluster。 codis:旧项目如果仍在使用codis,可继续使用,但也推荐迁移到Redis cluster。 twemproxy:不建议使用,与codis同为proxy方案,但不如codis
阅读全文
摘要:先说结论:本地缓存优先选用caffeine,因为性能比guava cache快,api风格与之兼容、能轻松地平滑迁移,并且在spring/spring boot最新版本中已经是默认本地缓存了。下面展开讲讲本地缓存和Spring cache。 本文讨论堆内缓存,暂不讨论堆外缓存。堆内缓存是指缓存与应用
阅读全文
摘要:要在应用中做到幂等,其实并不难,本文尝试做一个系统性的总结,欢迎一起探讨。 什么是幂等 某个操作执行一次,跟执行多次的效果一样。幂等一词来自于数学中的幂等,即f(f(x)) = f(x)。 需要保证幂等的场景 查询类的读操作,天然是幂等的,多次调用不会有副作用。需考虑以下几种写操作的情况: 调用下游
阅读全文
摘要:为了构建高并发、高可用的系统架构,压测、容量预估必不可少,在发现系统瓶颈后,需要有针对性地扩容、优化。结合楼主的经验和知识,本文做一个简单的总结,欢迎探讨。 #1、QPS保障目标 一开始就要明确定义QPS保障目标,以此来推算所需的服务、存储资源。可根据历史同期QPS,或者平时峰值的2到3倍估算。 压
阅读全文
摘要:本文介绍如何应用Canal实现异步、解耦的架构,后续有空再写文章分析Canal原理和源代码。 Canal简介 Canal是用来获取数据库变更的中间件。 伪装自己为MySQL从库,拉取主库binlog并解析、处理。处理结果可发送给MQ,方便其他服务获取数据库变更消息,这一点非常有用。下面介绍一些典型用
阅读全文
摘要:上一篇文章介绍了MySQL主从同步的原理和应用,本文总结了MySQL主从延迟的原因和解决办法。如果主从延迟过大,会影响到业务,应当采用合适的解决方案。 MySQL主从延迟的表现 先insert或update写入更新操作,再立即select查询,但是得不到最新的结果。 可通过show slave st
阅读全文
摘要:日常工作中,MySQL数据库是必不可少的存储,其中读写分离基本是标配,而这背后需要MySQL开启主从同步,形成一主一从、或一主多从的架构,掌握主从同步的原理和知道如何实际应用,是一个架构师的必备技能。楼主将在本文做总结,看这一篇就够了。 1、主从同步原理 主从同步架构图(异步同步) 这是最常见的主从
阅读全文
摘要:按楼主的经验和知识,本文总结了应用开发中的各种存储架构,从易到难,从起步到起飞。如有不对之处,欢迎留言。 1、单库 最简单的初始架构,适用于千万级以下的数据,并发量低的场景。 单库、单表 或单库、多个分表:之所以分表是为了给后续分库做预留准备 2、分库分表、读写分离 最常见的存储架构,适用于十亿级别
阅读全文