自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(55)
  • 收藏
  • 关注

原创 启动心跳和健康度检查

启动心跳健康检查配置客户端心跳和续约间隔服务端自保配置模拟服务剔除场景spring.application.name=eureka-clientserver.port=30002eureka.client.serviceUrl.defaultZone=http://localhost:20000/eureka/#eureka.client.serviceUrl.defaultZone=http://peer2:20000/eureka/,http://peer1:20001/eur

2021-06-27 02:32:58 202

原创 服务自保-心法

服务自保服务剔除,服务自保,这两套功法一邪一正,俨然就是失传多年的上乘心法的上卷和下卷。但是往往你施展了服务剔除便无法施展服务自保,而施展了服务自保,便无法施展服务剔除。也就是说,注册中心在同一时刻,只能施展一种心法,不可两种同时施展。心法总决服务剔除 把服务节点果断剔除,即使你的续约请求晚了一步也毫不留情,招式凌厉,重在当断则断,忍痛割爱。心法总决简明扼要:欲练此功,必先自宫服务自保 把当前所有节点保留,一个都不能少,绝不放弃任何队友。心法的指导思想是,即便主动删除,也许并不能解决问题,且放之任

2021-06-26 21:45:24 104

原创 服务续约介绍

服务续约建立在心跳机制之上的保活功能,服务续约。在了解服务续约之前,我们先来理一理心跳、续约和剔除之间的爱恨纠葛。这三弟兄都紧紧围绕在注册中心里的服务同步时间周围,意图霸占。我们先来说说续约和心跳的关系,服务续约分为两步第一步 是将服务节点的状态同步到注册中心,意思是通知注册中心我还可以继续工作,这一步需要借助客户端的心跳功能来主动发送。第二步 当心跳包到达注册中心的时候,那就要看注册中心有没有心动的感觉了,他有一套判别机制,来判定当前的续约心跳是否合理。并根据判断结果修改当前instance在

2021-06-26 21:13:06 457 1

原创 心跳检测与服务剔除

心跳检测与服务剔除社保中心的忧桑今天社保中心来了一位钉子户,90多岁的王大爷又兴高采烈的来给自己快120岁的老父亲领社保了!工作人员这一想,好像哪里不对啊,这老父亲120岁的年纪都可以上吉尼斯世界纪录了,要不咱帮老爷子去申请一下?王大爷一听可慌了,连连表示使不得使不得,就来领个社保而已。但是本着负责的态度,社保中心还是决定实地走访一下。眼看要穿帮,王大爷只好老实交代,原来王大爷的老父亲早就没了十好几年,坟头草都快长成非洲大草原了,但是在社保中心没有销户,这才造成了这么一个BUG。不光社保中心有这个

2021-06-26 21:08:49 182 1

原创 创建服务消费者

创建服务消费者创建eureka-consumer子项目添加pom依赖创建启动类和Controller向eureka-client发起调用pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" x

2021-06-26 20:53:13 86 1

原创 创建服务提供者

注册服务提供方创建eureka-client子项目添加pom依赖创建启动类和服务内容瞅瞅你在注册中心页面长啥样外部pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLo

2021-06-26 18:33:10 72 1

原创 解读注册中心UI界面

解读注册中心UI页面长啥样?这满眼洋文哪是哪儿啊?我注册的实例跑哪了?我自己跑了?

2021-06-26 17:08:24 151

原创 注册中心及其搭建

注册中心服务注册是为了解决Who are you这个问题,即获取所有服务节点的身份信息和服务名称,从注册中心的角度来说我们有以下两种比较直观的解决方案:三顾茅庐 由注册中心主动访问网络节点中所有机器等待戈多 注册中心坐等服务节点上门注册大家来思考一个问题,为什么目前主流的注册中心都选择第二种方案,而不是第一种呢?那我们先来看看三顾茅庐的方式有哪些弊端模型复杂:网络环境浩如烟海,轮询每个节点的做法通常是注册中心发局域网广播,客户端响应的方式,这种方式就像你对着全世界喊我爱你,顿时感到有种无力感。现实

