自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(141)
  • 收藏
  • 关注

原创 Nova 虚机创建流程

分两种情况:是否之前分配过。与 neutron 交互。

2023-08-23 21:01:52 209

原创 Nova 核心服务

这是Nova项目的API服务,用户通过Nova API与系统进行交互,包括创建、查询、更新和删除虚拟机等操作。它。

2023-08-23 14:21:13 326

原创 Neutron - ML2 插件 create_network 函数剖析

create_network 函数的主干流程如下,主要功能就是将相关信息入库。

2023-07-31 09:35:56 178

原创 Neutron 的服务

本文会讲述 Neutron 是如何启动一个 Web Server 的。Neutron Server 对外提供的 Service API (RESTful)并不是一个实实在在的模块。对于用户来说,它们只是一批 RESTful 接口,对于 Neutron 来说,它们只是资源(network、subnet、port 等)的 CRUD 的一种外在体现。

2023-07-28 14:12:40 99

原创 Neutron 软件架构设计与实现

Neutron 作为一个分布式系统,采用了主从分布式架构设计,具有负责在中央控制的Neutron Server 组件(接收北向 API 请求,控制逻辑,下达任务),也有负责在地方执行的Agents 组件(执行任务,反馈结果)。Neutron Server 和 Agents 之间采用MQ/RPC 异步通讯模型。Neutron 作为一个开源的 Network as a Service 项目,首先需要考虑能够兼容多种不同的 Network Providers底层网络技术。

2023-07-25 17:07:24 153

原创 VLAN模式

Neutron最为核心的工作是对二层物理网络的抽象与管理,物理服务器虚拟化后,虚拟机的网络功能由虚拟机网卡(vNIC)提供,物理交换机也被虚拟化为虚拟交换机(vSwitch),各个vNIC连接再vSwitch的端口上,最后这些vSwitch通过物理服务器的物理网卡访问外部的物理网络。OpenStack的网络服务组件为Neutron,它的设计目标是实现“网络即服务”。设计上:遵循基于软件定义网络(SDN)的灵活和自动化原则。

2023-07-21 13:58:54 78

原创 高并发系统:通用设计方法

数据是放在持久化存储中的,一般的持久化存储都是使用磁盘作为存储介质的,而普通磁盘数据由机械手臂、磁头、转轴、盘片组成, 盘片又分为磁道、柱面和扇区。普通磁盘的寻道时间是10ms左右,而相比于磁盘寻道花费的时间,CPU执行指令和内存寻址的时间都在是ns(纳秒)级别,从千兆网卡上读取数据的时间是在μs(微秒)级别。一般来讲,在我们系统设计初期会考虑使用Scale-up的方式,因为这种方案足够简单,所谓能用堆砌硬件解决的问题就用硬件来解决,但是当系统并发超过了单机的极限时,我们就要使用Scale-out的方式。

2022-10-02 21:49:32 740 1

原创 Java NIO 通信基础

实现IO多路复用,从具体的开发层面来说,首先把通道注册到选择器中,然后通过选择器内部的机制,可以查询(select)这些注册的通道是否有已经就绪的IO事件(例如可读、可写、网络连接完成等)。通道的写入,就是将数据从缓冲区写入到通道中。OIO是面向字节流或者字符流的,在一般的OIO操作中,我们以流式的方式顺序地从一个流中读取一个或多个字节,因此,我们不能随意地改变读取指针的位置。在NIO中,同一个网络连接用一个通道表示,所有的IO操作都是从通道开始的,既可以从通道读取,也可以向通道写入。

2022-09-30 20:43:16 613

原创 如何处理消费过程中的重复消息

现在常用的绝大部分消息队列提供的服务质量都是At least once(至少一次,不允许丢失消息,但是允许有少量重复消息出现),包括RocketMQ、RabbitMQ和Kafka都是这样。也就是说,消息队列很难保证消息不重复。

2022-09-25 21:54:41 744

原创 如何确保消息不会丢失

