如何把 thinkphp5 的项目迁移到阿里云函数计算来应对流量洪峰?

1. 为什么要迁移到阿里云函数?

我的项目是一个节日礼品领取项目,过节的时候会有短时间的流量洪峰。平时访问量很低。之前的架构是购买的阿里云alb+多台ecs+云msyql+云redis。最大的问题就是成本问题。平时流量低的时候ecs成本也无法缩减。

阿里云函数计算是serverless,即无服务架构,就比如你的业务流量短时间突然很多。函数计算就会毫秒级别启动多个实例(阿里云函数计算 FC 用来运行函数的最小单元),如果没人访问可以没有实例运行,做到0费用。但是有人访问的时候第一次冷启动就稍微慢一点,可以根据实际情况设置最少保留一个实例。

部署到阿里云函数计算,还能减少运行环境搭建的成本。之前的模式需要在ecs安装nginx,然后安装php,以及安装php的驱动程序redis等。看了下阿里云函数计算官方文档,目前custom runtime Debian 9内置php7.4并且看了下内置的php的扩展整好也支持到了我整好需要的redis。不仅剩下了买服务器钱,而且还不用安装php环境了,不仅如此每个月还有免费的算力额度。

迁移原因总结下:1成本降低了很多2免去了环境部署3自动扩容,天生应对高并发

2. 改造旧项目适配函数计算。

代码改动:

虽然说免去了环境部署,但是我之前的代码还是有些不适配的地方,比如之前代码的日志都是存放到服务器的某个目录的。如果迁移到函数计算的话,实例会随时销毁重建,导致日志丢失。解决办法就是把日志写入到阿里云oss上面,或者使用阿里云的日志服务写到那个里面去。

这里还有一点要注意,我的项目不是前后端分离的,鉴权还是穿透的session和cookie模式。如果session是保留在服务端的文件的话也会存在上面的问题,建议存储的redis里面,我的项目本省就是存到redis里面的,所以这块不需要改动,如果你的项目存在这样的问题那就需要改进下了。

函数计算和云msyql和云redis通讯的时候一定要采用vpc内网互通的原则减少链路传输的开销以及链路劫持风险。

3. 增加s.yml以及启动shell脚本

配置s.yml使用Serverless Devs客户端工具发布到阿里云函数计算,Serverless Devs这个工具并非阿里云的客户端工具,而是一个开源开放的 Serverless 开发者平台,致力于为开发者提供强大的工具链体系。通过该平台,开发者不仅可以一键体验多云 Serverless 产品,极速部署 Serverless 项目,还可以在 Serverless 应用全生命周期进行项目的管理,并且非常简单快速的将 Serverless Devs 与其他工具/平台进行结合,进一步提升研发、运维效能。

它的官网地址:https://www.serverless-devs.com/

然后看下我的s.yml里面的配置信息,具体的说下重要项是干嘛的。

edition: 1.0.0
name: compoent-test
access: 'default'
services:cn-hangzhou-test1002-func-3i3c0f95:component: devsapp/fcprops:region: cn-hangzhouservice:logConfig:enableRequestMetrics: trueenableInstanceMetrics: truelogBeginRule: DefaultRegexproject: aliyun-fc-cn-hangzhou-ae3ef8b8-db4a-5b7a-a040-7012789ad20flogstore: function-logrole: acs:ram::1621341641365186:role/AliyunFcDefaultRoleinternetAccess: truename: test1002function:customRuntimeConfig:command:- bashargs:- '-c'- 'chmod 777 /code/start.sh && /code/start.sh'handler: index.handlerinstanceType: e1runtime: customtimeout: 5instanceConcurrency: 20memorySize: 512caPort: 9000environmentVariables: {}internetAccess: truename: func-3i3c0f95asyncConfiguration: {}codeUri: ./test1002/func-3i3c0f95triggers:- name: defaultTriggerdescription: ''type: httpqualifier: LATESTconfig:methods:- GET- POST- PUT- DELETEauthType: anonymous

codeUri: ./test1002/func-3i3c0f95这个指定的是我的项目代码的位置,会把这个目录下面的代码拷贝到 debain系统的 /code目录下面。

customRuntimeConfig:command:- bashargs:- '-c'- 'chmod 777 /code/start.sh && /code/start.sh' 

这句话的是项目启动脚本,其实就是执行这个start.sh的shell脚本,先给予一个777的权限,然后在执行。翻译成shell脚本其实就是 bash -c 'chmod 777 /code/start.sh && /code/start.sh'

