自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

总结沉淀

总结日常点滴积累

  • 博客(187)
  • 资源 (3)
  • 收藏
  • 关注

原创 高可用实践之区域路由、集群访问和负载均衡策略(五)

文章目录机房和区域对比RPC请求服务节点请求流程区域路由路由基础配置路由算法介绍自动切换区域路由策略基于权重区域路由强制区域路由集群访问负载均衡负载均衡算法权重算法优化冷启动优化请求质量动态调整参考机房和区域对比常见的区域层级有:同机房(IDC)同区域(region上海、北京等)在RPC服务中,region是地区概念,如北京、上海、深圳等,不做流量分配,只做灾备。即在一个 regio...

2019-03-05 23:34:40 1281

原创 高可用实践之服务隔离(四)

文章目录隔离方案线程隔离泳道和动态分组隔离泳道隔离动态分组隔离隔离方案对于服务隔离,常见的隔离方案有:线程隔离:在同一个进程里,可以区分不同的服务方法,对于核心的服务方法,用单独的线程池执行核心的服务方法,确保在特定线程池出现故障时,不会影响到其他线程池资源。除此之外,可以有另外一个隔离纬度,如对特定服务方法的执行时间进行统计,对于执行时间长的服务方法,放在一个独立的慢线程池处理,其...

2019-03-05 23:34:17 2075

原创 高可用实践之统一鉴权(三)

统一鉴权往往包括两部分:身份认证,确认访问方身份,是鉴权的第一步拦截点访问控制,对通过身份认证的访问方进行鉴权,限制访问方可访问和操作的资源。身份认证常见的身份认证方法包括:黑白名单过滤例如可以根据请求ip、或请求来源等方式对调用方进行限制,避免非法来源的调用方请求。这一步操作主要放在服务方实现,根据用户传入的具体属性来做拦截,示例如下:public static void a...

2019-03-05 23:33:27 3429

原创 高可用实践之熔断降级和故障演练(二)

熔断降级服务降级当服务负载过高时,为保证核心链路服务质量,对一些非核心的页面或服务进行降级处理,如返回默认值,以此缓解服务压力。或者当核心服务不可用时,返回降级处理方案,保证基本的用户体验。服务熔断当服务因为异常原因导致部分服务频繁失败或不可用,为防止故障蔓延影响整个系统,采取特定的保护措施,及时降低影响面。常见服务降级熔断触发机制超时降级:基于特定超时时长和重试次数配置,多次请求服...

2019-03-05 23:33:01 1551

原创 高可用实践之服务限流(一)

目的在流量高峰期或因为活动、热点事件、恶意攻击等原因导致流量突增时,通过对请求流量速率进行限制,保证请求流量在合理范围内,避免因为超出预期的大流量导致服务整体性能下降、响应缓慢或不可用。在触发限流后,可以通过拒绝部分服务、等待、排队、降级等策略保护业务系统。常用限流算法固定窗口算法定义:限制固定时间段内,特定api的最大请求量,如限制每秒最多请求100次,超出100次触发限流策略。优点...

2019-03-05 23:32:36 937

原创 【JDK1.8源码阅读】ThreadPoolExecutor线程池源码实现分析整理(九)

文章目录线程池优点线程池基础组成部分ThreadPoolExecutor基本定义线程池状态变量ctl线程池核心参数工作队列workQueueThreadFactory线程创建工厂5)RejectedExecutionHandler(饱和策略)线程池运行监控常见实例核心运行流程execute 执行任务Worker工作类关闭线程池shutdown方法实现1. 检查shutdown权限2. 设置线程池控...

2019-02-16 13:52:29 367

原创 【JDK1.8源码阅读】ReentrantReadWriteLock源码实现分析整理(八)

ReentrantReadWriteLock基本原理分析像ReentrantLock实现的是一个排他锁,即若有一个线程获取锁,其他线程都不能再次获取。而ReentrantReadWriteLock提供了一种共享锁策略,即如果有线程获取的是共享锁,则其他线程可以继续获取共享锁,但不能获取排他锁;而如果当前线程获取了排他锁,则其他线程共享锁和排他锁都不能获取。基于ReentrantReadWrit...

2019-02-16 13:52:03 258

