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

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

云原生

+关注

相关产品

  • 函数计算
  • AI助理

    你好,我是AI助理

    可以解答问题、推荐解决方案等