caPort: 9000

监听端口9000一定要和启动脚本start.sh里面的一样

#!/usr/bin/env bash
cd /code/tp5/public
php -S 0.0.0.0:9000 router.php

这里我觉得我还是要说下这个启动脚本,先cd到public目录,thinkphp5的入口在public下面这个和项目框架有关系。然后就是这个启动脚本,上面这是thinkphp5特有的写法。

其他项就不详细说了大概看看应该能看懂。

4使用客户端工具发布

工具的安装就忽略了不说了,看下官方文档说的很详细:https://docs.serverless-devs.com/serverless-devs/quick_start

Serverless Devs这个工具安装好后,配置配置上阿里云的AccessKey ID和AccessKey Secret,在项目根目录建立s.yml,以及在代码目录建立上面的启动脚本start.sh然后就可以使用客户端工具的 s deploy 部署到阿里云函数计算了。

发布成功了

4. 绑定自己的域名

https://fcnext.console.aliyun.com/cn-hangzhou/domains/create

把自己的域名cname到上图的 “公网cname”,然后 服务名称 测试函数 版本都对应选择正确。创建即可。

部署成功了,哈哈。

5.谈下自己的感受

函数计算serverless是以后的趋势,开发者能够有更多的精力去关注业务层。从开始预计迁移到代码的修改以及阿里云函数计算文档查阅,到迁移成功,花费了大概3天的时间,对阿里云函数计算有了更深层次的认知,同时也期待迁移过来的项目在下次使用高峰的时候能够稳定运行。我后面也会随时关注阿里云函数计算的动态,同时感谢阿里云函数计算团队能做出来这么优秀的产品。

投稿方向可参考(但不限于):

  • 您对函数计算FC产品能力的体验和建议,帮助其他用户选用 Serverless 服务。
  • 使用函数计算 FC 创建应用的场景评测,如基于函数计算 FC 搭建云上博客、搭建弹性高可用 Serverless Web 应用、构建基于 Serverless 架构的弹性高可用视频处理系统等。

原文链接

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

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

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

相关文章

[总结]视音频编解码技术零基础学习方法

0. 生活中的视音频技术 平时我们打开电脑中自己存电影的目录的话,一般都会如下图所示,一大堆五花八门的电影。(其实专业的影视爱好者一概会把影视文件分门别类的,但我比较懒,一股脑把电影放在了一起) 因…

Helm Chart 多环境、多集群交付实践,透视资源拓扑和差异

Helm Charts[1] 如今已是一种非常流行的软件打包方式,在其应用市场中你可以找到接近一万款适用于云原生环境的软件。然后在如今的混合云多集群环境中,业务越来越依赖部署到不同的集群、不同的环境、同时指定不同的配置。再这样的环境下,单纯依…

跨全端 SDK 技术演进

关于为什么要选择跨平台的实现方式 Write Once, Run AnyWhere. 越来越多的业务需求都有统一的业务诉求,按照传统的方式,在开发、测试、维护上的成本都是乘以N的,体验也很难做到一致性,特别是复杂的业务,实…

SKG 渠道中台借助 SAE + 大禹打造云原生 DevOPS,提效 60%

项目背景 未来穿戴健康科技股份有限公司(SKG)是一家专注为个人与家庭提供智能可穿戴健康产品的高新技术企业,专业从事 SKG 品牌可穿戴健康产品和便携式健康产品的研发、设计、生产及销售。 随着市场需求的迅速变化,SKG 的 IT 系…

资源预测数字模型搭建思路分享

业务背景 资源预测是项目管理过程中的一个环节,即通过搭建合适的数据模型,对未来的项目人力资源投入情况进行有效预测,可以更加精准的完成项目资源规划并能及时发现问题进行相关调整。 难题和痛点 PM排期时没有有效数据支撑资源使用情况&a…

视频压缩:I帧、P帧、B帧

