Skip to content
muyannian edited this page Jul 15, 2013 · 18 revisions
  1. JDBC SQL支持

    参考地址:https://github.com/muyannian/higo/blob/master/doc/hsql.docx?raw=true 
  2. 调度交由蓝鲸管理

    参考地址:https://github.com/muyannian/higo/wiki/bluewhale 
  3. higo之merge server分离

    原先  每个solr shards 内存由两部分组成,一部分为对lucene查询的缓存,另外一部分作为多个shards的合并用,我们称为Merge server.
    merger server一般为瞬间的,查询完毕后内存就可以释放了,但是每次查询中由于要合并多个shards中的结果,故内存消耗也蛮大的。
    但是merger server 只需要几个,在每个shards中预留出那么多的内存真的是太浪费了,故分离开来
  4. 多表多分区共用同一块内存,采用LRU机制

    当前不同的表之间是独立的,但是如果能共用同一个shard,共用内存,那么内存利用率将高很多
    多个表,多个分区,共享同一个fieldvaluecache,那么内存利用率会大大提升
  5. higo调度,每次重启后,任务的分配可以由用户指定

  6. 每个solr shards的partion可以分配到不同的硬盘上,以便更合理的利用硬盘

Higo调度的更改

原来

之前的higo调度(higo-manager):采用shell通过ssh无密码登陆的方式部署与管理
但是存在如下问题

1. 当机器损坏,硬盘或某个任务异常不能自动切换并恢复服务

2. 通过scp无密码登陆总是报错,经常有服务启动不起来的现象发生

3. 安装部署需要修改的配置的地方超过10个,而且特别容易出错

4. 代码可读性问题,太长也不好管理维护

如果要修正这些在原有代码上修改需要较大的改动,而之前我们对storm的代码有较深入的研究,并将开发语言更换为java(我们称之为蓝鲸),相比之下蓝鲸的调度更成成熟也更稳定,任务托管在蓝鲸中也更便于管理,代码量减少了很多。

修改后

1. 这样当某个任务失败或机器宕机,会自动的迁移到其他机器上并恢复服务

2. 扩容新机器比较方便-配置好后简单的重启即可

3. 对将来要实现的多表join,全排序,mergeservee与solr shards分开等都有好处

4. 为提高实时性做基本的准备

5. 配置管理上的统一:各种类型配置文件和众多的shell脚本不在需要,仅仅需要一个storm.yaml

每个shard和merger server要单独分配在单独的进程里
merger server与shard机器分开(将来做replication也有用)
merge server与shard分配不同的内存参数(shard分配2GB Merge分配9GB)

higo之merge server分离

原先 每个solr shards 内存由两部分组成,一部分为对lucene查询的缓存,另外一部分作为多个shards的合并用,我们称为Merge server.

merger server一般为瞬间的,查询完毕后内存就可以释放了,但是每次查询中由于要合并多个shards中的结果,故内存消耗也蛮大的。

但是merger server 只需要几个,在每个shards中预留出那么多的内存真的是太浪费了,故分离开来

添加分区机制

之前的higo只能使用单个索引,每次搜索的时候,也只能使用这个索引,如果数据量太大,那么solr分配的内存肯定不够。
但是实际情况是,大部分用户的查询仅仅局限在最近的几个月的数据,其他很久前的数据很少查询,如果也load到higo中特别浪费资源。


当然这样的查询也是有限制的,单次查询不能夸分区查询,故经过merger server将多个分区的结果进行合并。 合并的时候优先本地合并,可以减少网络开销

http://localhost:3456/solr/select/?q=*:*&start=0&rows=1&indent=on&indexpartion=201201 (201201分区)
http://localhost:3456/solr/select/?q=*:*&start=0&rows=1&indent=on&indexpartion=201202(201202分区)
http://localhost:3456/solr/select/?q=*:*&start=0&rows=1&indent=on(无分区)
http://10.246.45.41:41137/solr/select/?q=*:*&start=0&rows=1&indent=on&shards=10.246.45.22:41143/solr,10.246.45.22:41143/solr@201201,10.246.45.22:41143/solr@201202(多分区合并)

其他改进


1.数据量提升100+倍,当前10台机器逼近400亿
2.内存压缩,动态数据类型,以及UnInvertedField大量细节的优化 (adhoc项目的内存使用量缩小10倍以上)
3.添加监控(内存,数据量,服务状态,进程,心跳),各种访问日志的添加
4.java full gc的各种优化,doclist迭代使用的临时对象不需要反复声明,共用即可 gc优化 ,各种block cache的实现
5.solr修改:不分词的field可以不存储
6.多表多分区共用同一块内存,采用LRU机制
7.修改merger server的调度,多层次的merger server优先合并本机shards
8.嵌入式jetty的更改,以及jetty本身BUG的修正
9.hadoop集群不能提供服务的时候,不应该影响海狗
10.旧版海狗 转义字符的彻底解决
11.超过1W个多维组的group by和order by的实现
12.solr超过20亿后,各种数据类型越界的处理
13.旧版海狗端口被占用问题的解决
14.旧版海狗每次部署的时候存在停止服务的问题-现在7*24小时提供服务
15.merger server与shards分离
16.各种容错,多层级调度的优化
17.map端任意列join(sql中未体现)
18.监控每个分区,以及起始几天的记录数这段代码独立出来
19.创建索引支持多种文件格式与分隔符
20.adhoc二期 每个表起始时间的接口
21.建表语句使用Sql,之前通过编辑schema.xml的方式太麻烦了
22.数值形对null的处理与hive不一致,与稀疏列的支持与处理
23.云梯升级过程中,如果发生错误,不应该删除本地的配置文件 bug
24.按照内存大小进行LRU,而不是按照field的个数
25.调整每个server的连接并发,ms和shards的连接分开,并给最大连接数限制
26.添加对本地硬盘可用性检查的判断与容错
27.清理了海狗1大量的代码,代码被砍掉80%以上