一道笔试题--存储负载均衡

jialejiahi 2011-04-23 05:43:23
题目:
服务器有n个容量为G的存储单元,客户端不断向服务器传送大小为size的数据(size是随机的),要求设计一个存储负载均衡系统,使得n个存储单元的负载(使用量)大致相同。要求能在系统报告中查看各个存储单元的使用量和剩余可用容量。
应当考虑以下两种情况:
1 各个存储单元可用容量相差不大。
2 各个存储单元可用容量相差很大。
请给出程序或者伪代码,但是要有详细注释。

ps:上午刚做的笔试题,凭记忆写的题目,求大家指点。
...全文
365 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zenghytotti 2011-09-28
  • 打赏
  • 举报
回复
4楼的回答很好啊,学习了
jialejiahi 2011-04-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 qq120848369 的回复:]

今天腾讯实习生招聘的题目,附加题.
[/Quote]
是啊,是啊。
jialejiahi 2011-04-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 pathuang68 的回复:]

这个题目从纯技术的角度来看难度应该不大,但需要考虑的东西比较多,个人感觉这是考一个人的技术经验的题目。

可以考虑建立一个这样的储存单元结构
C/C++ code

struct Storage
{
unsigned int SIZE; // 储存单元容量
unsigned int PCT_USED; // 已用容量百分……
[/Quote]
嗯,这样答不错。
fx397993401 2011-04-23
  • 打赏
  • 举报
回复
我当时 是想 每个单元 用剩余空间 用户数
然后 计算性能参数
ans = 1 + 该剩余空间/总的剩余空间 * P1 -该用户数/总的用户数*P2
P1 P2 根据不同环境 进行调整 然后 对N 个存储空间 根据 ans 排序
雨翔(397993401) 20:42:11
用户申请 从ans 大的开始选 用首次适应 算法
雨翔(397993401) 20:42:31
因为 ans 大 可能剩余空间会小 所以还要判断 的
xuyihua1983 2011-04-23
  • 打赏
  • 举报
回复
我的思路是始终将客户端的数据写入剩余空间最小的存储单元内。各个存储单元之间采用链表进行管理,最好是采用一定的使用率顺序进行排列。并且在每次写完数据后更新链表。
这样的好处是该服务器不会长时间出现各个存储空间使用差别较大的情况,缺点是当有多个客户端同时向服务器进行写时该方案会失效,而且随n值增大效率降低。
qq120848369 2011-04-23
  • 打赏
  • 举报
回复
今天腾讯实习生招聘的题目,附加题.
pathuang68 2011-04-23
  • 打赏
  • 举报
回复
这个题目从纯技术的角度来看难度应该不大,但需要考虑的东西比较多,个人感觉这是考一个人的技术经验的题目。

可以考虑建立一个这样的储存单元结构

struct Storage
{
unsigned int SIZE; // 储存单元容量
unsigned int PCT_USED; // 已用容量百分比,比如已经用了90%,那么PCT_USED=90

void addData(unsigned int size) // 新增数据时,修改PCT_USED
{
unsigned int used = SIZE * PCT_USED /100 + size;
PCT_USED = used / SIZE * 100;
}

void deleteData(unsigned int size) // 删除数据时,修改PCT_USED
{
unsigned int used = SIZE * PCT_USED /100 - size;
PCT_USED = used / SIZE * 100;
}
};


下面就定义一个管理类(同时也是容器),用来管理这些Storage。 比如叫StorageMan

class StorageMan
{
private:
Storage st[N]; // 假定有N个Storage,此处当然可以用动态内存分配
public:
Storage getStorage()
{
// 在N个Storage中找到PCT_USED最低的Storage对象,并返回。
// 如果有多个Storage的PCT_USED相同,则返回SIZE最大的那个Storage
// 具体可以用快排进行排序
}
};


从StorageMan得到了可用的Storage对象,那么就可以用Storage来操作数据(增加或者删除),同时更新StorageMan中该对象的PCT_USED。

最后提醒一下,Storage最好做成一个Singleton,具体这方面的做法,可以参考:
C++实现Singleton模式
这样可以防止资源竞争。
书虫 2011-04-23
  • 打赏
  • 举报
回复
像是深信服的题目
jx8904020853 2011-04-23
  • 打赏
  • 举报
回复
我的思路,当各单元存储量相当时,可以借助路由器,从而实现负载均衡---将链接均衡的分配到各个主机
LAIER903 2011-04-23
  • 打赏
  • 举报
回复
我也想知道,帮顶。

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