一、开发工具
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
CMU440-P2 Tribbler(类推特的发布订阅系统)设计文档
时间: 2024-11-06 00:50:41