ホームページ  >  記事  >  バックエンド開発  >  PHP 分散デプロイメントの詳細な説明

PHP 分散デプロイメントの詳細な説明

小云云
小云云オリジナル
2018-01-25 14:14:006798ブラウズ

この記事では、PHP 分散デプロイメントについて皆さんに共有し、誰もが PHP 分散デプロイメントについてより明確に理解できるようにしたいと考えています。

通常の Web 開発では、ユーザーがログインした後、ログイン ステータス情報がセッションに保存され、ユーザーがよく使用するホット データの一部がファイル キャッシュに保存され、添付ファイル情報がファイル キャッシュに保存されるのが一般的なモードです。ユーザーは Web サーバー上のディレクトリに保存されます。この方法は非常に使いやすく、一般的な Web アプリケーションに完全に対応します。しかし、同時実行性の高いエンタープライズレベルの Web サイトの場合は、それを処理できません。負荷分散を実現するには、Web クラスターを使用する必要があります。

Webクラスター方式でデプロイした後、最初に調整するのはユーザーのステータス情報と添付ファイル情報です。ユーザー ステータスをセッションに保存できなくなり、キャッシュでローカル Web サーバーのファイル キャッシュを使用できなくなり、添付ファイルを Web サーバーに保存できなくなります。クラスター内の各 Web サーバーのステータスが完全に一貫していることを確認する必要があるためです。そのため、ユーザーステータスやキャッシュなどをMemcacheなどの専用キャッシュサーバーに保存する必要があります。添付ファイルは、Qiniu Cloud Storage、Alibaba Cloud Storage、Tencent Cloud Storage などのクラウド ストレージに保存する必要があります。

この記事では、ThinkPHP 開発フレームワークを例として、セッションやキャッシュなどを設定して Memcache キャッシュ サーバーに保存する方法を説明します。

以下に示すように、キャッシュされた Memcache 処理クラスをダウンロードして ThinkphpExtendDriverCache ディレクトリに配置します。Session Memcache 処理クラスをダウンロードして ThinkphpExtendDriverSession ディレクトリに配置します。

構成を変更するファイルを作成し、セッションとキャッシュを調整し、Memcache サーバーに記録します。 ThinkPHPConfconvention.PHP を開き、構成項目を追加します:




[php]

ビュー プレーンコピー



