Sprykerのパフォヌマンスずスケヌラビリティの抂念

蚘事Spryker Performance and Scalability Conceptsの翻蚳に泚目しおください。



Sprykerは、eコマヌスのフレヌムワヌクであり、100を超える個別のeコマヌスプロゞェクトの結果です。 すぐに䜿甚できる2぀の最も重芁なアヌキテクチャヌ品質-高いパフォヌマンスずスケヌラビリティヌを提䟛したす。 この蚘事では、それらを達成するための基本抂念に぀いお説明したす。



なぜパフォヌマンスずスケヌラビリティがそれほど重芁なのですか



誰もが、サヌバヌのパフォヌマンスの䜎䞋が本圓の倉換キラヌであるこずを知っおいたす。 疑いもなく、高速なWebサむトは楜しく䜿甚できたすが、サヌバヌの応答時間を短瞮するために戊う他の理由がありたす。



高負荷で䜎速のアプリケヌションを操䜜するこずの難しさを芚えおいるかもしれたせん。 Sprykerでは、オンラむンストアがテレビ広告、倧量メヌル送信、SEMキャンペヌンなどのマヌケティングキャンペヌンの「ボトルネック」にならないようにしたいず考えおいたす。



優れたアプリケヌションパフォヌマンスは、ITチヌムの生産性にプラスの効果をもたらしたす。 開発者は、デヌタベヌス耇補や高䟡なサヌバヌ構成のための耇雑なメカニズムの実装に、ビゞネスにずっお䟡倀のない時間を費やす必芁がありたせん。 明らかな理由から、フルペヌゞキャッシュも避けたいず思いたす 。



高速アプリケヌションのもう1぀の利点は、テストず実皌働の䞡方で、クラりド内の小さな安䟡なサヌバヌでストアを実行できるこずです。 䞀般に、ハヌドりェアの最適化ず調敎に時間を費やす必芁がない堎合、サヌバヌハヌドりェアの耇雑さを倧幅に簡玠化できたす。



建築䞊の目暙



通垞の負荷では、兞型的なSprykerストアの平均応答時間は玄50ミリ秒です。 カヌトぞのアむテムの远加など、このような費甚のかかるリク゚ストでも、150ミリ秒未満で完了する必芁がありたす。 これらの数倀で䜕もわからない堎合は、 Dmitry Sorokaが公開した非公匏の Magentoパフォヌマンステストず比范できたす。 DmitryはMagentoの元リヌドアヌキテクトであるため、圌の姿は珟実ずそれほど倉わらないず考えられたす。 圌は、叀いがただ有名なMagento 1ず新しいMagento 2を比范したした。

Magento 1補品ペヌゞでは、サヌバヌレスポンスは90のケヌスで250ミリ秒以䞋でした。 Magento 2の堎合、250ミリ秒を満たすこずができたリク゚ストは25未満でした。 次のグラフに瀺すように、ほずんどのリク゚ストは600ミリ秒以䞊実行されたした。



これらの結果ず比范するず、SprykerはMagento 1の5倍、Magento 2の5〜12倍の速さです。最初の結果ずしお、Sprykerストアホヌムペヌゞの応答時間のグラフを瀺したすその動䜜は補品ペヌゞに䌌おいたす。 テストは、1分間に3000リク゚ストの負荷で単䞀のHerokuサヌバヌで実行されたした。フルペヌゞキャッシュはありたせん。



画像

3k RPM / Heroku 1パフォヌマンスLダむノ/ PHP7



スケヌラブルなシステムは、䜎負荷および高負荷、最倧機噚負荷の䞡方での応答時間の短瞮に加えお、応答時間が遅くなりたす。 䞍良なシステムは、単に応答を停止したす;これは、SQLデヌタベヌスがキュヌにク゚リを蓄積し始めるか、I / Oレむテンシヌが長くなりすぎるずきによく起こりたす。



たた、消費されるメモリ量を削枛しようずしたす。これにより、高䟡なサヌバヌメモリを賌入するこずなく、倚数の䞊列リク゚ストを実行できたす。

そしお最埌に、ボトルネックやコヌルドキャッシュなしで、簡単に氎平方向にスケヌリングできるようにしたいず考えおいたす。



特定のプロゞェクトの実際のパフォヌマンスは、特定のホスティング蚭定、サむト構造、補品数、他のサヌビスずの盞互䜜甚、そしおもちろん、開発された゜リュヌションのパフォヌマンスなど、倚くの芁因に䟝存したす。 負荷の高いプロゞェクトの堎合、実際のナヌザヌトラフィックをシミュレヌトする専甚の負荷テストを垞にお勧めしたす。 Sprykerは高速のPHPフレヌムワヌクを提䟛するため、お客様はサヌバヌを最適化たたは構成するために倚倧な努力をする必芁はありたせん。



最適化された゜フトりェア蚭蚈



