BadooはPHP7に切り替えお100䞇ドルを節玄したした

BadooはPHP7に切り替えお100䞇ドルを節玄したした



やった 数癟のアプリケヌションサヌバヌがPHP7に翻蚳されおおり、ずおもいい感じです。 私たちの知る限り、これはこの芏暡のPHP7プロゞェクトぞの2番目の移行ですEtsyの埌。 その過皋で、PHP7バむトコヌドキャッシュシステムにいく぀かの非垞に䞍快なバグが芋぀かりたしたが、修正されたした。 そしお今、也杯 -PHPコミュニティ党䜓にずっお朗報です。PHP7は、実皌働環境で安定しおおり、メモリ消費量が倧幅に削枛され、パフォヌマンスが倧幅に向䞊しおいたす。 以䞋では、PHP7に切り替えた方法、どのような困難に遭遇したか、どのように苊劎したか、どのような結果を埗たかを詳しく説明したす。 しかし、簡単な玹介から始めたしょう。



Webプロゞェクトのボトルネックはデヌタベヌスであるずいう意芋は、最も䞀般的な誀解の1぀です。 適切に蚭蚈されたシステムはバランスが取れおいたす-入力負荷が増加するず、システムのすべおの郚分が打撃を抑え、しきい倀を超えるず、すべおがスロヌダりンし始めたすベヌスのドラむブだけでなく、プロセッサずネットワヌク郚分の䞡方。 この珟実では、アプリケヌションクラスタヌのプロセッサパワヌはほずんど最も重芁な特性です。 倚くのプロゞェクトでは、このクラスタヌは数癟たたは数千のサヌバヌで構成されおいるため、アプリケヌションクラスタヌのプロセッサ負荷の「調敎」は経枈的に正圓化されたすこの堎合は100䞇ドル。



PHP Webアプリケヌションのプロセッサは、高レベルの動的蚀語ず同じくらい倚くを「食べたす」。 しかし、長幎にわたっお、PHP開発者は特別な悲しみおよび他のコミュニティからの最も匷力な「トロヌリング」の機䌚を経隓したした-「正盎な」JITたたは少なくずもCやC ++などの蚀語のコンパむルされたテキストのゞェネレヌタヌがPHPにないこず。 メむンプロゞェクトのフレヌムワヌク内でこのような゜リュヌションを提䟛できないコミュニティは、䞍快な傟向を匕き起こしたした。倧芏暡なプレヌダヌが独自の゜リュヌションを考え出すようになりたした。 したがっお、FacebookにはHHVMが、VkontakteにはKPHPがあり、おそらく他の「クラフト」もありたした。



幞いなこずに、2015幎、PHPを「成熟」させるための第䞀歩が螏み出されたした。PHP7がリリヌスされたした。 JITはPHP7には登堎したせんでしたが、「゚ンゞン」の倉曎の結果を過倧評䟡するこずはほずんどありたせん珟圚、倚くのタスクで、JITがなくおもPHP7はHHVMに劣りたせんたずえば、 LiteSpeedブログの ベンチマヌクずPHP7開発者のプレれンテヌションのベンチマヌクを参照 。 たた、新しいPHP7アヌキテクチャは、JITの远加を簡玠化したす。



Badooのプラットフォヌム開発者は、過去数幎間これらの情熱を泚芖しおおり、HHVMでパむロットプロゞェクトを䜜成したしたが、より有望だず考えたためPHP7を埅぀こずにしたした。 そしお最近、PHP7でBadooを開始したした 少なくずもその芏暡のおかげで、これは壮倧なプロゞェクトでした。300䞇行を超えるPHPコヌドず60,000のテストがありたす。 PHPアプリケヌションをテストするための新しいフレヌムワヌクGoAOPに類䌌したオヌプン゜ヌスで既にリリヌスされおいたすを開発し、100䞇ドルを節玄したした。



HHVMの経隓



PHP7に切り替える前に、しばらくの間、バック゚ンドを最適化する他の方法を探したした。 もちろん、HHVMで最初に「遊ぶ」こずを決めたした。



調査に数週間を費やした埌、非垞にたずもな結果が埗られたした。フレヌムワヌクでJITをりォヌムアップした埌、速床ずCPU䜿甚率の向䞊は数癟パヌセントでした。



ただし、HHVMには䞍愉快な欠点がありたした。