/* Memcache キャッシュ設定 */


  1. 'MEMCACHE_HOST' =&g ; '192.168.202.20'

  2. 'MEMCACHE_PORT' => 11211,

  3. データ キャッシュを Memcache に変更します:



    [php]ビュー プレーンコピー


    1. 'DATA_CACHE_TYPE' => ’Memcache’,

    セッションを Memcache に変更:





    [php]ビュー 以下の図に示すように、プレーン Copye'SESSION_TYPE'

    = & GT;

    'Memcache'
    1. ,

      種類がたくさんあるので、クラウド ストレージの場合、添付ファイルはクラウド ストレージに保存されるため、詳細については説明しません。各クラウド ストレージが提供する SDK をパラメータ化するだけです。上記の変更を行うと、Web サーバーを分散方式で導入できるようになります。

    添付ファイル1: CacheMemcache.class.php


    [php]
    ビュー 普通のコピー

    1. // +---------------------------- ----------------------------------------

    2. // | ThinkPHP [ WE CAN DO IT JUST THINK IT ]

    3. // +---------------- -------------------------------------------

    4. // | 著作権 (c) 2006-2012 http://thinkphp.cn All rights reserved.

    5. // +-------- -------------------------------------------------- -

    6. // | ライセンス済み ( http://www.apache.org/licenses/LICENSE-2.0 )

    7. // +-------- -------------------------------------------------- -

    8. // | 著者: liu21st

    9. // +-------------------------- ----------------------------------------

    10. 定義('THINK_PATH') or exit();

    11. /**

    12. * Memcache キャッシュドライバー

    13. * @category Extend

    14. * @package Extend

    15. * @subpackage Driver.Cache

    16. * @author liu21st

    17. */

    18. クラス CacheMemcache extends キャッシュ {

    19. * アーキテクチャ関数

    20. * @param array $optionsキャッシュパラメータ

    21. * @access public

    22. */

    23. function __construct($options=array ()) {

    24. if ( !extension_loaded('memcache') ) {

    25. throw_Exception(L('_NOT_SUPPERT_') ).':memcache');  

    26. }

    27. $options = array_merge(array (

    28. 'ホスト' => C('MEMCACHE_HOST') ? C('MEMCACHE_HOST') : '127.0.0.1',

    29. 'ポート' =>  C('MEMCACHE_PORT') ? C('MEMCACHE_PORT') : 11211,

    30. 'タイムアウト' =>  C('DATA_CACHE_TIMEOUT') ? C('DATA_CACHE_TIMEOUT') : false,

    31. 'persistent' =>  false、

    32. )、$options);  

    33. $this->オプション = $オプション;  

    34. $this->options['expire'] = isset($options['expire'])?  $options['expire'] : C('DATA_CACHE_TIME');  

    35. $this->options['prefix'] = isset($options['prefix' ])?  $options['プレフィックス'] : C('DATA_CACHE_PREFIX');          

    36. $this->options['length'] = isset($options['length'])?  $オプション['長さ'] : 0;          

    37. $func = $options['永続的'] ? '接続' : '接続';  

    38. $this->ハンドラー = 新しい Memcache;  

    39. $options['タイムアウト'] === false ?  

    40. $options['ポート']): 'ホスト']、 $options['ポート'

      ]、
    41. $オプション

      ['タイムアウト']); * @param string $name キャッシュ変数名

    42. 関数
    43. get($name ) {

    44. N('cache_read',1); return

    45. $this
    46. ->handler->get($this->options['prefix'

    47. ].
    48. $name); / ** @param mixed $value ストレージ データ

    49. */

    50. 関数
    51. set($name,

    52. $value
    53. , $expire = null) { N('cache_write'

    54. ,1) ;
    55. オプション[

      '期限切れ']; }

    56. $name $this->ハンドラー->set($name, $value, 0,

      $expire
    57. )) { ️ (

      $this->オプション['長さ']>0) {

      -> ;キュー(
    58. $name

      ); return true;

    59. }

    60. return false;  

    61. }

    62. /**

    63. * @param string $name キャッシュ変数名

    64. * @ return boolen

    65. */

    66. 公開

    67. 関数 rm( $name,

    68. $ttl
    69. = false) { $name = $this ->オプション['接頭語'].

    70. $名前
    71. ;  

    72. return $ttl === false ?  

    73. $this->ハンドラー->削除($name) :

    74. $this->ハンドラー- >削除($name, $ttl);  

    75. }

    76. /**

    77. * @return boolen

    78. */

    79. public

    80. function clear() {

    81. return $this->handler->flush();  

    82. }

    83. }

    添付ファイル2:SessionMemcache.class.php




    [php] ビュー plain copy


    1. // +------------- ----------------------------------------

    2. // | 

    3. // +------------------------------------- ---------------------------------

    4. // | Copyright (c) 2013-

    5. // +---------------------------- ---------------------------------------

    6. / / | ライセンス済み ( http://www.apache.org/licenses/LICENSE-2.0 )

    7. // +------------------------------------------ --- ----------------------------

    8. // 著者: richievoe

    9. // +-------------------------------- --- ----------------------------------

    10. /**

    11. * セッションを保存するために Memcache をカスタマイズします

    12. */

    13. クラス SessionMemcache{
    14. //memcache オブジェクト

    15. プライベート

      $mem;

      //セッション有効時間
    16. private
    17. $expire; //外部から呼び出される関数

    18. public function execute(){

    19. session_set_save_handler(

    20. array(&$this,'open' )、

    21. 配列(&$this,'close')、

    22. 配列(&$this : )、

    23. '); 関数open($path,$name

    24. ){
    25. 'SESSION_EXPIRE') ? C( 「SESSION_EXPIRE」) : ini_get

    26. (
    27. 'session.gc_maxlifetime'

      );
    28. これ $this->mem->connect(C( 'MEMCACHE_HOST'

    29. ), C(
    30. 'MEMCACHE_PORT')); /memcache サーバーを閉じる public

      function
    31. close(){

    32. }
    33. //データの読み取り
    34. public

    35. function
    36. read($id ){

    37. $ ID c = c ('SESSION_PREFIX') . $ ID

    38. $ data
    39. = $ This - & GT メム; ->get($id);

      :
    40. ''

      } //データを保存

    41. public

      function
    42. write(

      $id,$data

      ) {
    43. $ ID c = c ('SESSION_PREFIX') . $ ID

    44. // $ data = addlashes ($ data);
    45. ️ Return

      $this
    46. ->mem->set(

      $id,$data,0, $this->期限切れ); }

    47. public

      関数
    48. destroy(

      $id){

    49. $id = C( 'SESSION_PREFIX').$id;️ Return

    50. $this->mem-> delete($id); }

    51. / /ゴミ破壊

    52. public

      function
    53. gc(){

      return 本当です

    54. } ) PHP分散トレーシングに関する経験の共有

    55. PHP分散と大量のデータ処理に関連する問題

    56. php分散アーキテクチャ

以上がPHP 分散デプロイメントの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。