原创 【JDK1.8源码阅读】ConditionObject相关源码实现分析整理(七)

Condition接口定义Condition将 Object 监视器方法(wait、notify 和 notifyAll)分解成截然不同的对象,以便通过将这些对象与任意 Lock 实现组合使用,为每个对象提供多个等待 set (wait-set)。其中,Lock 替代了 synchronized 方法和语句的使用,Condition 替代了 Object 监视器方法的使用。可以通过await()...

2019-02-16 13:51:40 284

原创 【JDK1.8源码阅读】ReentrantLock源码实现分析整理(六)

重入锁ReentrantLock实现了Lock接口,即实现了加解锁操作的基本API,在此基础上,ReentrantLock提供以下特性:支持同一线程对资源的重复加锁,即同一线程重复调用lock方法不会堵塞,但后续解锁次数需要和加锁次数同步,才能真正意义地释放锁。支持获取锁时的公平和非公平性选择。在ReentrantLock,有3个非常核心的内部类:Sync,FairSync,Nonfai...

2019-02-16 13:51:18 671

原创 【JDK1.8源码阅读】 AbstractQueuedSynchronizer队列同步器应用和实现深度解析(五)

文章目录AQS实现原理AQS实现细节分析同步队列实现独占式同步状态获取与释放acquire 堵塞获取独占式同步状态addWaiter 将节点加入到同步队列尾部acquireQueued堵塞尝试获取同步状态acquireInterruptibly 可被打断独占式获取同步状态tryAcquireNanos 可超时和被打断独占式获取同步状态cancelAcquire从队列中撤销获取同步状态release...

2019-02-16 13:50:52 288

原创 【JDK1.8源码阅读】 JUC锁基础源码实现分析整理(四)

JUC(java.util.concurrent)下定义了JDK关于锁相关的框架。整体锁框架可参照参考文章的一张图:对其中每个工具类介绍如下:LockLock为接口类型,Lock实现提供了比使用synchronized方法和语句可获得的更广泛的锁定操作。此实现允许更灵活的结构,可以具有差别很大的属性,可以支持多个相关的Condition对象。Lock接口的基本API定义如下:publi...

2019-02-16 13:50:29 370

原创 【JDK1.8源码阅读】 ArrayList源码实现分析整理(三)

文章目录ArrayList基本实现原理基本定义核心操作add添加数组元素实现其他核心操作实现参考ArrayList基本实现原理ArrayList底层数据结构是一个数组,元素根据插入顺序排列,支持随机访问,添加删除元素的时间复杂度是O(n),访问元素是O(1)。在每次添加元素时,会先确保容量足够,如果容量不够,会进行扩容,扩容的原理是新建一个长度为原来容量的1.5倍+1或能够完全容纳新增元素个...

2019-02-16 13:50:04 237

原创 【JDK1.8源码阅读】 LinkHashMap源码实现分析整理(二)

文章目录LinkHashMap数据结构分析类定义linkNodeLast 插入双链表尾部afterNodeAccess 节点访问回调,设为尾节点回调时机用途原理分析afterNodeRemoval 节点移除回调afterNodeInsertion 节点插入回调entrySet 遍历元素参考LinkHashMap数据结构分析LinkHashMap相对HashMap,记录了元素的插入顺序,在遍历时...

2019-02-16 13:49:38 410

原创 【JDK1.8源码阅读】 HashMap源码实现分析整理(一)

文章目录HashMap数据结构概括元素属性构造函数、容量算法和哈希碰撞优化put插入或更新Map元素putVal实现resize获取或调整Map容量迁移算法实现原理:链表树化、红黑树链化与拆分红黑树特性treeifyBin树化putTreeVal 插入红黑树元素split 红黑树拆分untreeify 红黑树链化get获取Map元素getNode 根据key 哈希值和key对象获取节点remove...

2019-02-16 13:48:33 505

原创 【Pigeon源码阅读】高可用之熔断降级实现原理(十四)

pigeon熔断降级当服务调用在短时间内出现大量的失败且失败率超过一定阀值时,可以通过配置手动或自动触发降级,调用端直接返回默认对象或抛出异常,不会将调用请求发到服务提供方,如果服务提供方恢复可用,客户端可以自动或手工解除降级。pigeon降级开关pigeon提供三种降级开关,来分别支持不同的降级策略:强制降级开关:在远程服务大量超时或其他不可用情况时,紧急时候进行设置,开启后,调用端会...