そしお、PHP7を埅ち始めたした。



むンタヌプリタヌの新しいバヌゞョンぞの移行は重芁か぀困難なプロセスであるため、移行の明確な蚈画を䜜成しお準備したした。 次の3぀の準備段階で構成されおいたした。





すべおの段階に぀いお詳しく説明したす。



カヌネルず拡匵機胜の修正



私たちは、独自の、積極的に保守され、完成したPHPブランチを持っおいたす。 公匏リリヌスの前にBadooをPHP7に倉換するプロゞェクトを開始したため、各リリヌス候補の曎新を受信できるようにするために、ツリヌ内でPHP7を定期的にリベヌスしおスムヌズにリベヌスする必芁がありたした。 日垞業務で䜿甚するすべおのパッチずカスタマむズtech.badoo.com/open-source techsiteの「パッチ」セクションを参照も、バヌゞョン間で移怍可胜であり、正しく動䜜する必芁がありたした。



5.5および7.0では、すべおの䟝存関係、拡匵機胜、PHPツリヌのダりンロヌドずアセンブリを自動化したした。 これにより䜜業が簡玠化されただけでなく、将来の優れた基盀も提䟛されたした。バヌゞョン7.1がリリヌスされるず、すべおの準備が敎いたす。



拡匵機胜に぀いおも汗をかかなければなりたせんでした。 箄40の拡匵機胜をサポヌトしおいたすが、その半分以䞊が倖郚オヌプン゜ヌス拡匵機胜であり、改善されおいたす。



可胜な限り高速な移行のために、2぀のプロセスを䞊行しお実行するこずにしたした。 1぀目は、最も重芁な拡匵機胜を個別に曞き換えるこずですBlitzテンプレヌト゚ンゞン、共有メモリのAPcuデヌタキャッシュ、Pinbaの統蚈情報の収集、および内郚サヌビスを操䜜するためのいく぀かのカスタム結果ずしお、玄20の拡匵機胜。

2぀目は、むンフラストラクチャの重芁ではない郚分で䜿甚されおいる拡匵機胜を積極的に取り陀くこずです。 11の拡匵機胜を簡単に取り陀くこずができたした。



そしおもちろん、私たちはPHP7ずの互換性のために䜿甚する䞻芁なオヌプン拡匵機胜をサポヌトする人々ず積極的にコミュニケヌションを始めたしたXdebugを開発しおいるDerick Rethansに特に感謝したす。



さらに、PHP7ぞの拡匵機胜の移怍の技術的な詳现に぀いお詳しく説明したす。



バヌゞョン7では、PHP開発者が倚くの内郚APIを倉曎したため、拡匵機胜で倚くのコヌドを線集する必芁がありたした。 最も重芁な倉曎は次のずおりです。



これにより、小さなメモリ割り圓おの数を倧幅に削枛し、その結果、PHPコアを数十パヌセント高速化するこずができたした。



これらすべおの倉曎には、曞き換える必芁がなければ、すべおの拡匵機胜を積極的に線集する必芁があるこずに泚意しおください。 組み蟌みの拡匵機胜の堎合、䜜成者に䟝存できる堎合、開発は私たちだけが線集でき、倚くの線集がありたした内郚APIの倉曎により、コヌドの䞀郚が曞き盎しやすくなりたした。



残念ながら、ガベヌゞコレクションを䜿甚する新しい構造を導入するず、コヌドの実行速床が向䞊したすが、゚ンゞン自䜓が耇雑になり、問題を芋぀けるこずができなくなりたす。 それらの1぀はOPcacheの問題でした。これは、キャッシュをクリアするず、キャッシュされたファむルのバむトコヌドが別のプロセスで䜿甚できるずきに砎棄され、プロセスがクラッシュする原因ずなりたした。 倖芳は次のようになりたした。関数たたは定数の名前の行zend_stringが突然厩れ、代わりにゎミが衚瀺されたす。



私たちは独自の蚭蚈の倚くの拡匵機胜を䜿甚しおおり、その倚くは文字列を積極的に䜿甚しおいるため、最初の疑いはそれらの文字列の誀甚でした。 圌らは倚くのテストを曞き、倚くの実隓を行ったが、すべお圹に立たなかった。 その結果、PHPコアのメむン開発者であるDmitry Stogovに助けを求める必芁がありたした。



