首页 > 代码库 > CMU440-P2 Tribbler(类推特的发布订阅系统)设计文档

CMU440-P2 Tribbler(类推特的发布订阅系统)设计文档

 

一、开发工具

 

1.    本项目使用Golang进行开发,主要有以下好处

 

  • Golang是一种类型安全(type-safe)的语言,并且自带垃圾回收机制,避开了许多底层语言如C/C++中的陷阱
  • 引入了许多轻便实用性强的数据结构,比如变长数组,字典等
  • 提供了大量的包其中包括网络库,RPC等供编程者使用,使得开发效率更高
  • Golang支持了一种相比传统的共享内存式的并发模型(比如Java threads)更加轻便抽象的并发模型(消息传递机制)

 

2.    版本控制工具采用git

 

3.    开发环境:sublime text2+gocode

 

二、概述

本项目为卡耐基梅隆大学分布式系统(CMU440)课程项目。

课程主页:http://www.cs.cmu.edu/~dga/15-440/S14/syllabus.html

源代码:https://github.com/201101050424/Project-2-Tribbler

本项目的架构共分为三层:

  • client层:client层是用户交互层,它接受并解释用户提交的命令,并将它提交给appliction层
  • appliction层:appliction层充当整个Tribbler系统的控制层,它充当了一个可以持久提供服务的server,每个server都有一个Libstore库,该库用来和storage层进行交互,并实现了基于租约的缓存一致性机制
  • storage层:storage层提供了key/value对存储服务(类似hash表),每个storage server实现了Get、Put、GetList、AppendToList、RemoveFromList接口,并有以下特点
    • 运用一致性hash原理,将存储数据分布在存储集群上
    • 支持基于租约的缓存一致性机制

架构图:

层之间通过Http RPC进行通信

三、架构阐述

1.    client层:该层直接与用户交互,接受用户的提交的命令并进行解释后发送给application层,接口如下

  • CreateUser:创建用户,通过RPC将userID注册到TribblerServer上
  • GetSubscription:获取某用户的订阅列表
  • AddSubscription:为某用户增添新的订阅用户
  • AddSubscription:为某用户删除已订阅客用户
  • GetTribbles:获取某用户的推文
  • GetTribblesBySubscription:获取某用户订阅者的推文
  • PostTribble:为某用户发布推文

2.    TribblerServer层分为两部分,TribblerServer和Libstore,TribblerServer主要对client实现RPC,调用了Libstore,下面重点阐述Libstore