代理模式

[转帖]Kubernetes之Service

爱⌒轻易说出口 提交于 2020-04-07 21:17:20
Kubernetes之Service https://blog.lecury.cn/2016/06/20/Kubernetes之Service/ 在Kubernetes中Pod是终将消失的,从创建到销毁的过程中,它们是无法自动重启的。而ReplicationController可以用来动态的创建和销毁Pod(比如说在进行滚动升级的时候,可以进行扩展和收缩)。每一个Pod都得到一个属于自己的IP,但这些IP不能一直有效存在,因为这些IP随着Pod的销毁而变得没有了意义。那么这就导致了一个问题,如果一些Pods为集群内部的其他Pods(我们称它们为前端)提供服务,那么这些前端怎么发现、追踪这些后端集合中的服务呢?Service就是做这个事情的。 Service是一个抽象概念,它定义了一些逻辑上的Pods集合,并且定义了访问这些Pods集合的策略,也被称作为micro-service。Service通常通过Label标签选择器来对应相应的Pods集合(也有一些没有标签选择器的,请看下文介绍)。 举个例子,考虑一个运行的镜像,它在集群中有三个副本,这些副本是可以相互替代的,前端并不关心它现在与哪个后端服务打交道。实际上Pods组成的后端服务集合可以是变化的,比如说通过scale进行副本增加或者副本减少,但我们的前端不应该关心或者跟踪后端服务的变化,Service这一层抽象可以做到这一点。

JDK动态代理的简单实现

我是研究僧i 提交于 2020-04-07 02:06:17
1. 先理一下动态代理实现的思路: 实现功能: 自己定义一个类 Proxy, 通过Proxy的静态方法 newProxyInstance(Class<T> intface,InvocationHandler h)返回代理对象, intface: 被代理类的接口对象, h: InvocationHandler的实例对象 1). 声明一段动态代理类的源码( 动态产生代理类 ) 2). 编译动态代理类的源码( JDK Compiler API ), 产生代理类 3). 通过 ClassLoader 加载这个代理类, 创建一个代理类的实例对象 4). return 返回这个代理对象 2. 代码实现: 为什么代理类的类名为 $Proxy0? 这是因为 Java中动态代理, 生成的代理类的类名就是 $Proxy0, 依葫芦画瓢而已, 可以用一个动态代理对象 proxy, 来验证: System.out.println(proxy.getClass().getName()); //输出com.sun.proxy.$Proxy0 public class Proxy { /** * @param intface * 被代理类的接口的类对象 * @param h * InvocationHandler的实例对象 * @return proxy 生成的动态代理对象 * @throws

代理登录(agent)、令牌环(token)、身份票据(ticket)

☆樱花仙子☆ 提交于 2020-04-05 20:41:46
SSO的实现通常有以下三种技术实现途径:代理登录(agent)、令牌环(token)、身份票据(ticket) http://www.53bk.com/news/detail/v753.html 代理登录 优点就是 无需对原有系统做任何改造,适用于无法改造的旧系统; 缺点很明显: 1、稳定性差,一旦登录期间某台服务器无法响应,则该服务器无法单点登录。 2、安全性差,用户名密码通过明文传输。 3、由于登录期间需要监控各个系统的响应,所以不建议大量使用,否则会影响登录的性能。 4、由于IE的安全限制,代理登录必须在同域的情况下运行 令牌环( token ) :通过Cookie共享令牌环的方式传递当前用户信息,实现SSO ​​​​​​​ 令牌环的方式最大好处在于无需统一的验证服务器, 是“多点验证模式”的主力实现技术, 各个服务器都通过统一的 密钥对令牌进行加密解密 , 所以该方式具有安全性高、稳定性好、性能消耗低等 优点 ; 缺点 就是必须保证各台应用服务器同域。 身份票据( ticket ) : 与令牌环不一样,身份票据是通过URL的方式传递,通过“两次握手”的方式,实现SSO。 (如开源的CAS就是这种原理) 来源: oschina 链接: https://my.oschina.net/u/3847203/blog/3217401

代理模式