2021-06-26 01:23:42 323 1

原创 如何看待Eureka2.0开源计划搁置,对技术选型的影响

Eureka2.0停工对技术选型的影响Eureka 2.0漫谈拥抱变化技术选型

2021-06-25 20:36:12 115

原创 服务治理技术选型

服务治理技术选型分布式系统CAP定理一致性强一致性:一次更新终身有效弱一致性:更新过后有一半份,拿不到更新数据最终一致性:经过一段时间后,最后的数据能保持一致我们的C代表的是强一致性可用性我们一般用宕机当作指标要保证99.999%,宕机<5min分区容错性异地机房做容灾,CAP大定理:分布式系统只能三选二,不能全占。服务治理的三大门派服务治理组件比较...

2021-06-25 20:06:46 162

原创 电商系统微服务化的构想-微服务功能划分

Foodie-SearchFoodie-ItemFoodie-CartFoodie-UserFoodie-OrderFoodie-Auth

2021-06-25 19:36:52 269

原创 电商系统微服务化的构想-微服务模块结构

Domain外部划分Domain内部划分

2021-06-25 19:15:08 157

原创 电商系统微服务化的构想-拆分规划

Foodie微服务化的构想现有结构拆迁通知项目结构

2021-06-25 19:01:25 262

原创 面对疯狂演进的版本,跟还是不跟?

进击的Spring Cloud(以曾经的F版为例)SpringCloud维护策略升版的利弊权衡为了什么而找借口,不是为新而新推荐方式

2021-06-25 03:16:59 78

原创 SpringCloud核心组件介绍 (Netflix + Alibaba套件)

三大门派有Spring Cloud的地方就有江湖,我们就来看一看在这个江湖中都有哪些独霸一方的门派!Netflix是先有Spring Cloud还是先有Netflix?这是一个好问题。Netflix是一家大名鼎鼎的互联网传媒公司,但为什么它在开源软件领域有这么大的名声呢?这就不得不说起它和Spring Cloud的渊源了。很久很久以前,天和地还没有分开,宇宙混沌一片。有个叫Netflix的公司,在这混沌之中,拿自身的业务动手,开启了一段微服务的改造之旅。在这段漫长的过程中,沉淀出了一系列优秀的微服务

2021-06-25 02:50:37 770

原创 SpringCloud整体架构解析

SpringCloud整体架构解析Spring Cloud整体架构Spring Cloud的中文名我们就暂且称呼它为“春云”吧,听上去是多么朴实无华的名字,不过呢一般名字起的低调的都是厉害角色,我们就看看Spring Cloud都提供了哪些靠谱功能吧。技多不压身我们前面说过,Spring Cloud是一款微服务架构的一站式解决方案,你在微服务化过程中碰到的任何问题,都可以从Spring全家桶里找到现成的解决方案,而且方案还不止一种。我们先来看一幅Spring Cloud的全景图,再来详细解释其中的

2021-06-25 02:46:38 3057

原创 什么是Feign?

服务间调用介绍现有的服务调用方式利用拼接的方式。虽然上面有的用不错就很好了Feign解决了什么问题Feign的调用方式Feign体系架构解析-武装到牙齿上一节我们了解了feign的主要功能,它就像一个自拍杆一样,方便了Eureka的远程调用。可是怎么看都觉得Feign的功能很简单嘛,职责也比较单一,那它和Ribbon一样,都是大闲人了?正所谓麻雀虽小五脏俱全,HTTP调用看着简单,实则下面隐藏的是一套非常复杂的流程。从上古时代jsp+servlet,到后面的SpringMVC,在HT

2021-06-25 02:21:47 22833 3

原创 微服务架构所面临的技术问题

