原文链接:https://developer.aliyun.com/article/982746
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.0name: compoent-testaccess: '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
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'
caPort: 9000
监听端口9000肯定要和启动脚本start.sh外面的一样
#!/usr/bin/env bashcd /code/tp5/publicphp -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天的工夫,对阿里云函数计算有了更深层次的认知,同时也期待迁徙过去的我的项目在下次应用顶峰的时候可能稳固运行。我前面也会随时关注阿里云函数计算的动静,同时感激阿里云函数计算团队能做进去这么优良的产品。
更多内容关注 Serverless 微信公众号(ID:serverlessdevs),会集 Serverless 技术最全内容,定期举办 Serverless 流动、直播,用户最佳实际。