2019-02-06 10:22:51 1019

原创 【Pigeon源码阅读】高可用之故障注入实现原理(十三)

故障注入pigeon提供故障注入功能来模拟在调用出现异常时的处理测试,由客户端拦截器FaultInjectionFilter完成,具体有两种故障注入方式,分别为:EXCEPTION:抛出注入异常FaultInjectionException超时:尝试模拟请求特定时长,然后抛出RequestTimeoutException超时异常。相关的配置如下:pigeon.fault.injec...

2019-02-06 10:22:48 1236 1

原创 【Pigeon源码阅读】高可用之服务限流实现原理(十二)

pigeon服务限流pigeon支持4个纬度的限流策略,当客户端请求达到服务端统计的限流阈值时,会抛出RejectedException。具体限流策略包括:应用限流:限制某个客户端应用的最大QPS应用方法限流:限制某个客户端应用访问某个服务方法的最大QPS单机总限流:限制服务端单机的最大QPS方法线程数限流:限制单个方法最大访问线程数,避免因为单个方法异常流量过大阻塞线程池,导致其他方...

2019-02-06 10:22:45 484

原创 【Pigeon源码阅读】客户端负载均衡实现原理(十一)

文章目录客户端负载均衡入口负载均衡策略总体实现负载均衡策略实现AbstractLoadBalanceRandomLoadBalance 基于权重随机策略AutoawareLoadBalance 最小请求数策略RoundRobinLoadBalance 基于权重轮询策略WeightedAutoawareLoadBalance 基于权重最小请求数策略权重计算方法weightFactors 权重因子Re...

2019-02-06 10:22:28 622

原创 【Pigeon源码阅读】区域路由策略实现原理(十)

文章目录DefaultRouteManagerRegionPolicyManager区域路由基础配置配置初始化路由策略应用流程AutoSwitchRegionPolicy 自动切换区域路由路由规则源码实现WeightBasedRegionPolicy 基于权重区域路由路由规则源码实现ForceRegionPolicy 强制区域路由路由规则源码实现在几个集群访问策略中,都需要通过ClientMan...

2019-02-01 11:42:50 715

原创 【Pigeon源码阅读】客户端集群访问策略实现原理(九)

策略介绍和配置示例在pigeon开源版本中,目前实现了4种集群策略:failfast:调用服务的一个节点失败后抛出异常返回,可以同时配置重试timeoutRetry和retries属性failover:调用服务的一个节点失败后会尝试调用另外的一个节点,可以同时配置重试timeoutRetry和retries属性failsafe:调用服务的一个节点失败后不会抛出异常,返回null,后续版本...

2019-02-01 11:42:00 440

原创 【Pigeon源码阅读】RPC底层通信实现原理(八)

文章目录pigeon TCP协议格式粘包半包问题定长消息头格式默认协议消息格式统一协议消息格式消息体Netty3 Handler相关实现上下游传递原理相关实现ChannelHandlerContextOneToOneDecoder & OneToOneEncoderSimpleChannelHandlerChannelEventpigeon RPC通信的核心实现原理服务端实现FrameDe...

2019-02-01 11:38:57 1135

原创 【Pigeon源码阅读】服务提供响应流程解析(七)

文章目录Netty接收调用方请求过程RequestThreadPoolProcessor 请求线程池处理器拦截器链初始化原理线程池选取原理流量控制原理拦截器执行逻辑WriteResponseProcessFilterContextTransferProcessFilterExceptionProcessFilterSecurityFilterip黑白名单过滤请求app黑白名单过滤token鉴权Ga...

2019-02-01 11:36:52 574 1

原创 【Pigeon源码阅读】服务调用请求流程解析(六)

文章目录服务代理对象调用原理InvocationContext 调用上下文讲解pigeon自带拦截器解析RemoteCallMonitorInvokeFilterTraceFilterFaultInjectionFilterDegradationFilterClusterInvokeFilterGatewayInvokeFilterContextPrepareInvokeFilterSecurit...

2019-02-01 11:35:37 994

原创 【Pigeon源码阅读】服务发现与调用初始化流程解析(五)