たず、キャッシュがクリアされたかどうかを尋ねたした。 実際、それぞれのケヌスでそうであるこずがわかりたした。 問題はただ私たちにあるのではなく、OPcacheにあるこずが明らかになりたした。 問題を迅速に再珟し、Dmitryは数日以内に修正したした。 PHPバヌゞョン7.0.4に含たれおいたこの修正がなければ、本番環境で安定しお䜿甚するこずは䞍可胜でした



テストむンフラストラクチャの倉曎



Badooでのテストは私たちの特別な誇りです。 PHPコヌドを1日に2回実皌働環境にアップロヌドし、レむアりトごずに20〜50個のタスクを取埗したすGitで機胜ブランチを䜿甚し、JIRAず密接に統合された自動ビルドをビルドしたす。 このようなスケゞュヌルず、自動テストなしのタスクのボリュヌムを䜿甚したす。



今日、玄50のカバレッゞで玄6䞇のナニットテストがあり、クラりドで平均2〜3分で合栌しおいたすこれに぀いおはHabréで既に説明したした 。 単䜓テストに加えお、より高いレベルの自動テスト-統合およびシステムテスト、Webペヌゞのセレンテスト、モバむルアプリケヌションのひょうたんテストを䜿甚したす。 この倚様性により、コヌドの各特定バヌゞョンの品質に぀いお迅速に結論付け、適切な決定を䞋すこずができたす。



むンタヌプリタヌの新しいバヌゞョンぞの切り替えは基本的な倉曎です。 可胜な限り倚くの問題が発生する可胜性があるため、すべおのテストが機胜するこずが䞍可欠です。 それを、どのように、そしおなぜ行ったかを明確にするために、歎史に短い゚クスカヌションを取り入れ、圓瀟のテスト開発の進化に぀いお話す必芁がありたす。



倚くの堎合、補品のテストを考えおいる人は、実隓のプロセスおよび実装䞭の䞀郚で、コヌドの準備が敎っおいないこずに遭遇したす。 実際、開発者は自分のコヌドがテスト可胜でなければならないこずを芚えおおく必芁がありたす 。 アヌキテクチャでは、テストされたコヌドを倖郚条件から分離するために、ナニットテストで倖郚䟝存関係の呌び出しずオブゞェクトを眮き換えるこずができたす。 私はこの芁件が人生を耇雑にし、原則から倚くのプログラマヌがテストできるようにコヌドを曞きたくないず蚀わなければなりたせん-課せられた制限は「良いコヌド」の他の倀ずの䞍平等な闘争に入り、通垞倱われたす。 そしお、倚くの堎合、䜿甚可胜なコヌドの量がルヌルに埓っおいないず想像しおいたため、実隓者はテストをより良い時期たで延期するか、小さなもので満足しようずするだけで、テストでカバヌできるもののみをカバヌしたす結果ずしお、テストは垞に期埅される結果を䞎えたせん。



圓瀟も䟋倖ではありたせん。 たた、プロゞェクトの開始盎埌からテストを導入し始めたした。 かなりの数行のコヌドがすでに曞かれおいたすが、それは実皌働環境で十分に機胜し、十分なお金をもたらしたした。 掚奚されるようにテストでカバヌできるようにするためにこのコヌドをすべお曞き換えるず、長すぎお高䟡になりたす。



幞いなこずに、その時点で、テストできないコヌドに関するほずんどの問題を解決できる優れたツヌル、runkitがすでにありたした。 これはPHPの拡匵機胜であり、スクリプトの実行䞭にプログラムで䜿甚されるメ゜ッド、クラス、および関数を倉曎、削陀、远加できたす。 ただ倚くのものがあるかもしれたせんが、他の拡匵機胜は䜿甚しおいたせん。 このツヌルは、HHVMを含むFacebookで珟圚働いおいるSarah Golemonによっお、数幎間2005幎から2008幎たで開発および保守されたした。 2008幎から珟圚たで、同プロゞェクトは同胞Dmitry Zenovichによっおサポヌトされおいたす圌はBegunずMail.Ruのテスト郚門の責任者ずしお働いおいたした。 たた、プロゞェクトに少し「貢献」したした。



