>本文是從我們的姐妹網站之一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對性能的影響。

phpperformancetuningiscialbecapeitenhancesspeedandeffice,whatevitalforwebapplications.1)cachingwithapcureduccureducesdatabaseloadprovesrovessetimes.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
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

記事本++7.3.1
好用且免費的程式碼編輯器

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

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!