director

生成器模式Builder

强颜欢笑 提交于 2019-11-28 11:21:54
原创转载请注明出处: https://www.cnblogs.com/agilestyle/p/11406502.html 1. 定义 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 2. 结构图 Builder:生成器接口,定义创建一个Product对象所需的各个部件的操作。 ConcreteBuilder:具体的生成器实现,实现各个部件的创建,并负责组装Product对象的各个部件,同时还提供一个让用户获取组装完成后的产品对象的方法。 Director:指导者,也被称为导向者,主要用来使用Builder接口,以一个统一的过程来构建所需要的Product对象。 Product:产品,表示被生成器构建的复杂对象,包含多个部件。 3. 本质 生成器模式的本质: 分离整体构建算法和部件构造。 构建一个复杂的对象,本来就有构建的过程,以及构建过程中具体的实现。生成器模式就是用来分离这两个部分,从而使得程序结构更松散、扩展更容易、复用性更好,同时也会使得代码更清晰,意图更明确。 虽然在生成器模式的整体构建算法中,会一步一步引导Builder来构建对象,但这并不是说生成器主要就是用来实现分步骤构建对象的。 生成器模式的中心还是在于分离整体构建算法和部件构造,而分步骤构建对象不过是整体构建算法的一个简单表现,或者说是一个附带产物。 4. Code Demo

LVS 简介及使用

倾然丶 夕夏残阳落幕 提交于 2019-11-28 11:02:34
本文部分内容转自:https://www.jianshu.com/p/7a063123d1f1 IPVS三种机制: VS/NAT,VS/TUN,VS/DR 一.LVS是什么? LVS的英文全称是Linux Virtual Server,即Linux虚拟服务器。它是我们国家的章文嵩博士的 一个开源项目。在linux内存2.6中,它已经成为内核的一部分,在此之前的内核版本则需要重新编 译内核。 二.LVS能干什么? LVS主要用于多服务器的负载均衡。它工作在网络层,可以实现高性能,高可用的服务器集 群技术。它廉价,可把许多低性能的服务器组合在一起形成一个超级服务器。它易用,配置非常 简单,且有多种负载均衡的方法。它稳定可靠,即使在集群的服务器中某台服务器无法正常工 作,也不影响整体效果。另外可扩展性也非常好。 三.工作原理 如上图,LVS可分为三部分: 1.Load Balancer:这是LVS的核心部分,它好比我们网站MVC模型的Controller。它负责将 客户的请求按照一定的算法分发到下一层不同的服务器进行处理,自己本身不做具体业务的处 理。另外该层还可用监控下一层的状态,如果下一层的某台服务器不能正常工作了,它会自动把 其剔除,恢复后又可用加上。该层由一台或者几台Director Server组成。 2.Server Array:该层负责具体业务。可有WEB Server

LVS(二):四种工作模型

不想你离开。 提交于 2019-11-28 00:24:27
面试的时候必问这个四种工作模式,因为这几乎是企业里面必用的内容,所以一定要将其理解通透。 一、lvs-nat模式 二、LVS-DR模式(默认) 三、LVS-tun模式 四、LVS-fullnat模式 一、lvs-nat模式 lvs-nat本质是多目标IP的DNAT,通过将请求报文中的目标IP地址和目标端口修改为某挑出的RS的RIP和PORT实现转发。 RIP和DIP应该在同一个IP网段,且应使用私网地址;RS的网关要指向DIP。 请求报文和响应报文都必须经由director转发,director易于成为系统瓶颈 支持端口映射,可修改请求报文的目标PORT VS必须是linux,RS可以是任何OS系统 CIP XXXXX------------------------->VIP 80/tcp CIP XXXXX------------------------->RIP 80/tcp #去的时候把目标地址VIP替换成了RIP,去的时候替换的是目标地址 RIP1 80/tcp--------------------------->CIP XXXXX #回来的时要把源地址RIP再替换成VIP,回来的时候替换的是源地址,相像一下,很好理解。 VIP 80/tcp---------------------------->CIP XXXXX NOTE: 数据来回都要走LVS,压力比较大

设计模式之十一(建造者模式)

