为什么我要迁移 SpringBoot 到函数计算

为什么要迁移?

我们的业务有很多对外提供服务的 RESTful API,并且要执行很多不同的任务,例如同步连锁 ERP 中的商品信息到美团/饿了么等平台,在线开发票等。由于各种 API 和任务执行的不确定性,经常会因为资源不足导致服务不可用,但是盲目的扩容又很烧钱。整个团队每天都陷在不停的扩容,缩容之中。关键是有时候稍稍慢了一些,就会对业务照成影响,导致被投诉。每天还要被其他业务部门催着做新功能。更难的是,因为我们没有运维经验,多次被黑客把我们本来就不多的机器用来挖矿。作为一个初创公司的研发团队,我们的资源少,人手少,经验少,面对稳定性,安全性和业务的压力真的是非常痛苦。

在被前同事安利了函数计算以后,我发现这太有用了!迁移的过程非常顺滑,迁移的效果也大大超出了我的预期。下面是我觉得函数计算非常适合我们的理由:

  • 默认弹性,可以轻松应对大量 API 请求和任务,不会再因为扩容不及时导致资源耗尽引起的业务不可用了!
  • 无流量时支持缩容到 0,省钱神器,再也不用买虚拟机和负载均衡了,对我们来说降本效果杠杠滴!
  • 免运维,免去了虚拟机的运维成本!
  • 更安全,它不能被 SSH 登陆,而且也不会像虚拟机一样一直开着,等着被人扫描和攻破!
  • 零改造,无需修改代码,之前虚拟机上的 JAR 包直接就可以跑在函数计算上!

迁移步骤

有三种使用方式,这里我具体讲一下怎么在控制台上操作。

  • 使用函数计算控制台进行迁移。
  • 使用函数计算提供的 S 工具,通过命令行 + YAML 的方式进行部署,查看详情 1[1]
  • 使用函数计算控制台上的应用中心,从 GitHub 等源代码库中自动构建并部署。CICD/GitOps 直接就有了,太香了!查看文末详情 2[2]

1. 开通函数计算

访问控制台[3],点击“免费开通”将跳转到开通页面。

2. 创建服务

点击“服务及函数”,“创建服务”,输入“名称”后点击“确定”。

3. 对 JAR 包进行压缩,得到 ZIP 文件

注意!!!这里要对打包好的 JAR 包进行压缩,然后上传 ZIP 包!!!

备注:其实也可以直接上传 JAR 包,但是启动命令要写为 java org.springframework.boot.loader.JarLauncher 我个人不是很喜欢这种写法。我还是喜欢 java -jar gs-rest-service-0.1.0.jar 的写法。

如果你还没有可用的 JAR 包,请参考 SpringBoot 官方快速开始文档[4]进行构建。

4. 创建函数

  • 在“函数管理”页面,点击“创建函数”,
  • 选择“使用自定义运行时平滑迁移 Web Server
  • 运行环境”选择您需要的 Java 版本
  • 选择“通过 ZIP 包上传代码
  • 启动命令”为您在虚拟机上启动 JAR 包的命令,例如:java -jar rest-service-initial-0.0.1-SNAPSHOT.jar.zip
  • 监听端口”为您的 JAVA 程序在虚拟机上监听的端口,例如:8080
  • 请求处理程序类型”选择“处理 HTTP 请求”
  • 点击“创建”

5. 测试函数

在函数详情页面的触发器列表中找到“公网访问地址”。注意:因为相关规定,不能直接在浏览器中打开这个 URL,需要配置自己的域名才能在浏览器中访问。

你可以通过 curl 命令进行测试。

你也可以通过函数详情页中的“测试函数”页签直接进行测试。

6. 使用自己的域名访问函数

  • 点击“首页”,“域名管理”,“创建域名”,“添加自定义域名”
  • 复制页面中的“公网 CNAME”,在云解析 DNS 控制台[6]上为你的域名添加 CNAME 记录
  • 在路由配置中选择您刚建好的服务和函数
  • 点击“创建”
  • 完成!现在可以通过自己的域名访问服务了!

7. 更多进阶文档

配置 NAS 文件系统:

https://help.aliyun.com/document_detail/87401.html

配置 HTTPS:

https://help.aliyun.com/document_detail/90763.html

授权函数访问其他服务:

https://help.aliyun.com/document_detail/181589.html

访问 VPC 内的资源:

https://help.aliyun.com/document_detail/72959.html

访问 RDS 数据库:

https://help.aliyun.com/document_detail/84514.html

访问 Redis 缓存:

