开源SPL 令微服务真地”微“起来

随着微服务的流行,越来越多应用采用微服务架构开发 。如何简单高效地在微服务中完成数据处理成为大家不得不面对的问题 。以往单体应用架构下,我们可以借助数据库实施计算,SQL 是专用的集合计算语言,依托数据库较强的计算能力可以比较方便地完成数据处理 。但在微服务架构下,为了方便服务扩展和服务封装,数据库则主要承担数据持久化任务,数据处理都在应用(服务)端完成 。
服务端完成数据处理的主要手段是采用 JAVA 硬编码(也有其他高级语言,Java 使用更多) 。由于应用使用 Java 开发,原生的 Java 代码可以无缝融合到微服务中,加上 Java 支持过程可以分多步实施计算,而且在 Java8 以后引入了 Stream 特性后计算又方便不少 。
不过,使用 Java 进行数据处理距离 SQL 还有很大差距,同样的分组汇总 SQL 实现很简单,但 Java 却要几十行代码,复杂计算二者的差距更明显 。根本原因是由于 Java 并非专用的集合运算语言,也缺少相应的结构化数据计算类库,导致代码很长,微服务一点也不“微” 。并且,Java 作为编译型语言,很难直接实现热切换,被迫使用 Docker 等沉重的机制,这对于频繁变动的微服务来说十分不友好 。鱼与熊掌,要拥抱微服务就得忍受 Java 做数据处理的缺点 。
一个理想的微服务数据处理组件应该具备这样一些特点:
易于与微服务融合,可以无缝嵌入使用;计算能力强且实现简单,可以方便地完成所有数据处理任务;支持热切换(热部署),服务不停机运维;体系开放,可以直接使用多种数据源 。
开源集算器 SPL 的出现使得这些问题迎刃而解 。
集算器 SPL 是一款开源数据处理引擎,不仅能与 Java 应用(微服务框架)无缝集成,还提供了完备的计算能力,基于 SPL 语法实施计算的简便性远超 Java(甚至 SQL),同时提供了热切换与多源支持等特性,为微服务数据处理提供了新思路 。
高开发效率
SPL 作为专业结构化数据处理引擎提供了完备的计算能力 。使得微服务中的任意结构化数据处理工作都可以通过 SPL 实现 。
SPL 不仅可以完成所有结构化数据计算,实现上也很简单 。SPL 提供的敏捷语法实施计算的简便性远超 Java 。下面的例子可以感受到 SPL 的简洁程度 。
根据股票记录表查询股价连续上涨超过 5 天的股票及上涨天数(股价相等记为上涨)
 
A
 
1
=db.query@x("select * from stock_record order by ddate")
 
2
=A1.group(code)
 
3
=A2.new(code,~.group@i(price<price[-1]).max(~.len())-1:maxrisedays)
计算每只股票的连续上涨天数
4
=A3.select(maxrisedays>=5)
选出符合条件的记录
从数据库取数后,通过 SPL 实施计算,这个例子即使使用 SQL 也要嵌套 3 层子查询才能实现,更不用说 Java(Stream,也包括 Kotlin)了 。SPL 支持分步计算,这方面要优于 SQL 。从语法特点上看,SPL 相当于结合了 Java 和 SQL 的优点 。
SPL 提供了丰富的计算类库,更进一步简化运算 。
开源SPL 令微服务真地”微“起来

文章插图
 
SPL 支持多样数据源混合计算 。RDB、NoSQL、CSV、Excel、HDFS、Restful/Webservice、Kafka…都可以连接,并进行异构源混合计算,可以极大满足微服务场景下面临的多样源问题,进一步提升开发效率 。
开源SPL 令微服务真地”微“起来

文章插图
 
在 SPL 的支持下,服务逻辑的实现代码都能短小很多 。这就让微服务不仅在结构上,而且在实现上真地“微”起来了 。
微服务无缝融合
SPL 使用 Java 开发,支持 jar 包嵌入 。微服务应用可以将 SPL 引擎以 jar 包形式引入与应用无缝集成 。SPL 还封装了标准 JDBC 接口,可以在服务中通过 JDBC 调用 SPL 脚本 。
开源SPL 令微服务真地”微“起来

文章插图
 
具体使用时只需要引入相关 jar 并部署配置文件(raqsoftConfig.xml),通过简短的代码就可以调用 SPL 脚本 。


推荐阅读