海量数据下的分布式存储与计算(3)

存储非结构化数据

-eg:评论,问答


再看下数据

结构化
半结构化(我们的数据)
非结构化
海量(百T级别)
数据偶尔丢掉几条没关系
数据质量差


到目前为止我们的处理方案是:


离线分析(对实时性要求不高-Hadoop)-结构化,半结构化,非结构化
实时分析(对实时性要求极高-storm)-结构化,半结构化,非结构化
实时查找(经常性对大量数据进行count等操作-infobright,hbase)-结构化,部分支持半结构化

有时我们需要对非结构化的数据做一些实时搜索的功能keyvalue搞不定怎么办--实时搜索(巧妙设计数据结构)

我们的做法是:

倒排索引

+关键字的前缀冗余

具体关键字的前缀冗余使用redis的zset完成,其本质也是一个hashtable+跳表的所以结构

这样存的时候需要切词,存储,key和关键字映射的存储,前缀和关键字映射的存储

但是读的时候是非常迅速的,如下图当用户输入J 就可以很快的找到关于java等的信息(当然还需要一些评分,权重算法)

海量数据下的分布式存储与计算



服务架构需要考虑的问题:


CPU负载和I/O负载(计算密集型和io密集型)

CPU负载-计算密集型

所谓CPU负载就是通常的web服务等,这些服务基本上只消耗cpu,所以只要增加安装相同服务的服务器,然后就可已通过负载均衡器工作了


I/O负载-io密集型


1.数据的切割和在机器间的分配策略(原则是尽量移动计算而不是移动数据)
2.如何通过多备份来确保数据的可用性(确保多备份的一致性)
3.如何使集群针对性强的响应客户端的读写请求
4.如何实现集群中单台机器的热拔插
5.好的负载均衡策略
6.网络通信延迟,因为计算机运行的速度是微秒甚至纳秒,所以毫秒级别的延迟对程序来说性能损害是极大的


ps:我们平常使用的路由器一般pps(每秒转发数为几十万左右),所以一般的千兆以太网的极限就在几十万/秒
除此之外由于正常的路由器的ARP表上限为900左右
两个原因导致一个子网中机器不能过多,当集群中机器过多时就需要进行网络的层次话


虚拟化优点

1,扩展性-可以动态的迁移和复制,使得服务器增加变得更简单
2,提高资源利用率
3,降低运维成本(远程管理,环境更单一
异常行为局部化,使得主机控制更简单)
4,提高可用性(抽象硬件差异)
5,  调整负载(软件层面对负载进行控制,当监测到负载消耗异常可重启进程或者虚拟机)

缺点

1,虚拟机本身的损耗(cpu,内存)
2,网络性能损耗近一半
3,I/O性能略微降低0.5%左右

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/ee0d384be7561b10d551d98fcc482707.html