十年热恋 提交于 2020-04-05 16:46:07
代理模式 (Proxy Pattern)是只为其他对象提供一种代理,以控制对这个对象的访问,属于结构行模式。 代理模式一般包含三种角色: 抽象主题角色:抽象主题类的主要职责是声明真实主题与代理的共同接口方法,该类可以是接口也可以说抽象类。 真实主题角色:该类被称为代理类,该类定义了代理所表示的真实对象,是负责执行系统真正逻辑业务对象。 代理主角色:也被称为代理类;其内部持有(真实主题角色)的引用,因此具备完全的对(真实主题角色)的代理权。客户端调用代理对象方法,同时也调用了代理类方法,但是会在代理类对象前后增加一些处理代码。 优点: 1、代理模式能将代理对象与真实被调用目标对象分离。 2、在一定程度上降低了系统的耦合性,扩展性好。 3、可以起到保护目标对象的作用。 4、可以增强目标对象的功能。 缺点: 1、代理模式会造成系统设计中类的数量增加。 2、在客户端和目标对象中增加一个代理对象,会导致请求处理速度变慢。 3、增加了系统的复杂度。 应用场景:系统日志、事物代理、springAopd等。 静态代理: 静态代理只能通过手动完成代理操作,如果被代理类增加了新的方法,代理类需同步增加,违背开闭原则。 代码示例: (静态代理只负责自己代理的;如下只能代理售票,如新增一个售卖其他的类无法代理) //售票接口(抽象主题角色) public interface ITicketSales {

设计模式-代理模式JAVA实现

