目录
钥匙要点
不做什么:粘性会话
>将您的会话存储在数据库中
演示应用程序
启动和配置服务器
设置负载平衡器
摘要
>将Amazon DynamoDB用于PHP会话有什么好处?用于PHP会议。它通过无缝可扩展性提供快速可预测的性能。您可以向上或向下缩放桌子以调整流量,而无需任何停机时间或绩效降低。 DynamoDB还提供内置的安全性,备份和还原,以及用于Internet级应用程序的内存中心。对于PHP,使开发人员更容易构建利用具有成本效益,可扩展和可靠的AWS云的应用程序。 SDK中包含的是AWS PHP库和代码示例,这些样本显示了如何使用AWS SDK用于PHP来利用AWS Services提供的所有功能,例如Amazon S3,Amazon EC2和DynamoDB。是否有具有PHP代码示例的常见DynamoDB?
>在哪里可以找到亚马逊商店的PHP脚本?这些脚本允许您将Amazon的服务集成到PHP应用程序中,提供诸如产品搜索和显示,购物车管理以及订单处理之类的功能。
>在使用DynamoDB和PHP工作时,如何处理具有PHP的错误和异常,您可以处理错误和异常。使用Try-Catch块。当操作失败时,用于PHP的AWS SDK引发异常,您可以捕获这些异常以适合您的应用程序的方式处理它们。
首页 后端开发 php教程 PHP主| Amazon DynamoDB:使用负载平衡器存储PHP会话

PHP主| Amazon DynamoDB:使用负载平衡器存储PHP会话

Feb 25, 2025 am 10:05 AM

PHP主| Amazon DynamoDB:使用负载平衡器存储PHP会话

>本文是从我们的姐妹网站之一CloudSpring共享的。如果您觉得很有帮助,请务必给他们访问!

本教程将向您展示如何使用Amazon DynamoDB作为PHP会话的存储设施。当您的应用程序利用弹性负载平衡和自动化服务时,此方法变得非常有用。您将需要启用Amazon AWS帐户使用EC2,Elastic Load Balancer和DynamoDB作为沿教程播放的先决条件。

钥匙要点

  • > Amazon DynamoDB可以用作PHP会话的存储设施,当应用程序利用弹性负载平衡和自动升级服务时,这特别有用。
  • >
  • >弹性负载平衡器充当一个或多个虚拟服务器的前端,其中分发了请求。自动化允许系统启动更多的Web服务器克隆,当流量降低时关闭一些。 PHP会话数据应存储在虚拟服务器之外。一个选项是将会话存储在诸如DynamoDB之类的数据库中,该数据库是由Amazon管理的功能强大且快速的NOSQL数据库。
  • >官方PHP SDK的AmazondynamodB类可注册为会话经理。用于PHP的AWS SDK使开发人员更容易构建利用具有成本效益,可扩展和可靠的AWS Cloud的应用程序。
  • 什么是弹性负载平衡器
  • 弹性负载平衡器充当一个或许多虚拟服务器的前端。它接受请求并将其分发在虚拟服务器中。可以通过克隆机器模板(AMI)来创建虚拟服务器,也可以在需要时被破坏。处理能力如果您的应用程序可以通过动态添加或减少虚拟服务器来改变您的应用程序。
和自动化?

自动加入游戏时,系统还可以:

启动更多的Web服务器克隆,当 当流量下降到预定义的阈值以下时,关闭其中的一些

>终止不健康的实例,并在需要时替换
  • 我该怎么做?
  • > 您的任何应用程序都可以在这种环境中工作吗?是的,如果满足两个关键要求:
  • >由于动态创建虚拟服务器,因此服务器应仅包含应用程序代码而不包含任何数据。 DB服务很容易可用。
  • >
任何用户会话状态都应在虚拟服务器之外持续存在。这有点棘手,因为默认情况下,PHP模块将这些数据存储到Che Web服务器的文件系统中。

这是我们在此方面尝试解决的问题。

不做什么:粘性会话

