自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(138)
  • 资源 (4)
  • 收藏
  • 关注

转载 API安全接口安全设计

转载自:API安全接口安全设计_zhou920786312的博客-CSDN博客_接口安全如何保证外网开放接口的安全性。使用加签名方式,防止数据篡改 信息加密与密钥管理 搭建OAuth2.0认证授权 使用令牌方式 搭建网关实现黑名单和白名单一令牌方式搭建搭建API开放平台方案设计:1第三方机构申请一个appId,通过appId去获取accessToken,每次请求获取accessToken都要把老的accessToken删掉2第三方机构请求数据需要加上accessTok...

2021-11-11 22:08:05 1122

原创 Sentinel结合dubbo实现服务流控, 熔断降级, 保证服务高可用

一, Service Provider对外界提供服务,基于QPS模式限流Service Provider用于对外提供服务, 处理各个消费者的调用请求。为了保护自己作为Provider端的服务不被激增的流量拖垮影响稳定性,可以给 Provider 配置 QPS 模式的限流,这样当每秒的请求量超过设定的阈值时会自动拒绝多的请求。Sentinel的限流粒度可以是 服务接口 和 服务方法 两种粒度...

2019-02-21 23:42:54 5630

原创 Sentinel基本使用--熔断降级(基于RT, ExceptionRatio, ExceptionCount)

一, Sentinel熔断降级Sentinel除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一。由于调用关系的复杂性,如果调用链路中的某个资源不稳定,最终会导致请求发生堆积。Sentinel 熔断降级会在调用链路中某个资源出现不稳定状态时(例如调用超时或异常比例升高),对这个资源的调用进行限制,让请求快速失败,避免影响到其它的资源而导致级联错误。当资源被降级后...

2019-02-20 23:17:50 23102

原创 Sentinel基本使用--基于Thread并发线程数流量控制

一, Sentinel基于并发线程数流控采用基于线程数的限流模式后,我们不需要再显式地去进行线程池隔离,Sentinel 会控制访问该资源的线程数,超出的请求直接拒绝,直到堆积的线程处理完成。相当于是以资源为维度, 隔离出了每一种资源对应的不同线程数.例如,当应用所依赖的下游应用由于某种原因导致服务不稳定、响应延迟增加,对于调用者来说,意味着吞吐量下降和更多的线程数占用,极端情况下甚至导致...

2019-02-20 00:19:44 5342 1

原创 Sentinel基本使用--基于QPS流量控制(三), 匀速排队Rate Limiter流量控制

一, Sentinel匀速器Rate Limiter模式流量控制某瞬时来了大流量的请求, 而如果此时要处理所有请求,很可能会导致系统负载过高,影响稳定性。但其实可能后面几秒之内都没有消息投递,若直接把多余的消息丢掉则没有充分利用系统处理消息的能力。Sentinel的Rate Limiter模式能在某一段时间间隔内以匀速方式处理这样的请求, 充分利用系统的处理能力, 也就是削峰填谷, 保证资源的...

2019-02-19 22:37:37 5556 1

原创 Sentinel基本使用--基于QPS流量控制(二), 采用Warm Up预热/冷启动方式控制突增流量

一, Warm UpSentinel的Warm Up(RuleConstant.CONTROL_BEHAVIOR_WARM_UP)方式,即预热/冷启动方式。当系统长期处于低水位的情况下,当流量突然增加时,直接把系统拉升到高水位可能瞬间把系统压垮。通过"冷启动",让通过的流量缓慢增加,在一定时间内逐渐增加到阈值上限,给冷系统一个预热的时间,避免冷系统被压垮。warm up冷启动主要用于启动需要额...

2019-02-18 23:52:37 5001 3

原创 Sentinel基本使用--基于QPS流量控制(一), 采用默认快速失败/直接拒绝策略控制超过阈值的流量(结合Dashboard使用)

随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式服务架构的轻量级流量控制框架,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助您保护服务的稳定性。流量控制有以下几个角度:资源的调用关系,例如资源的调用链路,资源和资源之间的关系; 运行指标,例如 QPS、线程池、系统负载等; 控制的效果,例如直接限流、冷启动、排队等。Sent...

