>本文是从我们的姐妹网站之一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服务很容易可用。 >
这是我们在此方面尝试解决的问题。
不做什么:粘性会话
粘性会话是将用户会话绑定到特定应用程序实例的Elastic Load Balancer服务的功能,因此会话期间来自用户的所有请求都将发送到同一虚拟服务器。会话cookie可以由负载平衡器或应用程序生成,但是:这被认为是不良习惯。理想的选择是将应用程序设计为无状态,但这并非总是可以的。
>将您的会话存储在数据库中
另一个选项是:将我们的会话存储在数据库中。它可能是应用程序或memcache实例或其他NOSQL数据库的外部SQL数据库。在这种情况下,DynamoDB似乎非常有趣,因为它是一个功能强大且快速的NOSQL数据库,它由亚马逊本身管理,并且可以从我们的虚拟服务器中访问。此外,官方PHP SDK的AmazondynamodB类已经有能力注册为会话经理。如果您从未听说过DynamoDB,我建议您观看此介绍性视频。
演示应用程序
我整理了一个简单的应用程序来测试整个机制,您可以从我们的GitHub存储库中下载源代码。我们将使用弹性负载平衡器和至少两个实例运行此应用程序。我们目前将不使用自动化。
<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……我们就可以! 初始化会话存储
输入“ test_sessions”作为表名称,然后选择一个称为“ ID”的字符串主键,键类型必须为“哈希”。如果选择另一个名称,则必须在config.php文件中复制它。对于读取和写入容量单位字段的“ 10”(例如,您的表速度有多快),这足以进行测试。
现在,您有一个NOSQL表,其中每一行具有强制性的ID字段,但是可以具有其他不同类型字符串,数字,字符串设置或数字设置的其他不同字段。 Session Manager对象将使用名为“数据”的字符串字段来存储会话变量和一个名为“到期”的数字字段,以用于会话的到期时间戳。
启动和配置服务器
>
设置负载平衡器
使用数据库和所有实例,我们现在可以设置前端负载平衡器。在EC2导航菜单中,在“网络和安全性”下选择“加载平衡器”,然后单击“创建负载平衡器”按钮。
摘要
仅此而已。我们介绍了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)提供内存内存。
以上是PHP主| Amazon DynamoDB:使用负载平衡器存储PHP会话的详细内容。更多信息请关注PHP中文网其他相关文章!

ThebestapproachforsendingemailsinPHPisusingthePHPMailerlibraryduetoitsreliability,featurerichness,andeaseofuse.PHPMailersupportsSMTP,providesdetailederrorhandling,allowssendingHTMLandplaintextemails,supportsattachments,andenhancessecurity.Foroptimalu

使用依赖注入(DI)的原因是它促进了代码的松耦合、可测试性和可维护性。1)使用构造函数注入依赖,2)避免使用服务定位器,3)利用依赖注入容器管理依赖,4)通过注入依赖提高测试性,5)避免过度注入依赖,6)考虑DI对性能的影响。

phperformancetuningiscialbecapeitenhancesspeedandeffice,whatevitalforwebapplications.1)cachingwithapcureduccureducesdatabaseloadprovesrovesponsemetimes.2)优化

ThebestpracticesforsendingemailssecurelyinPHPinclude:1)UsingsecureconfigurationswithSMTPandSTARTTLSencryption,2)Validatingandsanitizinginputstopreventinjectionattacks,3)EncryptingsensitivedatawithinemailsusingOpenSSL,4)Properlyhandlingemailheaderstoa

TOOPTIMIZEPHPAPPLICITIONSFORPERSTORANCE,USECACHING,数据库imization,opcodecaching和SererverConfiguration.1)InlumentCachingWithApcutCutoredSatfetchTimes.2)优化的atabasesbasesebasesebasesbasesbasesbaysbysbyIndexing,BeallancingAndWriteExing

依赖性注射inphpisadesignpatternthatenhancesFlexibility,可检验性和ManiaginabilybyByByByByByExternalDependencEctenceScoupling.itallowsforloosecoupling,EasiererTestingThroughMocking,andModularDesign,andModularDesign,butquirscarecarefulscarefullsstructoringDovairing voavoidOverOver-Inje

PHP性能优化可以通过以下步骤实现:1)在脚本顶部使用require_once或include_once减少文件加载次数;2)使用预处理语句和批处理减少数据库查询次数;3)配置OPcache进行opcode缓存;4)启用并配置PHP-FPM优化进程管理;5)使用CDN分发静态资源;6)使用Xdebug或Blackfire进行代码性能分析;7)选择高效的数据结构如数组;8)编写模块化代码以优化执行。

opcodecachingsimplovesphperforvesphpermance bycachingCompiledCode,reducingServerLoadAndResponSetimes.1)itstorescompiledphpcodeinmemory,bypassingparsingparsingparsingandcompiling.2)useopcachebachebachebachebachebachebachebysettingparametersinphametersinphp.ini,likeememeryconmorysmorysmeryplement.33)


热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

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

热门文章

热工具

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

WebStorm Mac版
好用的JavaScript开发工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。