什么叫 Serverless ?
Serverless 中文的含义是 "无服务器",但是它真正的含义是开发者再也不用过多考虑服务器的问题,但是并不代表完全去除服务器,而是我们依靠第三方资源服务器后端,比如使用 Amazon Web Services(AWS) Lambda. 计算服务来执行代码。在 Laravel 中我们可以使用 Vapor 这种集成工具去在项目中使用 Serverless 服务。
Serverless 的适用场景
类似于中控智慧这种公司,他们的主要业务在海外,他们可能一年内可能将业务拓展到10多个国家,以前的做法是买 10多个 Aws 服务器,然后分别将代码分别部署到这些不同的服务器上面。
这里面就存在几个问题
-
管理问题
10 多个服务器的 ssh 账号密码难以管理,你登陆 A 服务器你需要像张三要登陆账号密码,登陆 B 服务器需要向李四要账号密码。不方便管理,特别麻烦。
-
成本问题
随着业务量越来越大,海外拓展了 50 个国家的业务,这时候你需要购买 50 台 Aws 的服务器,其中有些小国家可能一年访问量都没多少,但是服务器不会因为使用少而不收取你的费用。同时在服务器太多的时候你可能还需要聘请一个专业的运维人员去管理你的服务器。
-
安全问题
可能面临 Ddos 攻击,或者框架自带漏洞被攻击,或者因为程序员的疏忽导致漏洞被攻击,常见的就是代码文件被篡改,跳到赌博网站之内,这种事情对公司还是有蛮大影响的。
用 Serverless 去解决这些问题
我这边使用的是 Laravel-vapor 去管理的我的项目。
-
如何解决管理问题
借助 Laravel-vapor 我们可以在一个面板管理部署在多个国家的项目。我们不再需要买很多台服务器,只需要一个 Laravel-vapor 账号即可。
-
成本问题
Serverless 是按请求次数去收取的费用,这是 AWS 官方给出的定价,AWS Lambda 包含每月 1M 次免费请求以及每月 400000GB-秒的计算时间。下面是一张香港地区价格参考。
-
关于 Serverless 安全问题
Serverless 的架构,黑客是无法进行持久化操作,也就是无法篡改我们的任何文件,同时我们也无需担心服务器宕机这些我们以前需要操心的问题,这些 Aws 这些供应商帮我解决,我们只关注业务层面即可。 我目前不清楚面对 Ddos 攻击的时候,Aws 供应商是否会对请求进行限流。我这边是自己设置每秒最大并发数量去达到这一效果。
需要注意的地方
我目前已经部署一个 Demo 到 Aws Serverless,这个代码里面涉及了队列,定时任务,以及文件上传等我们在 Web 项目中常见的场景。
代码地址
在 Serverless 上传图片
在 Serverless 定时任务跑队列自动写文章
线上预览 账号:admin 密码: admin
我遇到过的问题
-
我使用的 Demo 是 Dcat-admin, Laravel-vapor 在部署的时候会自动把 public 目录的静态资源文件上传到 Aws S3,但是当 public 的资源文件大于 300 个的时候会上传失败。导致部署不成功。这时候我们应该手动上传,如下:
这里说句题外话,Laravel-vapor 部署自动上传的时候,还自动给我们加了 cloudfront 服务,我以前写过一篇关于这玩意的文章 如何使用 AWS 的 CloudFront 服务助力企业网站海外访问加速,有兴趣的可以看看。
-
Laravel-vapor 帮我们做了很多自动化处理,比如上传默认 s3,队列什么的都给你默认好了,开始的时候你可能一头雾水。我这边有个自己的方法可以方便了解他默认的一些配置。
先登录到 Aws 主界面输入:
点击箭头所示:
这里可以看到项目环境变量,有些是自带的在这里一目了然。
Mehdi Ahmadi 10个月前
hello how are you
Mehdi Ahmadi 10个月前
my name is mehdi