ivanallen / pain

A distributed storage system.
MIT License
7 stars 0 forks source link

System Arch #8

Open ivanallen opened 2 months ago

ivanallen commented 2 months ago

Pain 系统名字来源介绍(因为名字真的很难取):

六道(梵语:ṣaḍ-gati),又名六趣(趣趋,意为趋向的轮回道及环境)、六凡、六途或轮回六道等,佛教名词,意指六种欲界色界无色界众生的种类型态或者说是境界,也是在凡夫众生轮回之道途,它是佛教宇宙观的一部分。六道(六凡)属于十法界(十界),和四圣合称为“四圣六凡”[1]

六道可分为三善道和三恶道(又称三途、三恶趣)。三善道为阿修罗; 三恶道为畜生饿鬼地狱。早期经论说五道,是指除了阿修罗以外的五种众生[2]阿修罗被视为天道或鬼道,阿修罗也是一种神灵,因为好勇斗狠,能与天神争斗。阿修罗虽为善道,拥有神通法力,因德不及天,故又曰非天;以其有愤恨之苦,尚甚于人,[3]故有时被列入三恶道中,合称为四恶道。[4]

四生和六趣(趋)在汉传佛教合称生趣。因欲界梵语:kāma-dhātu)为欲界天人阿修罗畜生饿鬼地狱这六道众生杂居之地,故也可以欲界代指六道的境界。

三界和六道的关系是这样的:除了天道外的五道皆属欲界,而天道中的一部分也属于欲界,但其他部分则分属于色界无色界

ivanallen commented 2 months ago

pain 系统名称来源于以上词汇,我们使用不同名词代表不同的模块:

Deva 是中心元数据服务,Manusya 是 chunk 服务,保存实际的数据,Pain 是用户接入存储系统使用的 SDK。

用户通过 SDK,可读写集群中的数据。数据是多副本存储,Pain 尽最大努力保证数据不丢不错。用户可以使用下面的方式简单接入集群(当然,接口未来还可能会产生变动,此处为设计稿):

#include <pain/pain.h>

int main() {
    spdlog::set_level(spdlog::level::debug);
    auto fs = pain::FileSystem::create("list://192.168.10.1:8001,192.168.10.2:8001,192.168.10.3:8001");
    auto file = fs->open("/tmp/hello.txt", O_CREAT | O_WRONLY);
    pain::core::FileService::Stub stub(file.get());
    pain::Controller cntl;
    pain::core::AppendRequest request;
    pain::core::AppendResponse response;
    cntl.request_attachment().append("hello world");
    stub.append(&cntl, &request, &response, nullptr);
    if (cntl.Failed()) {
        std::cerr << "append failed: " << cntl.ErrorText() << std::endl;
        return 1;
    }
    std::cout << "append success, offset: " << response.offset() << std::endl;
    return 0;
}