冷饭新炒:理解JWT的实现原理和基本使用
前提这是《冷饭新炒》系列的第五篇文章。
本文会翻炒一个用以产生访问令牌的开源标准JWT,介绍JWT的规范、底层实现原理、基本使用和应用场景。
JWT规范很可惜维基百科上没有搜索到JWT的条目,但是从jwt.io的首页展示图中,可以看到描述:
JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties
从这段文字中可以提取到JWT的规范文件RFC 7519,里面有详细地介绍JWT的基本概念,Claims的含义、布局和 ...
基于BIT数组实现全局功能开关
前提某一天巧合打开了sofa-bolt项目,查找部分源码,看到了项目中使用bit数组实现功能开关的特性,感觉这种方式可以借鉴,于是写下这篇文章。
原理bit数组的布局如下:
由于每个bit都可以表示1或者0,刚好对应于开关的ON和OFF。只需要定义好每个开关所在的bit数组下标和开关的状态(ON = 1或者OFF = 0),通过判断不同开关下标所在的bit即可判断开关的状态:
优点:节省空间,理论上只需要占用最多2n位的内存(n为开关的数量,这里考虑扩容,扩容让bit数组长度为原来的2倍)
缺点:暂时没发现
实现JDK中的bit数组可以直接使用BitSet。首先定义开关定义Swit ...
冷饭新炒:理解JDK中UUID的底层实现
前提UUID是Universally Unique IDentifier的缩写,翻译为通用唯一标识符或者全局唯一标识符。对于UUID的描述,下面摘录一下规范文件A Universally Unique IDentifier (UUID) URN Namespace中的一些描述:
UUID(也称为GUID)定义了统一资源名称命名空间。UUID的长度为128比特,可以保证在空间和时间上的唯一性。
动机:
使用UUID的主要原因之一是不需要集中式管理,其中一种格式限定了IEEE 802节点标识符,其他格式无此限制。可以自动化按需生成UUID,应用于多重不同的场景。UUID算法支持极高的分配速率 ...
冷饭新炒:理解Redisson中分布式锁的实现
前提在很早很早之前,写过一篇文章介绍过Redis中的red lock的实现,但是在生产环境中,笔者所负责的项目使用的分布式锁组件一直是Redisson。Redisson是具备多种内存数据网格特性的基于Java编写的Redis客户端框架(Redis Java Client with features of In-Memory Data Grid),基于Redis的基本数据类型扩展出很多种实现的高级数据结构,具体见其官方的简介图:
本文要分析的R(ed)Lock实现,只是其中一个很小的模块,其他高级特性可以按需选用。下面会从基本原理、源码分析和基于Jedis仿实现等内容进行展开。本文分析的Red ...
短链接服务Octopus的实现与源码开放
前提半年前(2020-06)左右,疫情触底反弹,公司的业务量不断提升,运营部门为了方便短信、模板消息推送等渠道的投放,提出了一个把长链接压缩为短链接的功能需求。当时为了快速推广,使用了一些比较知名的第三方短链压缩平台,存在一些问题:
收费贵
一些情况下,短链域名在部分第三方平台例如微信会被封杀
回源数据没有办法定制处理方案,无法打通整个业务链路进行数据分析和跟踪
基于此类问题,决定自研一个(长链接压缩为)短链接服务,当时刚好同步进行微服务拆分,内部很多微服务需要重新命名,组内的一个妹子说不如就用Github的吉祥物去命名octopus cat(章鱼猫)去命名,但是考虑到版权问题,去掉了她最 ...
CentOS7搭建Hadoop-3.3.0集群
前提这篇文章是基于Linux系统CentOS7搭建Hadoop-3.3.0分布式集群的详细手记。
基本概念Hadoop中的HDFS和YARN都是主从架构,主从架构会有一主多从和多主多从两种架构,这里为了简化搭建集群的流程,这里使用一主多从的架构。Hadoop集群中各个角色的名称如下:
服务
主节点
从节点
HDFS
NameNode
DataNode
YARN
ResourceManager
NodeManager
还有SecondaryNameNode,其实是NameNode的备用节点,定时合并和处理日志并且反馈到NameNode上。一般NameNode和Secon ...
ClickHouse数据库数据定义手记之不一般的DDL和DML
前提前面一篇文章已经很详细地介绍了ClickHouse中每种数据类型的定义和基本使用,这篇文章会详细地介绍ClickHouse中的DDL和DML,很多操作区别于传统的DBMS,特别是代价巨大的DELETE和UPDATE操作。接下来开始吧💪💪
一般情况下,笔者建议ClickHouse的关键字全用大写,这样可以更加凸显出自定义的驼峰命名和大写关键字的不同,可读性和可维护性更高
本文使用的ClickHouse服务版本为当前最新的20.10.3.30
数据库DDLClickHouse服务启动后,默认会生成一个命名为default的数据库(除了系统数据库之外,不切换数据库创建表默认就是在 ...
ClickHouse数据库数据定义手记之数据类型
前提前边一篇文章详细分析了如何在Windows10系统下搭建ClickHouse的开发环境,接着需要详细学习一下此数据库的数据定义,包括数据类型、DDL和DML。ClickHouse作为一款完备的DBMS,提供了类似于MySQL(其实有部分语法差别还是比较大的)的DDL与DML功能,并且实现了大部分标准SQL规范中的内容。系统学习ClickHouse的数据定义能够帮助开发者更深刻地理解和使用ClickHouse。本文大纲(右侧分支)👇👇
本文会详细分析ClickHouse目前最新版本(20.10.3.30)支持的所有数据类型。
数据类型ClickHouse的数据类型从大体的来看主要包 ...
Windows10系统下使用Docker搭建ClickHouse开发环境
前提随着现在业务开展,几个业务系统的数据量开始急剧膨胀。之前使用了关系型数据库MySQL进行了一次数据仓库的建模,发现了数据量上来后,大量的JOIN操作在提高了云MySQL的配置后依然有点吃不消,加之开发了一个基于关系型数据库设计的标签服务,日全量标签数据(无法避免的笛卡尔积)单表超过5000W。目前采取了基于用户ID分段配合多进程处理的方式暂时延缓了性能的恶化,但是考虑到不远将来,还是需要做一个小型的数据平台。Hadoop的那套体系过于庞大,组件过多,硬件和软件的学习成本比较高,不是一朝一夕可以让小团队的所有成员掌握。考虑到这么多因素的前提下,需要调研ClickHouse这项黑科技,看看使用 ...
Windows10系统下Hadoop和Hive开发环境搭建填坑指南
前提笔者目前需要搭建数据平台,发现了Windows系统下,Hadoop和Hive等组件的安装和运行存在大量的坑,而本着有坑必填的目标,笔者还是花了几个晚上的下班时候在多个互联网参考资料的帮助下完成了Windows10系统下Hadoop和Hive开发环境的搭建。这篇文章记录了整个搭建过程中的具体步骤、遇到的问题和对应的解决方案。
环境准备
基于笔者的软件版本洁癖,所有选用的组件都会使用当前(2020-10-30)最高的版本。
软件
版本
备注
Windows
10
操作系统
JDK
8
暂时不要选用大于等于JDK9的版本,因为启动虚拟机会发生未知异常
MySQL
8.x ...