https://help.aliyun.com/document_detail/148798.html

更多快速入门文档:

https://fcnext.console.aliyun.com/overview

迁移后的效果

面对流量洪峰,我们再也不会手忙脚乱了,函数计算自动会帮我们扩容!很好的解决了我们的 API 场景和不定时执行各种不同任务的场景。对我们这种不懂 Docker,不懂 Kubernetes,没有运维人员,虚拟机扩容缩容对我们来说都很难的小团队来说真是一大福利。同时,我们再也不用买虚拟机和负载均衡了!缩容到 0 和按量付费的方式也极大的降低了我们的成本!还有,我们再也没有被黑客攻破,用我们的钱来挖矿了!整体来说就两个字!真香!

参考链接:

[1] 详情 1:

https://github.com/devsapp/start-web-framework/tree/master/web-framework/java/springboot

[2] 详情 2:

https://fcnext.console.aliyun.com/applications/create

[3] 控制台:

https://fcnext.console.aliyun.com/

[4] SpringBoot 官方快速开始文档:

https://spring.io/guides/gs/rest-service/

[5] 云解析 DNS 控制台

https://dns.console.aliyun.com/

作者:榴莲

原文链接

本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/510560.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ingress Nginx 接连披露高危安全漏洞,是否有更好的选择?

今年 K8s Ingress Nginx 项目接连披露了三个高危安全漏洞(CVE-2021-25745[1], CVE-2021-25746[2], CVE-2021-25748[3]),该项目也在近期宣布将停止接收新功能 PR,专注修复并提升稳定性。Ingress Nginx 作为 K8s 项目自带的网关组件…

链表c++代码的实现

//说明:各位测试数据的时候,请严格按照主函数来测试数据。因为这个链表是假设所有输入数据正确的情况。。。假如随便乱输入的话。。我没写边界检查。 //本次写法是比较简洁的。方便大家学习。 #include "iostream" using namespace std; typedef struct …

浅谈数据仓库架构设计

1. 数据中台与DW/BI/DSS 个人认为数据中台本质上是一种新的适配大数据技术发展的新的“数据仓库-决策支持(商业智能)”架构。这个架构是构建在传统的架构基础之上,对传统架构的一种新的发展。 数据中台从企业的视角出发,要求企业…

RocketMQ 消息集成:多类型业务消息 - 定时消息

引言 Apache RocketMQ 诞生至今,历经十余年大规模业务稳定性打磨,服务了 100% 阿里集团内部业务以及阿里云数以万计的企业客户。作为金融级可靠的业务消息方案,RocketMQ 从创建之初就一直专注于业务集成领域的异步通信能力构建。 本篇将继续…

一文读懂 BizDevOps:数字化转型下的技术破局

我们正迈向数字经济时代,数字化转型成为普遍行动。未来绝大多数业务都将运行在数字基座之上,软件系统成为业务创新和发展的核心引擎。在这一趋势下,产品研发的交付能力面临巨大挑战,产品研发的交付实践和方法亟待变革。 BizDevOp…

栈c++代码实现

//实在不想写数组法了&#xff0c;写个常用的STL的吧 #include "iostream" #include "algorithm" #include "stack" using namespace std; void Init(stack <int> s) { while(!s.empty()) { s.pop(); } } int main() { stack …

地址标准化服务AI深度学习模型推理优化实践

导读 深度学习已在面向自然语言处理等领域的实际业务场景中广泛落地&#xff0c;对它的推理性能优化成为了部署环节中重要的一环。推理性能的提升&#xff1a;一方面&#xff0c;可以充分发挥部署硬件的能力&#xff0c;降低用户响应时间&#xff0c;同时节省成本&#xff1b;…

PS里建立工作路径对话框中的“容差”是干什么的?

这里的容差是指&#xff1a;将选区转换为路径时的平滑程度&#xff0c;容差越大&#xff0c;平滑越重&#xff1b;容差越小&#xff0c;越精确&#xff08;与原选区对照&#xff09;&#xff0c;越接近你画的选区。PS的容差用在不同的地方&#xff0c;有不同的用法&#xff0c;…

淘系数据模型治理最佳实践

导读&#xff1a;本次分享题目为淘系数据模型治理&#xff0c;主要介绍过去一年淘系数据治理工作的一些总结。 具体将围绕以下4部分展开 模型背景&问题2问题分析3治理方案4未来规划 模型背景&问题 1.整体情况 首先介绍一下淘系的整体数据背景。 淘系的数据中台成立…

【走进RDS】之SQL Server性能诊断案例分析