醉酒当歌 提交于 2020-04-05 15:49:44
代理模式简单说就是对当前已有类中的方法进行前/后置干预的的一种设计模式,目的是在不对现有业务类进行修改的情况下对指定的现有业务在类级别或方法级别进行修改干预。 实现方式目前有两种,一种是静态代理,纯粹基于设计模式通过代码实现。另一种是动态代理,需要通过JDK默认提供的功能和导入CGLIG功能包来增强实现。 首先进行静态代理的实现。 package proxy.staticproxy; import java.util.List; import bean.PickDoc; import bean.PickList; import bean.PickTask; import builder.IPickTask; 静态代理的具体实现 public class StaticPickTaskProxy implements IPickTask { //被代理对象 private IPickTask pickTask; public StaticPickTaskProxy(IPickTask pickTask) { this.pickTask = pickTask; } @Override public List<PickList> getPickList(List<PickDoc> list) { System.out.println("前置处理"+pickTask.getClass()

设计模式-代理模式

邮差的信 提交于 2020-04-01 09:35:21
代理模式的定义:由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。 代理模式的主要优点有: 代理模式在客户端与目标对象之间起到一个中介作用和保护目标对象的作用; 代理对象可以扩展目标对象的功能; 代理模式能将客户端与目标对象分离,在一定程度上降低了系统的耦合度; 其主要缺点是: 在客户端和目标对象之间增加一个代理对象,会造成请求处理速度变慢; 增加了系统的复杂度; 模式结构 代理模式的主要角色如下。 抽象主题(Subject)类:通过接口或抽象类声明真实主题和代理对象实现的业务方法。 真实主题(Real Subject)类:实现了抽象主题中的具体业务,是代理对象所代表的真实对象,是最终要引用的对象。 代理(Proxy)类:提供了与真实主题相同的接口,其内部含有对真实主题的引用,它可以访问、控制或扩展真实主题的功能。 源码导读 在代理模式中动态代理是在各个框架中使用最广泛的一种设计模式,dubbo中 feign中 mybaits中,都有使用到动态代理。在dubbo中,在接口上添加@refrence ,dubbo就会根据这个接口生成一个代理实例来供消费者用生产者。在feign中也是一样;mybatis中你只要指定包扫描的路径,就会在spring中注入一个mapper

Java动态代理机制详解(JDK 和CGLIB,Javassist,ASM)

我是研究僧i 提交于 2020-04-01 07:47:43
class文件简介及加载   Java编译器编译好Java文件之后,产生.class 文件在磁盘中。这种class文件是二进制文件,内容是只有JVM虚拟机能够识别的机器码。JVM虚拟机读取字节码文件,取出二进制数据,加载到内存中,解析.class 文件内的信息,生成对应的 Class对象: class字节码文件是根据JVM虚拟机规范中规定的字节码组织规则生成的、具体class文件是怎样组织类信息的,可以参考 此博文: 深入理解Java Class 文件格式系列。 或者是 Java虚拟机规范 。 下面通过一段代码演示手动加载 class文件字节码到系统内,转换成class对象,然后再实例化的过程: a. 定义一个 Programmer类: package samples; /** * 程序猿类 * @author louluan */ public class Programmer { public void code() { System.out.println("I'm a Programmer,Just Coding....."); } } b. 自定义一个类加载器: package samples; /** * 自定义一个类加载器,用于将字节码转换为class对象 * @author louluan */ public class MyClassLoader extends

Nginx

☆樱花仙子☆ 提交于 2020-03-31 08:24:15
一: Nginx的简介   Ngix是一款自由的, 开源的, 高性能的HTTP服务器和反向代理; 同时也是一个IMAP、POP3、SMTP代理服务器;   Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理进行负载均衡的实现.   1. Apache     Apache的发展时期很长, 而且是毫无争议的时间第一大服务器, 它有很多的优点: 稳定, 开源, 跨平台等.     它出现的时间太长, 它兴起的年代, 互联网远远比不上现代. 所以他被设计为一个重量级, 并不支持高并发的服务器.     在Apache上运行数以万计的并发访问, 会导致服务器消耗大量的内存. 操作系统对其进行线程或进程间的切换也消耗了大量的CPU资源,     导致HTTP请求的平均响应速度降低.   2. Ngix     这样就诞生了轻量级高并发服务器Ngix. 使用C语言开发Ngix.     Ngix使用基于时间驱动架构, 使得其可以支持数以百计的TCP连接     高度的模块化和自由软件许可证使得第三方模块层出不穷     Ngix是一个跨平台服务器, 可以运行在Linux, Windows, Mac OS等操作系统     优秀的设计带来极大的稳定 二: 代理   首先要明确一个概念, 代理就是一个代表, 一个渠道. 涉及两个角色: 一个被代理角色,

详解 Java 中的三种代理模式!

你离开我真会死。 提交于 2020-03-27 15:25:35
作者:岑宇 https://www.cnblogs.com/cenyu/p/6289209.html 代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能. 这里使用到编程中的一个思想:不要随意去修改别人已经写好的代码或者方法,如果需改修改,可以通过代理的方式来扩展该方法. 举个例子来说明代理的作用:假设我们想邀请一位明星,那么并不是直接连接明星,而是联系明星的经纪人,来达到同样的目的.明星就是一个目标对象,他只要负责活动中的节目,而其他琐碎的事情就交给他的代理人(经纪人)来解决.这就是代理思想在现实中的一个例子. 用图表示如下: 代理模式的关键点是:代理对象与目标对象.代理对象是对目标对象的扩展,并会调用目标对象. 1.1.静态代理 静态代理在使用时,需要定义接口或者父类,被代理对象与代理对象一起实现相同的接口或者是继承相同父类. 下面举个案例来解释: 模拟保存动作,定义一个保存动作的接口:IUserDao.java,然后目标对象实现这个接口的方法UserDao.java,此时如果使用静态代理方式,就需要在代理对象(UserDaoProxy.java)中也实现IUserDao接口.调用的时候通过调用代理对象的方法来调用目标对象. 需要注意的是

Spring AOP面向切面编程

独自空忆成欢 提交于 2020-03-27 10:59:28
目录 1.AOP概览 2.Spring AOP的使用举例 PointCut切入点 Advice通知 3.Spring AOP的实现原理 3.1运行时织入 3.1.1代理模式 3.1.2 JDK动态代理 3.1.3 cglib动态代理 3.1.4 Spring如何创建代理bean ProxyFactoryBean的getObject()方法 getSingletonInstance()方法 createAopProxy() DefaultAopProxyFactory的createAopProxy()方法 getProxy(aopProxy) JdkDynamicAopProxy.getProxy()方法 ObjenesisCglibAopProxy.getProxy()方法 4.Spring AOP的实现原理 4.1 链式调用 4.1.1 职责链模式 4.1.1.1 V1 4.1.1.2 V2 4.1.2 Spring内部实现 1)拦截器链是如何生成的 2)拦截器链是如何链式调用的 3)Spring使用职责链模式实现拦截器链链式调用 5. ProxyFactory实现AOP 1.AOP概览 AOP(Aspect Oriented Programming),什么是面向切面编程? 1)AOP是一种编程范式,不是编程语言 编程范式概览 面向过程编程 面向对象编程 函数式编程 事件驱动编程