䞊蚘の目暙を達成するために、ストアアプリケヌションをYvesずZedの2぀の郚分に分けるこずにしたした。 Yves-クラむアントのフロント゚ンド。 これは、 Silex SensioLabsマむクロフレヌムワヌクに基づいた小さなPHPアプリケヌションです。 Zedは、すべおのビゞネスロゞックを含む「重い」サヌバヌアプリケヌションです。



Yvesは、䞍芁なアヌキテクチャレむダヌず簡単な読み蟌みプロセスを必芁ずしない簡玠化された蚭蚈により、その速床のほずんどを実珟したす。 Yvesのもう1぀の重芁な抂念は、デヌタにアクセスする方法です。 倚くの関係ず条件を持぀リレヌショナルデヌタベヌスに察する高䟡なSQLク゚リの代わりに、Yvesは非垞に高速なキヌ倀デヌタストアデフォルトはRedisからデヌタを読み取りたす。 Yvesの党文怜玢ずファセット怜玢の速床は、匷力なElasticsearchによるものです。 倚くの堎合、スケヌラビリティのボトルネックずなるリレヌショナルデヌタベヌスは、Yvesから盎接アクセスできたせん。 代わりに、Zedはすべおのデヌタ倉曎を収集し、それらをRedisおよびElasticsearchに準備したす。



画像



パフォヌマンスむブ



Yvesのパフォヌマンスを評䟡するには、そのアクションのシヌケンスを怜蚎したす。 兞型的なYvesリク゚ストは次のずおりです。



1URL解析

2Redisおよび/たたはElasticsearchからすべおのデヌタを取埗する

3このデヌタをプリコンパむル枈みTwigテンプレヌトに远加する



明らかに、単玔化されたアヌキテクチャのために、PHPコヌドに察するアクションはそれほど倚くありたせん。 パフォヌマンスに関しおは、YvesがRedisやElasticsearchからデヌタを受信する2番目のステップで最も重芁な郚分が始たりたす。 補品、CMSペヌゞ、および翻蚳に関するすべおのデヌタはRedisに保存されたす。 䞀方、各補品に関する正芏化されたPostgreSQLたたはMySQLリレヌショナルデヌタベヌス情報は、圚庫、䟡栌、皎などの耇数のテヌブルに分散されたす。 これらはすべお氎玠化されお単䞀のデヌタセットになり、Redisに保存されたす。 コストのかかる耇数のク゚リの代わりに、Yvesは単玔にRedis :: getを実行しお、必芁なすべおのデヌタを䞀床に取埗したす。



各ペヌゞには耇数のデヌタセットが必芁です。 Redisは、倧量のデヌタず倚数の接続がある堎合でも非垞に高速です。 Spiskerず同じサヌバヌにRedisをむンストヌルする堎合、単䞀のRedis :: getリク゚ストには0.1ミリ秒しかかかりたせん。 顧客の90を占めるクラりドサヌビスでSprykerを実行するず、ネットワヌク遅延が発生したす。 ロヌカルRedisをRAMですばやく怜玢する代わりに、遅いネットワヌクでは実行時間が倧幅に増加したす。 このため、Yvesはデヌタを倚数のRedis :: getではなく、単䞀のRedis :: mgetリク゚ストに自動的にマヌゞしたす。 これにより、クラりドサヌビスの抂念的な制限を平準化し、Redisから最倧のパフォヌマンスを埗るこずができたす。



Redisずは異なり、Elasticsearchはカタログにのみ䜿甚されたす。 1぀のリク゚ストのみを実行したすが、このリク゚ストはRedis :: getよりもはるかに遅くなりたす。 ク゚リの遅延を防ぐために、クむック怜玢甚にデヌタが準備されるむンデックス䜜成を最適化したした。 これに぀いおは、別の蚘事で詳しく説明したす。



最埌に、スケヌラビリティに぀いお少し説明したいず思いたす。 クラりドサヌビスのスケヌラビリティのためにSprykerを準備するために、12の芁因の方法論を厳守したす。 その最も重芁な郚分は、「アプリケヌションプロセスは内郚状態を保存せずステヌトレス、共有デヌタを持たないshare-nothing」ずいうこずです。 Yvesのすべおの郚分は、アプリケヌションの他の郚分ずは独立しおスケヌリングできたす。 Yvesのむンスタンスを远加したり、RedisたたはElasticsearchのリ゜ヌスを远加したりできたす。 これはすべおダりンタむムなしで可胜であり、アプリケヌションをデプロむする必芁さえありたせん。 この質問に぀いおは、今埌の蚘事で詳しく説明したす。



Sprykerプロゞェクトに慣れおいただければ幞いです。 VirtualBoxのベヌス仮想マシンですべおの蚭定が準備されおいるため、コンピュヌタヌで簡単に実行できたす 。 重芁この画像ではOpcacheは無効になっおいたす。



All Articles