Runkit自䜓は非垞に危険な拡匵機胜です。 これを䜿甚するず、定数、関数、およびクラスを䜿甚するスクリプトの実行䞭にそれらを盎接倉曎できたす。 実際、これは飛行䞭に飛行機を再構築できるツヌルです。 Runkitはその堎でPHPの内郚をクロヌルしたす。 runkitの1぀の間違いたたは欠陥-飛行機が空䞭で矎しく爆発したり、PHPがクラッシュしたり、メモリリヌクやその他の䜎レベルのデバッグを探すのに䜕時間も費やしたりしたす。 それでも、それは私たちにずっお必芁なツヌルでした。コヌドをオンザフラむで倉曎し、必芁なコヌドに眮き換えるだけで、深刻な曞き換えなしでプロゞェクトにテストを実装するこずしかできたせん。



PHP7に切り替えるず、runkitは倧きな問題であるこずが刀明したした。このバヌゞョンのPHPはサポヌトされおいたせんでした。 新しいバヌゞョンの開発を埌揎するオプションがありたしたが、このパスは長期的には最も信頌できるものではありたせんでした。 䞊行しお、他のいく぀かのオプションを怜蚎したした。



有望な゜リュヌションの1぀は、runkitからuopzに切り替えるこずでした。 これは、同様の機胜を備えたPHPの拡匵機胜でもあり、2014幎4月に登堎したした。 マンバの同僚から私たちに提䟛され、䞻に仕事のスピヌドに぀いお非垞に良いレビュヌを提䟛したした。 このプロゞェクトは、First Beat Media英囜のJoe Watkinsによっおサポヌトされおいたす。 このプロゞェクトは、runkitず比范しおより掻発で有望に芋えたした。 しかし、残念ながら、すべおのテストをuopzに転送できたせんでした。 臎呜的な゚ラヌはどこか、どこかでセグメンテヌション違反が発生したした-いく぀かのレポヌトがありたしたが、残念ながら動きはありたせん詳现に぀いおは、たずえばgithubのこのバグを参照。 この堎合、テストの曞き換えを行うのは非垞に高䟡であり、他の䜕かが明らかにされないずいう事実ではありたせん。



その結果、私たちにずっお明らかな解決策を思い付きたしたすでに倚くのコヌドを曞き盎さなければならず、それでもrunkitやuopzのような倖郚プロゞェクトに䟝存しおいるため、私たち自身で解決するには非垞に高䟡たたは䞍可胜な問題が絶えずありたすすべおの䟝存関係を最倧限に削陀するようにコヌドを曞き換える必芁はありたせんか はい。HHVMたたは他の同様の補品に切り替えたい堎合でも、このような問題は二床ずありたせん。 そしお、独自のフレヌムワヌクを取埗したした。



システムはSoftMocksず呌ばれたす。 ゜フトずいう蚀葉は、システムが拡匵機胜を䜿甚する代わりに玔粋なPHPで実行されるこずを匷調しおいたす。 これはオヌプン゜ヌスプロゞェクトであり、プラグむンラむブラリずしお利甚可胜であり、 パブリックドメむンにありたす 。 SoftMocksは、PHPコア実装の機胜ずは関係なく、 Goず同様にコヌドをその堎で曞き換えるこずで機胜したす。 ああ 。



テストコヌドは䞻に次のものを䜿甚したす。

  1. クラスのメ゜ッドの1぀の実装の眮換。
  2. 関数の結果の眮換。
  3. グロヌバルたたはクラス定数の倀を倉曎したす。
  4. クラスにメ゜ッドを远加したす。


これらの機胜はすべお、runkitを䜿甚しお完党に実装されおいたす。 コヌドを曞き換えるず、これが可胜になりたすが、泚意が必芁です。



Job Description SoftMocks-別の蚘事の資料。近いうちに䜜成したす。 それたでの間、このシステムの動䜜の簡単な説明のみに制限しおいたす。





PHP7ぞの切り替え-タスクに戻りたしょう。 プロゞェクトでSoftMocksを䜿甚し始めた埌、手動で修埩する必芁がある玄1000個のテストが残っおいたした。 最初は60,000のテストがあったため、これは良い結果ず考えるこずができたす。 runkitず比范した実行速床は䜎䞋しおいたせん。そのため、パフォヌマンスの芳点から、SoftMocksを䜿甚しおも深刻な損倱はありたせん。 公平に蚀うず、uopzはさらに高速に動䜜するはずです。



ナヌティリティずアプリケヌションコヌド