消息从生产到消费的过程,可以划分为三个阶段:生产阶段:在这个阶段,从消息在Producer创建出来,经过网络传输发送到Broker端。存储阶段:在这个阶段,消息在Broker端存储,如果是集群,消息会在这个阶段被复制到其他副本上。消费阶段:在这个阶段,Consumer从Broker上拉取消息,经过网络传输发送到Consumer上。

2022-09-25 10:48:47 625

原创 BinLog和RedoLog区别

4)BinLog 开启事务时,会将每次提交的事务一次性写入内存缓冲区 ,如果未开启事务,则每次成功执行插入、更新和删除语旬时,就会将对应的事务信息写入内存缓冲区,而 Redo Log 是在数据准备修改之前将数据写入缓冲区的 Redo Log 中,然后在缓冲区中修改数据。而 Redo Log 记录的是物理页的修改,最后一个提交的事务记录会覆盖之前 所有未提交的事务记录,并且一个事务的 Redo Log 中间会插入其他事务的 Redo Log。3)Redo Log 具有。

2022-09-14 11:02:47 3489

原创 LeetCode:动态规划 - 子序列问题

2022-08-09 23:08:00 94

原创 黑马点评关键业务流程梳理二

2022-07-28 23:51:13 559

原创 黑马点评关键业务流程梳理一

2022-07-27 00:09:18 812

原创 LeetCode:动态规划-回文/公共子序列/公共字串

动态规划字符串

2022-07-25 15:04:52 648

原创 SpringCloud - 服务拆分和远程调用

2022-06-06 21:48:49 163

原创 SpringCloud - 认识微服务

微服务

2022-06-06 13:48:54 104

原创 设计模式 - 领域规则之解析器模式

一、领域规则模式在特定领域中,某些变化虽然频繁,但可以抽象为某种规则。这时候,结合特点领域,将问题抽象为语法规则,从而给出在该领域下的一般性解决方案。典型模式:Interpreter二、动机在软件构建过程中,如果某一特点领域的问题比较复杂,类似的结构不断重复出现,如果使用普通的编程方式来实现将面临非常频繁的变化。在这种情况下,将特点领域的问题表达为某种语法规则下的句子,然后构建出一个解释器来解释这样的句子,从而达到解决问题的目的。三、模式定义给定一个语言,定义它的文法的一种表示,

2022-05-16 22:22:11 129

原创 设计模式 - 行为变化之访问器模式

一、动机在软件构建过程中,由于需求的改变,某些类层次结构中常常需要增加新的行为(方法),如果直接在基类中做这样的更改,将会给子类带来很繁重的变更负担,甚至破坏原有设计。如何再不更改类层次结构的前提下,在运行时根据需要透明地为类层次结构上的各个类动态增加新的操作,从而避免上述问题?二、模式定义表示一个作用于某个对象结构中的各元素的操作。使得可以在不改变(稳定)各元素的类的前提下定义(扩展)作用于这些元素的新操作(变化)。三、结构四、要点总结Visitor 模式通过所谓的双重分发

2022-05-16 19:06:13 70

原创 设计模式 - 行为变化之命令模式

一、行为变化模式在组建的构建过程中,组件行为的变化经常导致组件本身剧烈的变化。“行为变化”模式将组件的行为和组件本身进行解耦,从而支持组件行为的变化,实现两者之间的松耦合。典型模式:Command、Visitor二、动机在软件构建过程中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合——比如需要对行为进行“记录、撤销/重(undo/redo)、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对象

2022-05-16 17:55:21 105

原创 设计模式 - 数据结构之职责链模式

一、动机在软件构建过程中,一个请求可能被多个对象处理,但是每个请求在运行时只能有一个接收者,如果显式指定,即将必不可少地带来请求发送者与接受者的紧耦合。如何使请求的发送者不需要指定具体的接收者?让请求的接受则自己在运行时决定来处理请求,从而使二者解耦。二、模式定义使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,知道有一个对象处理它为止。三、结构四、要点总结职责链模式的应用场合在于“一个请求可能有多个接受者,但