文章目录测试代码InvokerConfig定义服务调用方静态初始化流程ServiceFactory静态初始化ServiceFactory#getService方法实现调用方启动类InvokerBootStrap 初始化流程解析序列化类创建服务代理对象ServiceInvocationProxy注册负载均衡管理器区域路由策略发布客户端到注册中心基于Xml配置完成服务注册测试代码以下面最小化代码初...

2019-02-01 11:34:20 822

原创 【Pigeon源码阅读】服务注册发布流程(四)

文章目录测试代码ProviderConfig定义ServerConfig配置服务提供方静态初始化流程ServiceFactory静态初始化ProviderBootStrap初始化流程注册服务调用请求的处理拦截器初始化序列化工厂初始化注册管理器addService发布服务流程检查服务名ServicePublisher添加解析服务启动netty RPC服务器调用ServicePublisher发布服务...

2019-02-01 11:33:28 1087

原创 【Pigeon源码阅读】整合Spring注解解析原理(三)

文章目录pigeon使用方法pigeon注解解析器注册xml pigeon注解标签解析AnnotationBean扫描特定包@Service注解类原理AnnotationBean 注解@Service属性依赖注入原理AnnotationBean 注解@Reference属性依赖注入原理pigeon使用方法pigeon通过配置<pigeon:annotation package="com....

2019-02-01 11:21:08 961

原创 【Pigeon源码阅读】整合Spring配置文件自定义命名空间解析(二)

文章目录1. xml文件配置示例2. spring源码解析自定义标签流程3. pigeon自定解析器注册流程4. pigeon 自定义解析器解析标签流程1. xml文件配置示例pigeon常用的配置方式是基于Spring Schema方式进行配置,pigeon自定义了一个xml命名空间解析器,用来解析以pigeon:xxx标志的xml配置,具体实例配置如下:<?xml version=...

2019-02-01 11:19:31 546

原创 【Pigeon源码阅读】项目总体结构介绍(一)

Pigeon简介引入Pigeon官方的简介:Pigeon是一个分布式服务通信框架(RPC),在美团点评内部广泛使用,是美团点评最基础的底层框架之一。主要特色除了支持spring schema等配置方式,也支持代码annotation方式发布服务、引用远程服务,并提供原生api接口的用法。支持http协议,方便非java应用调用pigeon的服务。序列化方式除了hessian,还支持...

2019-02-01 11:17:00 1375

原创 Zookeeper底层技术实现细节

文章目录系统模型数据模型节点类型节点状态信息节点版本Watcher 监听数据变更ACL保障数据安全权限模式 Scheme授权对象 ID权限 Permission会话管理分桶策略会话激活会话超时检查会话清理数据和存储内存数据事务日志数据快照 snapshotzk启动数据加载系统模型数据模型zk引入了ZNode,类似于Unix文件系统的树结构。ZNode是ZooKeeper中数据的最小但愿,每个...

2019-01-31 17:37:12 1966

原创 Zookeeper应用场景分析及实例详解

文章目录配置中心初始化配置中心读取配置创建配置修改配置删除配置动态DNS或命名服务Master选主分布式队列分布式屏障分布式锁lockWritereadWriteunLockWriteunLockRead参考配置中心我们可以把应用配置存储在zk上,应用作为数据订阅方,可以结合消息推拉模式,从zk获取配置信息,并实现动态更新。存放在zk的配置信息往往具有3个特性:数据量通常比较小数据内容...

2019-01-30 22:44:05 1089 1

原创 Zookeeper ZAB原子广播协议和Leader选举

文章目录消息广播崩溃恢复ZXID设计原理协议状态ZAB算法选举发现同步广播数据一致性数据顺序性参考zk使用ZAB(zookeeper atomic broadcase 原子消息广播协议)作为其数据一致性的核心算法。基于此协议,zookeeper实现了一种主备模式的系统架构来保持集群中各副本之间数据的一致性。具体的,zk使用一个单一的主进程来接收并处理客户端的所有事务请求,并采用ZAB的原子广...

2019-01-30 22:43:00 864

原创 JVM杂记

