微服务怎样才能真正“微“起来

news/2024/11/29 10:41:45/

微服务这些年比较时髦,用 Java 取代 SQL 及存储过程开发业务逻辑,确实能获得架构上的优势,细节这里就不展开了,微服务能流行当然有它的道理。
微服务真地“微”吗?

我们知道,面对同样业务逻辑时,Java 写出来的代码远比 SQL 要长,10-20 倍的样子。即便有了 Stream,Kotlin 以及 Scala 这些新类库和新语言的协助,面对稍复杂些的运算需求,代码量还是远远超过 SQL 及存储过程相比,从这个角度上看,微服务一点也不“微”
服务端是这样,应用端更是这样。原本直连数据库写句 SQL 就能做的事,现在改从微服务获取数据后,再想搞个分组连接都麻烦得要死,还是几百行。所以基于微服务做报表一直是个难题。

即便在微服务强调的架构方面,微服务也不够“微”。微服务是为了让业务之间解耦,这样能更从容地应对频繁的变化。但 Java 是个编译语言,代码改动时要重新编译部署,过程繁琐不说,还有可能迫使整个应用中不相干的部分也一起联合编译部署。想把各个服务独立起来,还要使用 Docker 甚至虚拟机这种沉重的机制,无法做到轻量级热切换,这对于本来想适应频繁变动业务的微服务十分不友好。

借助 SPL.html" title=esProc SPL>esProc SPL 就可以让微服务真正“微”起来。
SPL.html" title=esProc SPL>esProc SPL 是 Java 写的开源软件,在这里https://github.com/SPLWare/esProc 找。
我们来看 SPL.html" title=esProc SPL>esProc SPL 如何解决微服务不够“微”的问题。

Java 为什么开发会比 SQL 繁琐的原因,说起来一时话长,以后再专门讲一期。
SPL 克服了 Java 的问题,提供了比 SQL 还完善的结构化数据对象和更丰富的计算函数,在这些基础上,SPL 代码通常会比 SQL 更简洁易维护,比 Java 写出来的当然就更简单 多了。
通常的分组、关联等集合运算都能支持得很好,它是完全自己做的,并不会翻译成 SQL。

Orders.sort( -Client, Amount)
Orders.groups( year(OrderDate), sellerid; sum(Amount), count(1) )

更复杂一些的任务,比如这个,计算有哪些股票连涨过 3 天以上,SQL 代码冗长且难懂:

WITH A AS(SELECT code,date, price-LAG(price) OVER (PARITITION BY code ORDER BY date) RisingPrice FROM stock)
B AS(SELECT code,CASE WHEN RisingPrice>0 ANDLAG(RisingPrice) OVER (PARTITION BY code ORDER BY date) >0  ANDLAG(RisingPrice,2) OVER PARTITION BY code ORDER BY date) >0THEN 1 ELSE 0 END Rising3DaysTag FROM A)
SELECT DISTINCT code FROM B WHERE Rising3DaysTag =1

同样的计算逻辑,用 Java 会更为繁琐,但用 SPL 就非常简单:

A
1=stock.sort(date).group(code)
2=A1.select((a=0,~.pselect(a=if(price>price[-1],a+1,0):3))>0).(code)

SPL 还有完善的流程控制语句,像 for 循环,if 分支,以及子程序调用。这相当于结合了 Java 过程处理能力和 SQL 的数据处理能力,所以代码会比这两都更简洁。

SPL 代码写在格子里,这和通常写成文本的代码很不一样。这样可以更方便地编写调试代码。SPL 也提供完善的调试功能,如单步执行、设置断点、所见即所得的结果预览,提高开发解析。

clipboardpng

SPL 也支持丰富的数据源,无论关系数据库还是 NoSQL 或者 Hadoop/Kafka 都可以连接读取。特别是微服务常用的 Restful 接口以及多层 json 格式数据,都能支持得很好,可以方便地访问、解析并生成。以提高微服务的开发效率,从而让微服务在开发和代码都“微”起来。

clipboardpng