2022-05-16 16:53:56 104

原创 设计模式 - 数据结构之迭代器模式

一、动机在软件构建过程中,集合对象内部结构常常变化各异。但对于这些集合对象,我们希望在不暴露其内部结构的同时,可以让外部客户代码透明地访问其中包含的元素;同时这种“透明遍历”也为“同一种算法在多种集合对象上进行操作”提供了可能。使用面向对象技术将这种遍历机制抽象为“迭代器对象”为“应对变化中的集合对象”提供了一种优雅的方式二、模式定义提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露(稳定)该对象的内部表示。三、结构四、要点总结迭代抽象:访问一个聚合对象的内容而无需暴露

2022-05-15 22:06:45 119

原创 设计模式 - 数据结构之组合模式

一、数据结构模式常常有一些组件在内部具有特定的数据结构,如果让客户程序依赖这些特定的数据结构,将极大地破坏组件的复用。这时候,将这些特定数据结构封装在内部,在外部提供统一的结构,来实现与特定数据结构无关的访问,是一种行之有效的解决方案。典型模式:Composite、Iterator、Chain of Resposibility二、动机在软件的某些情况下、客户代码过多地依赖于对象容器复杂的内部实现结构,对象容器内部实现结构(而非抽象接口)的变化将引起客户代码的频繁变化,带来了代码的维护性、扩展

2022-05-15 19:06:42 173

原创 设计模式 - 状态变化之备忘录模式

一、动机在软件构建过程中,某些对象的状态在转化过程中,可能由于某种需求,要求程序能够回溯到对象之前处于某个点时的状态。如果使用一些公有接口来让其他对象得到对象的状态,变化暴露对象的细节实现。如何实现对象状态的良好保存与恢复?但同时又不会因此而破坏对象本身的封装性。二、模式定义在不破坏封装性的前提下,捕捉一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。三、结构四、要点总结备忘录(Memento)存储原发器(Originator)对象的

2022-05-15 18:25:05 126

原创 设计模式 - 状态变化之状态模式

一、状态变化模式在组件构建过程中,某些对象的状态经常面临变化,如何对这些变化进行有效的管理?同时又维持高层模块的稳定?“状态变化”模式为这一问题提供了一种解决方案。典型模式:State、Memento二、动机在软件构建过程中,某些对象的状态如果改变,其行为也会随之而发生变化,比如文档处于只读状态,其支持的行为和读写状态支持的行为就可能完全不同。如何在运行时根据对象的状态来透明地更改对象的行为?而不会为对象操作和状态转化之间引入紧耦合?三、模式定义允许一个对象在其内部状态改变时改变它

2022-05-15 02:00:25 137

原创 设计模式 - 接口隔离之中介者模式

一、动机在软件构建过程中,经常会出现多个对象互相关联交互的情况,对象之间常常会维持一种复杂的引用关系,如果遇到一些需求的更改,这种直接的引用关系将面临不断地变化。在这种情况下,我们可使用一个”中介对象“来管理对象间的关联关系,避免相互交互的对象之间的紧耦合引用关系,从而更好地抵御变化。二、模式定义用一个中介对象来封装(封装变化)一系列的对象交互。中介者使各对象不需要显示的相互引用(编译时依赖 -> 运行时依赖);从而使其耦合松散(管理变化),而且可以独立地改变它们之间的交互三、结构

2022-05-15 00:48:23 116

原创 设计模式 - 接口隔离之适配器模式

一、动机在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。如何应对这种“迁移的变化”?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口?二、模式定义将一类的接口转换成客户希望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。三、结构四、要点总结适配器模式主要应用于“希望复用一些现存的类,但是接口又与复用环境要求不一致的情况“,在遗留代码复用、类库迁

2022-05-14 23:24:56 104

原创 设计模式 - 接口隔离之代理模式

