InfoQ Geekathon 大模型技术应用创新大赛 了解详情
写点什么

使用 Spring Cloud Function 框架进行面向函数的编程

  • 2017-08-15
  • 本文字数:1684 字

    阅读完需:约 6 分钟

Spring Cloud Function 是来自 Pivotal 的 Spring 团队的新项目,它致力于促进函数作为主要的开发单元。该项目提供了一个通用的模型,用于在各种平台上部署基于函数的软件,包括像 Amazon AWS Lambda 这样的 FaaS(函数即服务,function as a service)平台。

与其他的 serverless 模式类似,该项目致力于将函数变成开发人员所使用的主要理念。这个项目第二个重要的元素就是将业务逻辑从部署 profile 中解耦出来。尽管业务逻辑以函数的方式实现,但是相同的代码可以通过一个部署 profile 将函数暴露为 RESTful 服务、流处理应用(比如 Spring Cloud Data Flow )或有限的(finite)任务。这意味着相同的单个函数可以部署为独立的应用,也可以部署到 FaaS 平台上。到目前为止,团队已经提供了针对 AWS Lambda Apache OpenWhisk 的适配器,而对于像 Google Cloud Functions 和 Azure Functions 这样的 serverless 平台,只要它们提供对 Java 的支持,该项目就承诺会支持。

AWS Lambda 这样的平台凭借整洁的抽象和明显的成本优势,对很多开发人员都非常具有吸引力,但是有个重要的顾虑,尤其是对企业级用户来说更是如此,那就是因为在源码中包含了框架特定的代码就会导致锁定到该厂商上面。

就像 serverless 专家 Mike Roberts 在 Martin Fowler 的站点上所描述的:

通过依赖于环境,[serverless FaaS 系统] 能够明显减少运维成本和复杂性,但代价就是厂商依赖以及(此时)尚不成熟的支持服务。

Spring Cloud Function 能够改善这种状况,它在交付管道(pipeline)的打包阶段引入了部署平台依赖。这意味着,开发人员可以以隔离的状态实现函数(包括创建单元测试),只需关心逻辑以及函数的输入输出参数。然后,函数会基于这些依赖进行打包,这些依赖就能让函数运行到目标平台上。

Spring Cloud Function 项目的主管 Mark Fisher 这样告诉 InfoQ:

在 serverless 领域,我们希望提升 Java 开发人员的体验,毕竟可移植性和一致性是很大的挑战。

这个项目的核心是推动基于函数的编程模型,而不是 Spring 之前更为大家所熟悉的 POJO 模型。已经涉足 serverless 领域的人可能熟悉这种模型,在这种模型中,开发人员不用关心底层基础设施或框架,只需将关注点放到业务逻辑的实现上即可,而不是样板式的代码或其他“plumbing”代码。借助 Spring Cloud Function,业务逻辑会使用 java.util.function 包中所定义的核心接口: Function Consumer Supplier 的实现进行开发。

在这个非常简单的例子中,我们可以创建一个实现 Function 接口的类:

复制代码
import java.util.function.Function;
public class LengthCounter implements Function<string integer=""> {
@Override
public Integer apply(String name) {
return new Integer(name.length());
}
}
</string>

然后,它的魔力会通过 @FunctionScan 注解所启用的类路径扫描发挥出来:

复制代码
@FunctionScan
@SpringBootApplication
public class ExampleSpringFunctionApplication {
...

除此之外,函数还可以在类中声明,这里要通过添加 @Bean 注解实现:

复制代码
@Bean
public Function<string integer=""> lowercase() {
return flux -> flux.map(value -> value.toLowerCase());
}
</string>

如果采用这种方式的话,就不需要使用 @FunctionScan 注解了。

函数会打包为 Jar 文件,这个文件会被必要的配置以及适配器包装起来,在包装的过程中就带上了目标部署平台的部署 profile。

Mark Fisher 告诉我们:

除了 serverless 以外,我们还希望提升函数作为开发单元的简洁性,以及跨各种部署平台的可移植性。

开发人员专注于业务函数的创建,可以使用 Spring Boot 生态系统所提供的工具、过程和辅助设施(例如自动化测试、自动配置、依赖注入以及系统指标),这些他们是非常熟悉的,而底层的传输细节、基础设施和部署框架已经抽象了出来。

这个项目还处于初期阶段,但是 Spring 的人员承诺会有更多的举措,比如与 Fission 和其他基于 Kubernetes 的 serverless 平台的集成,另外,与新版本 Spring Cloud Data Flow 的集成也会更加紧密。

查看英文原文 Function-Oriented Programming with Spring Cloud Function Framework

活动推荐:

2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。

2017-08-15 19:007726

评论

发布
暂无评论
发现更多内容

非看不可的Redis持久化

码农BookSea

redis 底层原理

火山引擎DataLeap一招教你避坑“数据开发”中的资源隔离问题

字节跳动数据平台

大数据 数据治理 资源隔离 数据研发 企业号 3 月 PK 榜

局域网IP扫描软件:IP Scanner Pro 激活版

真大的脸盆

Mac Mac 软件 局域网管理 IP扫描工具

【网易云商】记一次实遇的 MySQL--index merge 死锁历程

网易智企

MySQL 数据库

OneFlow源码解析:Eager模式下的设备管理与并发执行

OneFlow

2023年Java岗面试八股文及答案整理(金三银四最新版)

采菊东篱下

Java 程序员 面试

数禾科技 AI 模型服务 Serverless 容器化之旅

阿里巴巴云原生

阿里云 Serverless 云原生 Knative 容器化

牛客网内部最新出品—1658页《Java面试突击核心手册》几乎覆盖市面上所有面试考点

架构师之道

Java 程序员 面试

程序员必修课:阿里性能优化全解终开源!设计+代码+JVM三飞

Java你猿哥

Java 性能优化 JVM 面经 jvm优化

数仓如何进行表级控制analyze

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 3 月 PK 榜

小巧简单的图像处理软件:Acorn 激活版

真大的脸盆

Mac 图像处理 Mac 软件 图像编辑工具

在 Flutter 多人视频中实现虚拟背景、美颜与空间音效

声网

flutter AI 虚拟背景 美颜

龙蜥白皮书精选:跨云-边-端的只读文件系统 EROFS

OpenAnolis小助手

镜像 操作系统 白皮书 龙蜥技术 EROFS

降本增效:12种常见接口优化方案总结

程序员小毕

Java 程序员 性能优化 后端 架构师

【网易云商】记一次实遇的 MySQL--index merge 死锁历程

网易云信

MySQL 数据库 数据库死锁

通过 Amazon Managed Microsoft Active Directory 运行混合 Active Directory 服务

亚马逊云科技 (Amazon Web Services)

Amazon

Flink CDC 专题首发|每天 10 分钟,解锁新一代数据集成框架

Apache Flink

大数据 flink 实时计算

不会性能调优,被面试官狂虐!全靠阿里Java性能调优全彩手册死撑

做梦都在改BUG

Java 性能优化 JVM 性能调优

Rainbond的 Gateway API 插件制作实践

北京好雨科技有限公司

Kubernetes API Gateway rainbond

MobTech|如何使用秒验

MobTech袤博科技

中间件:数字化时代系统集成商的得力助手

FinFish

中间件 系统集成 小程序容器 软件中间件

C++开发者必读经典书籍推荐

小万哥

c++ 程序员 后端 开发 推荐书籍

得帆云iPaaS是主数据必备工具

得帆信息

集成

从数仓发展史浅析数仓未来技术趋势

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 3 月 PK 榜

屡获殊荣丨Dubbo 开源 12 周年年度总结与规划

阿里巴巴云原生

阿里云 开源 云原生 dubbo

GitHub爆火!阿里高级架构师30天整理的《Java超全进阶教程》PDF版分享

开心学Java

Java redis JVM 架构师 进阶笔记

车载小程序改善车载设备体验与性能,打造智能出行生态圈

没有用户名丶

小程序容器

类 ChatGPT 开源软件,开发者用的上吗?

开源雨林

人工智能 开源软件 ChatGPT

合约一键跟单带单软件开发交易平台定制(源码搭建)

开发v-hkkf5566

MobTech|移动应用开发中的消息推送

MobTech袤博科技

中康数字科技:基于大模型的医学文本信息处理与抽取

飞桨PaddlePaddle

  • 扫码添加小助手
    领取最新资料包
使用Spring Cloud Function框架进行面向函数的编程_Java_Tim Hodkinson_InfoQ精选文章