目录

Life in Flow

知不知,尚矣;不知知,病矣。
不知不知,殆矣。

Redis分布式锁同步问题-Redlock

分布式锁知识回顾 业务场景 优惠券领券限制张数 商品库存超卖 …… 起因 为了防止分布式系统中的多个进程之间相互干扰,我们需要一种分布式协调技术来对这些进程进行调度 利用互斥机制来控制共享资源的访问,这就是分布式锁要解决的问题 实现目标 保证同一时间只有一个客户端可以对共享资源进行操作。 解决方案 Redis+Lua脚本 使用Redission框架(底层也是Lua+WatchDog机制) Redis主从架构下的锁同步问题 生产环境下一般都是集群部署,则存在主从架构下的锁同步问题。 节点一在主节点获取分布式锁成功。 Redis主节点再同步数据到从节点时宕机,数据没同步成功。 高可用机制则Redis从节点升级为主节点(但是没有锁信息)。 节点二在新的Redis上也成功获取分布式锁。 导致一个锁资源同时被两个节点获取,这个就出现了问题。 Redlock算法 官方文档 Redis从3.0版本开始支持 Redlock算法,通过在多个 Redis 节点上创建同一个锁来防止主从节点之间出现的数据不一致的问题。 在 Redlock 算法中,需要从多个Redis节点获取锁,并对取锁结果进行校验,从而避免....

Vue3

Node.js环境安装 Node版本选择 下载地址:https://nodejs.org/en/download Windows11安装Node.js参考步骤 切换镜像测试 # 切换镜像源 npm config set registry https://registry.npmmirror.com # 查看是否生效 npm config get registry # 进行安装测试 npm install -g express VScode(Visual Studio Code) 下载地址:https://code.visualstudio.com/Download Vue官网 快速上手 通过CDN使用Vue <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</t....

Selenium

Web UI 自动化测试 利用软件工具模拟用户在图形界面上与应用程序交互的过程,自动执行测试用例并验证 UI 的功能是否符合预期 使用自动化工具来打开网站/定位页面元素、操作元素(如输入文本、点击按钮等)模拟用户行为(如下拉菜单、滑动页面等) 通过 UI 自动化测试可以 提高测试效率、确保回归测试的全面性,减少重复工作,且对持续集成和持续部署过程帮助很大 UI 自动化技术也可以爬取网页的核心内容,并且结合数据处理,存储到数据库和二次使用,即爬虫应用 优点: 高效率 可以在较短时间内执行大量的测试用例,提高测试效率,对于回归测试,可以显著减少测试所需的时间和人力。 减少人为错误 自动化测试脚本是由代码控制的,相比于人工测试,可以减少由于人为因素导致的错误。 可重复性和一致性 自动化测试脚本可以反复执行,每次测试的条件和步骤都是一致的,保证测试的一致性和可重复性。 更好的资源利用 自动化测试可以在非工作时间执行,如夜间,充分利用无人值守时间,提高了资源的利用率。 缺点: 不能完全取代手工测试 自动化测试虽然可以执行大量的测试用例,但对于一些需要人脑判断结果的测试用例 或者对于新功能的首次测....

System Architect

该文章已经加密。

RBAC

RBAC     RBAC 就是一个权限控制模型,这个模型是经过时间沉淀之后,相当通用、成熟且被大众接受认可的一个模型。我的理解是 RBAC 和数学公式是一个道理,数学题可以套用数学公式,而权限系统也可以套用 RBAC 权限模型。     RBAC(Role-Based Access Control)权限模型的概念,即:基于角色的权限控制。通过角色关联用户,角色关联权限的方式间接赋予用户权限。     利用 MySQL 数据库实现了 RBAC 权限模型。因为 MySQL 支持 JSON 类型的字段,所以我们定义多对多关系的时候,可以使用 JSON 数组字段。虽然 Phoenix 也支持 JSON 类型字段,但是相关的函数较少,而且 JSON 类型字段不支持表连接。所以在 Phoenix 中,我们只能用交叉表记录多对多关系了。 一、IDEA 连接 Phoenix     由于 Phoenix 自带的命令行客户端没有图形界面直观,所....

SaToken

JWT     JSON Web Token (JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为 JSON 对象在各方之间安全地传输信息。该信息可以被验证和信任,因为它是数字签名的。     下列场景中使用 JSON Web Token 是很有用的: Authorization (授权) : 这是使用 JWT 的最常见场景。一旦用户登录,后续每个请求都将包含 JWT,允许用户访问该令牌允许的路由、服务和资源。单点登录是现在广泛使用的 JWT 的一个特性,因为它的开销很小,并且可以轻松地跨域使用。 Information Exchange (信息交换) : 对于安全的在各方之间传输信息而言,JSON Web Tokens 无疑是一种很好的方式。因为 JWT 可以被签名,例如,用公钥/私钥对,你可以确定发送人就是它们所说的那个人。另外,由于签名是使用头和有效负载计算的,您还可以验证内容没有被篡改。     传统的单体 JavaW....

Hbase+Phoenix

背景 mysql 单表数据量超过 2000W,CRUD 性能会极具下降。需要 DBA 或自动化脚本定期归档(半年或一年数据迁移到归档数据库中),以起到缩表的目的。电商项目一两个月就能积累几千万条数据。在这种情况下,要么频繁的做归档,要么选择可以容乃数百 TB 而不需要归档的大数据平台(降低运维成本)。 HBase HBase 是一种构建在 HDFS 之上的分布式、面向列(但不是列存储)的存储系统。 在需要实时读写 、随机访问 超大规模数据集时,可以使用 HBase。 HBase 可以通过线性方式增加节点来进行扩展 。HBase 不是关系型数据库,自身不支持 SQL 查询引擎,HBase 适合将大而稀疏的表放在分布式集群上。 HBase 是 Google Bigtable 的开源实现,利用 Hadoop HDFS 作为其文件存储系统;利用 Hadoop MapReduce(或其他计算引擎) 来处理 HBase 中的海量数据;使用 Zookeeper 作为协同服务。 HBase 的特点 容量大:一个表可以有上亿行,上百万列 面向列:面向列的存储(但不是列存储,参考 HBase 数据存储)....