/************************************************************************************************************************************************************************************** **说明: 1.本文通过整理而来,集多个高手的精华&a…

EasyNLP 中文文图生成模型带你秒变艺术家

导读 宣物莫大于言,存形莫善于画。 --【晋】陆机 多模态数据(文本、图像、声音)是人类认识、理解和表达世间万物的重要载体。近年来,多模态数据的爆炸性增长促进了内容互联网的繁荣,也带来了大量多模态内容理解和生成…

阿里本地生活全域日志平台 Xlog 的思考与实践

1. 背景 程序员学习每一门语言都是从打印“hello world”开始的。这个启蒙式的探索,在向我们传递着一个信息:“当你踏进了编程的领域,代码和日志将是你最重要的伙伴”。在代码部分,伴随着越来越强大的idea插件、快捷键&#xff0…

关于运维,阿里云、字节、华科的专家如是说

只有今天周密的“运”筹帷幄,才有将来持续的“维”护稳定。不久前,阿里云联合中国计算机行业协会信息存储与安全专业委员会,邀请到了来自阿里云、字节跳动、华中科技大学的多位专家,共同探讨数字经济时代存储系统的运维之道。 一…

行业 SaaS 微服务稳定性保障实战

很多研发人员在日常工作中经常回遇到以下两个问题:竟然不可以运行,为什么?竟然可以运行,为什么? 因此,他们非常期望可观测能够提供解决问题的思路。 引言 2017 年,推特工程师 Cindy 发表了一篇…

阿里云全站加速 DCDN 重磅发布!打造新一代加速引擎

在数字化转型变革逐步深入的当下,安全高效成为企业上云、全球化部署的关键需求。 随着应用场景复杂度不断提升、业务需求差异化发展,为了给企业提供更完善的安全加速服务,阿里云对全站加速DCDN产品进行了全面升级,针对边缘安全防…

阿里云云原生一体化数仓 - 数据安全能力解读

MaxCompute产品简介 MaxCompute是一款多功能、低成本、高性能、高可靠、易于使用的数据仓库和支持全部数据湖能力的大数据平台,支持超大规模、serverless和完善的多租户能力,内建企业级安全能力和管理功能,支持数据保护和安全共享&#xff0…

EMT4J——让 Java 应用升级更轻松

前言 JDK 升级对于 Java 应用来说是不得不面对的事情,一方面 Java 生态系统希望 Java 应用能跟上最新 JDK 版本: Oracle 建议将 JDK 的 LTS 版本的发布周期从 3 年调整为 2 年,对于只使用 LTS 版本的应用来说,可以在更短时间内使用最新的技术&#xff…

多年锤炼,迈向Kata 3.0 !走进开箱即用的安全容器体验之旅

一、Kata 的过去 让我们将时钟拨回 2015 年 5 月,Hyper.sh 和 Intel 开源技术中心的工程师们分别独立发布了runV 和 Clear Containers 的虚拟化容器项目,而这两个项目便是 Kata Containers1 的前身。这两个项目互相有很多交流,在分别独立发展…

从函数计算到 Serverless 架构

前言 随着 Serverless 架构的不断发展,各云厂商和开源社区都已经在布局 Serverless 领域,一方面表现在云厂商推出传统服务/业务的 Serverless 化版本,或者 Serverless 计算平台,另一方面表现在开源社区中 Serverless 相关项目逐渐…

PolarDB B-tree 并发控制优化

InnoDB 索引 InnoDB 引擎使用索引组织表,每个表的数据都放在一个对应的索引中,该索引称为聚集索引(clustered index),使用索引组织表的目的是: 动态地组织磁盘文件结构,维护数据记录有序&…

几种常见的 MySQL/PolarDB-MySQL 回收表空间方法对比

背景 为什么需要回收表空间?任何一个存储或您购买的实例规格都有容量限制,并且根据存储介质不同,保存方式不同,相应地成本也会不同。在线数据库的存储成本是比较高的,所以架构师和DBA在系统设计之初就要考虑满足未来几…

Lindorm-Operator云原生实践

背景介绍: 随着 Kubernetes 使用的越来越广泛,k8s管理的native的对象资源有时并不能满足用户的需求,为了提高可扩展性,自 v1.7 以来,Kubernetes 引入了 CRD 机制(CustomResourceDefinition)&am…

客户端单元测试实践 — C++篇

背景 我们团队在手淘中主要负责BehaviX模块,代码主要是一些逻辑功能,很少涉及到UI,为了减少双端不一致问题、提高性能,我们采用了将核心代码C化的策略。 由于团队项目偏底层,测试同学难以完全覆盖,回归成…

基于 RTS 超低延时直播优化强互动场景体验

RTS 在阿里云视频直播的基础上进行底层技术优化,通过集成阿里云播放器 SDK,支持在千万级并发场景下节点间毫秒级延时直播的能力,弥补了传统直播存在 3~6 秒延时的问题,确保了超低延时、低卡顿、秒开流畅的直播观看体验。本文介绍了…