Druid简介系列之二:Druid系统架构

Druid采用多进程,分布式的架构;其架构易于运维及部署,便于部署在云环境中。每个Druid进程都可以被独立地配置和横向扩展,这种设计一方面赋予了Druid集群最大的灵活性和可扩展性,另一方面以提供了更高的容错性:避免了个别组件的失效影响了系统的其他模块。

Druid进程类型包括:

Historical进程:Historical进程用于处理历史数据的存储和查询(历史数据包括所以已经被committed的流数据)。Historical进程从深度存储(Deep Storage)中下载Segment数据,同时支持对这些数据的查询操作。Historical进程不支持写入操作。

MiddleManager进程:MiddleManager负责将数据导入到集群中。他们负责从外部数据源中读取数据,也负责发布新的Segment。

Broker进程:Broker负责从外部客户端接收查询请求,并把这些请求拆分成子查询后转发给Historical和MiddleManager。当Broker接收到这些子查询的结果疑惑,会合并子查询结果并将结果返回给调用者。终端用户实际上都是和Broker做交互,而不会直接查询Historical和MiddleManager。

Coordinator进程:Coordinator进程负责协调Historical进程。他们负责把Segment分配给特定的Historical进程,以及确保这些Segment在Historical间是负载均衡的。

Overlard进程:Overlard进程负责协调MiddleManager进程,它也是数据导入的控制器,负责将数据导入任务分配给MiddleManager以及协调发布新的Segment数据。

Router进程:Router进程是为Broker,Overlard, Coordinator提供统一网关服务的可选进程。用户也可以不适用Router而将请求直接发送给Broker,Overlard,Coordinator。

Druid进程可以被独立部署(物理机,虚拟机,或者容器),也可以被混布在同一个机器上。一个推荐的部署方案是:

  1. 数据服务器用于运行Historical和MiddleManager进程;
  2. 查询服务器用于运行Broker和Router(可选)进程;
  3. 管理服务器用于运行Coordinator和Overlard进程,这个服务器上也可以同时运行zookeeper。

除了上述进程类型以外,Druid还有三种外部组件,他们可以用来利用已有的基础设施:

Deep Storage:可以被所有Druid服务器访问的共享文件存储。通常是一个类似S3或HDFS的分布式存储系统,或者是一个可以mount的网络文件系统。Druid利用DeepStorage来存储所有导入的数据。

Metadata Store:共享的metadata存储,通常是一个传统的关系型数据库,比如Postgresql或MySQL。

Zookeeper:用于内部服务的发现,协调以及leader选举。

这些设计的初衷是为了让Druid在大规模生产环境中能够被容易的运维。比如,将metadata store和Deep Storage从其他部件中分离能够让druid系统是高度容错的:即使所有的Druid服务器都挂了,我们也可以很容易的从metadata store和Deep Storage中重新启动一个集群。

架构图如下:

本文翻译自:http://druid.io/docs/latest/design/

猜你喜欢

转载自blog.csdn.net/weixin_40735752/article/details/88218571
今日推荐