倚くの革新に加えお、PHP7には埌方互換性がありたす。 問題の調査を始めた最初のこずは、公匏の移行ガむドを読むこずです。 既存のコヌドを修正しないず、本番環境で臎呜的な゚ラヌが発生し、ログには反映されないがアプリケヌションのロゞックが正しくない動䜜の倉曎が発生するリスクがあるこずがすぐに明らかになりたした。



BadooはPHPコヌドのいく぀かのリポゞトリであり、最倧のものには200䞇行を超えるコヌドが含たれおいたす。 さらに、Webのビゞネスロゞックやモバむルアプリケヌションのバック゚ンドからテストおよび蚈算ナヌティリティたで、PHPで倚くのこずを実装したした。 さらに、Badooはすでに10幎の歎史を持぀プロゞェクトであり、残念ながらPHP4の遺産がただ存圚しおいるずいう事実によっお状況は耇雑になりたした。 したがっお、「密接なピアリング」の方法は適甚されたせん。 たた、「ブラゞルのシステム」は適甚できたせん。぀たり、本番環境にそのたた眮いお、䜕が壊れるかを監芖するず、あたりにも倚くのナヌザヌのビゞネスロゞックが壊れるリスクが高たりたす。 そのため、互換性のない堎所の怜玢を自動化する機䌚を探し始めたした。



最初は開発者の間で最も人気のあるIDEを䜿甚しようずしたしたが、残念ながら、その時点ではPHP7の構文ず機胜をサポヌトしおいなかったか、疑わしいほど少数の問題を怜出し、明らかにコヌド内の危険な堎所が芋぀かりたせんでした。 少し調査した結果 、 php7marナヌティリティを詊しおみるこずにしたした。 これは、PHPで実装されたこのような単玔な静的コヌドアナラむザヌです。 非垞に䜿いやすく、非垞に高速に動䜜し、結果はテキストファむルずしお提䟛され、PHP7が必芁です。 もちろん、このナヌティリティは䞇胜薬ではありたせん;コヌド内の特に「トリッキヌな」堎所の誀怜知ず省略の䞡方がありたす。 しかし、その助けによる問題の玄90が発芋され、PHP7で動䜜するようにコヌドを準備するプロセスを倧幅に加速および促進したした。



私たちにずっお最も䞀般的で朜圚的に危険な問題は次のずおりです。



非互換性の残りのケヌスは、非垞にたれであるか正芏衚珟の 'e'修食子など、たたは単玔な眮換によっお修正されたしたたずえば、珟圚、すべおのコンストラクタヌは__constructず呌ばれるべきであり、クラス名の䜿甚は犁止されおいたす。

しかし、コヌドの修正を開始する前に、互換性に必芁な倉曎を行う開発者もいれば、PHP7ず互換性のないコヌドを曞き続ける開発者もいるず考えたした。 この問題を解決するために、可倉のphp7 -lファむルで実行される各Gitリポゞトリにpre-receiveフックを远加したした。 PHP7の構文に察しおテストしたした。 これは、非互換性に察する完党な保護を保蚌するものではありたせんが、すでに倚くの問題を排陀しおいたす。 それ以倖の堎合、開発者はもう少し泚意する必芁がありたした。 さらに、PHP7の完党なテストスむヌトの定期的な実行を開始し、結果をPHP5の実行ず比范したした。 同時に、開発者はPHP7の新機胜を䜿甚するこずを犁じられおいたした。 php5 -lで叀いpre-receiveフックをオフにしたせんでした。 これにより、ある時点で、むンタヌプリタヌの7番目ず5番目の䞡方のバヌゞョンず互換性のあるコヌドを取埗できたした。 なぜこれが重芁なのですか PHPコヌドの問題に加えお、新しいバヌゞョンにアップグレヌドするずきに、PHP7自䜓ずその拡匵機胜に問題がある可胜性があるためです実際、䞊蚘のように、これらの問題に遭遇したした。 そしお、残念ながら、それらのすべおがテスト環境で再珟されたわけではありたせん。その䞀郚は、本番環境で倧きな負荷がかかった堎合にのみ芋るこずができたした。



「起動」ず結果



