Serverless中文名称为无服务器模式的一种云原生开发模型,可以让程序员专注于构建整个应用逻辑和运行程序,而不需要进行服务器的操心。这一部分可以理解成这样,程序员减少了不必要的工作,然后将服务器外包给各个云开发商,比如说我们现在用的众多云(阿里云微软云、亚马逊和Google云服务等)开发人员可以通过将产品开发的打包到容器当中然后进行部署即可。
无服务器框架的特点有点像是节能电梯,用的时候启动,不用的时候就休息,也就是通过这种流量的方式进行计费。值得一提的这种外包的无框架服务,涵盖了负载平衡、安全补丁、容量管理、扩展、日志和监控等任务。我们现在大多采用的是功能即服务的一种驱动计算模式,所有的东西只需要程序员将编写逻辑,部署到云平台管理的容器中然后按需执行,这部分最大的特点就是让客户(程序员)有更大的权限实现应用的自定义。
阿里云函数计算是什么?
很多人看到这个问题时,尤其是一些新人,对他们来说都是大问题。函数计算是事件驱动的全托管计算服务。这里和传统最大的区别之一就是不需要任何基础设施,只需要一个可以上网的笔记本,不需要复杂昂贵的本地设备客户端设备。我们可以直接将本地编写的代码上传到云端,通过函数计算可以快速使用阿里云服务完成应用场景的快速搭建。
流程:
整个工作流程基本上是通过开发者将编写的应用按照桉树计算支持的开发语言,通过函数控制台或者Serverless Devs上传,通过事件触发和函数计算调用API进行出发。在此过程执行期间,函数计算根据用户的需求,进行自动扩容,整个过程公开透明。
创建服务的整个流程:
现在有体验活动,我们可以免费体验整个流程,整个的规格达到了40GB/秒,大家如果感兴趣可以去阿里云社区进行体验。链接的话放在这里:
https://developer.aliyun.com/topic/serverless2022
进入这个界面点击免费开通实现千万产品免费订购即可
创建服务的整个流程其实比较简单,主要通过5个步骤即可完成,具体的操作步骤如下:
1.打开后台的函数计算FC点击左侧任务栏中的服务即函数或者创建服务
2.点击创建服务
我们可以根据名称和描述正常填写内容来创建服务内容。值得注意的是,当您选择打开日志功能和链路跟踪功能时,这里的一切都将被获取和收集。在高级选项中,我们可以选择服务角色,默认状态是阿里云服务RAM角色role收集你的资源。因为是首个应用,所有一切都没有开通,所以会提示日志服务还没有开通,我们立即开通即可。
这里的日志服务可以通过以下链接进行查看:
https://sls.console.aliyun.com/lognext/profile
然后我们在进一步及逆行函数计算FC创建过程中,需要我们再次授权,就可完成一个服务的创建
在应用创建中我们可以进行选择其中的一个进行创建:
在创建应用中我们需要进行文件管理的权限开通:NAS文件系统(阿里云文件存储NAS是一个可共享访问,弹性扩展,高可靠,高性能的分布式文件系统。兼容POSIX 文件接口,可支持数千台计算节点共享访问,可以挂载到弹性计算ECS、神龙裸金属、容器服务ACK、弹性容器ECI、批量计算BCS、高性能计算EHPC,AI训练PAI等计算业务上提供高性能的共享存储,用户无需修改应用程序,即可无缝迁移业务系统上云。)
同样每一个应用在创建的过程中的时候就会有不同的而角色快捷创建,这是提供的模板和场景的情况下
接下来是应用程序的创建,我直接通过GitHub绑定,方便以后的管理
等几秒钟就能完成部署了,非常方便快捷
我们可以通过我们建好的通过域名进行访问,然后我们下载相关的工具可以在本地进行:
我们可以在后台看到我们所创建的一系列函数,可以查看运行环境、调用次数等等。这样一个简单的应用场景就部署好了,后期我们可以通过填充式的代码来完成相应的程序编写。
开发步骤
1.开通函数计算
开通前需要您已注册阿里云账号并完成实名认证,进入函数计算官网函数计算https://fcnext.console.aliyun.com如果您还未开通函数计算,需在函数计算开通页面勾选呢函数计算服务协议之后点击立即开通,开通完成后会自动跳转至函数计算控制台。
2.新建服务
在函数计算控制台点击 "服务及函数" 进入服务列表,在服务列表点击创建服务,填写服务的配置,点击确认即可创建服务,注:开启日志和链路追踪功能可以更方便的进行代码调试、故障分析、数据分析和查看函数内部时间的消耗等(推荐开启,但可能会收取部分费用)。
3.新建函数
在服务列表下点击创建的服务名称进入函数管理页面,点击创建函数,在创建函数页面选择 "使用自定义运行时创建" 填写函数的相关配置,在运行环境中选择Java 17的示例模版函数,配置完成后页面下拉至底部点击创建即可部署一个springboot项目。
4.自定义域名配置
函数创建完成后直接在浏览器中直接打开请求地址,将会以附件的方式下载响应。这是因为 Http 触发器会自动在响应头中添加 Content-Disposition: attachment 字段,我们可以使用自定义域名避免该问题,进入域名管理页面点击添加自定义域名,在路由配置中选择自己创建的服务和函数,配置完成后,就可以在浏览器中输入配置的域名,可以看到页面显示的Hello World!内容,到此一个简单的springboot项目就部署配置完成了。
5.开发
- 导出代码
继续进行项目开发,我们可以在函数计算控制台进入到该函数的详情页面在函数代码页使用在线IED进行开发和调试,也可以在"导出函数"这里导出函数的代码,使用自己的代码编辑器进行开发。
- 代码结构
- pom.xml
<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.6</version><relativePath/><!--lookupparentfromrepository--></parent><groupId>com.example</groupId><artifactId>demo</artifactId><version>0.0.1-SNAPSHOT</version><name>demo</name><description>DemoprojectforSpringBoot</description><properties><java.version>17</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
- DemoApplication
packagecom.example.demo; importorg.springframework.boot.SpringApplication; importorg.springframework.boot.autoconfigure.SpringBootApplication; importorg.springframework.web.bind.annotation.GetMapping; importorg.springframework.web.bind.annotation.RequestParam; importorg.springframework.web.bind.annotation.RestController; publicclassDemoApplication { publicstaticvoidmain(String[] args) { SpringApplication.run(DemoApplication.class, args); } "/") (publicStringhello( (value="name", defaultValue="World") Stringname) { returnString.format("Hello %s!", name); } }
- 配置监听端口
在application.properties配置文件中添加监听端口,这里的配置端口需要和函数配置的监听端口保持一致