为什么我将Laravel应用程序迁移到AWS无服务器(以及为什么我可以节省您的时间和金钱)
>本文探讨了在无服务器上部署Laravel应用程序的好处,与传统的EC2托管对比。 作者分享了他们的经验从资源密集的EC2设置迁移到具有成本效益且可扩展的无服务器体系结构。
>>扰流板:这不仅是要省钱 - 尽管我的钱包并不抱怨。 >
想象一下:您已经构建了一个出色的Laravel应用程序 - 您的杰作,数字瑞士军刀,其功能非常有用,可以切黄油或用户反馈。 但是有一个渔获。每个月,您都需要支付未充分利用的EC2实例。缩放感觉就像在飓风中停放一艘游轮。
听起来很熟悉吗?它对我做了。
>
三年前,我做了大多数开发人员所说的疯狂的事情:我将PHP部署到AWS Lambda。 “ PHP?在无服务器上?这就像把菠萝放在披萨上!”他们说。,但是三年后,我在这里,自豪地吃了我的菠萝披萨。让我告诉你为什么Laravel在无服务器上是您不知道需要的云升级。
>
- 传统的Laravel托管问题
-
> 在无服务器之前,我的Laravel应用程序驻留在EC2上。对于初学者,EC2是亚马逊的虚拟专用服务器的版本,您可以在其中租用一块机器来运行代码。听起来很棒,对吧?直到现实比流氓
。a)首先:存在成本composer update
我知道,
在宏伟的方案中并不多,但是作为独奏开发商/企业家,每一美元都很重要。
b)然后:缩放噩梦
ec2实例就像那个朋友过度反应的朋友。
交通峰值?
“我现在崩溃了,谢谢!” >- 没有流量?
- “我仍然会燃烧你的钱!” 管理自动化感觉就像教鱼做杂耍一样,有可能,但是要花多少钱?手动调整缩放组,配置负载平衡器以及祈祷您不会过分的感觉就像我从未申请过的第二份工作。 > c)和最后:devOps,无薪实习生
-
没有人告诉我Laravel Development具有Sysadmin责任的一面:
- 应用安全补丁。
- >调试nginx/apache配置在上午3点。 >
- 窃窃私语
sudo
命令,希望他们这次能够工作。
我没有注册这一生。
>
这是我开始探索替代方案的时候,无服务器作为这些头痛的完美解决方案。
- aws无服务器:云中PHP的复兴
-
a)lambda:事件驱动的巫师
aws lambda就像一个超级英雄,只有在您需要时出现。它可以响应事件执行您的代码 - HTTP请求,SQS消息,计划的任务,您可以命名。当工作完成后,它的消失速度比开发人员聚会时的免费披萨快。
>- 没有空闲费用
- :您仅支付执行时间(以毫秒为单位)。 >自动缩放魔术
- :得到100,000个请求的峰值吗? lambda在不汗流的情况下处理它(或清空您的银行帐户)。
> > 无状态 - :这就像每次新的开始一样,一种迫使您模块化思考的设计。 b)托管服务:无名英雄
>无服务器不仅是lambda,而且是一个生态系统。 AWS用“正常工作”的托管服务代替您的DIY基础架构
数据库- :SQL Lovers的Aurora Serverless(MySQL/Postgres)之类的选项。
- s3 :存储文件而不担心磁盘空间。
- > sqs :将长期运行的工作解除并异步处理。
- > c)php悖论
。这就像要求鱼爬树一样,它会抱怨,但最终会这样做。传统上依赖PHP-FPM的Laravel需要进行一些调整才能在Lambda的短暂世界中壮成长:
- >会话:将它们移至诸如mysql或redis之类的外部数据库。 >
- 文件存储:使用Laravel的facade将所有存储操作重定向到S3。
Storage
>队列管理 - :将SQS配置为异步任务执行的默认驱动程序。 >缓存
- :利用redis或dynamoDB而不是本地存储等外部服务。
> > 启动时间优化 :最小化冷的开始是通过修剪脂肪(未使用的依赖性)。 - > >>环境变量 :用AWS Secrets Manager或参数存储替换
- 用于集中和安全配置管理的参数存储。
> .env
>
无服务器如何解锁Laravel的全部电势
- >那么,Laravel上的无服务器上是否会兑现其承诺?
- >无服务器不仅是流行语,而且是变革性的变化。 Laravel在无服务器上的美丽在于它能够解决传统托管弱点的能力,同时更快,更可扩展和具有成本效益的解决方案。但是,当您深入研究这些好处的结合时,真正的魔术就会发生。让我们分解吧。
>
a)寒冷开始:将神话与现实分开
当Lambda初始化一个新实例时,
> 现实
:典型的冷始于php laravel大约3-5秒。 solutions:
- >
- laravel octane :在请求之间保持应用程序的活力,以减少启动时间。随后的请求以〜200ms或更少的时间进行处理。
- >配置并发:AWS预热端点的预热实例(额外的费用,但值得关键端点)
- >。
- 对于大多数应用程序,低流量期间的3秒延迟是可以接受的。大多数用户不会注意到寒冷的开始,尤其是在Lambda保持“温暖”的交通尖峰期间。
- b)无痛缩放 在传统托管中进行通常感觉像是一场永无止境的战斗。使用无服务器,缩放变得毫不费力:在突然的交通涌动中,不再需要调整自动化规则或越过手指。 AWS lambda删除了猜测,默认情况下水平缩放。> 这是一个示例:
- 方案:您的应用程序流行了吗?是的!
- >旧的EC2设置:您开始体验延迟,急于登录AWS,手动调整实例数,并为最好的?哦,别忘了在可用区域中正确平衡这些实例。
- 新的lambda设置:AWS自动根据需要创建尽可能多的实例,处理数千个并发请求而无需举起手指。您抓住一些爆米花并观看CloudWatch指标,例如Netflix系列?。
- /月。
4x T3.SMALL EC2实例:
- $ 60.00
- 1x负载平衡器: $ 16.40
- > > 1x EB(EC2实例之间共享存储): $ 7.80
- > 1x rds mysql实例(db.t4g.medium): 〜$ 26.00
〜$ 34 - /月(节省60%!)>。
lambda,API网关〜2.5m请求(〜500ms / 512MB内存) /月:
- $ 4.80
- > >托管服务(S3,SQS,CloudWatch):
- 〜$ 2.90 > rds mysql实例(db.t4g.medium):
- >
〜$ 26.00 - :使用API Gateway和S3之类的服务,管理NGINX配置和自定义部署的复杂性成为过去。 弹性容量 :忘记了未使用的服务器资源的付款或在流量峰值期间争先恐后地提供更多。 lambda自动扩展以满足需求并在闲置时停止计费。
- 专注于功能,而不是消防:我以前花在应用补丁或调试生产问题的时间用于构建功能并改善用户体验。
- >无服务器不仅减少维护,还消除了使您无法编码的操作分散注意力。
- 但是,Laravel对每个人都无服务吗?
-
会话
:使用数据库(mysql/postgres)或redis;没有更多的文件系统依赖。 - 配置:移动变量到AWS Secrets Manager或参数商店,用于集中管理。
- >队列:将作业迁移到AWS SQS以进行可扩展队列和消息处理。
- b)供应商锁定注意事项 > AWS服务是神奇的,但它们也是专有的:
- 是否想从SQS迁移到Redis队列?准备重写代码。
- >想从Lambda搬到Docker?喝咖啡:这将是一个漫长的夜晚。
- 您需要> websockets:虽然可以使用API Gateway Websocket API或第三方工具等服务来实现,但它增加了复杂性。 您的应用程序具有重型计算负载
- :AI/ML推理或视频编码之类的任务可能会达到Lambda的15分钟时间限制。 您依赖于状态服务 :假定持续磁盘或服务器状态的应用程序对重构可能是昂贵的。
-
Serverless上的Laravel有可能改变您的构建和部署应用程序的方式,但是真正的魔术在于实现。准备好飞跃并为您的Laravel应用程序提供无服务器处理吗?请继续关注第2部分,在这里,我将指导您确切的步骤,使这种体系结构栩栩如生。
>
c)成本效率:MVP
>无服务不仅省钱,就像拥有一个您只为消费的东西付费的全罐自助餐。
- 〜$ 110
在这一点上,我仍在使用MySQL实例作为数据库引擎。未来的帖子将探索迁移到DynamoDB以进一步降低成本。
d)维护自由:与操作噩梦说再见
>>无服务器使我摆脱了服务器维护的束缚。以下是:
不再手动更新
:AWS处理安全补丁,操作系统更新和运行时改进,这意味着您始终在安全和最新的基础架构上运行。>
- 简化的配置
>>>>> a)无状态的性质:双刃剑
文件
:将文件重定向到S3,或者完全避免使用S3预先签名的URL。 logs:将laravel配置为将它们流到CloudWatch中。
> c)当不选择无服务器
时>无服务器并不是所有工作负载的银色子弹。如果:
>
下一步是什么?
>
以上是为什么我将Laravel应用程序迁移到AWS无服务器(以及为什么我可以节省您的时间和金钱)的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