粘性会话是将用户会话绑定到特定应用程序实例的Elastic Load Balancer服务的功能,因此会话期间来自用户的所有请求都将发送到同一虚拟服务器。会话cookie可以由负载平衡器或应用程序生成,但是:这被认为是不良习惯。理想的选择是将应用程序设计为无状态,但这并非总是可以的。

>将您的会话存储在数据库中

另一个选项是:将我们的会话存储在数据库中。它可能是应用程序或memcache实例或其他NOSQL数据库的外部SQL数据库。在这种情况下,DynamoDB似乎非常有趣,因为它是一个功能强大且快速的NOSQL数据库,它由亚马逊本身管理,并且可以从我们的虚拟服务器中访问。此外,官方PHP SDK的AmazondynamodB类已经有能力注册为会话经理。如果您从未听说过DynamoDB,我建议您观看此介绍性视频。

演示应用程序

我整理了一个简单的应用程序来测试整个机制,您可以从我们的GitHub存储库中下载源代码。我们将使用弹性负载平衡器和至少两个实例运行此应用程序。我们目前将不使用自动化。

PHP主| Amazon DynamoDB:使用负载平衡器存储PHP会话

该应用程序要求用户选择存储在当前会话中并充当“登录”的用户名。如果会话中存在用户名,则应用程序允许用户插入一种“配置文件”,本质上是一系列的密钥/值信息,例如名称,姓氏,电子邮件等(键和值是字符串)。所有这些逻辑都包含在index.php文件中。

PHP主| Amazon DynamoDB:使用负载平衡器存储PHP会话