微服务架构所面临的技术问题前面我们了解了微服务化的拆分原则,以及从架构师角度如何权衡微服务化的利弊。这一小节我们对微服务架构所要考虑的技术难点做一番探讨。微服务架构可不是打嘴炮,它实打实地考验一个公司的综合技术实力,这不仅关乎架构层面的技术选型,团队成员对微服务体系的理解也决定着微服务化在执行层面的深度,而这套架构后面各个组件的线上部署维护也需要强大的运维能力。所以说,在项目中应用微服务架构可谓是蜀道艰险,青天没上成,可能先去了西天。架构师是一个很神奇的职业,为什么这么说呢,因为我工作中遇到的架构

2021-06-25 01:54:54 486 1

原创 阿里新零售业务商品中心的微服务过程

新零售业务商品中心微服务化过程业务背景多元业务方业务需求初代的短命版本老城区改造计划 - 抗压维度老城区改造计划 - 业务维度老城区改造计划 - 指导方针新城区全貌 - 简图

2021-06-21 03:19:26 157

原创 架构师角度如何权衡微服务的利弊?

【架构思考】如何权衡微服务的利弊相亲大会吐槽大会合适不合适业务角度

2021-06-21 02:55:06 103

原创 微服务需要学习的几大组件

微服务需要学习的几大组件Eureka 服务治理Ribbon 负载均衡Hystrix 服务容错Feign 服务间调用Config 分布式配置中心BUS 消息总线Gateway 服务网关Sleuth 调用链追踪Stream 消息驱动Sentinel 限流

2021-06-21 00:54:10 223

原创 微服务介绍

微服务介绍Teenage Sex微服务是什么?杜克大学教授Dan Ariely说过一段非常出名的话,用来表述Big Data的发展现状。我觉得把这句话放到微服务身上也极其贴切。Micro-services is like teenage sex:Everyone talks about it, nobody really knows how to do it, everyone thinks everyone else is doing it, so everyone claims they are

2021-06-20 19:59:19 191

原创 分布式限流要注意的问题

分布式限流要注意的问题为什么需要匀速限流我们做这样一个场景假设,在某个限流策略中我们设置了10r/s(每秒十个请求)的限流速率,在令牌桶算法的实现中,令牌生成器每秒会产生10个新令牌放入令牌桶。Guava的RateLimiter采用了一种“匀速”的策略生成令牌,也就是说,这10个令牌平均分到1秒钟的时间窗口中生成,每0.1秒产生一个令牌。如果在这一秒来了10个请求,这些请求会在一秒钟以内匀速消化掉。假如我们不采用匀速发放,而是采用一把梭的模式发令牌,在每一秒开始的时候把令牌一次性发放,这样会带来什么问

2021-06-20 18:33:52 89

原创 限流组件封装-创建自定义注解封装限流