2019-02-18 22:44:07 9939 1

转载 Sentinel VS Hystrix技术选型

一, Sentinel VS HystrixSentinel 项目地址:https://github.com/alibaba/SentinelHystrix项目地址:https://github.com/Netflix/Hystrix二、总体说明先来看一下 Hystrix 的官方介绍:Hystrix is a library that helps you contro...

2019-02-17 23:40:11 1963

原创 Fescar分布式事务框架--结合dubbo解决微服务下的分布式事务问题

一, FescarFescar是阿里巴巴开源的分布式事务中间件,以高效并且对业务0侵入的方式,解决微服务场景下面临的分布式事务问题。二, 下载源码, 并导入IDE源码下载可以看到, fescar对dubbo的分布式事务支持, 其实是扩展dubbo的filter接口实现的.fescar-examples分为三个后台服务,一个服务调用者① StorageService商品库...

2019-02-16 22:40:49 1357

原创 hystrix结合dubbo框架实现服务熔断降级, 保证后台服务稳定性

一, 服务稳定性以及熔断降级的意义需求的多样性, 业务的复杂程度也是不断上升的, 一个接口依赖的服务也会逐步增加, 各个服务的稳定性是需要着重考虑的; 例如一个电商订单场景, 不能因为评论服务异常超时, 而阻止用户浏览该商品的其他信息, 同样的也不能因为用户优惠券服务等这些非核心服务(弱依赖), 异常超时从而阻止用户下订单; 但是网络环境又是不可控的, 有可能在某一段时间内, 由于网络抖动, ...

2019-02-14 23:52:34 9725 1

原创 扩展dubbo的filter接口实现链路信息上报给zipkin

一, 链路追踪的意义一个分布式的系统, 由后台多个服务组成, 而一次请求会涉及到调用许多服务, 各服务又是分布式部署在各个节点, 这样对出了问题定位问题, 线上问题的处理是非常复杂, 费劲的. 通过分布式链路追踪可以很好的定位一次请求的调用链, 服务调用的流程信息, 服务响应时间, 服务的执行时间, 服务是否超时等.比较好的一些分布式链路追踪框架有, zipkin, 美团点评的cat, s...

2019-02-13 23:54:48 857

原创 轻量级Rpc框架设计--motan源码解析六:client端服务发现

一, Client端初始化工作client端通过RefererConfigBean类实现InitializingBean接口的afterPropertiesSet方法, 进行下面三项检查配置工作:①checkAndConfigBasicConfig(); // 检查并配置basicConfig②checkAndConfigProtocols(); //检查并配置protocols③...

2018-12-18 23:47:05 1192

原创 轻量级Rpc框架设计--motan源码解析五:Zookeeper注册服务