session.php 文件包含一个简单的会话库。该库允许我们使用友好方法管理会话数据,例如$ session-> read('some_var')和$ session-> write('some_key','some_value')。可以将此会话对象配置为使用默认的PHP会话机制(如果我们是本地测试服务器)或自定义类。应用程序文件的第一步是会话启动:
<span>require_once 'lib/session.php';
</span><span>try {
</span> <span>// Engine can be PHP or AmazonDynamoDB
</span> <span>$session = new Session($config['session']['engine'], $config['session']['params']);
</span><span>} catch (Exception $e) {
</span> <span>exit($e->getMessage());
</span><span>} // end try</span>
登录后复制
默认的引擎值是不需要参数的PHP。如果我们选择“ Amazondynamodb”引擎,则会话构造函数将执行一些其他代码:
<span>switch ($engine) {
</span><span>case 'AmazonDynamoDB':
</span><span>// Load AWS SDK
</span><span>require_once 'AWSSDKforPHP/sdk.class.php';
</span><span>// Create a list of credential sets that can be used with the SDK.
</span><span>CFCredentials<span>::</span>set($params['credentials']);
</span><span>// Instantiate a DynamoDB client
</span><span>$dynamodb = new AmazonDynamoDB();
</span><span>$dynamodb->set_region($params['region']);
</span><span>// Instantiate, configure, and register the session handler
</span><span>$this->handler = $dynamodb->register_session_handler(array(
</span><span>'table_name'       => $params['table_name'],
</span><span>'lifetime'         => $params['lifetime'],
</span><span>));
</span><span>break;</span>
登录后复制
首先,我们加载了必须已经安装并可以触及的AWS SDK,然后将我们的凭据加载到AWS环境中。从这一点上开始,我们可以使用AWS类,因此创建了AmazondynamodB的新实例,并使用我们的表所在的正确区域进行设置。最后,我们告诉我们的DynamoDB对象将自己注册为会话经理,传递了使用表的名称,这实际上就是我们所需要的。 config.php文件是我们要在此处使用要使用的引擎的应用程序,在此处保存了AWS凭据和DynamoDB设置。在index.php中,我还提供了一个小实用程序功能,如果我们不在本地服务器中,请获取当前正在运行的实例的名称。这对于检查会话是否在我们的服务器中保持一致很有用。
<span>function getServerName() {
</span> <span>$host = $_SERVER['SERVER_NAME'];
</span> <span>if ('localhost' != $host) {
</span> <span>// Maybe we are on EC2, trying to catch the current instance ID
</span> <span>$ch = curl_init('http://169.254.169.254/latest/meta-data/instance-id');
</span> <span>curl_setopt($ch, CURLOPT_FAILONERROR, true);
</span> <span>curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
</span> <span>curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
</span> <span>if ($ret = curl_exec($ch)) {
</span> <span>$host .= ' (instance ' . $ret . ')';
</span> <span>} // end if
</span> <span>curl_close($ch);
</span> <span>} // end if
</span> <span>return $host;
</span><span>} // end function</span>
登录后复制
函数getServername()使用EC2元数据API查找实例的名称。 在车队上运行应用程序 为了测试此应用程序,我们需要在负载平衡器后面至少有两个Web服务器的机队。我使用的服务器是配备以下设备的Ubuntu GNU/Linux实例:
  • apache Web服务器,
  • php 5.3(命令行和apache模块),
  • >
  • 卷曲程序和PHP扩展,
  • 梨包装管理器(需要轻松安装SDK)
  • php的AWS SDK(我建议通过梨安装)。
  • 如果您知道如何构建AMI,则可以从头开始构建自己的AMI。但是您也可以使用我准备并公开的一种:AMI-4B42443F。该计算机已经包含应用程序和所有其他依赖项的PHP源代码。一旦您准备好AMI……我们就可以!
  • 初始化会话存储
转到您的AWS控制台,选择DynamoDB服务和您最喜欢的地区(我的是欧盟西部 - 爱尔兰)。单击“创建表”按钮。

输入“ test_sessions”作为表名称,然后选择一个称为“ ID”的字符串主键,键类型必须为“哈希”。如果选择另一个名称,则必须在config.php文件中复制它。对于读取和写入容量单位字段的“ 10”(例如,您的表速度有多快),这足以进行测试。 PHP主| Amazon DynamoDB:使用负载平衡器存储PHP会话

现在,您有一个NOSQL表,其中每一行具有强制性的ID字段,但是可以具有其他不同类型字符串,数字,字符串设置或数字设置的其他不同字段。 Session Manager对象将使用名为“数据”的字符串字段来存储会话变量和一个名为“到期”的数字字段,以用于会话的到期时间戳。

启动和配置服务器

>

PHP主| Amazon DynamoDB:使用负载平衡器存储PHP会话

现在,选择DynamoDB表的EC2服务以及您选择的同一区域。单击仪表板或“实例”部分的“启动实例”按钮。选择您的自定义AMI或使用经典向导,转到“社区AMIS”标签,然后输入“ AMI – 4B42443F”。 在下一个屏幕中,至少在实例数中输入“ 2”,然后选择您的实例类型,我选择了Micro(T1.Micro)。您可以在“可用性区”下拉列表中留下“不偏爱”,但是在生产环境中,如果各种实例分布在同一区域内的两个或多个区域之间,那就更好了。接受“实例详细信息”和“存储设备”配置面板的默认设置,然后继续。如果需要,输入一个或多个可选标签。选择按键或创建新的 并选择一个安全组,该组至少允许在端口80上的HTTP和端口22上的SSH。

PHP主| Amazon DynamoDB:使用负载平衡器存储PHP会话

查看您的设置,然后启动实例。当实例状态“运行”时,它们可以通过SSH进行配置。每个实例都有一个公共DNS名称,类似于ec2-xxx-xxx-xx-xx.region.compute.amazonaws.com。您需要在创建的每个实例上编辑config.php文件。使用您的公共密钥和用户名“ ubuntu”连接到实例或与SFTP客户端连接(如果您使用了我的公共AMI): $ ssh -i/path/to/key.pem ubuntu@ec2-x-x-x-x-x-x.region.compute.amazonaws.com 将当前目录更改为 /var /www在测试应用程序所在的位置。编辑config.php文件插入您的AWS密钥和秘密。然后检查您的DynamoDB表设置是否匹配,您肯定必须用本参考中可以找到的适当值编辑区域。 然后创建一个称为ping.html内部 /var /www的空文件:加载平衡器将使用此文件来测试每个实例的可及性。

设置负载平衡器

使用数据库和所有实例,我们现在可以设置前端负载平衡器。在EC2导航菜单中,在“网络和安全性”下选择“加载平衡器”,然后单击“创建负载平衡器”按钮。

PHP主| Amazon DynamoDB:使用负载平衡器存储PHP会话

选择负载平衡器的名称,并验证侦听器配置是否匹配屏幕截图的名称,该配置基本上说:将负载均衡器端口80上的所有HTTP流量转发到端口80实例上的HTTP。

PHP主| Amazon DynamoDB:使用负载平衡器存储PHP会话

在ping路径字段中的“健康检查”面板中,Enter /ing.html,并将其他设置留为默认设置。这意味着:每30秒调用每个实例的 /atping.html资源,如果响应时间更长,则该检查失败了5秒,如果实例连续两次保健检查失败,则该检查是否不健康,如果连续10个连续检查,则实例为实例。健康。负载平衡器不会将流量转发到不健康的实例,如果AutoScale到位,则可以将不健康的实例终止并由新的新鲜终止。

PHP主| Amazon DynamoDB:使用负载平衡器存储PHP会话

下一个屏幕使您可以选择可以将哪些当前运行实例添加到负载平衡器中。选择先前创建的两个实例并继续进行。查看最终配置,并确认是否可以。现在,您应该能够看到负载平衡器的详细信息和所有连接实例的状态。

PHP主| Amazon DynamoDB:使用负载平衡器存储PHP会话

您可以通过将LOAD BALANCER的DNS名称(类似于您的名称-12345678.Region.elb.amazonaws.com)放入浏览器来测试应用程序。您还可以通过在DNS面板中添加一个指向负载平衡器URL的cname来配置域或子域(例如dynamo.yourdomain.com)。不建议将IP与A记录一起使用,因为IP可以随着时间的推移而改变。

PHP主| Amazon DynamoDB:使用负载平衡器存储PHP会话

每次您提交表单或刷新您请求的页面都可以通过其他实例处理。您可以通过通过GetServername()实用程序显示的名称来检查哪个实例为您服务。

摘要

仅此而已。我们介绍了AWS生态系统中的一个重要主题,但这仅仅是开始。例如,所有这些内容都是完全可以编程的:您可以添加自动升级并设计实例以自我配置,并从可信赖的地方下载AWS凭据和其他数据。或者,您可以使用云形成为整个基础架构创建可重复使用的模板。 检查的起点是AWS主页。现在,如果您完成的测试,请不要忘记终止所有内容,即使不开心的编码! 通过fotolia 图像 Amazon DynamoDB和PHP会话上的常见问题(FAQ)

>

>如何使用Amazon DynamoDB和PHP会话实现负载平衡?

负载平衡是管理服务器负载和确保最佳性能的关键方面。使用Amazon DynamoDB和PHP会话,您可以使用Amazon的弹性负载平衡(ELB)服务来实现这一目标。 ELB会自动跨多个目标(例如Amazon EC2实例,容器和IP地址)分发传入的应用程序流量。它可以处理单个可用性区域或多个可用性区域中的应用程序流量的不同负载。

>

>将Amazon DynamoDB用于PHP会话有什么好处?用于PHP会议。它通过无缝可扩展性提供快速可预测的性能。您可以向上或向下缩放桌子以调整流量,而无需任何停机时间或绩效降低。 DynamoDB还提供内置的安全性,备份和还原,以及用于Internet级应用程序的内存中心。对于PHP,使开发人员更容易构建利用具有成本效益,可扩展和可靠的AWS云的应用程序。 SDK中包含的是AWS PHP库和代码示例,这些样本显示了如何使用AWS SDK用于PHP来利用AWS Services提供的所有功能,例如Amazon S3,Amazon EC2和DynamoDB。是否有具有PHP代码示例的常见DynamoDB?

有几个常见的代码示例用于使用PHP的DynamoDB。其中包括创建表格,将项目写入表格,从表中读取项目,更新表中的项目以及从表中删除项目。这些操作中的每一个都可以使用AWS SDK进行php。

>在哪里可以找到亚马逊商店的PHP脚本?这些脚本允许您将Amazon的服务集成到PHP应用程序中,提供诸如产品搜索和显示,购物车管理以及订单处理之类的功能。

>

>是否有适用于具有PHP的DynamoDB的完整示例?是的,有完整的示例用于将DynamoDB与PHP一起使用。这些示例通常包括用于创建表格,将项目写入表格,从表中读取项目,更新表中的项目以及从表中删除项目的代码。它们通常还包括如何处理错误和异常的示例。

>在使用DynamoDB和PHP工作时,如何处理具有PHP的错误和异常,您可以处理错误和异常。使用Try-Catch块。当操作失败时,用于PHP的AWS SDK引发异常,您可以捕获这些异常以适合您的应用程序的方式处理它们。

>

>如何使用DynamoDB和PHP?有几种方法可以通过DynamoDB和PHP优化性能。其中包括使用配置的吞吐量来管理容量,使用全局辅助索引加快查询,并使用DynamoDB加速器(DAX)提供内存内存。

>如何将数据固定在dynamodb中? DynamoDB提供了几个安全功能来保护您的数据。其中包括在静止处进行加密,该加密可确保您的数据免受对基础存储的未经授权访问的访问,以及在运输中加密,该数据在数据之间在应用程序和DynamoDB之间进行保护时,可以保护您的数据,从而保护您的数据。 DynamoDB?

dynamoDB为数据备份和还原提供了内置支持。您可以随时创建按需备份,并在需要时从这些备份中恢复表数据。这使您可以保护数据免受意外删除或修改,并使应用程序即使在失败时保持顺利运行。

以上是PHP主| Amazon DynamoDB:使用负载平衡器存储PHP会话的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

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

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1653
14
CakePHP 教程
1413
52
Laravel 教程
1304
25
PHP教程
1251
29
C# 教程
1224
24
在PHP API中说明JSON Web令牌(JWT)及其用例。 在PHP API中说明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

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

PHP 8.1中的枚举(枚举)是什么? PHP 8.1中的枚举(枚举)是什么? Apr 03, 2025 am 12:05 AM

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

描述扎实的原则及其如何应用于PHP的开发。 描述扎实的原则及其如何应用于PHP的开发。 Apr 03, 2025 am 12:04 AM

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

会话如何劫持工作,如何在PHP中减轻它? 会话如何劫持工作,如何在PHP中减轻它? Apr 06, 2025 am 12:02 AM

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

解释PHP中的晚期静态绑定(静态::)。 解释PHP中的晚期静态绑定(静态::)。 Apr 03, 2025 am 12:04 AM

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

什么是REST API设计原理? 什么是REST API设计原理? Apr 04, 2025 am 12:01 AM

RESTAPI设计原则包括资源定义、URI设计、HTTP方法使用、状态码使用、版本控制和HATEOAS。1.资源应使用名词表示并保持层次结构。2.HTTP方法应符合其语义,如GET用于获取资源。3.状态码应正确使用,如404表示资源不存在。4.版本控制可通过URI或头部实现。5.HATEOAS通过响应中的链接引导客户端操作。

您如何在PHP中有效处理异常(尝试,捕捉,最后,投掷)? 您如何在PHP中有效处理异常(尝试,捕捉,最后,投掷)? Apr 05, 2025 am 12:03 AM

在PHP中,异常处理通过try,catch,finally,和throw关键字实现。1)try块包围可能抛出异常的代码;2)catch块处理异常;3)finally块确保代码始终执行;4)throw用于手动抛出异常。这些机制帮助提升代码的健壮性和可维护性。

PHP中的匿名类是什么?您何时可以使用它们? PHP中的匿名类是什么?您何时可以使用它们? Apr 04, 2025 am 12:02 AM

匿名类在PHP中的主要作用是创建一次性使用的对象。1.匿名类允许在代码中直接定义没有名字的类,适用于临时需求。2.它们可以继承类或实现接口,增加灵活性。3.使用时需注意性能和代码可读性,避免重复定义相同的匿名类。

See all articles