限流组件封装-自定义注解基于AspectJ创建自定义注解AccessLimit配置限流规则的切面为目标方法添加@AccessLimit注解,验证效果AccessLimiterpackage com.imooc.springcloud.annotation;import java.lang.annotation.*;/** * Created by 半仙. */@Target({ElementType.METHOD})@Retention(RetentionPolicy.RUN

2021-06-20 14:15:56 149

原创 限流组件封装-Redis+Lua

限流组件封装-Redis+Lua编写Lua限流脚本spring-data-redis组件集成Lua和RedisDefaultRedisScript加载Lua脚本RedisTemplate配置(调用Redis)在Controller中添加测试方法验证限流效果pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xml

2021-06-20 13:48:52 134

原创 Redis预加载Lua

Redis预加载Lua在Redis中执行Lua脚本Lua脚本预导入Redis127.0.0.1:6379> eval "return 'hello redis+lua'" 0"hello redis+lua"127.0.0.1:6379> eval "return {KEYS[1], ARGV[1]}" 2K1 K2 V1 K2(error) ERR value is not an integer or out of range127.0.0.1:6379> eval

2021-06-20 02:31:58 482

原创 Lua基本用法和介绍

Lua介绍和基本用法Lua特点开始之前-插件安装Lua基本安装很不错https://blog.csdn.net/ChinarCSDN/article/details/78667262创建LuaLua基本用法Hello Lua一个简易脚本(Lua入门级语法)---- Created by IntelliJ IDEA.-- User: qiyao-- Date: 10/15/19-- Time: 11:36 PM-- To change this template us

2021-06-20 01:44:42 410

原创 基于Redis+Lua的分布式限流

基于Redis+Lua的分布式限流Nginx做网关层限流,利用Redis+Lua实现服务端限流。为什么用Redis性能 Redis作为缓存组件,如果不采用持久化方案的话,Redis的大部分操作都是纯内存操作,性能十分优异线程安全 只用单线程承接网络请求(其他模块仍然多线程),天然具有线程安全的特性,而且对原子性操作的支持非常到位限流服务不仅需要承接超高QPS,还需要保证限流逻辑的执行层面具备线程安全的特性。利用Redis的这些天然特性做限流,既能保证线程安全,也能保持良好的性能。基于Redi

2021-06-20 00:50:45 442

原创 基于Nginx的分布式限流

基于Nginx的IP限流添加Controller方法网关层配置(修改Host文件和nginx.conf文件)配置Nginx限流规则package com.imooc.springcloud;import com.google.common.util.concurrent.RateLimiter;import lombok.extern.slf4j.Slf4j;import org.springframework.web.bind.annotation.GetMapping;import

2021-06-19 20:15:02 163

原创 Guava RateLimiter预热模型

Guava RateLimiter预热模型什么是流量预热我们都知道在做运动之前先得来几组拉伸之类的动作,给身体做个热身,让我们的身体平滑过渡到后面的剧烈运动中。流量预热也是一样的道理,对限流组件来说,流量预热就类似于一种热身运动,它可以动态调整令牌发放速度,让流量变化更加平滑。我们来举一个例子:某个接口设定了100个Request每秒的限流标准,同时使用令牌桶算法做限流。假如当前时间窗口内都没有Request过来,那么令牌桶中会装满100个令牌。如果在下一秒突然涌入100个请求,这些请求会迅速消耗令牌

2021-06-19 10:31:26 730

原创 Guava RateLimiter客户端限流(阻塞模式)

Guava RateLimiter客户端限流创建rate-limit子项目,引入依赖项非阻塞式的限流方案同步阻塞式的限流方案pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:sch

2021-06-19 02:16:16 721 1

原创 限流方案常用算法讲解

限流方案常用算法讲解正所谓天下武学殊途同归,不管是Nginx限流还是Redis限流,也不管招式耍的再花哨,到了最后都是应用几种特定的限流算法。常见的限流算法一只手都可以数的过来,今天我们挑选令牌桶算法、漏桶算法、滑动窗口和计数器算法来讲一下。令牌桶算法Token Bucket令牌桶算法是目前应用最为广泛的限流算法,顾名思义,它有以下两个关键角色:令牌 获取到令牌的Request才会被处理,其他Requests要么排队要么被直接丢弃桶 用来装令牌的地方,所有Request都从这个桶里面获取令牌

2021-06-18 23:51:08 86

原创 常见的分布式限流方案

常见的分布式限流方案Guava乱入Google出品的客户端限流工具,上手简单。它最早源于2007年的"Google Collections Library"项目。Guava不甘于将自己平凡的一生都耗费在Collections上面,于是乎它开始了转型,慢慢扩展了自己在Java领域的影响力,从反射工具、函数式编程、安全验证、数学运算等等方面,都提供了响应的工具包。在限流这个领域中,Guava也贡献了一份绵薄之力,在其多线程模块下提供了以RateLimiter为首的几个限流支持类。我们前面提到了,Guava

2021-06-18 19:56:58 337

原创 分布式限流介绍

分布式限流介绍其实在生活中,大家都肯定经历过被限流的情况,只是大家浑然不知。春运,一项人类历史上最大的迁移活动,那么抢火车票也成为一个严肃的话题拉,大家每年都要通过某个网站购买火车票,那么这个系统在春运的时候所承受的访问压力是相当的大,毕竟不是所有人都会参加双11,单身大家过年是要回老家的纳。话说降低压力最有效的方式就是减少访问流量,说白点吧就是把用户拒之门外。比如说,我可以给用户一句“服务正忙”的提示,将用户请求丢弃不管。但是这事又不能光明正大的做,毕竟全国人民都知道我这网站花了好几个亿的成本。那怎

2021-06-18 19:20:09 158

原创 分布式限流

常用限流方案介绍分布式限流介绍常见方案技术选型分布式限流常用算法基于客户端的限流方案Guava RateLimiter客户端限流Guava的预热模型基于Nginx的分布式限流基于IP地址的限流方案基于最大连接数的限流方案基于Redis + Lua的分布式限流Lua脚本而Lua的解释器又是预编译性质的,明显比其他的脚本语言快许多(是javascript、perl等几倍到十倍吧),所以脚本语言性能上的劣势lua相对较小。而且lua很适合作为“胶水语言”,用于连

2021-06-18 18:39:54 81

原创 混合操作的幂等性

混合操作的幂等性就是有插入或者修改等的混合操作混合操作,一个接口包含多种操作同样可以使用Token机制

2021-06-18 02:28:46 62

原创 Insert的幂等性原理解析

Insert操作的幂等性有唯一业务号的Insert操作,例如:秒杀,商品ID+用户ID可通过分布式锁,保证接口幂等业务执行完成后,不进行锁释放,让其过期自动释放没有唯一业务号的Insert操作,比如:用户注册,点击多次使用Token机制,保证幂等性进入到注册页,后台统一生成Token,返回到前台隐藏域中用户在页面点击提交时,将Token一同传入后台使用Token获取分布式锁,完成Insert操作执行成功后,不释放锁,等待过期自动释放...

2021-06-18 02:26:20 984

原创 Update的幂等性原理解析

Update操作的幂等性根据唯一业务员去更新数据的情况用户查询出要修改的数据,系统将数据返回页面,将数据版本号放入隐藏域用户修改数据,点击提交,将版本号一同提交给后台后台使用本本号作为更新条件update set version = version + 1,xxx = ${xxx} where id = xxx and version = ${version}更新操作没有唯一业务号,可使用Token机制本身的update是不受影响的,就是幂等的,那如果表中有个字段为更新次数的话,那就不一

2021-06-18 02:13:38 931

原创 Delete操作的幂等性

Delete操作的幂等性根据唯一业务号去删除第一次删除时,已将数据删除第二次再次执行时,由于找不到记录,所以返回的结果是0,对业务数据没有影响。可在删除前进行数据的查询。删除操作没有唯一业务号,则要看具体的业务需求例如:删除所有审核未通过的商品。第一次执行,将所有未通过审核的商品删除在第二次执行前,又有新的商品未审核通过。执行第二次删除操作,新的未审核通过的商品要不要删除?根据业务需求而定根据唯一的业务单号进行删除...

2021-06-17 23:14:36 752

原创 概述与接口重试的问题

概述与接口重试的问题什么是幂等性幂等性涉及的核心思想select、update、delete、insert和混合操作的接口幂等性接口设计与重试机制引发的问题接口幂等性提交订单按钮如何防止重复提交?表单录入页如何防止重复提交?微服务接口,客户端重试时,会对业务数据产生影响吗?幂等性:f(f(x)) = f(x)幂等元素运行多次,还等于它原来的运算结果在系统中,一个接口运行多次,与运行一次的效果是一致的什么情况下需要幂等性重复提交、接口重试、前端操作抖动等业务场景:

2021-06-17 19:52:56 151

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除