分布式系统中userId的生成
userId生成的策略类型
目前常见的userId生成策略主要有:
数据库自增id
UUID
雪花算法
数据库自增id
简单明了,使用数据库中的主键自增即可实现
优点在于:
自动自增,可以作为索引提升数据库的查询效率
节省磁盘空间,相较于其他两种策略可以节省大量空间
查询、写入效率高
缺点在于:
在导入数据时可能存在id重复的问题
不适应与分布式架构,在该中存在id重复的问题
无法进行分表,拆表等操作,与分布式的缺陷类似
UUID
UUID(Universally Unique Identifier):它是由一组32个十六进制数字组成的字符串,总共分为无端,每段之间用连字符(-)隔开,包括连字符在内共36个字符
123// 生成UUIDString uuid = UUID.randomUUID.toString()
UUID基于硬件地址(MAC地址)、时间戳和随机因子来生成Id
优势在于:
几乎不可能重复,可以用于分布式系统
具有唯一性、高性能和高可用的特点
本地生成
缺点在于:
产生的值较长,足足有36个字符
ID完全随机,没有任何顺序可言
可读性差,且ID不具 ...
ubuntu安装docker
Ubuntu安装Docker
Docker官方文档
卸载旧版docker
1for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
补充知识
apt-get
apt
功能
apt-get
apt
安装软件包
apt-get remove
apt remove
删除软件包
apt-get remove
apt remove
更换所有包
apt-get purge
apt purge
移除软件包及配置文件
apt-get upgrade
apt upgrade
更新所有软件包(自动处理依赖项)
apt-get autoremove
apt autoremove
自动删除不需要的包
apt-get dist-upgrade
apt full-upgrade
在升级软件包时自动处理依赖关系
apt-cache search
apt search
搜索应 ...
webpack相关知识
本篇博客是为了加深对于webpack的理解
webpack的作用是什么?
前端网页功能丰富、现如今SPA(Single Page Web Application 单页面应用)技术大量应用, JavaScript 的复杂的增加,以及 Scss 、 Less 和 Typescript 的编译工作都需要 webpack 来解决处理。
webpack的工作原理
webpack 是一个模块打包工具,它主要做以下工作:
分析项目的结构、找到需要的 JavaScript 模块
将非 JavaScript 的文件( Scss 、 Less 和 Typescript 等)转换为合适的格式,让浏览器执行
webpack的打包原理
webpack 将一切都视为模块,无论是 JavaScript 、 Css 、 HTML 和 Image 图片资源等等都可以相互引用,通过 entry.js 对所有依赖的文件进行追踪,将各个模块通过 loader 和 plugins 处理进行打包。
webpack的核心概念
SSL/TSL及openssl的使用
一、什么是HTTPS?
HTTPS,全称为 Hypertext Transfer Protocol Secure,是一种通过加密通道传输数据的安全协议。它是 HTTP 协议的安全版本,用于在 Web 浏览器和 Web 服务器之间进行安全的数据传输。
HTTPS 在传输过程中使用了 SSL(Secure Sockets Layer)或 TLS(Transport Layer Security)协议来加密数据,确保敏感信息在传输过程中不会被窃取或篡改。
二、HTTP的存在的问题已经HTTPS如何解决?
HTTP存在的问题:
明文传输,内容可能被盗用
不进行通信方的验证,有可能遭遇伪装
无法验证报文的完整性,请求报文可能被篡改
HTTPS的解决方案:
进行加密处理
进行身份校验
进行完整性校验
HTTPS = HTTP + TSL/SSL
三、什么是SSL/TLS
TLS(Transport Layer Security)和 SSL(Secure Sockets Layer)是用于保护网络通信的安全协议。它们都提供了加密和认证机制,用于确保数据传输的机密性和完整性。
SSL 是最 ...
MQ服务异步通信
服务异步通信
MQ的一些常见问题
消息可靠性问题:如何确保发送的消息至少被消费一次
延迟消息问题:如何实现延迟消息投递
高可用问题:如何避免单点的MQ故障而导致的不可用问题
消息堆积问题:如何解决数百万消息堆积,无法及时消费的问题
消息可靠性问题
消息从生产者发送到exchange,再到queue,再到消费者,有哪些导致消息丢失的可能性?
发送时丢失:
生产者发送的消息未送达exchange
消息到达exchange后未到达queue
MQ宕机,queue将消息丢失
consumer接收到消息后未消费就宕机
一 消息可靠性
1.生产者消息确认
生产者确认机制
RabbitMQ提供了publisher confirm机制来避免消息发送到MQ过程中丢失。消息发送到MQ以后,会返回一个结果给发送者,表示消息是否处理成功。结果有两种请求:
2.消息持久化
3.消费者消息确认
4.消费失败重试机制
二 死信交换机
三 惰性队列
四 MQ集群
分布式事务
分布式事务 seata
事务的ACID原则
分布式访问案例
微服务下单业务,在下单时会调用订单服务,创建订单并写入数据库。然后订单服务调用账户服务和库存服务
账户服务负责扣减用户余额
库存服务负责扣减商品库存
一 理论基础
1.CAP定理
1998年,加州大学的计算机科学家Eric Brewer提出,分布式系统有三个指标:
Consistency (一致性)
Availability (可用性)
Partition tolerance (分区容错性)
CAP定理-Consistency
Consistency (一致性)︰用户访问分布式系统中的任意节点,得到的数据必须一致
CAP定理-Availability
Availability (可用性)∶用户访问集群中的任意健康节点,必须能得到响应,而不是超时或拒绝
CAP定理-Partition
Partition(分区)∶因为网络故障或其它原因导致分布式系统中的部分节点与其它节点失去连接,形成独立分区
Tolerance(容错)∶在集群出现分区时,整个系统也要持续对外提供服务
2.BASE理论
BASE理论是对CAP的一种解决思 ...
JMeter安装教程
下载JMeter
1.前期准备
具备Java的JDK环境(此处不详细介绍)
2.下载JMeter
(一)进入JMeter的官网:https://jmeter.apache.org/
(二)点击Down Load Release:https://jmeter.apache.org/
tips: Binaries是二进制可执行版本,已编译完成, Source是源代码版,需要自己编译
(三)点击apache-jmeter-5.5.zip下载可执行压缩包apache-jmeter-5.5.zip
(四)下载速度较慢,等待下载完成
建议清华镜像网站下载官网
2.配置环境变量
(一)在系统变量中新增变量JMETER_HOME
变量名:【JMETER_HOME】
变量值:JMeter安装路径`
(二)编辑系统变量CLASSPATH。在CLASSPATH中增加
1%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar;%JMETER_HOME%\lib\jorphan.jar;%JMETER_HOME%\lib\logkit-2.0.jar;
(三)确定 ...
Sentinel的知识
一 Sentinel的知识
1.雪崩问题
微服务调用链路中的某个服务故障,引起整个链路中的所有微服务都不可用,这就是雪崩。
解决方式:
超时处理:设定超时时间,请求超过一定时间没有响应就返回错误信息,不会无休止等待
舱壁模式:限定每个业务能使用的线程数,避免耗尽整个tomcat的资源,因此也叫线程隔离
熔断降级:由断路器统计业务执行的异常比例,如果超出阈值则会熔断该业务,拦截访问该业务的一切请求
流量控制:限制业务访问的QPS,避免服务因流量的突增而故障
2.服务保护技术对比
Sentinel
Hystrix
隔离策略
信号量隔离
线程池隔离/信号量隔离
熔断降级策略
基于慢调用比例或异常比例
基于失败比率
实时指标实现
滑动窗口
滑动窗口(基于RxJava)
规则配置
支持多种数据源
支持多种数据源
扩展性
多个扩展点
插件的形式
基于注解的支持
支持
支持
限流
基于QPS,支持基于调用关系的限流
有限的支持
流量整形
支持慢启动、匀速排队模式
不支持
系统自适应保护
支持
不支持
控制台
开箱即用,可配置规则、查看秒级监控 ...
ES高级应用
一 数据聚合
1. 聚合的种类
聚合(aggregations)可以实现对文档数据的统计、分析、运算。聚合常见的有三类:
桶(Bucket)集合:用来对文档做分组
TermAggregation:按照文档字段值分组
Date Histogram:按照日期阶梯分组,例如一周一组,一月一组
度量(Metric)聚合:用以计算一些值,比如:最大值、最小值、平均值等
Avg:求平均值
Max:求最大值
Min:求最小值
Stats:同时求max、min、avg、sum等
管道( pipeline)聚合:其它聚合的结果为基础做聚合
2. DSL实现聚合
DSL实现Bucket聚合
现在,我们要统计所有数据中的酒店品牌有几种,此时可以根据酒店品牌的名称做聚合。
123456789101112GET /hotel/_search{ "size": 0, # 设置size为0,结果中不包含文档,只包含聚合结果 "aggs": { # 定义聚合 "brandAgg": { # 聚合起个名字 ...
DSL查询文档
一 DSL查询分类及基本语法
1.DSL Query的分类
Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。常见的查询类型包括:
查询所有:查询出所有数据,一般测试试用。例如:match_all
全文检索(full text)查询:利用分词器对用户输入内容分词,然后去倒排索引库中匹配。例如
match_query
multi_match_query
精确查询:根据精确词条值查找数据,一般是查找keyword、数值、日期、boolean等类型字段。例如:
ids
range
term
地理(geo)查询:根据经纬度查询。例如:
geo_distance
geo_bounding_box
复合(compound)查询:复合查询可以将上述各种查询条件组合起来,合并查询条件。例如:
bool
function_score
2.查询所有
查询的基本语法如下:
12345678910111213141516GET /indexName/_search{ "query": ...



