吴就业
吴就业,《实战Alibaba Sentinel》图书作者,基础架构高级研发工程师。个人网站:www.wujiuye.com。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Spring Boot实现加载自定义配置文件
或许你也发现了,在配置项多的情况下,application-xx.yml配置文件显得过于臃肿,并且在一个分布式项目中,数据库、redis等配置通常是每个微服务都会用到的配置,也都是相同的配置。为了解决单一配置文件过于臃肿的问题,并且实现让多个微服务共用一些配置文件,我们在新项目中将以往的单配置文件拆分成了多个配置文件。另外,我们使用kubernetes的ConfigMap资源作为“配置中心”,可以为每个配置文件创建一个ConfigMap资源,每个微服务项目需要哪些配置文件就可以只引用哪些Confi.原创 2020-09-20 10:56:34 · 20980 阅读 · 3 评论 -
Spring Cloud Gateway结合注册中心使用路由失败?那就自己定制路由功能呗
使用API网关可统一流量入口,对客户端屏蔽内部多个微服务的域名,实现负载均衡,并可以统一鉴权、接口访问控制、流量管控。作为网关,代理了所有流量,对性能要求更高,介于网关核心功能是路由、代理后端服务,主要处理请求转发,如果使用同步阻塞方式,后端接口响应耗时越长,对网关性能的影响就越大。nginx作为反向代理中的佼佼者,基于nginx开发的Kong网关性能更是毋庸置疑。但作为内部网关,我们需要更好的定制,选择Java系的网关对我们来说更容易驾驭。在选定编程语言后,我们就需要考虑性能问题。而网关的性...原创 2020-08-22 09:00:00 · 1505 阅读 · 1 评论 -
Sentinel与OpenFeign整合实现熔断降级源码分析
Sentinel无论是实现限流还是熔断降级,其实都是通过适配模块去实现拦截方法的执行,在方法执行之前调用所有ProcessorSlot的entry方法,在方法执行之后所有ProcessorSlot的exit方法,使用责任链模式调用。由StatisticSlot这个ProcessorSlot统计请求信息,由DegradeSlot检查当前请求是否需要熔断,由FlowSlot检查当前请求是否需要限流。StatisticSlot的entry方法将资源当前时间窗口的Bucket的请求数自增1,如果需要限...原创 2020-07-14 08:18:17 · 1342 阅读 · 1 评论 -
Sentinel中的责任链模式:Sentinel整体工作流程
Sentinel对性能的消耗如何Sentinel统计QPS使用的是滑动窗口:时间窗口+Bucket,通过循环复用Bucket以减少对内存的占用,在统计QPS时,更是利用当前时间戳定位Bucket,使用LongAdder统计时间窗口内的请求成功数、失败数、总耗时等指标数据优化了并发锁,通过定时任务递增时间戳避免每次都使用System获取当前时间。可以看到Sentinel在性能方面所做出的努力,Sentinel尽最大可能降低自身对应用的影响。Sentinel会为每个资源创建一个保存一分钟内时间窗口为1.原创 2020-07-13 08:00:00 · 1059 阅读 · 0 评论 -
Sentinel核心实现:基于滑动窗口的实时指标数据统计实现
要理解Sentinel实现限流的源码,首先我们要了解其核心,比如如何统计QPS,只要了解核心功能的实现,我们也可以自己实现一个简单的限流器。Sentinel基于滑动窗口实现实时指标数据统计。Sentinel如何统计每秒请求数(QPS)为了简单,我们不直接分析Sentinel的源码,而是分析笔者从Sentinel中摘抄的,且经过改造后的qps-helper的代码。总体上是一样的,笔者去掉了一些不需要的统计数据,以及将Sentinel一些自定义的类替换成JDK提供的类,封装成通用的QPS统计工具包。h.原创 2020-07-12 16:34:05 · 1394 阅读 · 1 评论 -
OpenFeign整合Sentinel实现熔断降级
常用于实现熔断降级的框架有Hystrix、Sentinel,我们常说的Spring Cloud项目说的其实是Spring Cloud Netflix,Hystrix以及前面学习过的Ribbon都是Netflix系的家族成员,所以使用Hystrix可以非常简单的与当前项目中使用到的OpenFeign、Ribbon整合,但笔者并没有选择Hystrix,而是选择阿里系的Sentinel。为什么选择Sentinel而不是Hystrix?从接入简单考虑可能选择Hystrix是不错的选择,但笔者对Hyst...原创 2020-07-10 08:25:42 · 6550 阅读 · 2 评论 -
玩转OpenFeign-续集
上一篇《玩转OpenFeign》介绍了OpenFeign的一些常用配置,不过还漏了点内容。Client连接超时、读超时的配置这篇主要介绍如何为不同的Client配置不同的连接超时、读超时这类参数,并从源码角度分析配置是怎么起作用的,以及都可以配置哪些参数,内容不多。还是要从FeignAutoConfiguration这个自动配置类说起,该配置类使用@EnableConfigurationProperties注册了两个用于装载OpenFeign配置的Bean,分别是FeignClientProp.原创 2020-07-08 08:00:00 · 511 阅读 · 1 评论 -
玩转OpenFeign
经过前面几篇的源码分析,我们对OpenFeign与Ribbon也相对熟悉了。看框架源码的目的就是解决我们的一些疑惑,能够知其然并知其所以然,以及用好框架。很多时候,我们需要在项目中调用一些第三方接口,例如对接支付宝支付、微信支付,调用支付接口。如果项目中引入了OpenFeign,那么我们是否可以使用OpenFeign去调用第三方接口呢?答案肯定是可以的。虽然调用第三方接口不需要服务发现,所以也不需要使用Ribbon实现负载均衡,但我们依然可以单独使用OpenFeign。使用OpenFeign不.原创 2020-07-07 08:01:30 · 1299 阅读 · 0 评论 -
Spring Cloud Kubernetes动态配置实现原理与源码分析
Spring为Spring Cloud在Bean的生命周期、Bean的BeanPostProcessor以及AOP层面提供实现动态刷新配置的支持,而Spring Cloud则是为使用者提供实现动态加载配置的接口层面支持,封装了复杂的实现逻辑,让第三方配置中心实现整合到Spring Cloud项目提供方便。Spring Cloud Kubernetes也为我们使用原生服务实现动态配置提供支持,它帮我们实现Spring Cloud的动态配置接口,我们只需要在bootstarp.yaml添加简单的配置就...原创 2020-07-05 22:40:46 · 1126 阅读 · 1 评论 -
不得不知的Spring Boot与Spring Cloud应用启动流程
Spring Cloud与Kubernetes系列文章已经更新到第十五篇,而源码分析类的文章笔者是默认大家都已经对Spring的源码所有了解了,至少什么工厂Bean、后置处理器BeanPostProcessor、Bean的生命周期、Spring容器的启动流程等都有所了解。在继续分析Spring Cloud实现动态配置的源码之前,我们需要补充一些Spring Boot和Spring Cloud的基础知识才能继续往下看。本篇我们一起学习Spring Boot与Spring Cloud应用的启动流程。S.原创 2020-07-03 08:00:00 · 2524 阅读 · 1 评论 -
Spring Cloud动态配置实现原理与源码分析
实际项目开发中少不了各种配置,如连接数据库的配置、连接Redis集群的配置等,通常我们也会为一个项目部署到每个环境准备不同的配置文件,例如测试环境配置连接测试的数据库。基本上静态配置就已经满足日常需求,但是静态配置缺少灵活性,一经修改就需要重新构建部署应用,同时也缺少安全性,容易泄漏线上环境的配置,所以我们需要一种更灵活更安全的配置方式:动态配置。动态配置的使用场景并不是为了替换静态配置而出现的,数据库连接配置这些一般都不会改动,所以数据库连接这类配置使用静态配置还是动态配置都没有多大影响。对于那...原创 2020-07-02 00:00:00 · 1504 阅读 · 1 评论 -
Spring Cloud Kubernetes服务注册与发现的实现原理与源码分析
前面我们已经分析完OpenFeign与Ribbon的源码,包括两者的整合使用,以及Ribbon的重试机制,从最顶层调用接口开始到负载均衡的实现。今天我们分析更底层的实现,即服务注册与发现。本篇内容包括: Spring Cloud Commons的serviceregistry与discovery Spring Cloud Kubernetes服务注册与发现实现原理 Spring Cloud Kubernetes Core源码分析 Spring Cloud Kub...原创 2020-06-30 00:00:00 · 1305 阅读 · 1 评论 -
Ribbon重试策略RetryHandler的配置与源码分析
在《OpenFeign与Ribbon源码分析总结》这篇文章中,我们只是简单地了解Ribbon的重试机制的实现原理,本篇我们再对Ribbon的重试机制的实现做详细分析,从源码分析找出我们想要的答案,即如何配置Ribbon实现调用每个服务使用不一样的重试策略,如配置失败重试多少次,以及使用自定义重试策略RetryHandler。 Ribbon重试机制地实现源码分析 Ribbon的重试策略配置 如何替换RetryHandler? 本篇源码分析部分涉及到的关键类说明Feign会为.原创 2020-06-29 08:00:00 · 987 阅读 · 1 评论 -
将分布式项目sck-demo部署到本地kubernetes,以及实现版本升级和回滚
本篇将一步步介绍如何将sck-demo整个项目部署到本地kubernetes,包括镜像升级、让服务可通过浏览器访问、回滚版本,以及调整minikube虚拟机的内存大小。项目地址:https://github.com/wujiuye/share-projects/tree/master/sck-demo修改minikube的cpu核心数量和内存大小先来说说如何调整minikube虚拟机的内存大小。默认的minikube虚拟机分配的内存很小,如果不调整大小,你会发现,pod一起动起来,要么一会挂.原创 2020-06-21 17:01:46 · 439 阅读 · 1 评论 -
OpenFeign与Ribbon源码分析总结(面试题)
从以往的源码分析文章的阅读量不难看出,大家都不太喜欢看源码分析类文章,一是枯燥,二是难看懂(可能也是笔者写得不好吧,源码分析类文章确实难写),所以本篇就是总结前两篇文章内容的,结合面试题做个总结。 OpenFeign与Feign的关系 Feign底层实现原理 Ribbon是什么 Ribbon底层实现原理 Ribbon是如何实现失败重试的? OpenFeign与Feign的关系feign不是一个中间件,feign是spring cloud组件中的一个.原创 2020-06-28 08:30:00 · 5319 阅读 · 1 评论 -
Spring Cloud Ribbon源码分析(Spring Cloud Kubernetes)
在项目中使用Ribbon的目的是在客户端(服务消费端)实现负载均衡。在上一篇《Spring Cloud OpenFeign源码分析》中我们分析了为什么使用OpenFeign时,不配置url,且不导入Ribbon的依赖会报错。本篇继续分析OpenFeign是如何与Ribbon整合、Ribbon是如何实现负载均衡的、Ribbon是如何从注册中心获取服务的。OpenFeign与Ribbon整合后的接口调用流程OpenFeign与Ribbon整合实现负载均衡调用接口的流程如下:spring-clo.原创 2020-06-27 21:38:16 · 860 阅读 · 1 评论 -
Spring Cloud OpenFeign源码分析
本篇内容: 为什么使用feign? openfeign源码分析 疑问一:openfeign是怎么拿到url的? 疑问二:为什么不导入ribbon应用会启动不起来? 为什么使用feign?因为我们想像dubbo调用远程服务一样,节省构建请求body并发送http请求,还要手动反序列化响应结果的步骤。使用feign能够让我们像同进程的接口方法调用一样调用远程进程的接口。feign是spring cloud组件中的一个轻量级restful的http服务客户端,.原创 2020-06-23 21:18:38 · 1313 阅读 · 1 评论 -
搭建本地Kubernetes集群与部署微服务
本篇内容: 本地安装minikube 在本地单节点Kubernetes集群上部署服务 本地安装用于学习的单节点Kubernetes集群Kubernetes官方文档有《互动教程》,可以在线学习kubectl的使用,而不需要自己搭建Kubernetes环境,但没有dashboard,网络不好会很卡。而minikube是一个快速搭建单节点Kubenetes集群的工具,可以在本地快速的搭建一个单节点的Kubenetes集群,并且提供dashboard,这对新手比较友好。也可以在阿里...原创 2020-06-09 08:10:00 · 907 阅读 · 0 评论 -
Spring Cloud kubernetes入门项目sck-demo
前面部分我们一起简单学习了docker与kubernetes,本篇我们将从一个简单的demo上手Spring Cloud kubernetes,当然,我们只用到Spring Cloud kubernetes的服务注册与发现、配置中心模块。后续还有部分文章介绍如何将sck-demo部署到minikube以及阿里云容器服务kubernetes。本来计划是先写源码分析再写部署的,但考虑到大家都想先看到成果再去深究,所以就根据学习的过程按顺序写了。源码分析主要是解决一些疑惑,了解用到的功能都是怎么整合到一...原创 2020-06-20 17:59:42 · 706 阅读 · 1 评论 -
Kubernetes核心概念与组件
Kubernetes是一个开源的容器编排引擎,用来对容器化应用进行自动化部署、 扩缩和管理。然而并非所有项目都需要微服务化,也并非所有项目需要Kubernetes,例如管理后台、定时任务服...原创 2021-02-19 08:34:26 · 188 阅读 · 0 评论 -
为什么要选择Spring Cloud Kubernetes?
GitHub:https://github.com/spring-cloud/spring-cloud-kubernetes“Spring Cloud Kubernetes提供使用Kubernetes原生服务的Spring Cloud公共接口实现。此代码仓库中提供的项目是促进在Kubernetes中运行的Spring Cloud和Spring Boot应用程序的集成“,这是官方的介绍。了解Spring Cloud Alibaba的朋友就很容易理解这句话。简单说,Spring Cloud Alib..原创 2020-06-17 20:09:03 · 797 阅读 · 1 评论 -
开发也需了解的运维知识之Kubernetes
Docker与Kubernetes是什么关系?这可能是我们刚接触Kubernetes时都有的一个疑问。那么Kubernetes是什么?Kubernetes是一个容器集群编排管理系统,用于实现容器集群的自动化部署、自动扩缩容等功能。Docker提供用于运行应用程序的容器技术,而Kubernetes本身并不提供用于运行应用程序的容器,而是负责管理容器。了解Docker与Kubernetes的关系之后,就能理解为什么我们要先学习Docker再学习Kubernetes,这与先学习Spring框架才能更...原创 2020-06-08 08:10:00 · 4086 阅读 · 1 评论 -
开发也需了解的运维知识之Docker Compose
Compose是Docker用于定义和运行多容器应用程序的工具。有了Kubernetes之后,我们不需要过多的学习Docker Compose,但也有必须了解下它。如应用在微服务项目中,我们可以通过Docker Compose快速地将整个微服务项目打包生成的一个个jar构建成Docker容器镜像文件,并替换应用程序所需要的环境变量。举个例子,假设我们整个微服务项目的代码都放在一个idea project下,服务按module划分,当我们在项目的根目录下执行mvn clean package命令之后...原创 2020-06-07 20:52:29 · 281 阅读 · 0 评论 -
阿里云上的Docker容器镜像仓库
去年笔者写了一篇关于如何使用AWS的镜像仓库ECR,因为老东家使用AWS服务。今天再分享一篇类似的文章,即如何使用阿里云上的Docker容器镜像仓库。这两者并没有多大区别,只是在授权上的不同和收费上的不同。使用阿里云容器镜像服务需要先开通容器服务-Kubernetes,之后才可以使用容器镜像服务,可能并不准确,因为笔者也不是很了解。如果你没有特别的需求,那么使用容器镜像服务是不收费的。使用阿里云的Kubernetes容器服务,因为需要至少购买两个work节点,以及vpc和NAT、日记服务,因此需要.原创 2020-06-08 08:10:00 · 8580 阅读 · 0 评论 -
AWS上的Docker镜像仓库之ECR
学习使用aws的服务,说实话,单靠看官方的文档很难理解,只有自己动手操作才知道有多少坑需要填。我自己注册了一个aws账号,用于学习aws的一些服务。一年前我也在阿里云买了一台机器用于学习,那时候还是套信用卡买的,五年两千多,2核4g。不过aws的服务,你练手的时候收费,服务不启动就不会收费,这点还是挺好的。在aws的ec2实例上需要使用该命令安装docker。### 安装dockeramazon-linux-extras install docker安装完成后,需要配置AccessKey.原创 2020-01-06 21:41:33 · 6437 阅读 · 1 评论