一、动机在面向对象系统中,有些对象由于某种原因(比如对象创建的开销很大,或者某些操作需要安全控制,或者需要进程外的访问等),直接访问会给使用者、或者系统结构带来很多麻烦如何在不是去透明操作对象的同时来管理/控制这些对象特有的复杂性?增加一层简介层时软件开发中常见的解决方式。为什么使用代理模式?第一个,客户端有时无法直接操作某些对象。比如,在分布式应用中,你需要调用的对象可能是运行在另外一台服务器上的,当你访问它时,就必须要通过网络才能访问。如果你让客户端直接去调用,那么就意味着客户端需要处.

2022-05-14 01:13:01 178

原创 设计模式 - 接口隔离之门面模式

一、接口隔离模式在组件构建过程中,某些接口之间的直接依赖常常会带来很多问题、甚至根本无法实现。采用加一层间接(稳定)接口,来隔离本来就紧密关联的接口时一种常见的解决方案。典型模式:Facade、Proxy、Adapter、Mediator二、系统间耦合的复杂度三、动机上述A方案的问题在于组件的客户和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种过多的耦合面临很多变化的挑战。如何简化外部客户程序和系统间的交互接口?如何将外部客户程序的演化和内部子系统的

2022-05-14 00:16:07 62

原创 设计模式 - 对象性能之享元模式

一、动机在软件系统中采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中,从而带来很高的运行时代价——主要指内存需求方面的代价。如何在避免大量细粒度对象问题的同时,让外部客户程序仍然能够透明地使用面向对象的方式来进行操作?二、模式定义运用共享技术有效地支持大量细粒度的对象三、结构四、要点总结面向对象很好地解决了抽象性的问题,但是作为一个运行在机器中的程序实体,我们需要考虑对象的代价问题。Flyweight 主要解决面向对象的代价问题,一般不触及面向对象的抽象性问题。

2022-05-13 23:58:08 43

原创 设计模式 - 对象性能之单例模式

一、对象性能模式面向对象很好地解决了”抽象“的问题,但是必不可免地要付出一定的代价。对于通常情况来讲,面向对象的成本大都可以忽略不计。但是某些情况,面向对象所带来的成本必须谨慎处理。典型模式:Singleton、Flyweight二、动机在软件系统中,经常有这样一些特殊的类,必须保证它们再系统中只存在一个实例,才能确保它们的逻辑正确性,以及良好的效率如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?这应该是设计者的责任,而不是使用者的责任三、模式定义保证一个类仅有一

2022-05-13 01:14:14 130

原创 设计模式 - 对象创建之构建器模式

一、动机在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在 一起的算法却相对稳定。如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂 对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不 随着需求改变而改变?二、模式定义将一个复杂对象的构建与其表示相分离,使得同样的构建过程(稳定)可以创建不同的表示(变化)。三、结构四、要点总结Builde

2022-05-12 22:57:31 88

原创 设计模式 - 对象创建之原型模式

一、动机在软件系统中,经常面临着“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是条目却拥有比较稳定一致的接口如何应对这种变化?如何向“客户程序(使用这些对象的程序)”隔离出”这些易变对象“,从而使得”依赖这些易变对象的客户程序“不会随着需求改变而改变二、模式定义使用原型示例指定创建对象的种类,然后通过拷贝这些原型来创建新的对象。三、结构四、要点总结Prototype模式同样用于隔离类对象的使用和具体类型(易变类)之间的耦合关系,它同样要求这

2022-05-12 19:24:15 69

原创 设计模式 - 对象创建之抽象工厂

一、动机在软件系统中,经常面临着“一系列相互依赖的对象”的创建工 作;同时,由于需求的变化,往往存在更多系列对象的创建工作。如何应对这种变化?如何绕过常规的对象创建方法(new),提供一 种“封装机制”来避免客户程序和这种“多系列具体对象创建工作” 的紧耦合?二、模式定义提供一个接口,让该接口负责创建一系列“相关或者相互依赖的对象”,无需指定它们具体的类。三、结构四、要点总结如果没有应对“多系列对象构建”的需求变化,则没有必要使用 Abstract Factory 模式,

