![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Distributed
文章平均质量分 91
没事干写博客玩
真正的大师永远怀着一颗学徒的心。
展开
-
浅谈serverless/云原生 及 IaaS PaaS SaaS Caas FaaS/BaaS 小白文理解
浅谈serverless/云原生 及 IaaS PaaS/SaaS FaaS引言云计算和云原生发展历史云计算云原生云原生中的Serverless写在最后引言浅谈一下serverless理念,然后说说发展历史,最后细说serverless,小白文给你讲透,不用奇葩的栗子举例,就白话文让你看懂。serverless(无服务),这里说的无服务并不是指微服务中的服务,而是说服务器(服务的基础设施层)。serverless真的是没有服务器吗?其实并不是,只是对于用户(我们对于提供商来说都是用户)来说,我原创 2021-03-08 04:29:03 · 2496 阅读 · 2 评论 -
Spring Cloud 2020 + Nacos + spring-cloud-loadbalancer + gateway 实现灰度发布
Spring Cloud 2020 + Nacos + spring-cloud-loadbalancer + gateway 实现灰度发布引言Nacos Server 1.4.1Producerpom.xmlControllerapplication.propertiesConsumerpom.xmlControllerGatewaypom.xmlapplication.ymlspring-cloud-loadbalancer 实现灰度发布原理引言Spri原创 2021-02-13 06:54:15 · 2467 阅读 · 13 评论 -
OAuth2协议 白话理解+SpringCloud Security 栗子
OAuth2协议 白话理解+SpringCloud Security 栗子引言白话理解专业名词认证授权服务和资源服务scope作用域关于白话理解搭建认证授权服务引入依赖编写认证配置(SecurityConfig)配置授权服务基于内存Token的授权服务配置基于JwtToken的授权服务配置申请token简化模式申请token申请授权码根据授权码申请token密码模式申请token刷新token检查token搭建资源服务引入依赖配置资源服务远程调用认证授权服务的TokenService资源验证基于JWT的无状原创 2020-12-19 16:38:45 · 1186 阅读 · 4 评论 -
RocketMQ与Kafka IO区别
RocketMQ与Kafka IO区别引言Kafka 存储原理topic与partitionpartition与segment那么如何利用索引确定消息位置呢?消息有序性RocketMQ 存储原理引言简单说说RocketMQ与Kafka的区别。如果文章写错了,请下面留言给我。Kafka 存储原理Kafka在创建topic时会指定partition数量,在物理层面上有几个partition就有几个文件夹,类似这样:topic与partitiontopic名称-partition序号原创 2020-12-12 19:14:58 · 380 阅读 · 0 评论 -
RocketMQ 入门
RocketMQ引言引入依赖NameServerTopic 和 TagProducer 发送消息同步消息异步消息单向消息Consumer 消费消息PushConsumer及广播模式进阶顺序消息顺序Producer顺序Consumer延迟消息TransactionMQProducer 发送事务消息引言发现写过了RabbitMQ和Kafka,这次补上RocketMQ,之后有空会讲讲这几个消息中间件的实际场景选型和选择原因。本篇文章不写整合Springboot,因为Springboot你可能看不到这些细节。原创 2020-12-10 23:46:34 · 242 阅读 · 0 评论 -
简单理解 LVS NAT、DR、TUN模式
小白文理解 LVS NAT和DR模式引言NAT 模式小白文理解工作流程DR模式引言LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。[百度百科]作用就是为了给后端服务器提供负载均衡的高可用集群,它是集成在linux内核中的功能NAT 模式NAT(Network Address Translation,网络地址转换),我们知道linux中能实现NAT功能也可原创 2020-09-10 19:32:57 · 905 阅读 · 0 评论 -
Kafka 消息确认机制 保证不丢失及手动确认消息
保证消息传输过程中不丢失org.springframework.boot.autoconfigure.kafka.KafkaProperties中可以看见所有配置项,这次讲讲如何保证消息在传输过程中不因为服务器突然宕机而没有收到消息,但producer却认为消息已经发送成功的问题。spring.kafka.producer.acks 这个配置项有3个可选,分别是0,1,-1。ack=0:就是说消息只要通过网络发送出去就不会再管,无论是否被服务器接收到。也就是我只管发,你接到还是没接到我并不关心原创 2020-09-09 17:54:55 · 11687 阅读 · 0 评论 -
AMQP RabbitMQ 新手入门 三种交换机及Producer+Consumer的消息确认机制+事务
AMQP RabbitMQ 新手入门 三种交换机及消息确认机制引言交换机、队列、路由键 简述直连交换机发送消息及监听扇形交换机@RabbitListener 创建+绑定+监听主题交换机创建及绑定发送消息消息确认引言之前写过RabbitMQ的消息打回机制和死信队列,这次准备详细讲一下RabbitMQ,主要是给新手写的入门用的。之前的文章:AMQP RabbitMQ 打回消息后延迟处理Spring Cloud Stream RabbitMQSpring 依赖<dependency&原创 2020-09-08 22:24:29 · 743 阅读 · 0 评论 -
docker swarm 集群搭建 + docker stack 部署可视化管理
docker swarm 集群搭建 + docker stack 部署可视化管理准备阶段修改hostname及hosts文件安装docker官方脚本自动安装方式手动安装方式安装docker compose构建docker swarm集群初始化swarm如果后期还有机器加入集群集群管理查看信息查看节点删除节点更新节点worker 节点和 manager 节点互转搭建私有仓库(registry)打开IP转发安装``registry``镜像查看私仓数据使用私仓修改service(每个主机都需要修改)上传镜像doc原创 2020-08-29 20:39:36 · 605 阅读 · 0 评论 -
openfeign 转发header 实现全链路灰度发布
openfeign 转发header 实现全链路灰度发布引言实现在服务中修改Predicate加一个Interceptor配置ribbon规则,使用我们自己的规则引言网关层看这里之前写了网关层实现灰度发布,但是这个只能被路由一次像是这样:客户端->网关->根据版本号路由到应用之后应用再调用其他服务,调用链的路由就没办法了,它只会被路由一次。实现在服务中加入在网关层写好的rule和predicate,predicate需要改一下,因为web中没有zuul的RequestCon原创 2020-07-01 19:19:13 · 2450 阅读 · 0 评论 -
Zuul 网关层的灰度发布 使用及手动实现
Zuul 网关层的灰度发布引言简单使用自己实现(原理)Ribbon 中 ILoadBalancer 如何获取元数据ILoadBalancer::chooseServer(key)自己实现(代码篇)写一个Predicate写自定义Rule将规则配置进Zuul,写个配置类测试引言什么是灰度发布?灰度发布(又名金丝雀发布)是指在黑与白之间,能够平滑过渡的一种发布方式。在其上可以进行A/B testing,即让一部分用户继续用产品特性A,一部分用户开始用产品特性B,如果用户对B没有什么反对意见,那么逐步扩大原创 2020-07-01 05:16:01 · 1337 阅读 · 0 评论 -
CI/CD docker/k8s 简介
CI/CD docker/k8s 简介CI/CDJenkinsdockerdocker composedocker swarmKubernetes我们用人话来讲讲这几个名词的意思。CI/CDCI (Continuous Integration)CD (Continuous Deployment)持续集成和持续部署,有很多文章是为了粉丝或流量会拿一些奇奇怪怪的蛇皮名词出来唬人,事实上根本唬不到人,在很久之前python的部分开发者就开始往自动化运维和自动化部署方向跑。什么是持续集成原创 2020-06-27 05:04:33 · 506 阅读 · 0 评论 -
SpringSecurity 无状态JWT验证
SpringSecurity 改为无状态 JWT验证引言pom.xmlSecurity Config编写JWTUtils 用来创建和解析JWT控制器 写login方法,返回JWTJWTAuthenticationFilter 自定义过滤器引言朋友问到JWT的东西,其实这个东西很简单,只是将信息加密,以后前端访问带着这端信息过来,我们只需要解密后匹配一次看看信息是否正确即可。必须使用JWT吗?JWT只是一种规范,事实上你可以使用任何格式进行加密,没有必须让你写成json后加密。你可以将信息按照自己的格原创 2020-06-22 00:15:32 · 797 阅读 · 0 评论 -
Redis Pubsub 消息中有什么东西?
Redis Pubsub 消息中有什么东西?消息内容订阅成功消息取消订阅消息消息内容在subscribe订阅一个channel后,消息内容有这些:type:subscribe/unsubscribe/messagepattern:Nonechannel:channel_1(channel名)data:xxxxxxxx订阅成功消息我们接收到的第一条消息 并不是我们通过publish发送的消息,而是订阅的通知消息。我们接收到的第一条消息是:type:subscribe, patter原创 2020-06-08 17:27:01 · 138 阅读 · 0 评论 -
Hystrix 服务熔断降级
Hystrix 服务熔断降级引言基本概念注解开启断路器策略配置@DefaultProperties和@HystrixCommand简单的超时配置其他配置隔离策略threadPoolProperties断路器状态断路器时间配置引言Hystrix 属于 Spring Cloud Netflix 中的套件之一,Spring Cloud Netflix 其中还包括Eureka,Feign,Ribbon,Zuul,Bus。本问仅简单讲一下Hystrix这个熔断降级框架。因为Netflix一部分的套件已经停止更原创 2020-06-04 22:04:47 · 538 阅读 · 2 评论 -
Seata 进阶踩坑
Seata 进阶踩坑并发异常手动解绑和绑定事务手动控制事务流程seata单机的例子官网有,关于高可用部署往这看:保姆级配置 Seata1.2 + Nacos并发异常Seata 针对同一个数据在并发情况下,如果先是上游服务成功,下游服务失败会出现异常io.seata.core.exception.GlobalTransactionException:Could not found global transaction xid = 192.168.0.2:8091:2011766308, may b原创 2020-05-16 09:12:14 · 10982 阅读 · 0 评论 -
保姆级配置 Seata1.2 + Nacos
保姆级配置 Seata1.2 + NacosSeata 配置进Nacos注意坑来了vgroupMapping配置服务端配置(这里不是源码,是编译过的)一切就绪 开始使用pom.xmlyaml关于找不到default服务本篇文章单讲配置,关于分布式事务的文章看我另外一篇。单机方式就是通过conf文件配置即可,但是Seata配合Nacos,我遇到了个坑,写一下希望有人不会和我一样。Seata 配置进Nacos下载seata-1.2.0 源码进入\seata-1.2.0\script\confi原创 2020-05-14 09:26:51 · 2221 阅读 · 3 评论 -
spring websocket + redismq
spring websocket + redismq引言栗子pom.xmlRedisConfigurationWebSocket ConfigurationUserInterceptorControllerhtml引言之前写webflux通过rabbitmq推送消息,这次写websocket基于redis推送消息,区别在于websocket我们可以主动推消息,也就是说我们只需要一个监听就足够了,webflux中是每个用户对应一个监听者,具体原因可以看这->Spring Reactive Web原创 2020-05-14 08:00:10 · 291 阅读 · 0 评论 -
Spring Reactive Web Webflux 整合 RabbitMQ
Spring Reactive Web Webflux 整合 rabbitMQ引言例子(广播消息)pom.xmlConfiguration写一个监听容器工厂在Controller中使用引言在使用spring-web 的 websocket 时我们可以在@RabbitListener或CloudStream @StreamListener中直接使用messagingTemplate.convertAndSendhuozhe或@SendTo 广播消息。在webflux中如何使用mq进行消息推送呢?原创 2020-05-14 06:39:02 · 1530 阅读 · 0 评论 -
Spring Cloud Stream RabbitMQ
Spring Cloud Stream RabbitMQ介绍看个简单的例子pom.xmlyaml发送消息接收消息自定义 Bindingsyaml发送消息接收消息介绍Stream用来做什么呢?如果开发组不同,大数据那边用了kafka,你这边又用了rabbit,那么当你想给kafka发消息的时候你要做的工作就变多了。Stream就是为了减少工作量和学习成本,用Stream封装的的API进行消息传递和接收,这样你可以不关心具体用的是什么消息中间件,不需要去关心什么队列,交换机,Topic,分区等等。它就是原创 2020-05-09 22:39:43 · 487 阅读 · 0 评论 -
Spring Reactive Web 结合OpenFeign
Webflux 直接使用OpenFeign 会提示No qualifying bean of type ‘org.springframework.boot.autoconfigure.http.HttpMessageConverters’ available: expected at least 1 bean which qualifies as autowire candidate. Depe...原创 2020-05-07 02:23:49 · 2647 阅读 · 0 评论 -
Zookeeper 安全的修改数据
Zookeeper 安全的修改数据原理curator 例子之前有文章写了Zookeeper 通过节点是否存在进行互斥,实现悲观锁这次来说说如何安全的修改数据。原理ZNode中 Stat结构:cZxid:这是导致创建znode更改的事务ID。mZxid:这是最后修改znode更改的事务ID。pZxid:这是用于添加或删除子节点的znode更改的事务ID。ctime:(Create...原创 2020-04-23 17:07:35 · 715 阅读 · 0 评论 -
Eureka 配置主要参数及含义
Eureka 配置主要参数理解server 配置provider 配置简单介绍一下eureka主要参数配置是做什么的(提醒一句:新项目不要在用eureka了哦,停止更新了)server 配置server: port: 8761eureka: instance: hostname: eureka-server # 实例主机名 ip-address: 192.168...原创 2020-04-22 23:16:50 · 560 阅读 · 0 评论 -
CuratorFramework Zookeeper 分布式锁的使用及手动实现
CuratorFramework Zookeeper 分布式锁的使用及手动实现CuratorFramework 已经实现好的分布式锁手动实现一个简单的不可重入锁CuratorFramework 已经实现好的分布式锁InterProcessLock (接口)InterProcessMutex (可重入互斥锁)InterProcessMultiLock (多个锁的管理容器)InterPr...原创 2020-04-18 18:11:16 · 783 阅读 · 0 评论 -
Springboot2.x AOP 实现 @Cacheable自定义TTL和自动刷新 防止缓存雪崩
Springboot2.x AOP 实现 Cacheable自定义TTL和自动刷新CacheManager个性化设置自定义每个缓存的TTL和自动刷新自己写TTL注解AOP实现使用CacheManager个性化设置可以根据需要,让某些key,默认TTL与基础设置不同,直接看代码这不是重点,只是可以提前DIY一些东西 @Bean public CacheManager cach...原创 2020-04-17 16:56:02 · 2070 阅读 · 5 评论 -
Springboot RedisTemplate 分布式锁
Springboot RedisTemplate 分布式锁RedisTemplate.executeRedisTemplate.executePipelined实现锁测试锁RedisTemplate.executeexecute 有很多参数常用的有execute(RedisCallback) 和 execute(SessionCallback)通常都是使用SessionCallback...原创 2020-04-16 07:37:10 · 1386 阅读 · 0 评论 -
AMQP RabbitMQ 打回消息后延迟处理
AMQP RabbitMQ 打回消息后延迟处理1. 使用DLX实现延迟消息创建一个普通直连交换机和队列创建死信队列测试2. 消息打回延迟处理代码例子是spring boot下的,但是原理都相同。1. 使用DLX实现延迟消息注意,要使用DLX实现延迟队列的前提是,接收的队列无任何消费者监听,否则只会是Unacked的状态,除非消费者退出才会进入死信队列例子中没有宏,没有多余代码,没有复...原创 2020-04-12 08:47:49 · 414 阅读 · 0 评论 -
SpringBoot2.x RestClient 操作ElasticSearch 7.x
SpringBoot Rest 操作ElasticSearch本地环境ES新版和老板差异7.6.2 版本老版本使用 RestClient导入依赖yml配置rest新建索引文档查找本地环境Spring Boot 2.2.6Elasticsearch 7.6.2写这个文章的原因是“The well known TransportClient is deprecated as of Elas...原创 2020-04-11 08:51:20 · 707 阅读 · 0 评论 -
redis 为什么不支持主主复制
redis 为什么不支持主主复制主从复制过程原因主从复制过程执行顺序主服务器从服务器1等待命令进入连接(或重新连接)主服务器,发送SYNC命令2开始执行bgsave,并使用缓冲区记录bgsave之后执行的所有写命令根据配置选项决定是否继续使用现有数据来处理客户端的命令请求,还是给客户端返回错误3bgsave执行完毕,向从服务器发送快照文件,并在发送期间继续使用缓冲区记录被执行的写命令丢弃所有旧数据(如果有的话),开始载入主服务器发来的快照文件4快照文原创 2020-05-28 21:27:21 · 859 阅读 · 0 评论 -
聊聊RPC
聊聊RPC引言RPC的本质利用MQ实现RPC调用服务端客户端引言RPC(Remote Procedure Call),也就是远过程调用,意思很明确,就是通过远程调用方式,能让另外一台服务器工作。很多人觉得RPC很高大上,事实上这东西并没有那么高大上,早在10几年前就有这个概念,我记得当时出的高危漏洞也基本都是RPC漏洞和本地执行漏洞、SQL注入居多。RPC的本质其本质就是希望过某一种固定协议,来让另外一台服务器工作利用HTTP请求让另外一台WEB服务器工作算不算RPC?算。利用MQ写一个远过原创 2020-06-12 19:14:18 · 202 阅读 · 0 评论 -
小白文 理解SnowFlake(雪花算法)
小白文 理解SnowFlake(雪花算法)组成结构解决了什么问题各个BIT位作用小白文理解雪花算法单线程下的简单栗子雪花算法(SnowFlake)由Twitter创造的,是一个唯一ID生成算法,且具备有序性和可扩展性.雪花算法难吗?其实并不难,甚至说简单。思路远比技术和代码重要得多。组成结构生成出的ID是一个64bit的整数,其中时间戳占41位,数据中心ID占5位,机器ID占5位,自增序列占12位,还有1位是符号位。这个符号位可以是无符号,这样就可以扩大使用时间或其他地方的bit位数,但是为什么在原创 2020-05-25 13:07:34 · 2174 阅读 · 0 评论 -
Zookeeper ACL
Zookeeper ACL控制命令名词解释创建节点设置ACL创建Auth Digest设置ACL策略setAcl auth 例子:setAcl digst 例子:密文生成命令名词解释aclAccess Control List 访问控制列表authAuthentication 身份认证,在这里就解释为身份认证比较合理并不是Authorization(授权),至于为什么下面会说。digstDigest 摘要认证创建节点创建一个普通节点,节点名为nodeNamecreat原创 2020-05-13 23:50:40 · 180 阅读 · 0 评论 -
分布式事务2PC TCC AT(Seata) 如何理解AT模式
分布式事务2PC TCC AT(Seata)名词:2PC 二阶段提交(Two-phaseCommit)TCC具体实现:SeataAT模式 (AsyncTransaction)名词:TC 事务协调者TM 事务管理器RM 资源管理器2PC 二阶段提交(Two-phaseCommit)TC 给每个参与者发送预备请求,每个参与者要么能成功,要么不能成功,你要返回给TC,如果收到了每个...原创 2020-05-06 14:07:35 · 3081 阅读 · 0 评论 -
预防缓存穿透方案 - 布隆过滤器/布谷鸟过滤器
预防缓存穿透方案 - 布隆过滤器/布谷鸟过滤器缓存穿透解决方案布隆过滤器说明原理使用布谷鸟过滤器缓存穿透解决方案本文是预防缓存穿透,并不是预防缓存击穿,缓存击穿需要自己写同步方法,这里不多说缓存击穿问题,缓存雪崩和击穿看这一种是通过保存null值,和提前限制条件,来确保不会出现缓存穿透,这种方式在黑客随机访问的情况下,会不停的保存不必要的null值,redis内存使用会浪费很多。一种是...原创 2020-04-23 19:52:29 · 487 阅读 · 0 评论