contos 启动集群计算,能否支持 jar 包逻辑。
请问一下,目前我有两台内网机器,操作系统都是 centos, 由于客户无限数据增长比较快,我需要集群来处理后续 BI 查询请求,以前代码是写在 java 代码里面的,没有写在.dfx 文件里面,请问,这种情况下,集群支持 jar 包形式部署吗?我仔细看了下调用计算逻辑都需要调用.dfx 文件,这个让我现在的框架代码很难适配。
"请问一下,目前我有两台内网机器,操作系统都是 centos, 由于客户无限数据增长比较快,我需要集群来处理后续 BI 查询请求,以前代码是写在 java 代码里面的,没有写在.dfx 文件里面 .."
请问一下,目前我有两台内网机器,操作系统都是 centos, 由于客户无限数据增长比较快,我需要集群来处理后续 BI 查询请求,以前代码是写在 java 代码里面的,没有写在.dfx 文件里面,请问,这种情况下,集群支持 jar 包形式部署吗?我仔细看了下调用计算逻辑都需要调用.dfx 文件,这个让我现在的框架代码很难适配。
集群一般要用独立部署的集算服务器了,各节点(上的集算服务器进程)执行.dfx 来分摊计算压力都没有问题,哪种操作系统都可以,也能做负载平衡。但不再是嵌入 jar 包方式了,嵌入到应用的 jar 仅仅是 JDBC。
目前我们的业务代码都是动态 spl 脚本,也就是通过 java 字符串拼接而成的逻辑,这个是由于业务复杂度决定的;我们的代码都是封装在 jar 里面,很少写到 splx 文件里面,这样文件太多了;所以问问能否有集群支持这种情况?
那你可能要自己做平衡负载了。
每个节点都是你自己的 Java 程序(可以被应用服务器管理),在 Java 程序中生成 SPL 代码执行,SPL 其实不知道自己被集群了,各个节点是无关的。
这种集群就很不灵活了,估计没有什么真实场景支持。能否下个版本或者后期迭代计划里面,把这个 jar 包兼容进去?
这做不出来啊,jar 是个进程的部件,不是独立进程,没法自己集群啊。
应用服务器本来也会平衡负载,jar 集成到应用程序中,被应用服务器管理着集群,这种真实场景不少啊,润乾报表很多这种情况。“不灵活”是指什么?
集算服务器也可以通过 JDBC 接收一句 SPL 来执行,不一定要有.splx 脚本文件。
我们这里没有用润乾报表,只用集算器;而且所有的代码都是 java 的 jdbc 调用 spl 字符串语法,潜在 java 里面的;我们不想用 splx 文件来存储 spl 语法;这种情况下,应该是 jar 包的 springboot 就容易集群的呀;你们这个太不灵活了,一定要和润乾报表绑定集成才能集群;我们希望像 springboot 那样,引用一下集算器引擎这种轻量级的 ja 包,就可以跑集群了。
请站在使用者的角度来想,你看看市面上的组件或者引擎都支持嵌入到 springboot 做集群
和润乾报表没有关系,当然不需要和润乾报表一起用。润乾报表只是用来举例说明 jar 包被应用服务器之类的东西集群的方式并不奇怪(润乾报表也是 jar 包,经常以 jar 包的形式在集群中应用)。
现在的 jar 不可以集成进 springboot 这些东西后集群吗?还缺什么能力才可以?我们看看怎么补上。
集算器的 jar 在逻辑地位上应该和你自己写的 java 代码没有区别,你自己写的 java 代码如果能被 springboot 集群,集算器的 jar 应该也可以的。
@bill 胡总研究一下这种方式
整体思路是 springboot 服务器里面引用的 com.scudata.esproc.jar 里面的计算器引擎 + 自定义的 spl 字符串语法就是 splx 文件里面的逻辑代码, 而数据源是 ctx 文件(分片:比如集群 3 台的话,第一台 1 到 1 千万,第二台 1 千 01 万到 2 千万,第三台 2 千 01 万到 3 千万);这就是我想要的搭建效果,然后利用你们的集群语法实现大数据量的集群问题。
需要部署独立的集算器服务(节点),数据分布可以自由决定。现在应用里嵌入的 SPL JDBC 不变,然后启用远程计算模式,参考:
http://c.raqsoft.com.cn/article/1558404935247 直接访问远程集群进行计算。
之前本地计算的代码需要改成并行计算方式
集群计算参考:http://d.raqsoft.com.cn:6999/esproc/tutorial/jiqunjisuan.html#__1024
我试试看
跨节点访问数据需要用集算器的服务器,jar 不会监听端口,做不出这个效果。
集群表语法更需要服务器形式的部署,没办法弄到 springboot 里头了。
能放进 springboot 里的只是 jdbc 驱动,倒是可以指挥这些节点服务器工作。
然而,仅仅 3000 万行数据为什么要集群?3000 万只是个代词?
3 千万是一个代词例子,实际业务 3 个亿都可能;目前我们的架构就是 springboot(引用 spl 计算、存储引擎 jar 包) + spl java 代码(等同于 splx 文件);如果都用 splx 文件的话,很难满足我们业务的需求,我们的脚本都是动态脚本,splx 文件都是静态的 spl 字符串代码,很难满足当前的需求。请站在我目前的架构情况来看看,怎么合理支持集群。
目的希望单个 springboot 服务可以等同一个集算器服务一样
我建议你们目前的分布式集群的调度、分片等逻辑功能能否封装成一个 jar 包,这样可以为 springboot 引用,都是轻量级的。 springboot 可以引用计算引擎,存储引擎,就再引用一个分布式调度引擎;也是合情合理的
看看这个帖子 http://c.raqsoft.com.cn/article/1681201899183,SPL 本来就有较强的动态能力,也许用.splx 文件也依然能做出你期望的动态效果,而且有个脚本框架通常会更容易写,毕竟 Java 生成的代码没法调试,太长了不太好。
即使是 Java 生成的代码,也可以通过 JDBC 传给集算服务器跑,不必须要有.splx 文件。
如果单任务计算量并没有大到需要集群,集群主要是为了应对多并发,那么继续用 jar 就可以,让 springboot 去管理集群。SPL jar 并不知道自己被集群了,集算器的节点之间没有通信。共享的数据可以放在网络文件系统上(慢一点),或者复制到每个节点(这样最快)。
如果单任务涉及运算量就太大而需要集群来分担,集算器节点之间会有通信了,那么要用集算器本身的集群方案了,这时候的集算器很像一个分布式数据仓库了,已经不太轻量级了(当然相对其它数据仓库还是轻一点)。这时候我们要自己实现集群功能以保证高性能和灵活的分布(计算和数据)能力,不会依赖于 springboot 之类第三方东西。各节点上跑的是集算器服务器进程,不会是集成进其它进程的 jar。
也许 springboot 提供了较丰富的底层集群支持,但我们不太熟悉(框架在上层,和计算不直接相关),感觉它能提供高性能计算需要的集群通信和调度功能的可能性不大,但也暂时没精力去研究(优化计算以及原生云的功能对我们来讲更重要),近期没有计划向这方面发展。
【接着 3】如果还需要弹性扩展能力,我们正在开发原生云版本,会自己处理这些资源弹性调度。不过,这是商业版本的功能了。
顺便说一句,3 亿也不是很大规模,通常也不需要集群(当然也要看运算逻辑了)。集算器很早就设计了集群功能,但坦白地说,到现在为止,除了一些为了应对高并发或热备的场景外,单任务就需要集群来处理的场景,目前我们知道的只有一起(记录数超过 100 亿)。用户原先使用集群来处理的场景都被集算器搞成单机运行还同时提升了性能。所以集群功能的历练很少,我们也欢迎用户来用,好发现其中的 BUG。
想问一下,上亿的数据量,你们要求硬件的配置大概什么样的?有些客户可能对单机处理量持怀疑态度,一说到大数据客户认为就应该分布式解决,单机始终有上限瓶颈,很难说服客户。
硬件配置没什么定数,上亿行的遍历估计要 16C64G 以上才能有秒级响应,硬盘一定要用 SSD。
TPCH 测试中最大表有 6 亿行,有一定的参考价值
http://c.raqsoft.com.cn/article/1666603003677
这两个题较简单,容易看懂:
http://c.raqsoft.com.cn/article/1666605121583,
http://c.raqsoft.com.cn/article/1666770699853
都能跑到 10 秒左右的结果。
测试服务器是 12C64G,CPU 仅是个 1.7G 主频的低端 Intel,换好点芯片能跑更快。
http://c.raqsoft.com.cn/article/1665962026853#toc_h3_4
这里提到的较复杂的漏斗运算,涉及数据量大概 4 亿行,在高端 Intel 芯片上也能跑到 10 秒之内(过一阵会整理出完整测试代码发布)。
确实很多客户被业界教育到言必称分布式,但实际跑出来效果后就会认账的。说服客户是靠性能测试,做 POC,用事实说话。然后再加点理论分析,告诉客户这个计算量就只有这么大,用传统数据库无端放大了 N 倍计算量,当然只能分布式。
不过,这事有点难度,要对这些优化算法比较熟悉,能写出代码还要能说得出道理。