- 博客(51)
- 收藏
- 关注
原创 Librados RBD客户端实现
librbd以及librados都是属于ceph 的客户端,其提供ceph的接口向上提供块存储服务。librados提供客户端访问Ceph集群的原生态统一接口。其它接口或者命令行工具都基于该动态库实现。在librados中实现了Crush算法和网络通信等公共功能,数据请求操作在librados计算完成后可以直接与对应的OSD交互进行数据传输。librbd 是Ceph提供的在librados上封装的块存储接口的抽象。
2022-04-01 22:24:42
196
原创 Ceph Librados介绍
Ceph客户端,通过librados直接与OSD交互,来存储和取出数据。为了与OSD交互,客户端应用必须直接调用librados,连接一个Ceph Monitor。一旦连接好以后,librados会从Monitor处取回一个Cluster map。当客户端的应用想读或者取数据的时候,它会创建一个I/O上下文并且与一个pool绑定。通过这个I/O上下文,客户端将Object的名字提供给librados,然后librados会根据Object的名字和Cluster map计算出相应的PG和OSD的位置。
2022-04-01 22:17:55
301
原创 Librados API使用教程
Ceph存储集群提供基本的存储服务,Ceph以独特的方式将对象、块和文件存储集成到一个存储系统中。基于RADOS,您不限于RESTful或POSIX接口,使用librados API能够创建自定义的Ceph存储集群接口(除了块存储、对象存储和文件系统存储外)。
2022-04-01 22:08:43
307
原创 CRUSH Rule基础
CRUSH RuleCRUSH Rule就提供了一种方式,即通过用户定义的规则来指导CRUSH算法的具体执行。其场景主要如下所示。数据备份的数量:规则需要指定能够支持的备份数量。数据备份的策略:通常来说,多个数据副本是不需要有顺序的;但是纠删码不一样,纠删码的各个分片之间是需要有顺序的。所以CRUSH算法需要了解各个关联的副本之间是否存在顺序性。选择存储设备的类型:规则需要能够选择不同的存储设备类型来满足不同的需求,比如高速、昂贵的固态硬盘类型设备,或者低速、廉价的硬盘驱动器类型设备。确定失效域
2021-03-02 15:43:18
1367
原创 Ceph 缓存分层
Ceph Cache TieringCeph 缓存分层的基本思想是冷热数据分离,用相对快速/昂贵的存储设备如SSD盘,组成一个Pool来作为Cache层,后端用相对慢速/廉价的设备来组建冷数据存储池( Storage层)。分布式的集群一般都采用廉价的PC与传统的机械硬盘进行搭建,所以在磁盘的访问速度上有一定的限制,没有理想的IOps数据。当去优化一个系统的I/O性能时,最先想到的就是添加快速的存储设备作为缓存,热数据在缓存被访问到,缩短数据的访问延时。Ceph也从Firefly 0.80版本开始引入这种
2021-02-01 22:46:40
1268
原创 Ceph 数据读写过程
Ceph的读/写操作采用Primary-Replica模型,客户端只向Object所对应OSD set的Primary OSD发起读/写请求,这保证了数据的强一致性。当Primary OSD收到Object的写请求时,它负责把数据发送给其他副本,只有这个数据被保存在所有的OSD上时,Primary OSD才应答Object的写请求,这保证了副本的一致性。写入数据这里以Object写入为例,假定一个PG被映射到3个OSD上。Object写入流程如图所示。当某个客户端需要向Ceph集群写入一个File时
2021-02-01 00:51:29
2856
1
原创 Ceph集群运行图
集群运行图实际上是多个Map的统称,包括Monitor Map、OSD Map、PG Map、CRUSH Map及MDS Map等,各运行图维护着各自运行状态的变更。CRUSH MapCRUSH Map用于定义如何选择OSD,内容包含了存储设备列表、故障域树状结构(设备的分组信息,如设备、主机、机架、行、房间等)和存储数据时如何利用此树状结构的规则。如图所示,根节点是default,包含3个主机(CephX),每个主机包含3个OSD服务(OSD.X)。相应的CRUSH Map代码片段如下:"buc
2021-01-31 23:43:42
254
原创 Ceph寻址
一个大规模分布式存储系统,必须要能够解决两个最基本的问题,即"我应该把数据写到什么地方”与“我之前把数据写到什么地方了” ,因此会涉及数据如何寻址的问题。Ceph寻址流程如图所示。File:此处的File就是用户需要存储或访问的文件。对于一个基于Ceph开发的对象存储应用而言,这个File也就对应于应用中的“对象” ,也就是用户直接操作的“对象”Object:Object是RADOS所看到的“对象” 。Object与File的区别是, Object的最大尺寸由RADOS限定(通常为2MB或4MB)
2021-01-30 13:50:24
884
原创 Ceph体系结构
Ceph 官方定义Ceph is a unified, distributed storage system designed for excellent performance, reliability and scalability.(Ceph 是一种为优秀的性能、可靠性和可扩展性而设计的统一的、分布式的存储系统。)Ceph 设计思路充分发挥存储设备自身的计算能力。 采用具有计算能力的设备作为存储系统的存储节点。去除所有的中心点。 解决单点故障点和当系统规模扩大时出现的规模和性能瓶颈问题。除此
2021-01-30 02:09:03
241
原创 利用MPI多节点分布式并行计算PI实验报告
利用MPI并行计算PI实验报告环境配置:一、配置步骤:1. 环境配置1.1 hosts配置修改节点对应主机名hostnamectl --static set-hostname配置/etc/hosts文件,添加以下内容127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4::1 localhost localhost.localdomain localhost6 localhost6.loca
2020-12-23 22:08:02
4558
原创 设计模式——建造者模式(C++)——建造小人
#include <iostream>using namespace std;class PersonBuilder{ public: virtual void BuildHead()=0; virtual void BuildBody()=0; virtual void BuildArmLeft()=0; virtual void BuildArmRight()=0; virtual void B
2020-11-18 14:50:27
168
原创 设计模式——建造者模式(C++)——算法实现
建造者模式建造者模式:使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。意图: 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。主要解决: 主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算
2020-11-18 14:49:03
105
原创 设计模式——外观模式(C++)——投资基金
#include <iostream>using namespace std;//具体股票类class StockA{ public: void Sell() { cout<<"股票1卖出"<<endl; } void Buy() { cout<<"股票1买入"<<endl; }};
2020-11-15 19:02:46
135
原创 设计模式——外观模式(C++)——算法实现
外观模式外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。意图:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。主要解决:降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口。何时使用:1.在设计初期阶段,
2020-11-15 19:00:58
101
原创 设计模式——模板模式(C++)——考试抄错会做也白搭
#include <iostream>using namespace std;//TestPaper是抽象类,其实也就是一抽象模板,定义并实现了一个模板方法,这个模板方法一般是一个具体方法,他给出了一个顶级逻辑的骨架,//而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。class TestPaper{ public: //模板方法,给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。 void Quetion1()
2020-11-14 10:47:56
112
原创 设计模式——模板模式(C++)——算法实现
模板模式在模板模式中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。意图: 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。主要解决: 一些方法通用,却在每一个子类都重新写了这一方法。何时使用: 有一些通用的方法。如何解决: 将这些通用算法抽象出来。关键代码: 在抽象类实现,其他步骤在子类实现。优点:1、封装不变部
2020-11-14 10:45:27
169
原创 设计模式——原型模式(C++)——简历复印
//原型模式就是让对象拥有自我拷贝的功能,方便备份对象数据或者创建对象时设置过多的参数。#include <iostream>#include <string>using namespace std;class Prototype{ public: string name; string sex; string age; string timeArea; string company
2020-11-13 14:30:15
142
原创 设计模式——原型模式(C++)——算法实现
原型模式原型模式是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。原型模型其实就是从一个对象再创建另外一个可定制对象,而且不需知道任何创建的细节意图: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。主要解决: 在有些系统中,存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建对象,会比较复杂且耗时耗资源,用原型模
2020-11-13 14:27:12
210
原创 设计模式——工厂模式(C++)——雷锋依然在人间
#include <iostream>using namespace std;//抽象产品角色:它是具体产品继承的父类或者是实现的接口。class LeiFeng{ public: virtual void Sweep() { cout<<"扫地"<<endl; } virtual void Wash() { cout<
2020-11-12 17:17:43
141
原创 设计模式——工厂模式(C++)——算法实现
工厂模式: 对简单工厂模式的进一步抽象和推广,保持了简单工厂模式的优点,而且克服了简单工厂模式的缺点,可以使系统在不修改原来代码的情况下引进新的产品,即满足开闭原则。意图: 把对象实例化的动作提取出来,和主项目的过程或者方法的依赖关系进行解耦,通过这种方式来使整个项目、工程能够有更好的扩展性和维护性。工厂模式就是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。主要解决: 构造工厂对象,将构造的工作交给工厂。在工厂对象里针对具体实现new。换句话说,并不是解决垃圾而是将
2020-11-12 17:14:23
112
原创 设计模式——代理模式(C++)——为别人做嫁衣
代理模式: 为其他对象提供一种代理以控制对这个对象的访问#include <iostream>using namespace std;class SchoolGirl{ public: string name; void Setname(string n) { this->name = n; }};//GiveGift类,定义了Pursuit和Proxy的公用接口,这样就在
2020-11-11 15:44:42
117
原创 设计模式——代理模式(C++)——算法实现
代理模式: 为其他对象提供一种代理以控制对这个对象的访问意图: 为其他对象提供一种代理以控制对这个对象的访问。主要解决: 在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。何时使用: 想在访问一个类时做一些控制。如何解决: 增加中间层。关键代码: 实现与被代理类组合。优点:1、职
2020-11-11 15:41:24
103
原创 设计模式——装饰者模式(C++)——小菜扮靓
#include <iostream>using namespace std;//Person作为父类,定义一个对象接口,也定义一个具体对象,也可以给这些对象动态地添加职责。。class Person{ private: string name; public: Person() { } Person(string n) { this->na
2020-11-11 10:58:51
100
原创 设计模式——装饰者模式(C++)——算法实现
/*装饰者模式:允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。意图:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。主要解决:一般的,我们为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀。何时使用:在不想增加很多子类的情况下扩展类。如何解决:将具体
2020-11-11 10:22:23
150
原创 设计模式——策划模式(C++)——商场收费系统
//用策略模式实现商场收费系统#include <iostream>using namespace std;//现金收费抽象类//抽象产品:抽象产品角色是所创建的所有对象的父类,负责描述所有实例所共有的公共接口class CashSuper{ public: virtual double acceptCash(double money)=0; //纯虚函数:在函数原型后加"=0"};//具体产品:具体产品角色(子类)是创建目标,所有创建的对象都充当这个
2020-11-09 19:48:10
430
原创 设计模式——策划模式(C++)——算法实现
/*策划模式意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。主要解决:在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护。何时使用:一个系统有许多许多类,而区分它们的只是他们直接的行为。如何解决:将这些算法封装成一个一个的类,任意地替换。关键代码:实现同一个接口。*/#include <iostream>using namespace std;//抽象算法类:定义所有支持的算法的公共接口class Strategy{
2020-11-09 18:57:42
201
1
原创 设计模式——简单工厂模式(C++)——商场收费
//用简单工厂模式实现商场收费策略#include <iostream>using namespace std;//现金收费抽象类//抽象产品:抽象产品角色是所创建的所有对象的父类,负责描述所有实例所共有的公共接口class CashSuper{ public: virtual double acceptCash(double money)=0; //纯虚函数:在函数原型后加"=0"};//具体产品:具体产品角色(子类)是创建目标,所有创建的对象都充
2020-11-09 18:46:04
162
原创 设计模式——简单工厂模式(C++)——计算器
简单工厂模式是类的创建模式,又叫做静态工厂方法模式。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。
2020-11-08 15:26:08
418
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人