使用Spring Cloud Function框架进行面向函数的编程
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 {\ @Override \ public Integer apply(String name) {\ return new Integer(name.length());\ }\ }\
\\
然后,它的魔力会通过@FunctionScan注解所启用的类路径扫描发挥出来:
\\
\@FunctionScan\@SpringBootApplication\public class ExampleSpringFunctionApplication {\...\
\\
除此之外,函数还可以在类中声明,这里要通过添加@Bean注解实现:
\\
\@Bean\public Function lowercase() {\ return flux -\u0026gt; flux.map(value -\u0026gt; value.toLowerCase());\}\
\\
如果采用这种方式的话,就不需要使用@FunctionScan注解了。
\\
函数会打包为Jar文件,这个文件会被必要的配置以及适配器包装起来,在包装的过程中就带上了目标部署平台的部署profile。
\\
Mark Fisher告诉我们:
\\
\
除了serverless以外,我们还希望提升函数作为开发单元的简洁性,以及跨各种部署平台的可移植性。
\
\\
开发人员专注于业务函数的创建,可以使用Spring Boot生态系统所提供的工具、过程和辅助设施(例如自动化测试、自动配置、依赖注入以及系统指标),这些他们是非常熟悉的,而底层的传输细节、基础设施和部署框架已经抽象了出来。
\\
这个项目还处于初期阶段,但是Spring的人员承诺会有更多的举措,比如与Fission和其他基于Kubernetes的serverless平台的集成,另外,与新版本Spring Cloud Data Flow的集成也会更加紧密。
\\
查看英文原文:Function-Oriented Programming with Spring Cloud Function Framework
使用Spring Cloud Function框架进行面向函数的编程相关推荐
- 进击的 Spring Cloud Alibaba —— 框架与服务
作者 | 陈曦(良名) Spring Cloud Alibaba 项目成员,start.aliyun.com 负责人. 导读:本文整理自作者于 2020 年云原生微服务大会上的分享<进击的 S ...
- CVE-2022-22963 Spring Cloud Function SpEL 远程代码执行漏洞 复现
1 漏洞信息 漏洞名称 Spring Cloud Function SpEL 远程代码执行漏洞 漏洞编号 CVE-2022-22963 危害等级 高危 CVSS评分 7.5 漏洞类型 中间件漏洞 漏洞 ...
- 面向函数范式编程(Functional programming)
函数编程(简称FP)不只代指Haskell Scala等之类的语言,还表示一种编程思维,软件思考方式,也称面向函数编程. 编程的本质是组合,组合的本质是范畴Category,而范畴是函数的组合. 首先 ...
- maven aspectj_使用Spring AspectJ和Maven进行面向方面的编程
maven aspectj Spring框架附带AOP支持. 实际上,如Spring参考文档中所述 , " Spring的关键组件之一是AOP框架. 尽管Spring IoC容器不依赖于AO ...
- 使用Spring AspectJ和Maven进行面向方面的编程
Spring框架附带AOP支持. 实际上,如Spring参考文档中所述 , " Spring的关键组件之一是AOP框架. 尽管Spring IoC容器不依赖于AOP,这意味着您不需要使用AO ...
- python入门函数编程_Python入门——面向函数的编程,过程
第一部分 函数的定义及调用 1.1 为什么要用函数 提高代码复用性--抽象出来,封装为函数 将复杂的大问题分解成一系列小问题,分而治之--模块化设计的思想 利于代码的维护和管理 1.2 函数的定义及调 ...
- 响应式Spring Cloud初探
响应式Spring Cloud初探 分类:工程 原文链接:The Road to Reactive Spring Cloud 作者: JOSH LONG 译者: helloworldtang 日期: ...
- Spring Cloud Data Flow系列教程架构-2
架构 Spring Cloud Data Flow 简化了专注于数据处理用例的应用程序的开发和部署. 主要概念: 数据流的服务器组件. 服务器组件可以为流和批处理作业部署的应用程序类型. 已部署应用程 ...
- Spring Cloud入门系列(1)- Spring生态体系发展史+全系框架介绍
Spring发展史 2000年,Java EE和EJB迅速发展,很多知名公司都是采用此技术方案进行项目开发,但是EJB 属于重量级框架,开发繁琐.于是一个叫Rod Johnson的大佬写了一本叫做&l ...
最新文章
- c语言交错级数前10项和,怎么求一个交错级数的和,谢谢
- 贵州发布大数据发展十方面成果
- 【重要】做AI项目,找有三AI,100+研发人员为你服务
- 这个世界并不缺少创意,而是缺少发现
- Golang之gjson
- PIC单片机入门_PICC的指向RAM的指针
- 导师实验室对学生影响有多大?
- 安装搜狗输入法之后 Linux Mint 19.1 字体发虚解决方案
- java中的static关键字总结
- jvm(Java virtual machine) JVM架构解释
- Android之Canvas的drawRoundRect()
- 如何在C中生成随机int?
- java 游戏得分排行_以编程方式更改文本以统一显示游戏屏幕上的得分
- 郭天祥老师单片机教程之串口练习题
- android webview 下载图片,Android使用webView长按保存下载网络图片
- 第一篇数模论文——估计出租车的总数
- Spring学习总结01--Spring了解,IOC,DI
- 总论点和分论点_您将面对与他人谈论隐私的4个常见论点
- linux重命名文件或文件夹(mv命令 rename命令)
- 语义网、本体、OWL基础知识梳理
热门文章
- posixkill php,在linux中使用PHP的posix_kill()会导致奇怪的行为
- 改计算机用户头像,Windows 8.1
- mybatis-plus自动生成文件
- HTML地址栏传数据和json区别,前端利用formData格式进行数据上传,前端formData 传值 和 json传值的区别?...
- java代码上传到私服,java生成 java代码 上传maven私服
- 关于vue项目中输入框无法正常输入的问题
- 2020-12-03 python 字典 key 和value 互换
- 计算机ai听课记录,ai ei ui评课稿听课记录
- error java on syntax token_解决Java“syntax error on token enum”问题
- java和C++的区别