精华内容
下载资源
问答
  • 容器定义
    千次阅读
    2015-04-15 18:54:23
    一、顺序容器的定义
            容器是容纳特定类型对象的集合。这种容器根据位置来存储和访问元素。就是顺序容器

    二、容器适配器
       根据原始的容器类型所提供的操作,通过定义新的操作接口,来适应基础的容器类型

    三、顺序容器的类型和容器适配器

    顺序容器

     

    容器适配器

     

    vector

    支持快速随机访问

    stack

    后进先出(LIFO)

    list

    支持快速插入/删除

    queue

    先进先出(FIFO)

    deque

    双端队列

    priority_queue

    有优先级管理的队列


    四、容器的定义
        所有的容器都是类模板,要定义一种特殊的容器,必须实例化
        vector<string> vs;
        list<int> li;
        deque<float> df;
    五、容器的构造函数
     

    C<T> c;

    创建一个名为c的空容器。C是容器类型名,如vector,T是元素类型,如int或string适用于所有容器

    C c(c2);

    创建容器c2的副本c;c和c2必须具有相同的容器类型,并存放相同类型的元素。适用于所有容器。

    C c(b,e);

    创建c,其元素是迭代器b和e标示的范围内元素的副本。

    适用于所有容器

    C c(n, t);

    用n个值为t的元素创建容器c,其中值t必须是容器类型C的元素类型的值,或者是可转换为该类型的值。

    只适用于顺序容器

    C c(n);

    创建有n个值初始化元素的容器c

    只适用于顺序容器

    注意事项:
        1、将一个容器初始化给另一个容器的副本
        要求:容器类型和元素类型必须相同
        2、初始化一段元素的副本
        系统允许通过传递一对迭代器间接实现将一种容器内的元素赋值给另一种容器
        不要求类型相同和大小相同
        vector<string> vs;
        list<int> li;
        deque<float> df;
    
        list<string> tls(vs.begin(),vs.end());
    
        deque<float>::iterator mid = df.begin()+df.size()/2;
    
        list<string> lst(mid,df.end());

        3、分配和初始化指定书目的元素
        创建容器时,可以显式指定容器的大小和一个可选的初始值
    const list<int>::size_type list_size = 100;
    list<string> slist(list_size,"hhh");

        4、不提供元素初始值时,标准库将为该容器实现值初始化。但这种初始化有限制,元素的类型必须是内置或复合类型,或者提供了默认构造函数的类类型。如果没有默认构造函数,必须显式的指定其元素初始化值
        5、只有顺序容器接受容器大小做形参的构造函数
        6、c++语言容器的元素类型
            必须支持赋值运算 
            元素类型的对象必须可以复制
        7、容器的容器
      vector<vector<int>> lines;
    六、迭代器的运算

    所有标准库都提供的迭代器运算

    *iter

    返回迭代器iter所指向的元素的引用

    iter-> mem

    对iter进行解引用,获取指定元素中名为mem的成员。等效于(*iter).mem

    ++iter/iter++

    给iter加1,使其指向容器里的下一个元素

    --iter/iter--

    给iter减1,使其指向容器里的前一个元素

    iter1== iter2

    iter1!= iter2

    比较两个迭代器是否相等(或不等)。当两个迭代器指向同一个iter2容器中的同一个元素,或者当它们都指向同一个容器的超出末端iter1!=的下一位置时,两个迭代器相等.



    更多相关内容
  • c++容器定义、初始化、赋值

    千次阅读 2020-07-08 11:28:43
    1.容器定义和初始化 (1)C c;默认构造函数,如果c是一个array,则c中元素按照默认初始化;否则c为空。 解释:默认初始化,如果c是全局变量,int 初始化为0,如果c是局部变量。那么初始化为任意整数值。string ...

           令C表示六个顺序容器类型期中之一(vector,deque,list,forward,string,array),以下详细说明定义和初始化以及赋值.

    1.容器定义和初始化

    (1)C  c;默认构造函数,如果c是一个array,则c中元素按照默认初始化;否则c为空。

    解释:默认初始化,如果c是全局变量,int 初始化为0,如果c是局部变量。那么初始化为任意整数值。string 对象全部初始化为空串子.

    (2)C  c1(c2) ;        c1初始化为c2的类型。c1 和c2必须是同类型的constainer.对于array,c1和c2必须长度相同.注意这是初始化。离开定义是不能这样使用的。例如:下面就是错误的,因为初始化时候才能用圆括号

      vector<int> v_int1 = {1,2,3,4,5,6},v_int2;
       v_int2(v_int1);
       

     

    (3)C c1 = c2;     定义c1,并且把c2的赋给c1.包括定义和赋值两个过程。

    (4)C c1{a,b,c,d,e,f};把c1列表初始化为花括号内的部分。

    (5)C c1 = {a,b,c,d,e,f};把c1列表初始化为花括号内的拷贝。

    (6)C c1(b,e);b和e为两个迭代器类型.

    (7)C seq(n); seq包含n个元素,这些元素进行了值初始化;此构造函数是explict的。(string不适用).

    看下面的c11,d11,l11,f11四个对象。string不适用。

    #include <iostream>
    #include <string>
    #include <vector>
    #include <deque>
    #include <list>
    #include <forward_list>
    #include <string>
    #include <array>
    using namespace std;
    #define LENGTH  10
    typedef  int TYPE;
    typedef  vector<TYPE> VECTORTYPE;
    typedef  deque<TYPE> DEQUETYPE;
    typedef  list<TYPE> LISTTYPE;
    typedef  forward_list<TYPE> FORWARD_LISTTYPE;
    typedef  array<TYPE,LENGTH>  ARRAYTYPE;
    void print(auto &);
    ARRAYTYPE a;
    int main()
    {
      //test C c(b,e);
      VECTORTYPE v_type{1,2,3,4,5,6},v_type2;
      VECTORTYPE v_type1(v_type.begin() + 1 ,v_type.end() -1);
    
      VECTORTYPE c11(LENGTH);
      DEQUETYPE  d11(LENGTH);
      LISTTYPE   l11(LENGTH);
      FORWARD_LISTTYPE f11(LENGTH);
      print(c11);
      print(d11);
      print(l11);
      print(f11); 
      return 0;
    }
    void print(auto  &vec)
    {
      for(auto i  = vec.begin() ; i != vec.end() ; ++i)
        { cout << *i << " ";}
      cout << endl;
      return ;
    }
    
    

    如果string对象用,如下:

    string s(10);

    编译器报错如下:

    11.cc:30:14: error: invalid conversion from ‘int’ to ‘const char*’ [-fpermissive]
       string s(10);
    

    (8)C seq(n,t),包含n个t值。array不满足,array<int,10>,有本身的固定类型和长度。

    例如:

    string s(10,'a');//定义string对象s为10个a

     

    #include <iostream>
    #include <string>
    #include <vector>
    #include <deque>
    #include <list>
    #include <forward_list>
    #include <string>
    #include <array>
    using namespace std;
    #define LENGTH  10
    typedef  int TYPE;
    typedef  vector<TYPE> VECTORTYPE;
    typedef  deque<TYPE> DEQUETYPE;
    typedef  list<TYPE> LISTTYPE;
    typedef  forward_list<TYPE> FORWARD_LISTTYPE;
    typedef  array<TYPE,LENGTH>  ARRAYTYPE;
    
    void print(auto &);
    ARRAYTYPE a;
    int main()
    {
      //test C c(b,e);
      VECTORTYPE v_type{1,2,3,4,5,6},v_type2;
      VECTORTYPE v_type1(v_type.begin() + 1 ,v_type.end() -1);
    
      VECTORTYPE c11(LENGTH,4);
      DEQUETYPE  d11(LENGTH,5);
      LISTTYPE   l11(LENGTH,6);
      FORWARD_LISTTYPE f11(LENGTH,7);
     
      print(c11);
      print(d11);
      print(l11);
      print(f11);
      
      return 0;
    }
    void print(auto  &vec)
    {
      for(auto i  = vec.begin() ; i != vec.end() ; ++i)
        { cout << *i << " ";}
      cout << endl;
      return ;
    }
    
    

    note1:标准库array大小:

    (1)array<int,10> arr_int{1,2,3,4,5,6,7,8,9,0};

     array<int,10>::size_type i;  //right

     array<int>::size_type j;//wrong

    结论:array的大小是array定义的一部分,array不支持普通的容器构造函数。普通构造函数都会确定容器大小,所以及其容易出错。

     

      array<int,10> arr_int1{1,2,3,4,5,6,7,8,9,0};
      array<int,10> arr_int2;
      array<int,10> arr_int3{1024};
      cout << endl;  
      print_array(arr_int1);
      print_array(arr_int2);
      print_array(arr_int3);
    

     三个array对象打印如下,说明局部数组的元素的任意随机整数值。

    1 2 3 4 5 6 7 8 9 0 
    0 121 65535 1 -1240874352 32766 993197120 22013 2 0 
    1024 0 0 0 0 0 0 0 0 0 
    

    (2)

      array<int,10> arr_int1{1,2,3,4,5,6,7,8,9,0};
      array<int,10> arr_int2;
      array<int,10> arr_int3{1024};
      array<int,10> arr_int4(arr_int2),arr_int5=arr_int1;//array可以拷贝,或者=赋值
    

    补充1.创建一个容器为另一个容器的拷贝,那么容器类型元素类型必须匹配。不过,当传递参数是一个迭代器范围时,就不需要容器类型是相同的了。而且,新容器和原容器的元素类型也可以不同,只要能够将要拷贝的元素转换为要初始化的容器的元素类型即可。如下面表1和表2(注意char*可以直接转化成string,反过来必须借助c函数例如c_str(),data成员函数)

              //表1
    #include <iostream>
    #include <string>
    #include <vector>
    #include <deque>
    #include <list>
    #include <forward_list>
    #include <string>
    #include <array>
    using namespace std;
    #define LENGTH  10
    typedef  string TYPE;
    typedef  vector<TYPE> VECTORTYPE;
    typedef  deque<TYPE> DEQUETYPE;
    typedef  list<TYPE> LISTTYPE;
    typedef  forward_list<TYPE> FORWARD_LISTTYPE;
    typedef  array<TYPE,LENGTH>  ARRAYTYPE;
    
    void print(auto &);
    ARRAYTYPE a;
    int main()
    {
      list<string>  authors = {"Milton","Shakespeare","Austen"};
      vector<const char*> articles = {"a","an","the"};
      vector<char*> articles_2(authors); //wrong,type is not same
      list<string> list2(authors);    //right
      deque<string> authList(authors); //wrong,type is not same
      vector<string> words(articles);   //wrong,type is not same 
      return 0;
    }
    void print(auto  &vec)
    {
      for(auto i  = vec.begin() ; i != vec.end() ; ++i)
        { cout << *i << " ";}
      cout << endl;
      return ;
    }
    
    11.cc:24:35: error: no matching function for call to ‘std::vector<char*>::vector(std::__cxx11::list<std::__cxx11::basic_string<char> >&)’
       vector<char*> articles_2(authors); //wrong,type is not same
    
    11.cc:26:33: error: no matching function for call to ‘std::deque<std::__cxx11::basic_string<char> >::deque(std::__cxx11::list<std::__cxx11::basic_string<char> >&)’
       deque<string> authList(authors); //wrong,type is not same
    
    11.cc:27:32: error: no matching function for call to ‘std::vector<std::__cxx11::basic_string<char> >::vector(std::vector<const char*>&)’
       vector<string> words(articles);   //wrong,type is not same
    
    
    
               //表2是 表1修正后的代码
    #include <iostream>
    #include <string>
    #include <vector>
    #include <deque>
    #include <list>
    #include <forward_list>
    #include <string>
    #include <array>
    using namespace std;
    #define LENGTH  10
    typedef  string TYPE;
    typedef  vector<TYPE> VECTORTYPE;
    typedef  deque<TYPE> DEQUETYPE;
    typedef  list<TYPE> LISTTYPE;
    typedef  forward_list<TYPE> FORWARD_LISTTYPE;
    typedef  array<TYPE,LENGTH>  ARRAYTYPE;
    
    void print(auto &);
    ARRAYTYPE a;
    int main()
    {
      list<string>  authors = {"Milton","Shakespeare","Austen"};
      vector<const char*> articles = {"a","an","the"};
      vector<char*> articles_2(authors.begin(),authors.end());  //wrong,string 不能直接转化成char*
      list<string> list2(authors);    
      //采用了迭代器初始化,容器类型和元素类型可以不同了。只要元素类型可以转化就ok
     deque<string> authList(authors.begin(),authors.end());
     // 同上
      vector<string>words(articles.begin(),articles.end()); 
      return 0;
    }
    void print(auto  &vec)
    {
      for(auto i  = vec.begin() ; i != vec.end() ; ++i)
        { cout << *i << " ";}
      cout << endl;
      return ;
    }
    
    11.cc:24:57:   required from here
    /usr/include/c++/7/bits/stl_construct.h:75:7: error: cannot convert ‘std::__cxx11::basic_string<char>’ to ‘char*’ in initialization
         { ::new(static_cast<void*>(__p)) _T1(std::forward<_Args>(__args)...); }
    

     

     

     

    展开全文
  • 压力容器定义和分类[汇编].pdf
  • ASME锅炉和压力容器规范中有关焊接术语定义资料.pdf
  • 容器技术是最快被数据中心所广泛接受和采用的技术之一,从2013年起,据统计Docker的下载量已经快达到30亿次,容器已经彻底改变了应用部署方式,但是IT基础设施的管理却没有及时跟上。
    

    容器定义存储(CDS)—存储技术的"瘦身"革命

    容器定义存储(CDS)—存储技术的

    容器技术是最快被数据中心所广泛接受和采用的技术之一,从2013年起,据统计Docker的下载量已经快达到30亿次,容器已经彻底改变了应用部署方式,但是IT基础设施的管理却没有及时跟上。

    今天我们就谈谈容器技术在存储中的应用,除了EMC Unity统一存储采用容器实现NAS、复制等增值特性之外,目前已经有初创存储厂商推出容器定义存储(CDS)产品,由于内容太长,所以打算分上下两期来讲。第一讲主要介绍容器如何改变应用部署方式、为什么要通过CDS实现数据中心"轻量化"。下一讲将介绍一个CDS产品和公司(Portworx),希望分享的一些观点和趋势能对我们国产存储的发展带来一些启示。Portworx是一家美国存储初创公司,它研发了业界第一个容器定义存储系统,基于容器构建,采用容器控制面和数据面实现,致力于为应用容器提供企业级特性、完全媲美裸金属性能的存储系统。

    目前SDS和SBS存储产品,使得我们很容易从喜欢的商业服务器获取存储容量和服务,硬件节点可以同时提供计算资源和存储资源(融合架构),融合了计算和存储能力。但这些存储方案缺少一个全新设计的软件架构,用来部署应用软件和容器,充分利用服务器计算的商品化和微服务化趋势。

    就拿传统专业存储为例,管理和运维需要非常专业的技能,需要了解FC,SAN交换机,iSCSI,NFS和CIFS,FCoE等专业知识,如果你想得到企业级存储服务,就必须了解专业存储每个技术和配置细节。

    容器定义存储(CDS)—存储技术的

    看了这张图片,这一切显得的多么复杂和古老。如果你想建立一个敏捷的数据存储,这或许不是你想看到的画面。回想一下,今天我们是否可以在一个2U外形类似服务器上部署类似存储系统。谷歌、Facebook和其他大型数据中心作为现代数据中心架构的领头羊,已经有团队用专业的技能来建立一个分布式的容错存储系统,利用x86架构的计算和存储。我们看到的只是一堆物理基础设施,通过Scale out x86服务器提供非常易用的存储服务。

    随着现代数据中心的发展,新的应用形态(Cloud-native、DevOps、Micro Service等)都要求基于云平台构建(Cloud-native),这对存储体系结构又有了新的要求,这些要求主要体现在以下几个方面。

    • 面向服务的存储配置: 过去基于一个物理服务器或虚拟机配置存储卷的技术、依赖于FCoE、iSCSI等协议的技术已经落后了。

    • 卷服务粒度更细、数量更多: 在最现代化的服务模型中,如NoSQL和消息队列,通常被设计成大规模扩展方式。他们部署时需要存储支持更多卷数量、更小的卷容量。而不像过去,一个计算节点通常映射一个大容量卷来提供数据库等应用。

    • 存储本地多层化: 目前服务器至少有两个存储层级。基于全球客户服务器采购的实际情况来看,数据中心的服务器来自不同的供应商的多种服务器,不同服务器具有不同的内部容量层。客户希望新的存储结构来理解这些变化和不同,并能自动利用不同存储提供存储服务。

    • 存储超融合化: 新服务架构要求数据计算和存储融合。以Hadoop为例,在计算是派遣到服务节点上运行的主机数据。

    • 多服务颗粒存储操作: 新型应用程序不是单一的堆栈。而是通过部署在多个节点上的分布式模块进行业务交互组成。企业存储的操作,如快照、检查点还原、复制、配额等,需要提供服务堆栈级别上的支持。所以,我们的存储系统需要能意识到一组分布式x86服务器通过以太网织物绑在一起。

    容器定义存储(CDS)—存储技术的

    在数据中心中,硬件结构的现状一般是,来自不同供应商的服务器各自为政,不同存储容量和不同类型的服务器并存,Top of Rack交换机的能力也不同,而运行其上的软件是以一个更高的粒度,通过松耦的一组容器化服务运行在不同节点上。那么,我们该如何扩展存储层来与大量相对较薄的服务一起工作呢,当然,常用的做法就是将堆栈拆分成独立的数据可用区和计算区,根据不同SAL的应用需求匹配相应的存储资源。

    容器定义存储(CDS)—存储技术的

    实质上,上图就是一个容器感知存储架构,该架构要实现如何根据存储需求将数据放置在容器的位置区。这种架构可以支撑一个更大的容器计算集群,同时可以保持存储的性能和时延要求。

    面对更细粒度的、自恢复和可发现的面向服务的应用架构,存储也不应该有任何核心的集中元数据服务器,元数据应该分布式存放和去中心化存放,并通过负载均衡等算法或检测协议(Gossip Protocol)实现高效的故障自愈系统和高可靠系统。

    容器定义存储(CDS)—存储技术的

    Gossip Protocol的通信方式类似流言传播,每个节点状态的变化和更新,立即通过一传十,十传百的方式在集群内广播,而不是由某几个节点逐一传递,所以通信效率非常高效。

    为了让存储能感知容器,存储调度也需和容器引擎集成,随着应用软件向更为面向服务的体系结构演进,应用软件的业务流程和调度也发生了变化。我们不再需要手动管理进程,而是自动实现软件的启动、停止和生命周期管理,对软件的运行和SLA需求也要实现自动化。这就要现代流行的调度器来完成,如Mesosphere,Kubernetes,Swarm,Spark等。

    容器定义存储(CDS)—存储技术的

    新的应用架构都是深度集成这些容器调度器,DevOps开发团队的工作也是基于容器调度器和编排工具进行,所以,对软件定义存储,容器定义存储等基层设施层来说,就可以直接跟这些调度或业务编排层实现集成。这对数据中心实现“轻量化”来说,也变得比较迫切。

    容器定义存储(CDS)—存储技术的

    容器在单个操作系统运行多个应用,由于它的轻量特性也给应用部署带来很多优势,如占用资源少、启动快、容易部署等,其高效率也意味着数据中心需要较少的硬件和物理空间开销,Docker也是因为开源和强大生态而被全球范围内的企业拥抱。但是容器的应用还是局限在公有云、网站、无状态的应用,还没有大规模进入到数据中心主要业务。一个主要原因是现有容器是基于无状态业务进行优化,到目前为止,还没有健壮和易管理的方法存放有状态的数据,这也跟容器每次访问完后就终止进程的架构有关。

    分布式扩展存储架构在设计时,就需要考虑如何以面向服务的数据中心提供不同的存储类型。 面对服务访问所需的多进程、多volume、高吞吐量等诉求时,存储需要从许多运行在不同机器的节点,提供一致的存储服务访问。有时这些容器甚至运行在云上或其他数据中心。面向服务的应用类型包括了:

    • 无状态服务: 这些通常是短暂的计算作业,他们依靠一些其他状态的服务实现具体业务。

    • 状态数据库服务: 这些通常需要块存储或非共享存储访问。

    • 有状态的服务需要的文件或对象访问: 常见的有全局文件或对象的命名空间。

    然而,在云计算高度发展今天,新型应用基本上基于Docker等云基础设施构建的Cloud-native应用,而不是从传统物理设施上迁移到云平台的Cloud-based业务。Cloud-native大多采用Micro Service或容器部署,就要求与之相匹配的存储提供存储服务。

    容器定义存储(CDS)—存储技术的

    为了推进“轻量级”下一代数据中心架构,并充分利用容器技术的特点,数据中心也在面临一场变革,需要替换原来臃肿的架构和基础设施,采用容器架构和容器存储技术来支持业务系统。今天就介绍到这里,下篇我们重点介绍基于容器Portworx存储、一个基于数据和控制面的容器定义存储技术和产品。

    文章来自ICT架构师技术交流“ICT_Architect”公众号,关注获取更多精彩内容。


    温馨提示:

    请搜索“ICT_Architect”“扫一扫”下面二维码关注公众号,获取更多精彩内容。

    展开全文
  • 在上篇中,我们已经介绍了容器如何改变应用部署方式、为什么要通过CDS实现数据中心"轻量化"。那今天我们就来分析一下基于容器的Portworx存储、一个基于数据和控制面的容器定义存储技术和产品。
    

    容器定义存储(CDS)—春江水暖"Portworx"先知

    容器定义存储(CDS)—春江水暖

    在上篇中,我们已经介绍了容器如何改变应用部署方式、为什么要通过CDS实现数据中心"轻量化"。那今天我们就来分析一下基于容器的Portworx存储、一个基于数据和控制面的容器定义存储技术和产品。

    Portworx是一家美国存储初创公司,它研发了业界第一个容器定义存储系统Portworx。Portworx提供了全新的、统一的Scale out存储栈,其核心架构是共享的、松耦合的、分布式、基于元数据的块存储层(卷、块设备、全局共享卷和文件访问等)。portworx本身作为容器服务的方式部署,在每个集群节点呈现为PX的容器。

    Portworx架构和原理

    每个PX容器来识别服务器节点的硬件、检测磁盘类型、容量和整体服务能力和类型。系统根据每个节点的能力匹配业务对存储需求,进行调度和IO分发。

    每个PX容器根据授权和集群ID发现其他节点。通过这种方式,每一个PX节点就可以感知整个存储系统的拓扑结构和参与集群的节点(支持数据中心内部和跨数据中心部署)。通过整体拓扑就可以感知整个集群的Region、机架部署情况,当然,也可以感知集群内不同节点的能力。

    容器定义存储(CDS)—春江水暖

    集群节点信息同步采用Gossip协议(类似留言蜚语,节点状态的变化,通过一传十,十传百的方式传递,而不是有某几个节点逐一传递),通过效率比较高的协议确保整个集群状态的一致性,而且不会存在扩展性或性能瓶颈。

    容器定义存储(CDS)—春江水暖

    存储控制面

    存储的供给方式是通过容调度器来实现,存储资源通过编排网络分配给具体的容器实例,PX已经支持与多种容器调度、编排工具集成,如主流的Kubernetes、Swarm、Mesosphere、Spark等,PX通过控制面协议创建合适的存储卷给上层容器实例使用,基于应用容器的IO等SLA要求,PX可以自动分配满足要求的存储卷。在Kubernetes调度器中,存储卷是以Kubernetes POD的方式提供给应用容器。

    卷是以Thin的方式来分配的,可以做到按需灵活伸缩。每个卷的容量是打散在集群节点上的,所以增值特性如,快照、块大小等都可以容器卷的原则来分配。

    容器定义存储(CDS)—春江水暖

    数据面访问

    Portworx提供数据访问路径和位置,一旦把卷配置给正在运行的应用容器后,PX就处在数据路径的位置;并根据上层容器应用对应的储类型(卷、块设备或全局共享卷等)连接到上层容器上。

    容器定义存储(CDS)—春江水暖

    当上层应用容器写入数据时,数据块和对应的元数据会根据算法分布到不同的节点上增强可靠性。这些卷是容器可寻址卷,可以基于容器寻址,所以具备内容寻址存储的优势。

    生命周期管理

    每个PX容器维护着应用容器卷的生命周期管理,这些卷可以被克隆、分级存储、或移动到S3公有云上。PX同时维护着每个卷的IO活动历史记录,并向上提供CLI和PXctl命令接口和GUI界面,方便运营维护和系统管理。

    Portworx应用场景

    Portworx由于在存储容器层针对企业应用做了优化和增强,所以,可以满足主流应用要求,如Hadoop、Spark大数据存储,提供弹性Scale out能力;对内容管理WordPress,可以提供Scale out 文件能力和基于容器的备份;也支持一些如Cassandra、Postgres等非关系数据库;另外,对流计算、视频应用场景也支持PB级的扩展能力。

    Portworx提供了业界第一个存储解决方案专为容器。不像传统存储,Portworx容器定义存储是基于应用需求规模实现弹性伸缩。面向容器化应用的软件定义存储,强调Container Defined Storage,实现从控制面到数据面完整的方案,Portworx提出“容器定义的存储”,相比VM存储提出更细SLA要求、容器粒度的企业存储特性要求,容器应用对存储的新要求需要进一步分析。

    Portworx其在Docker Hub中有OpenStorage开源项目;另外,提供了开发者和企业级两个版本,开发者版本只包含基于容器的Scale out快存储、分布式的文件访问、基于容器粒度的控制和CLI命令行界面;企业版增加了多集群管理、单一文件命名空间、容量预测和管理、GUI管理界面。

    容器定义存储(CDS)—春江水暖

    Portworx可运行于服务器或EC2、容器等基础设施,并且支持分离部署和超融合部署,Portworx的主要亮点简单总结如下:

    • 性能无损: 存储运行性能可以和裸金属部署媲美。

    • 存储持久能力: 对容器应用提供了持久数据存储能力。

    • 容器粒度管理: 实现了基于每个应用容器的存储管理服务。

    • 容器粒度增值特性: 基于容器粒度实现远程复制、快照等数据保护功能

    • 节约硬件资源: 相对于虚拟机,削减了存储70%硬件和资源成本。

    • 资源自动化供给: 能应对容器应用突发需求,如容量供给、自动调度等,基于容器I/O进行优先级排队,基于SLA自动供给。

    Portworx容器定义存储本身很简单,采用基本的分布式方法和商业X86硬件作为融合存储节点,并能实现节点快速伸缩。最主要的就是可以与任何一个Docker调度集成,自动实现存储资源按需供给。

    容器定义存储(CDS)—春江水暖

    Portworx从控制面和数据面完整地为容器提供存储,数据面供给能力更高、更快、更强;控制面可以广泛对接Docker、Kubernetes、Mesos等计算与集群管理系统。如vSAN/vVol/Cinder,这种比较开放的架构,可以通过PWX CDS 控制器构建面向容器控制面生态。


    Portworx认为容器定义存储应具备这些能力(个人观点,可能不是太全面):
    1.容器定义存储应该分控制面和数据面实现,控制面基于 Kubernetes、Swarm、Mesosphere、Spark等 容器调度、编排工具自动实现存储分配,满足应用容器的SLA要求;数据面提供更高、更快、更强的存储供给能力,并可以实现基于应用容器寻址的能力。
    2.应用容器卷的分配、管理应该是以容器为单位, 所有增值特性如,快照、远程复制等都基于容器的原则来实现。
    3.容器定义存储应该是高度自愈、轻量高效、应用容器感知的系统。自愈、高效我觉得传统存储都具备,但是轻量、容器感知还需要加强。Portworx采用容器实现分布式Scale out容器定义存储,可以提供裸金属性能、启动快和资源占用率低等特点。


    文章来自ICT架构师技术交流ICT_Architect公众号,关注获取更多精彩内容。


    温馨提示:

    请搜索“ICT_Architect”“扫一扫”下面二维码关注公众号,获取更多精彩内容。

    展开全文
  • Kubernetes 1.5 实践 给Pod中的容器定义命令和参数defining a Command and Arguments for a Container 给容器定义一个命令和参数。This page shows how to define commands and arguments when you run a container...
  • 容器定义存储(CDS)—"Portworx

    千次阅读 2016-12-15 01:20:17
    今天我们就来分析一下基于容器的Portworx存储、一个基于数据和控制面的容器定义存储技术和产品。 Portworx是一家美国存储初创公司,它研发了业界第一个容器定义存储系统Portworx。Portworx提供了全新的、统一的...
  • 容器基本概念

    千次阅读 2021-01-13 10:17:55
    容器基本概念 1.容器与镜像 什么是容器容器就是一个视图隔离、资源可限制、独立文件系统的进程集合。所谓“视图隔离”就是能够看到部分进程以及具有独立的主机名等;控制资源使用率则是可以对于内存大小以及 CPU ...
  • C++容器亲自总结

    千次阅读 多人点赞 2022-02-28 20:01:08
    一、容器定义 在数据存储上,有一种对象类型,它可以持有其它对象或指向其它对像的指针,这种对象类型就叫做容器。很简单,容器就是保存其它对象的对象,当然这是一个朴素的理解,这种“对象”还包含了一系列...
  • c++中容器之总结篇

    2020-12-31 18:37:14
    C++中的容器大致可以分为两个大类:顺序容器和关联容器。顺序容器中有包含有顺序容器适配器。...1、顺序容器定义 为了定义一个容器类型的对象,必须先包含相关的头文件:  定义vector:#include <vector
  • 容器重新定义软件的边界.pdf
  • HGCAD_钢制卧式容器[定义].pdf
  • 容器云重新定义企业IT架构.pptx
  • STL 定义的具体容器

    2016-10-28 16:00:46
    STL 定义的三类容器所包含的具体容器类。解析容器间的差别,每个类型的优缺点。对容器的理解和使用,有一定的好处
  • JAVA常用容器的用法[定义].pdf
  • Spring的IoC容器之BeanFactory[定义].pdf
  • 第四节电容器电容最好[定义].pdf
  • 出口包装容器质量许可证[定义].pdf
  • 什么叫容器

    千次阅读 2020-04-11 16:56:57
    容器就是将软件和依赖,一起打包的技术,解决了在不同环境下,运行环境有差异的问题,可以很方便再不同的系统发行版之间迁移,因为所有得操作系统,都由内核空间和用户空间组成,而不同的发行版他们的内核空间是一样...
  • 5压力容器制造过程及质量检验定义.pdf
  • 某汽车主机厂容器最佳实践-需求定义.docx
  • I类压力容器裂纹修补方案[定义].pdf
  • C++二维容器vector的使用及一个经典案例vector(容器)的调用及初始化二维vector的插入元素经典案例---查找某元素target是否存在二维数组vector中 vector(容器)的调用及...在C++11中,二维容器定义式可以写成vector<

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 928,783
精华内容 371,513
关键字:

容器定义