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

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
可观测可视化 Grafana 版,10个用户账号 1个月
可观测监控 Prometheus 版,每月50GB免费额度
简介: Serverless 是以后的趋势,开发者能够有更多的精力去关注业务层。从开始预计迁移到代码的修改以及阿里云函数计算 FC 文档查阅,到迁移成功,花费了大概 3 天的时间,对阿里云函数计算 FC 有了更深层次的认知。

作者:wxf2305


为什么要迁移到阿里云函数计算


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


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


部署到阿里云函数计算 FC,还能减少运行环境搭建的成本。之前的模式需要在 ecs 安装 nginx,然后安装 php,以及安装 php 的驱动程序 redis 等。


看了下阿里云函数计算 FC 官方文档,目前 custom runtime Debian 9 内置 php7.4 并且看了下内置的 php 的扩展整好也支持到了我整好需要的 redis。


不仅省下了买服务器钱!而且还不用安装 php 环境了,更惊喜的是,每个月还有免费的算力额度。


迁移原因总结下:


  • 成本降低了很多;
  • 免去了环境部署;
  • 自动扩容,天生应对高并发。


改造旧项目适配函数计算


代码改动:


虽然说免去了环境部署,但是我之前的代码还是有些不适配的地方,比如之前代码的日志都是存放到服务器的某个目录的。如果迁移到函数计算的话,实例会随时销毁重建,导致日志丢失。


解决办法就是把日志写入到阿里云 oss 上面,或者使用阿里云的日志服务写到那个里面去。


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


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


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


配置 s.yml 使用 Serverless Devs 客户端工具发布到阿里云函数计算 FC,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.jpeg


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.jpeg


caPort: 9000


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


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


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


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


使用客户端工具发布


工具的安装就忽略了不说了,看下官方文档说的很详细:

https://docs.serverless-devs.com/serverless-devs/quick_start


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


3.jpeg


发布成功了。


绑定自己的域名


4.jpeg


把自己的域名 cname 到上图的 “公网 cname”


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


然后 服务名称测试函数  版本都对应选择正确,创建即可。


5.jpeg


部署成功了,哈哈。


谈下自己的感受


Serverless 是以后的趋势,开发者能够有更多的精力去关注业务层。从开始预计迁移到代码的修改以及阿里云函数计算 FC 文档查阅,到迁移成功,花费了大概 3 天的时间,对阿里云函数计算 FC 有了更深层次的认知。


同时也期待迁移过来的项目在下次使用高峰的时候能够稳定运行。我后面也会随时关注阿里云函数计算 FC 的动态,同时感谢阿里云函数计算 FC 团队能做出来这么优秀的产品。


点击此处,查看更多产品内容~

相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
2月前
|
人工智能 自然语言处理 Serverless
阿里云函数计算 x NVIDIA 加速企业 AI 应用落地
阿里云函数计算与 NVIDIA TensorRT/TensorRT-LLM 展开合作,通过结合阿里云的无缝计算体验和 NVIDIA 的高性能推理库,开发者能够以更低的成本、更高的效率完成复杂的 AI 任务,加速技术落地和应用创新。
155 13
|
1月前
|
人工智能 弹性计算 运维
触手可及:阿里云函数计算助力AI大模型的评测
阿里云推出的面向AI服务器的功能计算(Functional Computing, FC),专为AI应用提供弹性计算资源。该服务支持无服务器部署、自动资源管理和多语言支持,极大简化了AI应用的开发和维护。本文全面评测了FC for AI Server的功能特性、使用体验和成本效益,展示了其在高效部署、成本控制和安全性方面的优势,并通过具体应用案例和改进建议,展望了其未来发展方向。
133 4
|
2月前
|
SQL 分布式计算 Serverless
阿里云 EMR Serverless Spark 版正式开启商业化
阿里云 EMR Serverless Spark 版正式开启商业化,内置 Fusion Engine,100% 兼容开源 Spark 编程接口,相比于开源 Spark 性能提升300%;提供 Notebook 及 SQL 开发、调试、发布、调度、监控诊断等一站式数据开发体验!
151 3
阿里云 EMR Serverless Spark 版正式开启商业化
|
2月前
|
人工智能 运维 大数据
阿里云“触手可及,函数计算玩转 AI 大模型”解决方案评测报告
阿里云“触手可及,函数计算玩转 AI 大模型”解决方案评测报告
98 2
|
2月前
|
Cloud Native 关系型数据库 Serverless
基于阿里云函数计算(FC)x 云原生 API 网关构建生产级别 LLM Chat 应用方案最佳实践
本文带大家了解一下如何使用阿里云Serverless计算产品函数计算构建生产级别的LLM Chat应用。该最佳实践会指导大家基于开源WebChat组件LobeChat和阿里云函数计算(FC)构建企业生产级别LLM Chat应用。实现同一个WebChat中既可以支持自定义的Agent,也支持基于Ollama部署的开源模型场景。
426 16
|
3月前
|
机器学习/深度学习 机器人 Serverless
FaaS 的应用场景
FaaS 的应用场景
|
3月前
|
Serverless API 异构计算
函数计算产品使用问题之修改SD模版应用的运行环境
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
3月前
|
运维 Serverless 网络安全
函数计算产品使用问题之通过仓库导入应用时无法配置域名外网访问,该如何排查
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
20天前
|
运维 Serverless 数据处理
Serverless架构通过提供更快的研发交付速度、降低成本、简化运维、优化资源利用、提供自动扩展能力、支持实时数据处理和快速原型开发等优势,为图像处理等计算密集型应用提供了一个高效、灵活且成本效益高的解决方案。
Serverless架构通过提供更快的研发交付速度、降低成本、简化运维、优化资源利用、提供自动扩展能力、支持实时数据处理和快速原型开发等优势,为图像处理等计算密集型应用提供了一个高效、灵活且成本效益高的解决方案。
58 1
|
24天前
|
运维 监控 Serverless
Serverless架构在图像处理等计算密集型应用中展现了显著的优势
Serverless架构在图像处理等计算密集型应用中展现了显著的优势
30 1

相关产品

  • 函数计算
  • 下一篇
    无影云桌面