- 博客(37)
- 收藏
- 关注
原创 【云计算基础技术提高班之一】体系化认识RPC
本文主体源自体系化认识RPC,文章整体写得不错,本文稍作细化,同时更正了部分不实之处。RPC技术在分布式系统中有广泛的使用,因而在云计算平台中也是经常使用的技术,本文体系性地介绍了 RPC 包含的核心概念和技术,希望读者读完文章,一提到 RPC,脑中不是零碎的知识,而是具体的一个脑图般的体系。本文并不会深入到每一个主题剖析,只做提纲挈领的介绍。RPC 最核心要解决的问题就是在分布式系统间,如何执行另
2017-09-18 22:27:03
886
原创 【JAVA 提高班之八】Netty NIO研究
Why NIONIO(Non-blocking I/O,在Java领域,也称为New I/O),是一种同步非阻塞的I/O模型,也是I/O多路复用的基础,已经被越来越多地应用到大型应用服务器,成为解决高并发与大量连接、I/O处理问题的有效方式。NIO是对过去传统的BIO的一种改进,这里就不得不先解释一下BIO。BIO自然就是阻塞式IO,采用 BIO 通信模型的服务端,通常由一个独立的 Acceptor
2017-09-01 19:38:50
655
原创 【JAVA 提高班之七】多线程互斥和协作
多线程是个庞大的话题,从不同的角度有不同的讲述,本文专注于从多线程的协作角度,有互斥关系,合作关系,父子关系,线程池。线程状态图的演进一.线程基本状态图 普通的Thread对象通过调用Start()方法进入就绪态(Runnable),在Runnable状态下是可以被CPU调度的,即获取CPU时间片进入运行态调用Run方法,在获取到的时间片结束之后可以继续返回到就绪态。但是如果在运行态发生阻塞式的操
2017-08-31 17:06:23
765
转载 【JAVA 提高班之六】Java泛型
本文转自:http://www.weixueyuan.net/view/6321.html泛型诞生的需求我们知道,使用变量之前要定义,定义一个变量时必须要指明它的数据类型,什么样的数据类型赋给什么样的值。假如我们现在要定义一个类来表示坐标,要求坐标的数据类型可以是整数、小数和字符串,例如: x = 10、y = 10 x = 12.88、y = 129.65 x = “东京180度”、y =
2017-08-26 00:16:36
535
原创 【JAVA 提高班之五】Java多态对象的类型转换
这里所说的对象类型转换,是指存在继承关系的对象,不是任意类型的对象。当对不存在继承关系的对象进行强制类型转换时,java 运行时将抛出 java.lang.ClassCastException 异常。在继承链中,我们将子类向父类转换称为“向上转型”,将父类向子类转换称为“向下转型”。很多时候,我们会将变量定义为父类的类型,却引用子类的对象,这个过程就是向上转型。程序运行时通过动态绑定来实现对子类方法
2017-08-25 23:12:59
603
转载 【JAVA 提高班之四】抽象类与接口
本文转载自: http://blog.youkuaiyun.com/chenssy/article/details/12858267抽象类与接口是Java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力。他们两者之间对抽象概念的支持有很大的相似,甚至可以互换,但是也有区别。一、抽象类我们都知道在面向对象的领域一切都是对象,同时所有的对象都是通过类来描述的,但是并不是所有的
2017-08-25 22:29:01
436
原创 【JAVA 提高班之三】异常处理
Java中异常提供了一种识别及响应错误情况的一致性机制,有效地异常处理能使程序更加健壮、易于调试。异常之所以是一种强大的调试手段,在于其回答了以下三个问题:什么出了错?在哪出的错?为什么出错?在有效使用异常的情况下,异常类型回答了“什么”被抛出,异常堆栈跟踪回答了“在哪“抛出,异常信息回答了“为什么“会抛出,如果你的异常没有回答以上全部问题,那么可能你没有很好地使用它们。有三个原则可以帮助你
2017-08-13 18:24:26
547
原创 【JAVA 提高班之二】Volatile用法详解
前言volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们先来了解一
2017-08-09 22:24:23
540
原创 【SDN控制器分析之三】ONOS Device Subsystem
概述设备子系统负责发现和跟踪组成网络的设备,并使管理员和应用程序能够控制它们。大多数ONOS核心子系统都依赖Device子系统的Device和Port的模型对象来进行管理和创建,也会通过Device Provider来和网络进行交互。Device子系统由以下几个部分组成:DeviceManager : 能够与多个Provider通过deviceproviderservice接口交互和多个监听者通过
2017-08-04 20:18:43
1306
1
原创 【SDN控制器分析之二】ONOS网络状态表述
概述控制平面所维护的关键信息是网络状态。控制平面必须聚合此信息,并使其对应用程序可用。此外,为了保持可扩展性和组件重用,应用程序应该免受协议细节的影响,即使网络状态信息是通过特定协议的方式获得的。ONOS协议不可知的拓扑结构是采用两个互补机制:网络发现和配置来实现的。前者利用网络协议让ONOS识别网络元素的位置和/或性能,在功能使能的情况下会主动开展相关的采集工作。后者允许应用程序和操作人员配置预期
2017-08-04 19:26:02
2370
原创 【SDN控制器分析之一】ONOS架构概述
ONOS 设计目标ONOS是一个采用OSGI技术来管理子项目的SDN控制器开源项目,在最初设计时有这么几个目标是明确的:代码模块化:支持把新的功能作为新的独立单元引入特性可配置:无论是在启动还是运行时,支持动态加载和卸载特性协议无关:应用不需要和具体的协议库和实现绑定模块化的实现:ONOS项目由一组子项目组成,每个项目都有自己的源代码树,可以独立构建。为此,ONOS的源码采用分层的方式来组织
2017-08-03 22:06:07
10820
原创 【LeetCode系列】动态规划算法
前言在知乎上看到有一篇对动态规划进行介绍的文章,觉得介绍的十分的好,这里贴出来和大家一起分享: 什么是动态规划?动态规划的意义是什么? 其实在三年前也写了一篇用动态规划求解的问题: 开心的小明——动态规划, 但是昨天在求解Leetcode的问题 : Longest Substring Without Repeating Characters 时又有动态规划的解法,看了知乎这篇文章之后觉得又加深了我的
2017-07-28 22:31:28
719
转载 【JAVA 提高班之一】集合大家族
前言本篇文章转自chenssy的 java提高篇(二十)—–集合大家族,写得不错,转载以记之,我个人觉得一个功力不错的JAVA码工至少熟悉以下几个领域:不错的抽象的能力(设计模式)常用数据结构的特点(集合类等)JAVA虚拟机的机制(提升性能)并发编程我的JAVA提高班系列也会从这几个方面出发来写。集合大家族分析在编写Java程序中,我们最常用的除了八种基本数据类型,String对象外还有一
2017-07-27 21:02:46
956
原创 【OpenStack源码分析之十一】分布式事务和相关算法
前言在【OpenStack源码分析之六】从虚拟机启动流程看安全认证 中有提到一个问题是关于OpenStack的HA机制和灾难恢复(DR机制)的,HA和DR都是保障可用性的,两者都可以用两个维度来衡量,RTO (Recovery Time Objective)和 RPO(Recovery Point Objective)。RTO 是服务恢复的时间,最佳的情况是 0,这意味着服务立即恢复;最坏是无穷大意
2017-07-25 23:34:57
2599
4
原创 【OpenStack源码分析之十】虚机启动流程中Nova Compute与周边组件的交互
前文也讲述过 【OpenStack源码分析之三】Nova-Compute启动流程分析Nova Compute组件在整个Nova里面是一个核心角色,控制节点上的Nova-api,Nova-Conductor, Nova-Scheduler在虚机启动流程中主要只做了一个事情,就是选出了启动虚机的Host,剩下的网络资源的搭建,Image的下载,卷的申请等工作都是通过Nova-compute来做,所以说它
2017-07-23 21:29:39
1134
转载 【OpenStack源码分析之九】看 nova-scheduler 如何选择计算节点
本节重点介绍 nova-scheduler 的调度机制和实现方法:即解决如何选择在哪个计算节点上启动 instance 的问题。创建 Instance 时,用户会提出资源需求,例如 CPU、内存、磁盘各需要多少。OpenStack 将这些需求定义在 flavor 中,用户只需要指定用哪个 flavor 就可以了。 可用的 flavor 在 System->Flavors 中管理。 F
2017-07-23 12:50:32
1147
转载 【OpenStack源码分析之八】openstack中虚拟机在线迁移
转自:https://www.ibm.com/developerworks/cn/cloud/library/1508_wangyx_openstacklivemigrate/本文尝试回答与 Live migration 相关的几个问题:Live migration 是什么?为什么要做 Live migration?如何做 Live migration?如果你读完本文,基本了解了这三个问题的答案,
2017-07-22 17:52:37
2522
转载 【OpenStack源码分析之七】openstack中的RPC请求分析
转自:http://blog.youkuaiyun.com/hhp_hhp/article/details/51497560概述在OpenStack各个项目中,我们通常会用到如下几种RPC请求:RPC.call:发送请求到消息队列,等待返回最终结果。 RPC.cast:发送请求到消息队列,不需要等待最终返回的结果。 RPC.Notifier:发送各类操作消息到队列,不需要等待最终的返回结果。 RPC.ca
2017-07-22 17:03:48
966
原创 【OpenStack源码分析之六】从虚拟机启动流程看安全认证
前言从7.8号开始分析OpenStack已经有两周了,原本计划一个月分析完Neutron和Nova的,但是捋了下Nova的虚拟机启动流程,尤其是看到popsuper1982仁兄写得虚拟机启动的100个知识点,大概流程是清楚了,但是我没办法再去逐一深究,所以想把这里面再提取几个我关注的知识点研究一下。先借用一下网上的两张图: 虚拟机启动的100个知识点虚拟机启动的整体流程 这里面我比较关注的几个问
2017-07-22 10:26:28
1324
原创 【OpenStack源码分析之五】Nova API 的插件管理
Openstack使用 stevedore作为其第三方开发和加载的框架,其使用setuptools的entry points来定义并加载插件。entry point引用的是定义在模块中的对象,比如类、函数、实例等,只要在import模块时能够被创建的对象都可以。[nova.api.v21.extensions]remote_consoles = nova.api.openstack.compute
2017-07-19 21:05:18
806
原创 【OpenStack源码分析之四】WSGI与Nova API服务启动
前言前文已经介绍了RPC Server的启动,而Nova API启动的是WSGI服务,所以先介绍一下WSGI。WSGIWeb服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口。自从WSGI被开发出来以后,许多其它语言中也出现了类似接口。WSGI是作为Web服务器
2017-07-18 22:49:30
1901
原创 【OpenStack源码分析之三】Nova-Compute启动流程分析
Nova架构概览Nova是OpenStack社区最核心的项目,也是社区诞生之时就一直存在的项目,它主要提供计算资源的服务,这个计算资源包含了虚机以及配套的存储,网络等资源。我比较喜欢把OpenStack和Linux做类比,我们知道进程(Task)是处于执行期的程序以及相关资源的总称,如果把虚机类比为进程,Nova就类似于Linux中的进程管理和调度模块。所以Nova会和很多其他的组件交互,不仅包括O
2017-07-17 20:31:08
5190
原创 【OpenStack源码分析之二】RabbitMQ分析
前言正在捋Nova的代码,从服务启动的入口这块就用到了第三方的Oslo_messaging库,可能也是因为消息中间件确实是整个软件的瓶颈,Oslo_messaging试图隔离出消息中间件和应用之间的接口,使得不仅仅可以使用RabbitMQ,也可以使用Kafka等其他中间件。RabbitMQ介绍这里十分感谢anzhsoft的技术专栏http://blog.youkuaiyun.com/column/details
2017-07-16 18:27:48
1790
原创 【OpenStack源码分析之一】初探OpenStack
打算开始写一个Openstack的分析系列,其实接触Openstack也比较久了,但是一直没有深入了解,而且因为本人对Python知之甚少,用之甚少,所以想研究Openstack的代码上手就会比较困难,再加上代码量也比较大。 不过还是打算下定决心做一个系列的分析,不会全部看,大概只看NOVA和Neutron两个模块,而且按照我的认知习惯,还是先要了解全局再去深入细节,所以头几篇分析都会集中在Wha
2017-07-12 20:52:03
2424
原创 【OpenVswitch源码分析之六】内核空间转发面数据结构与流程
内核态的报文处理起始有不少人已经写了比较详细的分析,这里有SDNLAB的一篇文章(http://www.sdnlab.com/15713.html),这里只是对那些文章再做些总结;内核对报文的处理整体上分为三个大的步骤:报文头的提取流表项的匹配动作的执行 对于报文头的提取,与传统的路由器、交换机不同,OpenFlow的匹配域包含了L2-L4等匹配域。所以其设计了一个数据结构sw_flow_k
2017-07-09 17:52:14
1109
原创 【OpenVswitch源码分析之五】用户空间转发面数据结构与流程
传统交换机是基于MAC表进行转发的,所以OVS也支持MAC学习特性,但是由于OVS也支持Openflow协议作为控制面,其功能就不仅仅是一个二层交换机了。先简单谈谈Openflow由于现在的网络暴露出了越来越多的弊病以及人们对网络性能需求的提高,于是研究人员不得不把很多复杂功能加入到路由器的体系结构当中,例如OSPF,BGP,组播,区分服务,流量工程,NAT,防火墙,MPLS等等。这就使得路由器等交
2017-07-06 23:44:18
2755
原创 【OpenVswitch源码分析之四】控制面关键接口与调用流程
受限于篇幅,前文只讲述了控制面板关键接口的前两个部分,本篇继续讲述基本二层协议的配置,Openflow的控制又是一个很大的命题,会放到下一篇文章做阐述。 1. 虚拟设备的生命周期接口 2. 虚拟设备的业务配置接口 3. 二层基础协议的运行启动 4. Openflow协议的运行开启与流表下发 本节以BFD的配置为例做讲解,无论是STP,BFD的配置,初始的配置接口都是在vsctl中,
2017-07-02 21:15:45
2807
原创 【OpenVswitch源码分析之三】控制面关键接口与调用流程
控制面总览 上图只是描述了控制面的调用流程,控制面的接口包括如下几各方面: 1. 虚拟设备的生命周期接口 2. 虚拟设备的业务配置接口 3. 二层基础协议的运行启动 4. Openflow协议的运行开启与流表下发 下面就这几个层面的分别简述一下虚拟设备的生命周期接口虚拟设备不同于物理设备,除了FCAPS管理之外还需要对其生命周期进行管理,在OVS中,设备类型被分成了很多类(图中只标注了四
2017-07-02 16:48:50
1355
原创 【OpenVswitch源码分析之二】架构
OpenVswitch架构概览 Open vSwitch的架构和模块与传统的物理交换机是一一对应的,包括控制面和数据平台,只是传统的物理交换机通常使用NP芯片来进行转发,而Openvswitch使用Linux内核模块做数据平面。OpenVswitch包括三个核心模块:ovs-vswitchd,ovsdb-server以及内核模块openvswitch datapath。每个模块有不
2017-06-28 20:45:02
2483
原创 【OpenVswitch源码分析之一】背景
什么是OpenVswitch Open vSwitch是基于开源Apache 2 license的多层软件交换机,其目的是实现一个产品级质量的交换平台,其支持标准的管理接口,并开放转发功能接口供编程扩展和控制。 Open vSwitch适于VM环境中的虚拟交换,除了开放标准的控制和可视化接口给虚拟网络层,它还支持跨多个物理服务器的分布式部署,另外OpenVswitch还兼容多个基于Linux的虚
2017-06-26 21:44:13
1192
原创 对Python协程的理解
前言之前看Python教程的时候了解了一些协程的概念,相对还是比较肤浅,但是协程对Python语言而言是一个很重要的特性,加上近期看了我司架构师标哥的一篇讲协程的文章,感觉豁然开朗。为什么需要协程协程这东西,不是Python独有的,在很多其他脚本语言比如Lua也有,协程的存在,让单线程跑出了并发的效果,对计算资源的利用率高,开销小。但是说起来和Python解释器的设计也有关系,Python解释器对于
2017-06-14 00:14:27
1809
原创 tarjan算法的原理和实现
Tarjan算法的操作原理如下:在任何深度优先搜索中,同一强连通分量内的所有顶点均在同一棵深度优先搜索树中。也就是说,强连通分量一定是有向图的某个深度搜树子树。我们用low值记录该点所在强连通子图对应的搜索子树的根节点的Dfn值。注意,该子树中的元素在栈中一定是相邻的,且根节点在栈中一定位于所有子树元素的最下方。强连通分量是由若干个环组成的。所以,当有环形成时(也就是搜索的下一个点已在栈中
2014-12-01 22:43:19
1087
原创 关于有限状态机
一 有限状态机的实现方式有限状态机(Finite State Machine或者Finite State Automata)是软件领域中一种重要的工具,很多东西的模型实际上就是有限状态机。FSM的实现方式:1) switch/case或者if/else这无意是最直观的方式,使用一堆条件判断,会编程的人都可以做到,对简单小巧的状态机来说最合适,但是毫无疑问,这样的方式比较原始
2014-08-26 22:18:32
1852
原创 开心的小明——动态规划
问题描述:小明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”。今天一早小明就开始做预算,但是他想买的东西太多了,肯定会超过妈妈限定的N元。于是,他把每件物品规定了一个重要度,分为5等:用整数1~5表示,第5等最重要。他还从因特网上查到了每件物品的
2014-04-13 13:32:04
1742
原创 计算二叉树的深度和宽度
如何求解二叉树的深度,可以先分析一下下图:在这个图中,根节点R的高度H1=max{左子节点高度H2,右子节点高度H3}+1;可以得出H1=H3+1;而H2=max{H4,0}+1;H3=H5+1;....;...所以可以看出对高度的求解可以满足以下递归:求得左子树的高度 LHeight;求得右子树的高度RHeight;根的高度为max(LHeight+1,RHe
2014-04-12 07:31:36
4879
原创 寻找兄弟数字
#ifndef _FIND_SIMILAR_WORD_H_#define _FIND_SIMILAR_WORD_H_#include #include using namespace std;/* * 编程实现单链表的排序 */ class Brother{ public : Brother(char *n) :data(n) {} Brother* addWord(char
2014-04-08 23:38:46
1169
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人