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

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
日志服务 SLS,月写入数据量 50GB 1个月
简介: 如何把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/fc

   props:

     region: cn-hangzhou

     service:

       logConfig:

         enableRequestMetrics: true

         enableInstanceMetrics: true

         logBeginRule: DefaultRegex

         project: aliyun-fc-cn-hangzhou-ae3ef8b8-db4a-5b7a-a040-7012789ad20f

         logstore: function-log

       role: acs:ram::1621341641365186:role/AliyunFcDefaultRole

       internetAccess: true

       name: test1002

     function:

       customRuntimeConfig:

         command:

           - bash

         args:

           - '-c'

           - 'chmod 777 /code/start.sh && /code/start.sh'

       handler: index.handler

       instanceType: e1

       runtime: custom

       timeout: 5

       instanceConcurrency: 20

       memorySize: 512

       caPort: 9000

       environmentVariables: {}

       internetAccess: true

       name: func-3i3c0f95

       asyncConfiguration: {}

       codeUri: ./test1002/func-3i3c0f95

     triggers:

       - name: defaultTrigger

         description: ''

         type: http

         qualifier: LATEST

         config:

           methods:

             - GET

             - POST

             - PUT

             - DELETE

           authType: anonymous

 

 

1.jpg

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

       customRuntimeConfig:

         command:

           - bash

         args:

           - '-c'

           - 'chmod 777 /code/start.sh && /code/start.sh'

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

 

2.jpg

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 部署到阿里云函数计算了。

3.jpg

发布成功了

4. 绑定自己的域名

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

4.jpg

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

5.jpg

部署成功了,哈哈。

5.谈下自己的感受

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

相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
23小时前
|
运维 Serverless 测试技术
通义灵码 x 函数计算:构建高效开发流程,加速项目交付
通义灵码 x 函数计算:构建高效开发流程,加速项目交付
19 10
|
4天前
|
Kubernetes 监控 Serverless
基于阿里云Serverless Kubernetes(ASK)的无服务器架构设计与实践
无服务器架构(Serverless Architecture)在云原生技术中备受关注,开发者只需专注于业务逻辑,无需管理服务器。阿里云Serverless Kubernetes(ASK)是基于Kubernetes的托管服务,提供极致弹性和按需付费能力。本文深入探讨如何使用ASK设计和实现无服务器架构,涵盖事件驱动、自动扩展、无状态设计、监控与日志及成本优化等方面,并通过图片处理服务案例展示具体实践,帮助构建高效可靠的无服务器应用。
|
3天前
|
Cloud Native 安全 Serverless
云原生应用实战:基于阿里云Serverless的API服务开发与部署
随着云计算的发展,Serverless架构日益流行。阿里云函数计算(Function Compute)作为Serverless服务,让开发者无需管理服务器即可运行代码,按需付费,简化开发运维流程。本文从零开始,介绍如何使用阿里云函数计算开发简单的API服务,并探讨其核心优势与最佳实践。通过Python示例,演示创建、部署及优化API的过程,涵盖环境准备、代码实现、性能优化和安全管理等内容,帮助读者快速上手Serverless开发。
|
12天前
|
存储 分布式计算 物联网
美的楼宇科技基于阿里云 EMR Serverless Spark 构建 LakeHouse 湖仓数据平台
美的楼宇科技基于阿里云 EMR Serverless Spark 建设 IoT 数据平台,实现了数据与 AI 技术的有效融合,解决了美的楼宇科技设备数据量庞大且持续增长、数据半结构化、数据价值缺乏深度挖掘的痛点问题。并结合 EMR Serverless StarRocks 搭建了 Lakehouse 平台,最终实现不同场景下整体性能提升50%以上,同时综合成本下降30%。
|
3天前
|
SQL 存储 OLAP
阿里云 EMR Serverless StarRocks3.x,极速统一的湖仓新范式
阿里云 EMR Serverless StarRocks3.x,极速统一的湖仓新范式
|
3天前
|
SQL 分布式计算 Serverless
基于阿里云 EMR Serverless Spark 版快速搭建OSS日志分析应用
基于阿里云 EMR Serverless Spark 版快速搭建OSS日志分析应用
|
2月前
|
人工智能 运维 物联网
云大使 X 函数计算 FC 专属活动上线!享返佣,一键打造 AI 应用
如今,AI 技术已经成为推动业务创新和增长的重要力量。但对于许多企业和开发者来说,如何高效、便捷地部署和管理 AI 应用仍然是一个挑战。阿里云函数计算 FC 以其免运维的特点,大大降低了 AI 应用部署的复杂性。用户无需担心底层资源的管理和运维问题,可以专注于应用的创新和开发,并且用户可以通过一键部署功能,迅速将 AI 大模型部署到云端,实现快速上线和迭代。函数计算目前推出了多种规格的云资源优惠套餐,用户可以根据实际需求灵活选择。
|
20天前
|
机器学习/深度学习 分布式计算 大数据
阿里云 EMR Serverless Spark 在微财机器学习场景下的应用
面对机器学习场景下的训练瓶颈,微财选择基于阿里云 EMR Serverless Spark 建立数据平台。通过 EMR Serverless Spark,微财突破了单机训练使用的数据规模瓶颈,大幅提升了训练效率,解决了存算分离架构下 Shuffle 稳定性和性能困扰,为智能风控等业务提供了强有力的技术支撑。
141 15
|
12天前
|
存储 弹性计算 运维
海量日志接入 Serverless 应用降本70%以上
本文将探讨在日志场景下,使用阿里云Elasticsearch Serverless相较于基于ECS自建Elasticsearch集群的成本与性能优势,展示如何通过Serverless架构实现高达 70%以上的成本节约。
|
2月前
|
存储 人工智能 Serverless
7分钟玩转 AI 应用,函数计算一键部署 AI 生图大模型
人工智能生成图像(AI 生图)的领域中,Stable Diffusion WebUI 以其强大的算法和稳定的输出质量而闻名。它能够快速地从文本描述中生成高质量的图像,为用户提供了一个直观且高效的创作平台。而 ComfyUI 则以其用户友好的界面和高度定制化的选项所受到欢迎。ComfyUI 的灵活性和直观性使得即使是没有技术背景的用户也能轻松上手。本次技术解决方案通过函数计算一键部署热门 AI 生图大模型,凭借其按量付费、卓越弹性、快速交付能力的特点,完美实现低成本,免运维。

热门文章

最新文章