
分布式系统设计模式
文章平均质量分 91
hashcon
做自媒体技术分享很久了,大家的抬爱与支持让我很开心很感激,但是个人本来做这些也并不是为了收益,只是为了个人学习与传播知识帮助更多的人,所以我将全网所有账号全部收益,持续捐给各种公益项目,也算不辜负大家的抬爱,也是回报祖国对我的一番培养。
曾任职于顺丰,华为,网易等公司,从Java小白,成长为资深开发与项目组首席架构师。喜欢源码与开源,曾贡献 MyCat1.6 核心源码,贡献过druid,Spring Cloud,dubbox,Apache RocketMQ,Apache Bookeeper 等多开源项目。
展开
-
一种简易但设计全面的ID生成器思考
分布式系统中,全局唯一 ID 的生成是一个老生常谈但是非常重要的话题。随着技术的不断成熟,大家的分布式全局唯一 ID 设计与生成方案趋向于趋势递增的 ID,这篇文章将结合我们系统中的 ID 针对实际业务场景以及性能存储和可读性的考量以及优缺点取舍,进行深入分析。本文并不是为了分析出最好的 ID 生成器,而是分析设计 ID 生成器的时候需要考虑哪些,如何设计出最适合自己业务的 ID 生成器。项目地址:https://github.com/JoJoTec/id-generator首先,先放出我们的全.原创 2021-08-22 09:07:48 · 247 阅读 · 0 评论 -
2021-2-16:请问你知道分布式设计模式中的Quorum思想么?
有效个数(Quorum)有效个数(Quorum)这个设计模式一般是指分布式系统的每一次修改都要在大多数实例上通过来确定修改通过。问题背景在一个分布式存储系统中,用户请求会发到一个实例上。通常在一个实例上面执行的修改,需要复制到其他的实例上,这样可以保证在原实例挂了的情况下,用户依然可以看到这个修改。这就涉及到一个问题,究竟复制到多少个其他实例上之后,用户请求才会返回成功呢?如果复制的实例个数过多,那么请求响应时间就会更长;如果复制的实例过少,则这个修改可能会丢失。取得这个平衡性很重要,这也是分布式 P原创 2021-02-16 11:10:23 · 9173 阅读 · 0 评论 -
微服务系统架构设计系列 - RateLimiter - 1. 限流器简介与一般算法
Key TakeAways限流器是一种防御性的编程实现方式,防止一个大型的分布式系统在不可预知的大流量到来的时候导致系统大规模故障。限流器可以设置在服务端,主要为了限制资源的使用。放在客户端主要考虑调用压力更加均匀。一般限流器有五种算法,分别是:令牌桶,漏斗桶,固定窗口,滑动日志(指的其实是广义上的滑动窗口),滑动窗口(这里指的是滑动日志+固定窗口结合的一种算法)。什么是限流器?限流器是一种限制某种操作在一定时间内的执行次数(例如每秒钟5次)或者执行量(例如每秒钟1G大小的数据)的机制。哪里会用原创 2020-12-10 18:56:40 · 23231 阅读 · 3 评论 -
分布式系统设计模式 - 预写日志(Write Ahead Log)
原文地址:https://martinfowler.com/articles/patterns-of-distributed-systems/wal.htmlWrite-Ahead log 预写日志预写日志(WAL,Write-Ahead Log)将每次状态更新抽象为一个命令并追加写入一个日志中,这个日志只追加写入,也就是顺序写入,所以 IO 会很快。相比于更新存储的数据结构并且更新落盘这个随机 IO 操作,写入速度更快了,并且也提供了一定的持久性,也就是数据不会丢失,可以根据这个日志恢复数据。背.原创 2020-09-24 18:52:27 · 9660 阅读 · 2 评论 -
分布式系统设计模式 - 最低水位线(Low-Water Mark)
最低水位线(Low-Water Mark)最低水位线是指在 WAL(Write Ahead Log)预写日志这种设计模式中,标记在这个位置之前的日志可以被丢弃。问题背景WAL(Write Ahead Log)预写日志维护了对于存储的每次更新,随着时间不断增长,这个日志文件会变得无限大。Segmented Log 分割日志这种设计模式可以让我们每次只处理一个更小的文件,但是日志如果不清理,会无休止增长以至于硬盘被占满。解决方案最低水位线这种设计模式会告诉系统哪一部分的日志可以被删除了,即在最低水位线原创 2020-09-22 19:26:39 · 9412 阅读 · 0 评论 -
分布式系统设计模式 - 分割日志(Segmented Log)
分割日志(Segmented Log)将大文件切分为更容易处理的多个更小的文件。问题背景单一的日志文件可能会增长到很大,并且在程序启动时读取从而成为性能瓶颈。老的日志需要定时清理,但是对于一个大文件进行清理操作很费劲。解决方案将单一日志切分为多个,日志在达到一定大小时,会切换到新文件继续写。//写入日志public Long writeEntry(WALEntry entry) { //判断是否需要另起新文件 maybeRoll(); //写入文件 return翻译 2020-09-21 20:22:01 · 532 阅读 · 1 评论