
微服务与分布式
文章平均质量分 90
微服务与分布式
普通人zzz~
除了成功,别无选择
展开
-
Gossip协议
Gossip协议是一个通信协议,一种传播消息的方式,灵感来自于:瘟疫、社交网络等,在分布式系统中被广泛使用,主要通过 Gossip 协议来保证网络中所有节点的数据一致性,这一点就显得尤为重要。假如小明的同学听说小明昨晚尿床了,然后就悄悄告诉了他的 3 个好朋友,他的3个好朋友听说,觉得也非常有意思,于是也告诉了他们各自的好朋友(实际情况好朋友可能会。:当某一个节点存在数据更新后,节点将变为活跃状态,并周期性的联系其他节点对齐传播消息,直到所有的节点都接收该信息。,保证了数据在集群中的传播和状态一致性。原创 2023-08-28 17:08:08 · 3300 阅读 · 0 评论 -
dubbo获取服务提供者IP列表
(拦截器调用节点)时,传入了一个 clusterInvoker,我们可通过 clusterInvoker 获取。ClusterInterceptor 为集群处理拦截器 SPI 扩展点,在进行创建。在 dubbo 源码分析中可知,所有服务地址都是通过。原创 2022-09-03 11:30:38 · 3593 阅读 · 0 评论 -
Zookeeper原理解析-单机模式
zookeeper是一个分布式协调中间件。通过 Zookeeper 可以实现分布式锁(节点唯一性、顺序节点)、注册中心(临时节点、持久化节点)、配置中心、Leader选举等等。zookeeper 采用文件目录树结构方式存储,一个目录代表一个节点(ZNode)。ZooKeeper 提供的命名空间与标准文件系统非常相似。名称是由斜杠(/)分隔的路径元素序列。ZooKeeper 命名空间中的每个节点都有一个路径标识。与标准文件系统不同的是,节点上除了存储数据内容外,还存储了数据节点本身的一些状态信息。......原创 2022-08-14 16:15:11 · 2227 阅读 · 0 评论 -
Alibaba Sentinel - 滑动窗口
为一个多线程并发统计的对象,核心原理就是:在多线程并发情况下,将线程竞争资源由一个,调整为多个(数组),以达到提高线程运行效率问题,最后统计整个数组值的总和。进行通过数量获取/添加、阻塞数量获取/添加、异常数量获取/添加、成功数量获取/添加、响应时间获取/添加等。接口,为 Sentinel 滑动窗口核心实现类,通过该类,可以获取到通过数量、阻塞数量、异常数量、成功数量、响应时间等。定义指标收集API,主要定义一个滑动窗口中成功的数量、异常数量、阻塞数量,TPS、响应时间等数据,代码如下:。...原创 2022-08-13 00:32:19 · 468 阅读 · 1 评论 -
Alibaba Sentinel - 工作流程及原理解析
Sentinel的所有规则都可以在内存态中动态地查询及修改,修改之后立即生效。同时Sentinel也提供相关API,供您来定制自己的规则策略。流量控制规则、熔断降级规则、系统保护规则、来源访问控制规则和热点参数规则。下面以流量控制规则为例。//加载流量控制规则FlowRuleManager.loadRules(rules);}可以看到,在初始化规则的过程中,我们主要是创建了一个FlowRule对象,然后通过的方法加载规则。...原创 2022-07-28 21:54:43 · 1136 阅读 · 0 评论 -
Alibaba Sentinel - 集群流量控制
集群流控可以解决流量不均匀导致总体限流效果不佳的问题。假设集群中有10台机器,我们给每台机器设置单机限流阈值为10QPS,理想情况下整个集群的限流阈值就为100QPS。不过实际情况下流量到每台机器可能会不均匀,会导致总量没有到的情况下某些机器就开始限流。因此仅靠单机维度去限制的话会无法精确地限制总体流量。而集群流控可以精确地控制整个集群的调用总量,结合单机限流兜底,可以更好地发挥流量控制的效果。集群流控客户端,用于向所属TokenServer通信请求token。...原创 2022-07-25 00:04:59 · 2449 阅读 · 0 评论 -
Alibaba Sentinel 基操
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。核心库(Java客户端)不依赖任何框架/库,能够运行于所有Java运行时环境,同时对Dubbo/SpringCloud等框架也有较好的支持。控制台方式一主流框架的默认适配主流框架的适配】。方式二抛出异常的方式定义资源SphU。......原创 2022-07-24 17:13:40 · 400 阅读 · 0 评论 -
记ibatis使用动态列查询问题(remapresults)
今天在项目开发中,遇到了一个问题:使用ibatis 动态查询列时,每次返回的结果列都是第一次查询的结果列,然而控制台执行的SQL语句时包含该结果列的。比如:<select id="query" resultClass="java.util.HashMap" parameterClass="java.util.HashMap"> SELECT col_0, ...原创 2020-03-28 09:20:02 · 567 阅读 · 0 评论 -
Spring使用Ajax异步上传文件
Spring使用Ajax异步上传文件1. 单文件上传1.1 前端代码1.2 Ajax获取数据上传1.3 后台数据接收1.3.1 SpringMVC自带注解接收文件1.3.2 HttpServletRequest接收文件2. 多文件上传2.1 前端代码2.2 Ajax获取数据上传2.3 后台数据接收2.3.1 SpringMVC自带注解接收文件2.3.2 HttpServletRequest接收文件...原创 2020-03-25 16:50:17 · 515 阅读 · 0 评论 -
SpringMVC 实现文件下载
SpringMVC 实现文件下载有两种方式:常规方法 // 下载后的文件名称 String filename = new String("xxx.dox","ISO8859-1"); // 设置请求中的媒体类型信息 String CONTENT_TYPE = "application/octet-stream"; response.setContentType(CONTENT_TY...原创 2020-03-31 12:02:23 · 359 阅读 · 0 评论 -
@PostConstruct和@PreDestroy注解
这里写目录标题@PostConstruct@PreDestroyJava EE5引入了@PostConstruct和@ProDestory两个作用于Servlet生命周期的注解,实现Bean初始化之前和销毁之前的自定义操作。@PostConstruct应用 PostConstruct 注释的方法必须遵守以下所有标准:只有一个方法可以使用此注释进行注解;被注解方法需是非静态方法;被注解...原创 2020-04-01 10:09:31 · 421 阅读 · 0 评论 -
SpringMVC 中 @ControllerAdvice 注解
@ControllerAdvice ,是一个增强的 Controller。使用这个 Controller ,可以实现三个方面的功能:全局异常处理全局数据绑定全局数据预处理灵活使用这三个功能,可以帮助我们简化很多工作,需要注意的是,这是 SpringMVC 提供的功能,在 Spring Boot 中可以直接使用。全局异常处理使用 @ControllerAdvice 实现全局异常处理,......原创 2020-04-13 20:28:07 · 460 阅读 · 0 评论 -
Dubbo SPI 使用姿势【转载】
Dubbo SPI一、Dubbo SPI 基本使用二、Dubbo SPI 适配类使用2.1 手动编写一个适配类2.2 根据 SPI 接口动态生成一个适配类三、Dubbo SPI 适配器 Wrapper 使用四、Dubbo SPI IOC 使用4.1 注入 Dubbo 适配类4.2 注入 Spring Bean五、Dubbo SPI 激活点使用SPI 机制是实现可扩展性的一种方式。上一篇介绍了 JDK SPI 的使用姿势和基本原理,本节来分析 Dubbo SPI 的基本使用、适配类使用、AOP 使用、IOC转载 2022-03-09 16:11:05 · 904 阅读 · 0 评论 -
SpringBoot配置文件解析过程
SpringBoot配置文件解析过程一、自动配置类 PropertyPlaceholderAutoConfiguration二、PropertySourcesPlaceholderConfigurer2.1 PropertySourcesPlaceholderConfigurer.processProperties()2.2 StringValueResolver.resolveStringValue(String strVal)2.3 propertyResolver.resolveRequiredPla原创 2022-01-23 18:06:14 · 2321 阅读 · 0 评论 -
基于SpringBoot手撸配置中心
基于SpringBoot手撸配置中心一、配置中心二、手写配置中心2.1 创建一个SpringBoot项目2.2 配置文件读取2.3 通过Environment装载配置2.4 缓存需要刷新配置文件的类2.5 配置发生变更,通过事件刷新服务配置2.5.1 定义配置变更Event2.5.2 定义配置变更Listener2.5.3 监听到配置中心变更后,主动发送RefreshEnvEvent2.6 配置文件及spring.factories2.7 测试一、配置中心什么是配置中心?在微服务架构中,当系统从一个单原创 2022-01-23 14:41:10 · 1016 阅读 · 0 评论 -
Spring Cloud Netflix-Eureka(六)、集群数据同步
Spring Cloud Netflix之Eureka源码系列文章一共分为六个片段Spring Cloud Netflix-Eureka(一)、服务注册与发现Spring Cloud Netflix-Eureka(二)、信息存储原理Spring Cloud Netflix-Eureka(三)、自我保护机制Spring Cloud Netflix-Eureka(四)、心跳续约机制Spring Cloud Netflix-Eureka(五)、多级缓存机制Spring Cloud Netflix-Eu原创 2022-01-16 17:36:18 · 2921 阅读 · 2 评论 -
Spring Cloud Netflix-Eureka(五)、多级缓存机制
Spring Cloud Netflix之Eureka源码系列文章一共分为六个片段Spring Cloud Netflix-Eureka(一)、服务注册与发现Spring Cloud Netflix-Eureka(二)、信息存储原理Spring Cloud Netflix-Eureka(三)、自我保护机制Spring Cloud Netflix-Eureka(四)、心跳续约机制Spring Cloud Netflix-Eureka(五)、多级缓存机制Spring Cloud Netflix-Eu原创 2022-01-16 17:36:04 · 798 阅读 · 0 评论 -
Spring Cloud Netflix-Eureka(四)、心跳续约机制
Spring Cloud Netflix之Eureka源码系列文章一共分为六个片段Spring Cloud Netflix-Eureka(一)、服务注册与发现Spring Cloud Netflix-Eureka(二)、信息存储原理Spring Cloud Netflix-Eureka(三)、自我保护机制Spring Cloud Netflix-Eureka(四)、心跳续约机制Spring Cloud Netflix-Eureka(五)、多级缓存机制Spring Cloud Netflix-Eu原创 2022-01-16 17:35:50 · 693 阅读 · 0 评论 -
Spring Cloud Netflix-Eureka(三)、自我保护机制
Spring Cloud Netflix之Eureka源码系列文章一共分为六个片段Spring Cloud Netflix-Eureka(一)、服务注册与发现Spring Cloud Netflix-Eureka(二)、信息存储原理Spring Cloud Netflix-Eureka(三)、自我保护机制Spring Cloud Netflix-Eureka(四)、心跳续约机制Spring Cloud Netflix-Eureka(五)、多级缓存机制Spring Cloud Netflix-Eu原创 2022-01-16 17:35:40 · 540 阅读 · 0 评论 -
Spring Cloud Netflix-Eureka(二)、信息存储原理
Spring Cloud Netflix之Eureka源码系列文章一共分为六个片段Spring Cloud Netflix-Eureka(一)、服务注册与发现Spring Cloud Netflix-Eureka(二)、信息存储原理Spring Cloud Netflix-Eureka(三)、自我保护机制Spring Cloud Netflix-Eureka(四)、心跳续约机制Spring Cloud Netflix-Eureka(五)、多级缓存机制Spring Cloud Netflix-Eu原创 2022-01-16 17:35:23 · 1027 阅读 · 0 评论 -
Spring Cloud Netflix-Eureka(一)、服务注册与发现
Spring Cloud Netflix之Eureka源码系列文章一共分为六个片段Spring Cloud Netflix-Eureka(一)、服务注册与发现Spring Cloud Netflix-Eureka(二)、信息存储原理Spring Cloud Netflix-Eureka(三)、自我保护机制Spring Cloud Netflix-Eureka(四)、心跳续约机制Spring Cloud Netflix-Eureka(五)、多级缓存机制Spring Cloud Netflix-Eu原创 2022-01-16 17:35:07 · 903 阅读 · 0 评论 -
Spring Cloud Netflix-OpenFeign基本使用及其原理
OpenFeign一、OpenFeign基本使用1.1 OpenFeign接口定义1.2 OpenFeign接口注入二、OpenFeign底层原理2.1 FeignClient 注解的扫描与解析2.2 接口代理对象的构建2.3 远程通信的实现OpenFeign 目标是减少 HTTP API的复杂性,希望能将 HTTP 调用做到像RPC一样易用。OpenFeign的基本原理是将需要调用的接口通过 Spring 中的扩展接口 ImportBeanDefinitionRegistrar 注入成一个 Proxy原创 2022-01-10 01:39:35 · 1135 阅读 · 0 评论 -
Spring Cloud Netflix-Ribbon基本使用及其原理
Ribbon基本使用及其原理一、负载均衡二、Ribbon1. 简介2. 基本使用2.1 引入 pom.xml 依赖2.2 服务提供方2.3 服务调用方2.4 配置文件application.yaml2.5 测试3. 负载均衡算法3.1 内置7种负载均衡算法3.2 自定义负载均衡算法三、Ribbon实现原理1. Ribbon底层原理猜想2. Ribbon底层原理与源码分析一、负载均衡在分布式的时代,服务必定是多个实例的,系统再进行服务间通信时,必定需要根据当前服务实例集合,选择一个实例进行通信。而已负载均原创 2022-01-02 21:55:41 · 3028 阅读 · 0 评论 -
如何设计10亿用户系统架构?
分布式系统基本指标TPS:每秒请求数量原理:每天80%的访问集中在20%的时间里,这20%时间叫做峰值时间。公式:( 总PV数 * 80% ) / ( 每天秒数 * 20% ) = 峰值时间每秒请求数(QPS)QPS:每秒查询数量,一个TPS可能会有多个QPSRT:系统对请求作出响应的平均时间DAU:日活跃用户数量MAU:月活跃用户数量分布式系统高并发设计假如系统有10亿用户10亿用户,参照2/8定律(在任何一组东西中,最重要的只占其中一小部分,约20%,其余80%尽管是多数,却是次原创 2021-09-13 22:49:13 · 811 阅读 · 0 评论 -
简易Dubbo实现
Dubbo 架构简易Dubbo实现1. Dubbo API1.1 编写DTO1.1.1 客户端到服务器的标准DTO1.1.2 其他DTO1.2 定义服务接口1.3 定义获取服务实现类全路径Annotion2. Provider2.1 编写服务接口实现类2.2 编写请求服务类2.3 编写处理服务消费请求线程类2.4 编写服务的分发与调用类3. Consumer3.1 编写获取服务工厂类3.2 编写调用服务类3.3 调用测试随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架.原创 2020-12-27 23:34:02 · 318 阅读 · 0 评论 -
SpringBoot-创建自己的Starter
创建自己的Starter自定义starter1. 创建一个空的 maven 项目,并引入依赖2. 创建配置属性类3. 创建服务类4. 创建自动配置类5. 创建 META-INF/spring.factories测试Starterspringboot 官方提供了很多 starter 来实现自动配置,简化我们的开发,那么我们能不能把自己常用的一些组件也封装成一个starter来实现自动化配置呢?答案是可以的。自定义starter1. 创建一个空的 maven 项目,并引入依赖<dependenci原创 2020-12-20 15:06:14 · 857 阅读 · 2 评论 -
SpringBoot 核心原理
SpringBoot 核心原理1. pom.xml2. application.properties(application.yml)3. DemoApplication3.1 SpringApplication.run()3.2 @SpringBootApplication4. SpringBoot 自动装配原理解析首先我们创建一个空的 springboot 项目,可以看到项目结构如下:可以看到其中主要的文件有:pom.xml:Maven 项目文件,用于管理:源代码、配置文件、开发者的信息和角色原创 2020-12-19 20:22:20 · 660 阅读 · 2 评论 -
SpringBoot-基于Druid、mybatis多数据源管理配置
在开发过程中经常会使用到多数据,比如一个框架库多个业务库、读写分离等。下面我在 Springboot、Druid、mybatis 的基础上,进行动态切换数据库封装(代码可能会存在性能等方面的问题,希望大家多多指出)。思路步骤:在 springboot 配置文件中,进行多数据源数据库配置。根据配置文件进行数据源初始化,获取对应的 SQLSessionFactroy。定义数据源标识注解,用于标识该 mapper 属于哪个数据源。定义 SessionFactroy,用于获取 mapper 对象创建原创 2020-08-03 11:36:44 · 398 阅读 · 0 评论 -
分布式锁的实现(数据库、redis、zookeeper)
转载:https://www.jianshu.com/p/9055ca856aaf分布式锁的实现前言分布式锁应该具备哪些条件分布式锁的实现方式基于数据库的实现方式基于缓存(Redis)的实现方式基于Zookeeper的实现方式三种方案的比较前言 我们在开发应用时,如果需要对一个共享变量进行多线程同步访问的时候,我们可以使用Java多线程的各个技能...转载 2020-03-30 17:43:13 · 476 阅读 · 0 评论 -
SpringBoot-WebMvcConfigurer详解
WebMvcConfigurer1. 简介2. WebMvcconfigurer接口3. WebMvcConfigurer接口详解3.1 配置拦截器 addInterceptors(InterceptorRegistry registry)3.2 页面跳转addViewControllers(ViewControllerRegistry registry)3.3 配置自定义静态资源映射目录 add...原创 2020-03-30 17:26:33 · 4521 阅读 · 0 评论