文章目录内存模型引用类型安全点安全区域垃圾回收垃圾回收器serialParNew收集器Parallel Scavenge(吞吐量优先)Serial Old 单线程收集,使用标记整理算法,可以与Parallel Scavenge搭配,或作为CMS收集器的后备预案Parallel Oldcmscms和full gcg1内存分配和回收策略永久代垃圾回收类加载机制加载验证文件格式验证元数据验证字节码验证符...

2019-01-28 19:00:47 343

原创 kafka设计和原理解析

文章目录副本与ISR设计follower 副本同步基于水印备份复制LEO更新机制HW更新机制缺陷基于leader epoch物理存储分区分配日志段文件索引文件位移索引文件时间戳索引文件日志留存文件格式log compaction(日志压实)处理请求元数据请求生产请求获取请求控制器控制器职责更新集群元数据信息创建topic删除topic分区重分配preferred leader选举topic分区拓展...

2019-01-28 17:58:38 664 1

原创 Kafka消费者原理解析

文章目录消费者和消费组创建Kafka消费者分区再均衡触发时机rebalance generatianrebalance协议rebalance流程消费者配置fetch.min.bytesfetch.max.wait.msmax.partition.fetch.bytessession.timeout.msauto.offset.resetenable.auto.commitpartition.ass...

2019-01-28 17:55:52 5983 2

原创 Kafka生产者原理解析

文章目录kafka消息发送流程Kafka创建生产者初始化生产者发送消息示例分区策略producer拦截器生产者配置acksbuffer.memorycompression.typeretresbatch.sizelinger.msmax.request.sizemax.in.flight.requests.per.connection参考kafka消息发送流程流程图如下所示:先初始化一个...

2019-01-28 17:54:53 1483

原创 Kafka基础详解

文章目录Kafka基本概念主题消息分区副本偏移量日志段broker和集群生产者消费者和消费组ISRZookeeperKafka设计原理Kafka设计目标Kafka特性消息持久化高吞吐量拓展性安全机制轻量级消息压缩broker配置broker.idlog.dirszookeeper.connectlistenersreplication.factorunclean.leader.election.e...

2019-01-28 17:53:52 253

原创 【Spring源码阅读】 DefaultListableBeanFactory继承结构讲解分析

在基于ClassPathXmlApplicationContext创建BeanFactory时,我们从代码里看到,创建的BeanFactory的类型是DefaultListableBeanFactory。下面我们来分析下DefaultListableBeanFactory的继承结构,以及基于这个结构下,每个父类接口的用途。具体UML类图实现如下:下面开始从顶层实现类开始,依次向下逐层分析:...

2018-12-27 12:49:51 981

原创 【Spring源码阅读】populateBean实现 依赖注入源码解析

在完成Bean实例化后,Spring容器会给这个Bean注入相关的依赖Bean,在源码中,这一步通过类AbstractAutowireCapableBeanFactory中的populateBean方法完成。测试代码下面开始进入源码分析之前,先基于以下实例进行:// 基础属性类public class Student { private String name; pub...

2018-12-23 19:48:58 10221 3

原创 【Spring源码阅读】 preInstantiateSingletons方法分析,单例Bean获取/实例化流程

在初始化ClassPathXmlApplicatonContext过程中,核心初始化逻辑在AbstractApplicationContext的refresh函数中:public void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownMonitor) { ...

2018-12-23 17:43:53 4361 2

原创 【Spring源码阅读】BeanDefinition原理与加载流程

BeanDefinition接口定义及其相关子类实现在Spring容器初始化过程中,Spring会将配置文件中配置的Java类封装成一个个BeanDefinition。BeanDefinition存储了具体代表Bean的类,并通过实现了AttributeAccessor接口定义了读写属性配置的相关方法。在基于xml配置Spring容器中,我们为某个Bean配置了具体的属性值,这些都根据name...

2018-12-23 14:34:40 1469

AspectJ的JAR包

SpringAop中用到的AspectJ的Jar包,里面包括aspectjweaver.jar和aspectjrt-1.5.0.jar两个jar包

2016-03-21

mybatis反向生成model

借助数据库配置,通过此工具可方向代理生成对应的pojo类、mapper.xml文件和mapper.java接口类

2016-03-20

mybatis3+spring+springMVC4整合jar包

mybatis3+spring+springMVC4整合jar包,导入即可完美使用

2016-03-20

空空如也

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

TA关注的人

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