如何处理来自不同服务器的多个数据库结果以获取请求

Kan*_*mar 17 java database architecture scalability bigdata

我有云统计(Structured data :: CSV)信息; 我必须向管理员和用户公开.

但是为了可扩展性; 数据收集将由与各个DB连接的多台机器(perf监视器)收集.

现在经理(经理)负责向所有性能监测器多播请求; 收集整体统计数据以满足单个UI请求.

所以问题是:

1)如何根据经理的客户要求对多个监控数据进行排序.每个监视器可以根据客户端请求给出结果; 但仍然如何通过java合并多个机器数据?意味着如何在内存中执行sql聚合/标量(例如,Groupby,orderby,avg)函数对从MGR处的多个聚类中检索到的所有结果.如何在java端实现DB sql聚合/标量功能,任何已知的API?我认为我需要的是在hadoop中减少mapreduce技术的一部分.

2)来自UI的请求(假设来自DB的选择计数(*),其中内存> 1000MB)必须转发到多台机器.现在如何将并行请求发送到单个监视器并仅在响应所有节点时使用?意味着如何等待用户线程直到消耗来自perf监视器的所有响应?如何在MGR上触发单个UI请求的并行REST请求.

3)我是否必须在Mgr和Perf监视器上验证UI用户?

4)你认为这种方法有任何缺点吗?

笔记:

1)我没有使用NoSql,因为数据是结构化的,不需要连接.

2)我没有去node.js因为我是新手,可能需要更多时间来开发它.此外,我没有开发任何单线程最适合的并发关键.这里只完成数据的推送/检索.没有修改发生.

3)我希望每个监视器都有单独的数据库,或者至少有两个具有多个集群的DB实例,以支持更快地访问实时BIG统计数据.

在此输入图像描述

Cap*_*tti 6

您想扩展您的应用程序,但您设计了一个固有的瓶颈.即:经理.

我要做的是,我会将经理分成至少两部分.前端和后端.前端可以简单地是聚合器和/或控制器,它收集来自所有不同UI服务器的所有请求,为这些请求添加时间戳并将它们放入队列(RabbitMQ,Kafka,Redis等),使用UI会话ID发送消息或类似的东西,唯一地标识请求的来源.然后你只需要等到队列得到响应(当然有不同的主题).

然后在您的后端(队列的另一端),您可以设置与负载需要的节点数,并使它们执行相同的任务.即:从队列中提取请求并根据需要调用这些性能监视API.您可以根据需要扩展这些后端节点,因为它们没有任何状态,所有需要存储的状态已经是队列中消息的一部分,Redis/Kafka/RabbitMQ将为您自动保留这些消息或者你选择的其他什么.

您也可以使用Apache Storm或类似的东西在后端为您执行此操作,因为它专为此类应用程序而设计.

Apache Storm还具有通过Trident API公开的内置合并功能.

关于身份验证的注意事项:您应该在前端验证HTTP请求,然后您就可以了.只需为连接到mgr的用户分配唯一ID(最有可能是会话ID),并在将请求转发到下游服务器时使用此内部ID.

现在如何将并行请求发送到单个监视器并仅在响应所有节点时使用?意味着如何等待用户线程直到消耗来自perf监视器的所有响应?如何在MGR上触发单个UI请求的并行REST请求.

好吧,如果你有很多关于处理用户连接和为那些客户提供响应的问题,那么我建议你拿一本关于Java servlets API的书.您可能希望阅读此示例:Servlet和JSP:教程(教程系列).它有点过时但写得很好.

但是,如果你对这些非常基本的话题有很多疑问,那么最好将架构设计留给更有经验的人.