サーバーをPHP 7に変換した方法

php 7はほぼ1年前にリリースされました。バージョン7.1は既にリリースされており、候補者のリリース段階にあります。 インターネットは好意的なレビューで一杯なので、本番環境で使用するときが来ました。 この記事では、30のプロジェクトを含むバトルサーバーを移動した経験について説明します。



7番目のバージョンは多くの新しい可能性を開きますが、php7の主な革新は、パフォーマンスを向上させ、メモリ消費を削減することだと思います。 内部プロジェクトでは、私たちは長い間試してみました。合成テストだけでなく、生産全体をそれに移すことを決定しました。



サーバーとプロジェクト



本番サーバーは、2.40GHzのクアッドコアXeon X3430プロセッサーと16GBのRAMを搭載したHPのサーバーです。 約30のサイトがサーバー上でホストされており、そのうちの約半分は中規模のオンラインストアであり、1日あたり約1から2千人のユニークビジターのトラフィックを持つ1万から2万の製品を扱っています。 すべてのプロジェクトは、14日から17日までのさまざまなバージョンのyiiフレームワーク1.1で書かれています。すべてがnginx-php-fpmで動作します。



私たちは良い人生からではなく動きを始めました。 サーバーは要求に対処するのが少し面倒で、仕事のピーク時間に、控えめな検索エンジンからのロボットまたは一部の学童からのパーサーが到着し、かなりの量の問題を引き起こしました。



どうだった?



彼らは、一度にすべてを切り替えることはできないと判断しました。1つまたは2つのプロジェクトを翻訳する必要があります。 7つのphp-fpmデーモンの2番目のバージョンを上げました。 移動が計画されたサイトでは、2つ目の別のソケットが作成されました。 次に、nginx構成でソケットが変更されました。 これにより、問題が発生した場合に、1つのservice nginx reloadコマンドでソケットをすばやく元に戻し、サイトを使用可能な状態に戻すことができました。



サーバーに何が起こったのか



x日、被害者が選択されましたが、これは残念ではなく、設定が変更され、プロセスが開始されました。 サイトでは、すぐに移行が感じられました。 ページは400〜500ミリ秒で与えられ始めました。 600〜800ミリ秒の代わりに。 これは、最初の被害者の最初のページが戻ったときの写真です。 9月の初めに注意を払います。



画像






残念ながら、nagiosを使用してメインページのみを監視します。これらは非常に最適化されているため、増加は顕著ですが、最大ではありません。 最大数は、多数の製品がある重いページで表示され、さらに重要ですが、グラフはありません。



2つまたは3つのプロジェクトの翻訳後、サーバー上の全体像が変わり始めました。 その後の各動きは彼をさらに降ろしました。 この写真は、過去4週間のダイナミクスを示しています。



画像






サーバーにとってより簡単になりました。キューの最後のサイトでさえ明らかで、最後の瞬間までphp 5.6で動作しました(9月と10月を見てください)



画像






そして今、私たちは今、そのような状態に達しました、チャート上の10月と11月はコメントを必要としません。



画像






ディスクサブシステムの負荷も低下しています



画像






問題は何でしたか



予想どおり、新しいバージョンでは大きな問題は発生しませんでした(そうでなければ、この動きをマスターできなかったでしょう)



最も重要なのは1つだけでした。 これは、phpを使用すると脚を、次に2番目の脚を、さらには撮影した手を撃つことができるという事実に関連しています。



7つでは、substr関数の動作が変わり、yiiではhttpリクエストを解析する方法の1つが壊れましたが、Alexander Makarovと彼の同僚はそれをかなり前に修正したため、これらのプロジェクトのフレームワークバージョンを更新することですべてが決定されました。



面白いの。 サイトの1つはすぐには開始されず、コード内に2つの入力パラメーターが同じ名前を持つメソッドがあることが判明しました。 5.6は静かにバグがあり、7.0は動作しました。 呪われて倒れた。



まあ、ガウジングなしではありません。 2つのサイトが1つのソケットで動作しました。最初のソケットはソケットの名前を変更し、2番目のサイトは誰も記憶していなかったため、監視されませんでした。その結果、マーケティング担当者が翌日メトリックエラーを見つけて実行するまで一晩中過ごしました。



最後に



経験から、優れたコードは新しいphpバージョンに簡単に移植できます。 これらのプロジェクトの半分で、編集をまったく行わずに5.4から5.6に切り替え、すべてを一度にまとめました。 だから、良いコードを書き、良いフレームワークを使用し、そして最も重要なことには、変更を恐れないでください-それらは常に最高です;)



All Articles