我们再看架构方面。SPL.html" title=esProc SPL>esProc SPL 是纯 Java 软件,能够以 jar 包的形式无缝嵌入到任何 Java 应用中,就和程序员自己写的代码一样,一起享受到成熟 Java 框架的优势。SPL.html" title=esProc SPL>esProc SPL 提供了标准 JDBC 接口,Java 程序可以像执行数据库 SQL 或存储过程一样调用 SPL 代码。这相当于把一个轻量强大的数据库引擎引入到 Java 中了

clipboardpng

SPL 是解释执行的,代码修改后不需要再编译部署就能立即生成,这就天然做到业务逻辑的热切换,特别适应微服务针对的业务多变的目标场景。
SPL 脚本可以存储成文件,置于主应用程序之外,每个服务对应一个 SPL 脚本,天然具有独立性。不再需要使用 Docker 或虚拟机这些额外机制,消耗的资源很少,架构也变得更“微”。

clipboardpng

SPL.html" title=esProc SPL>esProc SPL 的加持下,微服务才真正能成为“微”的服务,也更适应于“热”的应用


http://www.ppmy.cn/news/1550875.html

相关文章

vscode可以编译通过c++项目,但头文件有红色波浪线的问题

1、打开 VSCode 的设置,可以通过快捷键 Ctrl Shift P 打开命令面板,然后搜索并选择 “C/C: Edit Configurations (JSON)” 命令,这将在 .vscode 文件夹中创建或修改 c_cpp_properties.json 文件 {"configurations": [{"name…

Java图书管理系统(简易保姆级)

前面学习了这么多知识,为了巩固之前的知识,我们就要写一个图书管理系统来帮助大家复习,让大家的知识融会贯通~~~ 话不多说,直接开始今天的内容~ 首先呢,我们要有一个大体的思路: 实现效果思路有两种情况&a…

Java核心技术教程:深入理解URL类的实例化与应用

大家好,这里是Java码牛! Java核心技术教程:深入理解URL类的实例化与应用 引言 在Java编程中,网络编程是一个重要的领域,而URL(统一资源定位符)类则是网络编程中的基础。本文将详细讲解Java中…

vscode远程连接ssh

一. 使用vscode里的ssh查件连不上远程的解决方法 删除Windows上的known_host文件,该文件会在连接之后自动生成,用于验证远程服务器的身份。 konwn_host和id_rsa,id_rsa.pub的关系 (1)konwn_host用于客户端验证远程服务…

flink学习(12)——checkPoint

如何设置checkPoint package com.bigdata.day06;/** * 1、需要三句话 * 2、设置完checkPoint后若程序出现异常,会一直重启 * 3、此时是自动进行checkPoint保存 * 4、注意:此时如果有checkpoint ,是不会出现异常的,需要将checkpoint的代码关…

MySQL 启动失败问题分析与解决方案:`mysqld.service failed to run ‘start-pre‘ task`

目录 前言1. 问题背景2. 错误分析2.1 错误信息详解2.2 可能原因 3. 问题排查与解决方案3.1 检查 MySQL 错误日志3.2 验证 MySQL 配置文件3.3 检查文件和目录权限3.4 手动启动 MySQL 服务3.5 修复 systemd 配置文件3.6 验证依赖环境 4. 进一步优化与自动化处理结语 前言 在日常…

数据库(MySQL黑马)

基础篇 MySQL概述 数据库概述 数据库相关概念 主流的关系型数据库管理系统 MySQL数据库的安装与启动 下载:MySQL :: MySQL Community Downloads 安装步骤 MySQL―8.0.40超详细保姆级安装教程_mysql8.0.40安装教程-CSDN博客文章浏览阅读1k次。_mysql8.0.40安装教…

霍夫变换:原理剖析与 OpenCV 应用实例

简介:本文围绕霍夫变换相关内容展开,先是讲解霍夫变换基本原理,包含从 xy 坐标系到 kb 坐标系及极坐标系的映射等。接着介绍了 cv2.HoughLines、cv2.HoughLinesP 概率霍夫变换、cv2.HoughCircles 霍夫圆变换的函数用法、参数含义、与常规霍夫…