JWT是一种基于JSON的开放标准,用于在各方之间安全地传输信息,主要用于身份验证和信息交换。1.JWT由Header、Payload和Signature三部分组成。2.JWT的工作原理包括生成JWT、验证JWT和解析Payload三个步骤。3.在PHP中使用JWT进行身份验证时,可以生成和验证JWT,并在高级用法中包含用户角色和权限信息。4.常见错误包括签名验证失败、令牌过期和Payload过大,调试技巧包括使用调试工具和日志记录。5.性能优化和最佳实践包括使用合适的签名算法、合理设置有效期、

会话劫持可以通过以下步骤实现:1.获取会话ID,2.使用会话ID,3.保持会话活跃。在PHP中防范会话劫持的方法包括:1.使用session_regenerate_id()函数重新生成会话ID,2.通过数据库存储会话数据,3.确保所有会话数据通过HTTPS传输。

PHP8.1中的枚举功能通过定义命名常量增强了代码的清晰度和类型安全性。1)枚举可以是整数、字符串或对象,提高了代码可读性和类型安全性。2)枚举基于类,支持面向对象特性,如遍历和反射。3)枚举可用于比较和赋值,确保类型安全。4)枚举支持添加方法,实现复杂逻辑。5)严格类型检查和错误处理可避免常见错误。6)枚举减少魔法值,提升可维护性,但需注意性能优化。

SOLID原则在PHP开发中的应用包括:1.单一职责原则(SRP):每个类只负责一个功能。2.开闭原则(OCP):通过扩展而非修改实现变化。3.里氏替换原则(LSP):子类可替换基类而不影响程序正确性。4.接口隔离原则(ISP):使用细粒度接口避免依赖不使用的方法。5.依赖倒置原则(DIP):高低层次模块都依赖于抽象,通过依赖注入实现。

在PHPStorm中如何进行CLI模式的调试?在使用PHPStorm进行开发时,有时我们需要在命令行界面(CLI)模式下调试PHP�...

使用PHP的cURL库发送JSON数据在PHP开发中,经常需要与外部API进行交互,其中一种常见的方式是使用cURL库发送POST�...

静态绑定(static::)在PHP中实现晚期静态绑定(LSB),允许在静态上下文中引用调用类而非定义类。1)解析过程在运行时进行,2)在继承关系中向上查找调用类,3)可能带来性能开销。