十年热恋 提交于 2019-11-26 23:42:21
原文: 设计模式之十一(建造者模式) 前言 建造者模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 结构图 Builder是为创建一个Product对象的各个部件指定的抽象接口。 ConcreteBuilder是具体的建造者,实现Builder接口,构造和装配各个部件。可以有多个不同的具体的建造者。 Product具体产品角色 Director就是构建一个使用Builder接口的对象。 代码实现 首先来看一下产品类 public class Product { List<string> parts = new List<string>(); public void Add(string part) { parts.Add(part); } public void Show() { Console.WriteLine("\n产品 创建…………"); foreach (string part in parts) { Console.WriteLine(part); } } } 第一个Add方法主要是为产品添加部件 第二个Show就是展示产品所拥有的部件 Builder类---抽象建造类,确定产品由两个部件PartA和PartB组成,并声明一个得到产品建造后结果的方法GetResult。 public abstract class Builder {

设计模式之十一(建造者模式)

人盡茶涼 提交于 2019-11-26 23:42:00
前言 建造者模式,将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 结构图 Builder是为创建一个Product对象的各个部件指定的抽象接口。 ConcreteBuilder是具体的建造者,实现Builder接口,构造和装配各个部件。可以有多个不同的具体的建造者。 Product具体产品角色 Director就是构建一个使用Builder接口的对象。 代码实现 首先来看一下产品类 public class Product { List<string> parts = new List<string>(); public void Add(string part) { parts.Add(part); } public void Show() { Console.WriteLine("\n产品 创建…………"); foreach (string part in parts) { Console.WriteLine(part); } } } 第一个Add方法主要是为产品添加部件 第二个Show就是展示产品所拥有的部件 Builder类---抽象建造类,确定产品由两个部件PartA和PartB组成,并声明一个得到产品建造后结果的方法GetResult。 public abstract class Builder { public abstract void

建造者模式

余生长醉 提交于 2019-11-26 20:14:52
意图: 将复杂对象的表现形式同其构造相分离,这样,同样的构造过程就可以产生不同的表现形式。 结构图: 对于一个复杂的对象,其各个部分可能会需要使用不同的算法,或者是创建过程,但是,虽然各个部分的需求会产生变动,但是作为构造一个整体的过程:需要创建的部分,各个部分的创建顺序等,保持相对的稳定。在系统创建这样的对象时,通过采用建造者模式,可以将对象的表现形式和其创建过程分离开来,同时,通过 Director 类降低了系统对对象创建的耦合性。 通常,建造者模式的使用有如下流程: 具体而言,当我们需要组建一个房间(对应上图的 Client ),其中包括了床 (Bed) ,书桌( Desk ),椅子( Chair )等东西。 Room::CreateRoom(){ bed = new Bed(); desk = new Desk(); chair = new Chair(); } 当对床,书桌和椅子的需求变动,或者需要加入新的东西时,需要改动 Client 中的代码(即上面代码中的 Bed(),Desk(),Chair() 或者新加入如 Mirror * mirror = new Mirror() )。通过采用建造者模式,先构造一个 Director 来管理对象的创建。 class Director{ public: Director(Builder* builder){_builder =

建造者模式

强颜欢笑 提交于 2019-11-26 12:28:40
定义 将一个复杂对象的创建与它的表示(部件与装配细节)相分离,使得同样的创建过程可以创建不同的表示。 使用场景 可以将装配细节封装起来,调用者不必知道具体的产品的内部结构和产生过程。 多个部件,都装配到一个对象,不同的装配过程或者不同的装配顺序,产生不同的结果,可以使用该模式 实现方式 产品类 public class Product { private String partA; private String partB; private String partC; //Getter方法和Setter方法省略 } 抽象建造类,不同的建造过程实现Builder接口即可 public abstract class Builder { protected Product product=new Product(); public abstract void PartA(); public abstract void PartB(); public abstract void PartC(); public Product build() { return product; } } 具体建造者。实现抽象接口,构建和装配各个部件 public class ConcreteBuilder extends Builder{ public void PartA(){ ... } public

Openstack部署过程

放肆的年华 提交于 2019-11-25 22:18:03
一、director 安装准备 [root@localhost ~]# useradd stack [root@localhost ~]# passwd stack Changing password for user stack. New password: BAD PASSWORD: The password is shorter than 8 characters Retype new password: passwd: all authentication tokens updated successfully. [root@localhost ~]# echo "stack ALL=(root) NOPASSWD:ALL" | tee -a /etc/sudoers.d/stack stack ALL=(root) NOPASSWD:ALL [root@localhost ~]# chmod 0440 /etc/sudoers.d/stack [root@localhost ~]# su - stack [stack@localhost ~]$ pwd /home/stack [stack@localhost ~]$ mkdir ~/images [stack@localhost ~]$ mkdir ~/templates [stack@localhost ~]$ ls