客户的困扰 前几天某程序员小王向阿里云咨询他的SQL Server数据库整体负载较高&#xff0c;是否有优化的方法&#xff1f;前几天另外一个工单则是需要阿里云工程师帮忙定位某一个时刻的数据库性能尖刺的问题。 这些都是常见的性能诊断工单&#xff0c;其实数据库性能诊断不仅…

题目1335:闯迷宫( BFS在求解最短路径或者最短步数上有很多的应用)

题目描述&#xff1a;sun所在学校每年都要举行电脑节&#xff0c;今年电脑节有一个新的趣味比赛项目叫做闯迷宫。 sun的室友在帮电脑节设计迷宫&#xff0c;所以室友就请sun帮忙计算下走出迷宫的最少步数。 知道了最少步数就可以辅助控制比赛难度以及去掉一些没有路径到达终点的…

用了那么久的 Lombok,你知道它的原理么?

序言 在写Java代码的时候&#xff0c;最烦写setter/getter方法&#xff0c;自从有了Lombok插件不用再写那些方法之后&#xff0c;感觉再也回不去了&#xff0c;那你们是否好奇过Lombok是怎么把setter/getter方法给你加上去的呢&#xff1f;有的同学说我们Java引入Lombok之后会…

Fury:一个基于JIT动态编译的高性能多语言原生序列化框架

Fury是一个基于JIT动态编译的多语言原生序列化框架&#xff0c;支持Java/Python/Golang/C等语言&#xff0c;提供全自动的对象多语言/跨语言序列化能力&#xff0c;以及相比于别的框架最高20~200倍的性能。 引言 过去十多年大数据和分布式系统蓬勃发展&#xff0c;序列化是其…

HDU1181:变形课(DFS)

Description 呃......变形课上Harry碰到了一点小麻烦,因为他并不像Hermione那样能够记住所有的咒语而随意的将一个棒球变成刺猬什么的,但是他发现了变形咒语的一个统一规律:如果咒语是以a开头b结尾的一个单词,那么它的作用就恰好是使A物体变成B物体. Harry已经将他所会的所有咒…

阿里云丁宇:以领先的云原生技术,激活应用构建新范式

8 月 11 日&#xff0c;2022 阿里云飞天技术峰会在深圳举行&#xff0c;会上阿里云提出云原生激活应用构建三大范式&#xff0c;并发布最新的产品与解决方案。基于分布式云容器平台 ACK One&#xff0c;实现多地域分布式系统一致管理&#xff1b;发布 ACK FinOps 解决方案&…

inline函数和一般的函数有什么不同

比如 int g(int x) { return x x; } int f() { return g(); } 这样f会调用g&#xff0c;然后g返回x x给f&#xff0c;然后f继续把那个值返回给调用者。 如果g是inline的话。f会被直接编译成。 int f() { return x x; } 相当于把g执行的操作直接融合到f里。这样减少…

操作系统的“冷板凳”要坐多久?万字长文解读16年开源老兵的坚持

想知道内核研发是怎样的体验&#xff1f;操作系统的“冷板凳”得坐多久才有春天&#xff1f;本文对话龙蜥社区理事长马涛&#xff0c;畅所欲言聊开源&#xff0c;一起来看看那些开源润物细无声背后的故事以及龙蜥社区运营的道法术。 高门槛的 Linux 内核研发&#xff0c;如何支…

在阿里做前端程序员,我是这样规划的

前端程序员常问的几个问题 此文来自一次团队内的分享。我是来自大淘宝技术内容前端团队的胤涧&#xff0c;负责内容中台技术。我的习惯是每个新财年初都会进行一次分享《HOW TO BE AN EMINENT ENGINEER》&#xff0c;聊聊目前团队阵型、OKR、业务和技术大图&#xff0c;聊聊我作…

c++堆栈中 top() pop()的具体作用是什么

top()是取栈顶元素pop()是弹出栈顶元素stack<int> a;a.push(1); // 1a.push(2); // 1 2a.push(3); // 1 2 3int c a.top(); // c 3a.pop(); // 1 2a.push(4); // 1 2 4c a.top(); // c 4

如何可视化编写和编排你的 K8s 任务

简介 K8s Job 是 Kubernetes 中的一种资源&#xff0c;用来处理短周期的 Pod&#xff0c;相当于一次性任务&#xff0c;跑完就会把 Pod 销毁&#xff0c;不会一直占用资源&#xff0c;可以节省成本&#xff0c;提高资源利用率。 阿里任务调度 SchedulerX 和云原生结合&#x…