目录
钥匙要点
不做什么:粘性会话
>将您的会话存储在数据库中
演示应用程序
启动和配置服务器
设置负载平衡器
摘要
>将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

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

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++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教程
1664
14
CakePHP 教程
1423
52
Laravel 教程
1318
25
PHP教程
1268
29
C# 教程
1248
24
PHP和Python:比较两种流行的编程语言 PHP和Python:比较两种流行的编程语言 Apr 14, 2025 am 12:13 AM

PHP和Python各有优势,选择依据项目需求。1.PHP适合web开发,尤其快速开发和维护网站。2.Python适用于数据科学、机器学习和人工智能,语法简洁,适合初学者。

说明PHP中的安全密码散列(例如,password_hash,password_verify)。为什么不使用MD5或SHA1? 说明PHP中的安全密码散列(例如,password_hash,password_verify)。为什么不使用MD5或SHA1? Apr 17, 2025 am 12:06 AM

在PHP中,应使用password_hash和password_verify函数实现安全的密码哈希处理,不应使用MD5或SHA1。1)password_hash生成包含盐值的哈希,增强安全性。2)password_verify验证密码,通过比较哈希值确保安全。3)MD5和SHA1易受攻击且缺乏盐值,不适合现代密码安全。

PHP行动:现实世界中的示例和应用程序 PHP行动:现实世界中的示例和应用程序 Apr 14, 2025 am 12:19 AM

PHP在电子商务、内容管理系统和API开发中广泛应用。1)电子商务:用于购物车功能和支付处理。2)内容管理系统:用于动态内容生成和用户管理。3)API开发:用于RESTfulAPI开发和API安全性。通过性能优化和最佳实践,PHP应用的效率和可维护性得以提升。

PHP:网络开发的关键语言 PHP:网络开发的关键语言 Apr 13, 2025 am 12:08 AM

PHP是一种广泛应用于服务器端的脚本语言,特别适合web开发。1.PHP可以嵌入HTML,处理HTTP请求和响应,支持多种数据库。2.PHP用于生成动态网页内容,处理表单数据,访问数据库等,具有强大的社区支持和开源资源。3.PHP是解释型语言,执行过程包括词法分析、语法分析、编译和执行。4.PHP可以与MySQL结合用于用户注册系统等高级应用。5.调试PHP时,可使用error_reporting()和var_dump()等函数。6.优化PHP代码可通过缓存机制、优化数据库查询和使用内置函数。7

PHP的持久相关性:它还活着吗? PHP的持久相关性:它还活着吗? Apr 14, 2025 am 12:12 AM

PHP仍然具有活力,其在现代编程领域中依然占据重要地位。1)PHP的简单易学和强大社区支持使其在Web开发中广泛应用;2)其灵活性和稳定性使其在处理Web表单、数据库操作和文件处理等方面表现出色;3)PHP不断进化和优化,适用于初学者和经验丰富的开发者。

PHP类型提示如何起作用,包括标量类型,返回类型,联合类型和无效类型? PHP类型提示如何起作用,包括标量类型,返回类型,联合类型和无效类型? Apr 17, 2025 am 12:25 AM

PHP类型提示提升代码质量和可读性。1)标量类型提示:自PHP7.0起,允许在函数参数中指定基本数据类型,如int、float等。2)返回类型提示:确保函数返回值类型的一致性。3)联合类型提示:自PHP8.0起,允许在函数参数或返回值中指定多个类型。4)可空类型提示:允许包含null值,处理可能返回空值的函数。

PHP和Python:代码示例和比较 PHP和Python:代码示例和比较 Apr 15, 2025 am 12:07 AM

PHP和Python各有优劣,选择取决于项目需求和个人偏好。1.PHP适合快速开发和维护大型Web应用。2.Python在数据科学和机器学习领域占据主导地位。

PHP与Python:了解差异 PHP与Python:了解差异 Apr 11, 2025 am 12:15 AM

PHP和Python各有优势,选择应基于项目需求。1.PHP适合web开发,语法简单,执行效率高。2.Python适用于数据科学和机器学习,语法简洁,库丰富。

See all articles