前言, motan框架向注册中心进行服务注册这部分源码实现, 大量使用了模板方法模式, 对于模板方法模式的学习, 可参考: 模板方法模式一, Zookeeper注册服务public <T> Exporter<T> export(Class<T> interfaceClass, T ref, List<URL> registryUrls) {...

2018-12-15 23:23:15 401

原创 轻量级Rpc框架设计--motan源码解析四:Netty服务暴露

一, 服务暴露motan框架通过实现ApplicationListener<ContextRefreshedEvent>接口的onApplicationEvent()方法, 执行服务暴露操作.@Override public void onApplicationEvent(ContextRefreshedEvent event) { // 首先检查, 是否已...

2018-12-14 23:52:11 606

原创 轻量级Rpc框架设计--motan源码解析三:服务暴露前的初始化检查工作

一, 服务暴露前的初始化工作1.1 实现InitializingBean接口motan通过实现InitializingBean接口, 实现afterPropertiesSet()方法, 完成服务暴露前的三项初始化工作:①checkAndConfigBasicConfig(); // 检查并配置basicConfig②checkAndConfigExport(); //检查是否已经装...

2018-12-13 23:57:16 395

原创 轻量级Rpc框架设计--motan源码解析二:自定义spring标签与解析

一, 如何自定义标签可参考以前本人针对spring自定义标签写过的一篇博客, Spring自定义标签, 其实原理就是利用spring在初始化的过程中会加载META-INF/spring.handlers, META-INF/spring.schemes这两项文件,  再通过继承NamespaceHandlerSupport类, 并且自定义一个实现类实现BeanDefinitionParser接...

2018-12-11 23:53:53 416

原创 轻量级Rpc框架设计--motan源码解析一:框架介绍及框架使用初体验

一, 框架介绍1.1 概况 motan是新浪微博开源出来的一套高性能、易于使用的分布式远程服务调用(RPC)框架。1.2 功能可以spring的配置方式与项目集成.支持zookeeper服务发现组件, 实现集群环境下服务注册与发现.保证高并发, 高负载场景下的稳定高性能, , 实现生产环境下的RPC服务的高可用性.二, Hello World本次hello worl...

2018-12-11 00:39:22 893

原创 分布式任务调度平台XXL-JOB--源码解析六:executor执行器源码解析之启动jetty服务接受请求并执行调度

启动jetty服务并执行调度1.1 启动一个jetty server服务    首先加载ServerConnector, 加载HandlerCollection并设置handlers, 其中connector负责接受客户端http请求, 而handlers负责处理客户端请求, 最后就是调用start()方法启动jetty服务.1.2 负责处理admin调度中心请求的JettySer...

2018-11-22 00:58:28 1252 2

原创 分布式任务调度平台XXL-JOB--源码解析五:executor执行器源码解析之初始化工作

executor执行器初始化工作1.1 初始化工作这里我们使用xxl-job自带的xxl-job-executor-sample-spring作为本次源码解析的executor执行器端, 则executor执行器启动时, Spring容器会初始化XxlJobExecutor, 并调用init-method = start()方法.1.2 XxlJobExecutor类的start(...

2018-11-21 23:52:41 4946

原创 分布式任务调度平台XXL-JOB--源码解析四:xxl-job-admin调度中心源码解析之job调度过程,调度策略以及rpc通信

admin调度中心的对于job的调度过程, 调度策略以及rpc通信1.1 job调度过程RemoteHttpJobBean类实现了QuartzJobBean, 当cron时间片到达时, 就会触发一次quartz调用, 回调executeInternal()方法, 而XxlJobTrigger.trigger(jobId)具体实现细节就是进行了一次网络请求.// 当cron时间片到时,...

2018-11-21 02:33:23 2790

原创 分布式任务调度平台XXL-JOB--源码解析三:xxl-job-admin调度中心源码解析之初始化两个Thread工作线程

 xxl-job-admin初始化工作1.1 启动时, 加载applicationcontext-xxl-job-admin.xml, 初始化spring容器<!-- 这个调度中心,在启动的时候,会做很多初始化的工作 ,比如:执行器信息,注册机器列表等信息 --> <bean id="xxlJobDynamicScheduler" class="com.xxl.job...

2018-11-21 00:49:40 2559

原创 分布式任务调度平台XXL-JOB--源码解析二:基于docker搭建admin调度中心和executor执行器运行部署环境

一, 搭建admin调度中心1.1 安装docker运行环境采用yum源安装直接安装:yum install -y docker启动docker: service docker start停止docker:service docker stop1.2 拉取tomcat和mysql这两个docker镜像这里使用网易公有镜像库, 访问: https://c.163yun.com...

2018-11-19 00:05:22 5801 3

原创 分布式任务调度平台XXL-JOB--源码解析一:项目介绍

1.1 概述XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。1.2 特性1、简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手; 2、动态:支持动态修改任务状态、暂停/恢复任务,以及终止运行中任务,即时生效; 3、调度中心HA(中心式):调度采用中心式设计,“调度中...

2018-11-18 21:02:25 835

原创 常用设计模式--外观模式

概述外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。飞机驾驶舱不少人都见过,当看到那些密密麻麻的按钮时,心想要是能一键启动就好了。在代码的世界里,我们也常常遇到一个业务功能需要调用很多接口甚至很多系统的情况,就像下图:有时候被我们调用模块之间还需要互相调用,模块之间的关系都可以画出一张蜘蛛网。在这种情况下,要求开发者需要对每...

2018-10-30 21:42:50 206

原创 常用设计模式--代理模式

概述代理模式为另一个对象提供一个替身或者占位符以控制对这个对象的访问举一个生活中的例子:有时候我们想要买火车票,但是火车站太远,那么我们可以去附近的火车票代售点进行购买。此时,代售点就是代理,它拥有被代理对象的部分功能——售票功能。为什么需要代理?在生活中,我们去售票代理处买票是因为火车站太远了,但在代码的世界里可没有“太远”了这种说法。使用代理的基本目的是控制对真实对象的访问。...

2018-10-29 22:26:56 170

原创 常用设计模式--模板方法模式

模板方法模式在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。不知道在场有没有喜欢烹饪的小伙伴,做一道西红柿炒蛋我们通常需要以下步骤:打开抽油烟机 生火 西红柿炒蛋 关火 关闭抽油烟机用代码来表示:public class CookXihongshi { public void o...

2018-10-28 23:27:52 185

原创 常用设计模式--工厂模式

工厂模式简单工厂模式程序猿最擅长的就是new一个对象,比如没有女朋友就自己new一个。但是new一个对象不是那么容易的,有许多问题需要我们去考虑。比如我们要根据不同条件去new不同的对象:Girl girl = null;if(I like fat girl){ girl = new FatGirl();}else if(I like thin girl){ gi...

2018-10-28 23:27:32 193

原创 常用设计模式--单例模式

单例模式概述单例模式确保一个类只有一个实例,并提供一个全局访问点我们常常希望某个对象实例只有一个,不想要频繁的创建和销毁对象,浪费系统资源,最常见的就是IO,数据库的连接,redis连接等对象,完全没有必要创建多个一模一样的对象,一个足矣。类图:正如上面类图所示,单例模式就是这么简单,用静态变量instance将实例保存起来,然后调用getInstance()时直接返回...

2018-10-26 22:52:34 175

原创 常用设计模式--观察者模式

观察者模式有一个别名叫“订阅—发布模式”。报纸大家都订过吧,当你订阅了一份报纸,每天都会有一份最新的报纸送到你手上,有多少人订阅报纸,报社就会发多少份报纸,这是典型的订阅—发布模式,报社和订报纸的客户就是上面文章开头所说的“一对多”的依赖关系。其实观察者模式也很简单,从上图可以看出观察者模式就两种角色,一是观察者,二是被观察者(主题),也可以认为是订阅者和发布者。从逻辑上来说,观察者模...

2018-10-26 22:50:32 291

原创 常用设计模式--策略模式

从上图可以看到,我们将操作封装到类中,他们实现了同一个接口,然后在 Context 中调用。这里我们举一个计算器的例子:此例中,为加法和减法分别创建了一个类。其实策略不一定要命名为 Strategy,Context 不一定要叫 Context,可以根据实际情况自己命名,在计算器的例子中,你如果非要命名为 Strategy 和 Context,反而让人产生疑惑。实际代码也很简...

2018-10-26 22:44:16 1255

原创 文章二 Redis设计与实现研读--Redis自定义listNode结构体,实现链表用于存储数据

链表和链表节点的实现每个链表节点使用一个 adlist.h/listNode 结构来表示:typedef struct listNode { // 前置节点 struct listNode *prev; // 后置节点 struct listNode *next; // 节点的值 void *value; } listNode;多个 listNode 可以通过 prev 和 next ...

2018-08-31 00:04:15 437

原创 文章一 Redis设计与实现研读:Redis自定义SDS结构体存储String类型的字符串

一丶简单动态字符串Redis 没有直接使用 C 语言传统的字符串表示(以空字符结尾的字符数组,以下简称 C 字符串), 而是自己构建了一种名为简单动态字符串(simple dynamic string,SDS)的抽象类型, 并将 SDS 用作 Redis 的默认字符串表示。在 Redis 里面, C 字符串只会作为字符串字面量(string literal), 用在一些无须对字符串值进行修...

2018-08-30 23:39:44 449

原创 三 redis高级特性

1 Redis 数据备份与恢复Redis SAVE 命令用于创建当前数据库的备份。该命令将在 redis 安装目录中创建dump.rdb文件。如果需要恢复数据,只需将备份文件 (dump.rdb) 移动到 redis 安装目录并启动服务即可。获取 redis 目录可以使用 CONFIG 命令,如下所示:redis 127.0.0.1:6379> CONFIG GET dir ...

2018-08-13 22:55:19 172

原创 二 redis其他特性及服务端常用命令

6 Redis HyperLogLog什么是基数:比如数据集 {1, 3, 5, 7, 5, 7, 8}, 那么这个数据集的基数集为 {1, 3, 5 ,7, 8}, 基数(不重复元素)为5。 基数估计就是在误差可接受的范围内,快速计算基数。例子:PFADD runoobkey "redis"PFADD runoobkey "mongodb"PFADD runoobkey ...

2018-08-13 22:52:38 159

原创 一 Redis 命令以及五种基本的数据结构

Redis 命令用于在 redis 服务上执行操作:redis-cli -h 127.0.0.1 -p 6379 -a "mypass"以下实例演示了如何连接到主机为 127.0.0.1,端口为 6379 ,密码为 mypass 的 redis 服务上。 有时候会有中文乱码。要在 redis-cli 后面加上 --rawredis-cli --raw下面会对redis支...

2018-08-13 22:48:28 288

转载 幂等

概念一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变.【注】很多人把他理解为“幂等性是指重复使用同样的参数调用同一方法时总能获得同样的结果”这个是不准确的。幂等性是系统的接口对外一种承诺(而不是实现), 承诺只要调用接口成...

2018-06-06 00:01:26 399

原创 Spring自定义标签

Spring通过XML解析程序将其解析为DOM树,通过NamespaceHandler指定对应的Namespace的BeanDefinitionParser将其转换成BeanDefinition。再通过Spring自身的功能对BeanDefinition实例化对象。在期间,Spring还会加载两项资料:META-INF/spring.handlers 指定NamespaceHandler(实现or...

2018-06-02 01:56:29 405

原创 jdk SPI机制

什么是SPISPI(Service Provider Interface)服务提供接口,是指的一种服务发现机制,为某个特定的接口寻找服务的实现。在大规模的软件开发中经常采用这样的机制,实现模块之间基于接口编程,隐藏其实现细节,不同的服务提供商进行扩展实现,最终实现无需修改代码即可调用,实现完全无代码入侵。JDK自带的SPI实例JDK6以后提供了java.util.ServiceLoader类来实现...

2018-06-02 00:12:07 470

转载 从motan看RPC框架设计

kris的文章开始计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决从零开发一款RPC框架,说难也难说简单也简单。难的是你的设计将如何面对实际中的复杂应用场景;简单的是其思想可以仅仅浓缩成一行方法调用。motan是今年(2016年)新浪微博开源的一款RPC框架,据说在新浪微博正支撑着千亿次调用。对于她的详细介绍和赞誉是新闻稿和README的责任,本文则会从RPC的基本原理入手,分析和讲解...

2018-05-31 23:41:27 2181

转载 简洁版rpc实现, 原理, 实例

时下很多企业应用更新换代到分布式,一篇文章了解什么是RPC。原作者梁飞,在此记录下他非常简洁的rpc实现思路。核心框架类/* * Copyright 2011 Alibaba.com All right reserved. This software is the * confidential and proprietary information of Alibaba.com ("Confi...

2018-05-27 23:24:35 332

spring自定义标签

扩展Spring, 自定义标签的实现, 包括 schema配置和自定义标签以及handler的加载过程

2018-06-02

jdk spi机制

采用jdk自带的spi实现spi(service provider interface)

2018-06-02

基于socket的rpc

一个底层基于使用socket通信的rpc,实现了类似dubbo远程服务调用,版本一。 接着会继续开发底层通信使用netty, 注册中心使用zk, 实现动态获取服务器资源。

2018-01-17

一个简单的RMI程序demo

该demo分为MainService.java服务端和MainClient.java客户端,既可以都在本地运行, 也可以上传到Linux环境使用 java -cp RMITest-0.0.1-SNAPSHOT.jar com.xxz.mainclient.MainClient 命令运行

2018-01-09

空空如也

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

TA关注的人

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