2022-05-12 16:40:13 48

原创 设计模式 - 对象创建之工厂方法

一、对象创建模式通过“对象创建”模式绕开 new ,来避免对象创建(new)过程中所导致的紧耦合(依赖具体类),从而支持对象创建的稳定。它是接口抽象之后的第一步工作。典型模式:Factory Method、Abstract Factory、Prototype、Builder二、工厂方法动机在软件系统中,经常面临创建对象的工作;由于需求的变化,需要创建的对象的具体类型经常变化。如何应对这种变化?如何绕过常规的对象创建方法(new),提供一种“封装机制”来避免客户程序和这种“具体对象创建工作

2022-05-12 15:38:46 73

原创 设计模式 - 单一职责之桥模式

一、动机由于某些类型的固有的实现逻辑,使得它们具有两个变化的维度, 乃至多个纬度的变化。如何应对这种“多维度的变化”?如何利用面向对象技术来使得类型可以轻松地沿着两个乃至多个方向变化,而不引入额外的复杂度?桥接模式与装饰模式的区别:桥接模式侧重于横向宽度的扩展,而装饰模式侧重于纵向深度的扩展。二、模式定义将抽象部分(业务功能)与实现部分(平台实现)分离,使它们都可以独立地变化。 换句话说,抽象的分离间接完成了具体类与具体类之间的解耦,它们之间使用抽象来进行组合或聚合,而不再使用继

2022-05-12 01:35:55 83

原创 设计模式 - 单一职责之装饰模式

一、单一职责模式在软件组件的设计中,如果责任划分的不清晰,使得继承得到的结果往往是随着需求的变化,子类极具膨胀,同时充斥着重复代码,这时候的关键是划清责任。二、装饰模式动机在某些情况下我们可能会“过度地使用继承来扩展对象的功能”, 由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性; 并且随着子类的增多(扩展功能的增多),各种子类的组合(扩展 功能的组合)会导致更多子类的膨胀。如何使“对象功能的扩展”能够根据需要来动态地实现?同时避免“扩展功能的增多”带来的子类膨胀问题?从而使得任何“

2022-05-12 01:03:51 74

原创 设计模式 - 组件协作之观察者模式

一、动机在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系” 。一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密,将使软件不能很好地抵御变化。使用面向对象技术,可以将这种依赖关系弱化,并形成一种稳定的依赖关系。从而实现软件体系结构的松耦合。二、模式定义定义对象间的一种一对多(变化)的依赖关系,以便当一个对象(Subject)的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。三、结构四、要点总结使用面向对象

2022-05-11 17:43:03 117

原创 设计模式 - 组件协作之策略模式

一、动机在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂;而且有时候支持不使用的算法也是一个性能负担。如何在运行时根据透明的更改对象的算法?将算法与对象本身解耦,从而避免上述的问题?二、模式定义定义一系列算法,把它们一个个封装起来,并且使它们可以互相替换(变化)。该模式使得算法可独立使用于他们的客户程序(稳定)而变化(扩展,子类化)。三、结构四、要点总结Strategy及其子类为组件提供了一系列可重用的算法,从而

2022-05-11 14:56:35 71

原创 设计模式 - 组件协作之模板方法

一、什么是组件协作模式现代软件专业分工之后的第一个结果是“框架与应用程序的划分”,“组件协作”模式通过晚期绑定,来实现框架与应用程序之间的松耦合,是二者之间的协作时常用的模式。二、Template Method 动机在软件构建过程中,对于某一项任务,它常常有稳定的整体操作结构,但各个子步骤却有很多改变的需求,或者由于固有的原因 (比如框架与应用之间的关系)而无法和任务的整体结构同时实现。结构化软件设计流程面向对象软件设计流程早绑定与晚绑定早绑定:后开发的代码调用之前开

2022-05-11 01:00:55 90

空空如也

空空如也

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

TA关注的人

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