明らかに、任意の数のサヌバヌでPHPのバヌゞョンを倉曎する簡単で迅速な方法が必芁でした。 これを行うには、コヌド党䜓で、CLIむンタヌプリタヌぞのパスを/ local / phpに眮き換えたした。これは、/ local / php5たたは/ local / php7ぞのシンボリックリンクです。 したがっお、サヌバヌ䞊のPHPのバヌゞョンを倉曎するには、リンクを倉曎する必芁があり操䜜はアトミックです-これはCLIスクリプトにずっお重芁です、php5-fpmを停止し、php7-fpmを開始したす。 nginxのphp-fpmに2぀のアップストリヌムを持ち、異なるポヌトでphp5-fpmずphp7-fpmを実行するこずは可胜ですが、nginxの構成を耇雑にするこずでこのオプションが気に入らなかったでしょう。



䞊蚘のすべおが完了した埌、プリプロダクション環境でセレンテストを実行するこずができたした。これにより、これたでに芋られなかった倚くの問題を怜出するこずができたした。 圌らは、PHPコヌドたずえば、file_get_contents "php// input"を優先しお叀いグロヌバル倉数$ HTTP_RAW_POST_DATAを攟棄しなければならなかったず拡匵機胜さたざたな皮類のセグメンテヌション゚ラヌの䞡方に関係しおいたした。



前の段階で怜出された問題を修正し、ナニットテストの曞き換えを完了したらその間、むンタヌプリタヌのいく぀かのバグたずえば1぀ も怜出できたした、最終的にプロダクションの隔離を開始したした。 「怜疫」ずは、限られた数のサヌバヌで新しいバヌゞョンのPHPを起動するこずです。 各倧芏暡クラスタヌWebおよびモバむルアプリケヌションのバック゚ンド、クラりドの1぀のサヌバヌから開始し、゚ラヌがなければ次第に数を増やしおいきたした。 PHP7に完党に移行した最初の䞻芁なクラスタヌはクラりドでした。 この理由は、php-fpmが必芁ないためです。 fpmが動䜜するのず同じクラスタヌが芋぀かるたで埅たなければならず、Dmitry StogovはOPcacheの問題を修正したせんでした。 その埌、すでにfpmクラスタヌを転送しおいたす。



次に結果に぀いお。 芁するに、圌らは印象的です。 以䞋は、私たちが所有する最倧芏暡263サヌバヌのクラスタヌ、぀たりプラハデヌタセンタヌのモバむルアプリケヌションのバック゚ンドでの応答時間、䜿甚率、メモリ消費量、およびCPU䜿甚率のグラフです。



応答時間の分垃





RUsageCPU時間





メモリ䜿甚量





クラスタヌ党䜓のCPU負荷





したがっお、プロセッサヌ時間は2倍に短瞮され、リク゚ストの凊理に費やされた時間の䞀郚がデヌタベヌスおよびデヌモンず通信し、PHP7ぞの移行ではこの郚分は加速されないため、党䜓の応答時間は玄40改善されたした。 さらに、クラスタヌの総負荷が50を䞋回ったずいう事実によっお、この効果はいくらか匷化されおいたす。これは、 ハむパヌスレッディングテクノロゞヌの機胜の䞀郚の機胜を瀺しおいたす。 倧たかに蚀っお、負荷が50を超えるず、HTコアが機胜し始めたす。これは物理コアほど「有甚」ではありたせんが、これは別の蚘事のトピックです。

メモリ消費量はボトルネックではありたせんでしたが、玄8倍枛少したした そしお最埌に、機噚を節玄したした。同じ数のサヌバヌにかかる非垞に倧きな負荷に耐えるこずができるようになり、本質的に、賌入ずメンテナンスのコストを削枛したす。 他のクラスタヌの結果は若干異なりたすが、OPcacheがないため、クラりドでのゲむンがやや控えめですCPUの玄40。



どのくらいのお金を節玄したしたか 数えたしょう。 私たちのアプリケヌションサヌバヌクラスタは600以䞊のサヌバヌで構成されおいたす。 CPU䜿甚率を半分にするこずで、玄300台のサヌバヌを節玄できたす。 このような「鉄」の初期䟡栌それぞれ玄4000ドルず枛䟡償华費を加えるず、玄100䞇ドルの節玄に加えお、ホスティングで幎間玄10䞇ドルが埗られたす。 そしお、それはクラりドも考慮しおおらず、クラりドのパフォヌマンスも向䞊しおいたす。 これは玠晎らしい結果だず信じおいたす



すでにPHP7に切り替えたしたか コメントであなたの意芋や質問を聞いおうれしいです。



All Articles