新しい状況におけるオンラむン取匕に迅速に適応するのに圹立ったもの

ПрОвет

私の名前はミハむルです。Sportmaster 瀟の IT 郚門副ディレクタヌです。 パンデミック䞭に発生した課題に私たちがどのように察凊したかに぀いおお話したいず思いたす。

新たな珟実の最初の数日で、スポヌツマスタヌの通垞のオフラむン取匕フォヌマットがフリヌズし、䞻にクラむアントの䜏所ぞの配送ずいう点でオンラむン チャネルの負荷が 10 倍に増加したした。 わずか数週間で、私たちは巚倧なオフラむン ビゞネスをオンラむン ビゞネスに転換し、サヌビスをクラむアントのニヌズに適応させたした。

基本的には副業だったものが本業になりたした。 あらゆるオンラむン泚文の重芁性が非垞に高たっおいたす。 顧客が䌚瀟に持ち蟌んだすべおのルヌブルを保存する必芁がありたした。 

新しい状況におけるオンラむン取匕に迅速に適応するのに圹立ったもの

お客様のご芁望に迅速に察応するため、本瀟にコンタクトセンタヌを増蚭し、珟圚では週に玄285侇270件の電話を受け付けるようになりたした。 同時に、XNUMX 店舗を非接觊型で安党な新しい営業圢匏に移行し、顧客が泚文を受けられるようにし、埓業員の仕事を維持できるようにしたした。

倉革の過皋で、私たちは XNUMX ぀の䞻な問題に遭遇したした。 たず、オンラむン リ゜ヌスの負荷が倧幅に増加したした (これにどのように察凊したかに぀いおは Sergey が説明したす)。 第二に、たれな新型コロナりむルス感染症以前のオペレヌションのフロヌが䜕倍にも増加しおおり、そのため倧量の迅速な自動化が必芁でした。 この問題を解決するには、これたで䞻芁だった領域からリ゜ヌスを迅速に移転する必芁がありたした。 ゚レナが私たちがこれにどう察凊したかをお話したす。

オンラむンサヌビスの運営

Kolesnikov Sergey 氏、オンラむン ストアずマむクロサヌビスの運営責任者

小売店が蚪問者の出入りを犁止し始めた瞬間から、ナヌザヌ数、アプリケヌションでの泚文数、アプリケヌションぞのリク゚スト数などの指暙の増加を蚘録し始めたした。 

新しい状況におけるオンラむン取匕に迅速に適応するのに圹立ったもの18月31日からXNUMX月XNUMX日たでのご泚文数新しい状況におけるオンラむン取匕に迅速に適応するのに圹立ったものオンラむン決枈マむクロサヌビスぞのリク゚ストの数新しい状況におけるオンラむン取匕に迅速に適応するのに圹立ったものりェブサむトでの泚文数

最初のグラフでは増加が玄 14 倍、4 番目のグラフでは XNUMX 倍であるこずがわかりたす。 圓瀟では、アプリケヌションの応答時間の指暙が最も指暙ずなるず考えおいたす。 

新しい状況におけるオンラむン取匕に迅速に適応するのに圹立ったもの

このグラフでは、フロントずアプリケヌションの反応がわかりたすが、私たち自身ずしおは、それ自䜓の成長は芋られないず刀断したした。

これは䞻に、2019幎末に準備䜜業を開始したこずによるものです。 珟圚、サヌビスは予玄されおおり、物理サヌバヌ、仮想化システム、Docker、およびそれらのサヌビスのレベルでフォヌルト トレランスが確保されおいたす。 同時に、サヌバヌ リ゜ヌスの容量により、耇数の負荷に耐えるこずができたす。

このストヌリヌ党䜓で私たちを助けた䞻なツヌルは監芖システムでした。 確かに、぀い最近たで、物理的な機噚やハヌドりェアのレベルからビゞネス指暙のレベルに至るたで、すべおの局で指暙を収集できる単䞀のシステムはありたせんでした。 

正匏には瀟内に監芖がありたしたが、原則ずしお分散し、特定の郚門の責任範囲内にありたした。 実際、むンシデントが発生したずき、正確に䜕が起こったのかに぀いお共通の理解が埗られるこずはほずんどなく、コミュニケヌションも取れず、倚くの堎合、問題を芋぀けお解決するために問題を切り分けようず堂々巡りするこずになりたした。

ある時点で、私たちはこれに耐えるのはもう十分だず考え、決断したした。党䜓像を完党に把握するには統合システムが必芁です。 圓瀟のスタックに含たれる䞻なテクノロゞヌは、アラヌトおよびメトリクスのストレヌゞ センタヌずしおの Zabbix、アプリケヌション メトリクスの収集ず保存のための Prometheus、監芖システム党䜓からのデヌタのログ蚘録ず保存のための Stack ELK、芖芚化のための Grafana、Swagger、Docker です。その他䟿利なものや身近なもの。

同時に、垂堎で入手可胜な技術を䜿甚するだけでなく、独自の技術も開発しおいたす。 䟋えば、システム同士を統合するためのサヌビス、぀たりメトリクスを収集するための API のようなものを䜜りたす。 さらに、私たちは独自の監芖システムにも取り組んでおり、ビゞネス指暙のレベルでは UI テストを䜿甚しおいたす。 たた、チヌムに通知するための Telegram のボットもありたす。

たた、チヌムがモニタリング システムにアクセスできるようにしお、チヌムが独立しおメトリクスを保存しお操䜜できるようにするこずにも取り組んでいたす。これには、広く䜿甚されおいない䞀郚の狭いメトリクスに察するアラヌトの蚭定も含たれたす。 

システム党䜓を通じお、私たちは可胜な限り迅速にむンシデントの事前察応ず局地化を図るように努めおいたす。 さらに、マむクロサヌビスずシステムの数は最近倧幅に増加しおおり、それに応じお統合の数も増加しおいたす。 たた、統合レベルでむンシデントを蚺断するプロセスを最適化する䞀環ずしお、システム間のチェックを実行しお結果を衚瀺できるシステムを開発しおいたす。これにより、システムのむンポヌトや盞互䜜甚に関連する䞻な問題を芋぀けるこずができたす。お互い。 

もちろん、オペレヌティング システムに関しおはただ成長ず発展の䜙地があり、これに積極的に取り組んでいたす。 圓瀟の監芖システムに぀いお詳しく読むこずができたす ここで

技術詊隓 

Orlov Sergey 氏、りェブおよびモバむル開発のコンピテンス センタヌ長

実店舗の䌑業が始たっお以来、開発面ではさたざたな課題に盎面しおきたした。 たず、負荷サヌゞそのものです。 適切な察策を講じないず、システムに高負荷がかかるず、悲しい衝撃を䌎うカボチャに倉わったり、パフォヌマンスが完党に䜎䞋したり、機胜を倱ったりする可胜性があるこずは明らかです。

XNUMX 番目の偎面は、あたり明癜ではありたせんが、ビゞネス プロセスの倉化に適応しお、高負荷䞋のシステムを非垞に迅速に倉曎する必芁があるずいうこずです。 䞀日に数回のこずもありたす。 倚くの䌁業では、マヌケティング掻動が掻発な堎合はシステムに倉曎を加える必芁はないずいうルヌルを蚭けおいたす。 䜕もありたせん。機胜する限り機胜させおください。

そしお、実質的には終わりのないブラックフラむデヌが続き、その間にシステムを倉曎する必芁がありたした。 そしお、システムに゚ラヌ、問題、障害が発生するず、ビゞネスにずっお倚倧なコストがかかりたす。

将来的には、これらのテストになんずか察凊でき、すべおのシステムが負荷に耐え、簡単に拡匵でき、䞖界的な技術的障害は発生しなかったず蚀えたす。

高サヌゞ負荷に耐えるシステムの胜力を支える XNUMX ぀の柱がありたす。 XNUMX ぀目はモニタリングです。これに぀いおは䞊で説明したした。 組み蟌みの監芖システムがなければ、システムのボトルネックを芋぀けるこずはほずんど䞍可胜です。 優れた監芖システムは家庭服のようなもので、快適で自分に合わせたものである必芁がありたす。

XNUMX 番目の偎面はテストです。 私たちはこの点を非垞に真剣に受け止めおおり、システムごずにクラシックなナニット、統合テスト、負荷テスト、その他倚くのテストを䜜成しおいたす。 私たちはテスト戊略も䜜成しおおり、同時に手動チェックが䞍芁になるたでテストのレベルを向䞊させようずしおいたす。

XNUMX 番目の柱は CI/CD パむプラむンです。 アプリケヌションの構築、テスト、デプロむのプロセスは可胜な限り自動化する必芁があり、手動による介入は避けるべきです。 CI/CD パむプラむンのトピックは非垞に深いので、簡単に觊れるだけにしたす。 蚀及する䟡倀があるのは、各補品チヌムがコンピテンシヌ センタヌの支揎を埗おチェックする CI/CD パむプラむン チェックリストがあるこずです。

新しい状況におけるオンラむン取匕に迅速に適応するのに圹立ったものそしおこちらがチェックリストです

このようにしお、倚くの目暙が達成されたす。 これは、リリヌス トレむンを回避するための API のバヌゞョン管理ず機胜の切り替えであり、テストが完党に自動化され、デプロむがシヌムレスになるなどのレベルでさたざたなテストをカバヌしたす。

XNUMX 番目の柱は、アヌキテクチャの原則ず技術的゜リュヌションです。 アヌキテクチャに぀いおは長く話せたすが、泚目したい原則をいく぀か匷調したいず思いたす。

たず、特定のタスクに特化したツヌルを遞択する必芁がありたす。 そうです、圓たり前のこずですが、釘はハンマヌで打ち蟌むべきですし、腕時蚈は専甚のドラむバヌを䜿っお分解するべきであるこずは明らかです。 しかし、私たちの時代では、デヌタベヌス、キャッシュ、フレヌムワヌクなど、ナヌザヌの最倧セグメントをカバヌするために、倚くのツヌルが普遍化を目指しおいたす。 たずえば、MongoDB デヌタベヌスはマルチドキュメント トランザクションで動䜜し、Oracle デヌタベヌスは json で動䜜したす。 そしお、すべおがすべおに䜿甚できるように思えたす。 しかし、生産性を重芖するのであれば、各ツヌルの長所ず短所を明確に理解し、クラスのタスクに必芁なものを䜿甚する必芁がありたす。 

第 XNUMX に、システムを蚭蚈するずきは、耇雑さの増加を正圓化する必芁がありたす。 䜎結合の原理は誰もが知っおいるので、私たちは垞にこのこずを念頭に眮く必芁がありたす。 私は、それは特定のサヌビスのレベル、システム党䜓のレベル、そしおアヌキテクチャのランドスケヌプのレベルで適甚されるべきだず信じおいたす。 負荷パスに沿っお各システム コンポヌネントを氎平方向に拡匵する機胜も重芁です。 この胜力があれば、スケヌリングは難しくありたせん。

技術的な゜リュヌションに぀いお蚀えば、私たちは補品チヌムに新しい掚奚事項、アむデア、゜リュヌションのセットを準備するよう䟝頌し、次のワヌクロヌドの波に備えお実装したした。

ケシ

ロヌカル キャッシュず分散キャッシュの遞択には意識的に取り組む必芁がありたす。 堎合によっおは、同じシステム内で䞡方を䜿甚するこずが合理的です。たずえば、デヌタの䞀郚が本質的にショヌケヌス キャッシュであるシステムがありたす。぀たり、曎新の゜ヌスがシステム自䜓の背埌にあり、システムは倉曎されたせん。このデヌタ。 このアプロヌチでは、ロヌカルのカフェむン キャッシュを䜿甚したす。 

たた、システムが動䜜䞭に積極的に倉曎するデヌタがあり、ここではすでに Hazelcast で分散キャッシュを䜿甚しおいたす。 このアプロヌチにより、本圓に必芁な堎合には分散キャッシュの利点を掻甚し、分散キャッシュがなくおも枈む堎合には Hazelcast クラスタヌ デヌタを埪環させるサヌビス コストを最小限に抑えるこずができたす。 キャッシュに぀いおはこれたでにたくさん曞いおきたした。 ここで О ここで.

さらに、Hazelcast でシリアラむザヌを Kryo に倉曎したこずで、良い効果が埗られたした。 たた、Hazelcast の ReplicatedMap から IMap + Near Cache ぞの移行により、クラスタヌ党䜓でのデヌタの移動を最小限に抑えるこずができたした。 

ちょっずしたアドバむス: 倧量のキャッシュが無効化された堎合、XNUMX 番目のキャッシュをりォヌムアップしおからそれに切り替えるずいう戊術が適甚できる堎合がありたす。 このアプロヌチではメモリ消費量が XNUMX 倍になるように芋えたすが、実際には、これを実践したシステムではメモリ消費量が枛少したした。

リアクティブスタック

私たちは非垞に倚くのシステムでリアクティブスタックを䜿甚しおいたす。 私たちの堎合、これはコルヌチンを備えた Webflux たたは Kotlin です。 リアクティブ スタックは、入出力操䜜が遅いず予想される堎合に特に適しおいたす。 たずえば、ファむル システムやストレヌゞ システムを操䜜する䜎速サヌビスの呌び出しなどです。

最も重芁な原則は、通話のブロックを避けるこずです。 リアクティブ フレヌムワヌクには、内郚で実行される少数のラむブ サヌビス スレッドがありたす。 䞍泚意で JDBC ドラむバヌ呌び出しなどの盎接ブロッキング呌び出しを行うこずを蚱可するず、システムは単に停止しおしたいたす。 

゚ラヌを独自のランタむム䟋倖に倉えおみおください。 プログラム実行の実際のフロヌはリアクティブなフレヌムワヌクに移行し、コヌドの実行は非線圢になりたす。 その結果、スタック トレヌスを䜿甚しお問題を蚺断するこずは非垞に困難になりたす。 そしお、ここでの解決策は、すべおの゚ラヌに察しお明確で客芳的な実行時䟋倖を䜜成するこずです。

Elasticsearch

Elasticsearchを䜿甚する堎合は、未䜿甚のデヌタを遞択しないでください。 これも原則ずしお非垞に単玔なアドバむスですが、ほずんどの堎合、これは忘れられおいるものです。 䞀床に 10 件を超えるレコヌドを遞択する必芁がある堎合は、スクロヌルを䜿甚する必芁がありたす。 たずえお蚀えば、リレヌショナル デヌタベヌスのカヌ゜ルに䌌おいたす。 

必芁な堎合を陀き、ポストフィルタヌを䜿甚しないでください。 メむン サンプルに倧きなデヌタが含たれる堎合、この操䜜によりデヌタベヌスに倧きな負荷がかかりたす。 

該圓する堎合は䞀括操䜜を䜿甚したす。

API

API を蚭蚈するずきは、送信デヌタを最小限に抑えるための芁件を含めたす。 これは特にフロントに関連しお圓おはたりたす。このゞャンクションで、私たちはデヌタセンタヌのチャネルを超えお、クラむアントず私たちを接続するチャネルにすでに取り組んでいたす。 少しでも問題がある堎合、トラフィックが倚すぎるずナヌザヌ ゚クスペリ゚ンスが䜎䞋したす。

そしお最埌に、倧量のデヌタを䞞投げせず、消費者ずサプラむダヌの間の契玄に぀いお明確にしおください。

組織倉革

゚ロシュキナ・゚レナ氏、IT担圓副ディレクタヌ

隔離措眮が発生し、オンラむン開発のペヌスを急激に䞊げ、オムニチャネル サヌビスを導入する必芁性が生じたその時点で、私たちはすでに組織倉革の過皋にありたした。 

圓瀟の構造の䞀郚は、補品アプロヌチの原則ず実践に埓っお機胜するように移されたした。 珟圚、各補品の運甚ず開発を担圓するチヌムが結成されおいたす。 このようなチヌムの埓業員は 100% 関䞎し、自分たちにずっお望たしいものに応じおスクラムたたはカンバンを䜿甚しお仕事を構造化し、展開パむプラむンの蚭定、技術的実践、品質保蚌実践などを実斜したす。

幞運なこずに、圓瀟の補品チヌムの倧郚分はオンラむンおよびオムニチャネル サヌビスの分野に属しおいたした。 これにより、効率を損なうこずなく、可胜な限り最短の時間 (文字通り XNUMX 日) でリモヌト䜜業モヌドに切り替えるこずができたした。 カスタマむズされたプロセスにより、新しい䜜業条件に迅速に適応し、かなり高いペヌスで新機胜を提䟛するこずができたした。

さらに、オンラむン ビゞネスの最前線にいるチヌムを匷化する必芁もありたす。 その瞬間、これを実珟するには瀟内リ゜ヌスを䜿甚するしかないこずが明らかになりたした。 そしお、50 週間で玄 XNUMX 人が以前働いおいた゚リアを倉え、新しい補品の開発に携わりたした。 

これには特別な管理努力は必芁ありたせんでした。なぜなら、私たちは独自のプロセスの組織化、補品の技術的改善、品質保蚌の実践に加えお、チヌムに自己組織化、぀たり管理リ゜ヌスを関䞎させずに独自の生産プロセスを管理するよう指導しおいるからです。

クラむアントにずっお今䜕が重芁なのか、最初に実装すべき機胜は䜕か、スルヌプット胜力を高めるために䜕をする必芁があるのか​​、ビゞネスずの調敎に、その瞬間に必芁なずころにたさに経営資源を集䞭させるこずができたした。泚文の配達ず凊理のため。 これらすべおず明確なロヌルモデルにより、この期間䞭、本圓に重芁で必芁なものを生産䟡倀の流れに組み蟌むこずが可胜になりたした。 

リモヌトワヌクず急速な倉化により、ビゞネス指暙が党員の参加に䟝存する堎合、「すべお順調に進んでいたすか? はい、良さそうですよ。」 生産プロセスの客芳的な指暙が必芁です。 これらは私たちにあり、補品チヌムの指暙に興味がある人は誰でも利甚できたす。 たず第䞀に、チヌム自䜓、ビゞネス、䞋請け業者、そしお経営陣です。

10 週間に XNUMX 回、各チヌムで状況を把握し、XNUMX 分間メトリクスを分析し、生産プロセスのボトルネックを特定し、これらのボトルネックを解消するために䜕ができるかずいう共同゜リュヌションを開発したす。 ここでは、特定された問題がチヌムの圱響範囲倖である堎合、たたはすでに同様の問題に遭遇しおいる可胜性がある同僚の専門知識の範囲倖である堎合に、すぐに経営陣に助けを求めるこずができたす。

しかし、䜕倍にも加速するには (これがたさに私たちが蚭定した目暙です)、私たちはただ倚くのこずを孊び、それを日々の業務に実践する必芁があるこずを理解しおいたす。 珟圚、私たちは補品ぞのアプロヌチを他のチヌムや新補品にも拡匵し続けおいたす。 これを行うには、方法論者のオンラむンスクヌルずいう新しい圢匏を習埗する必芁がありたした。

チヌムがプロセスを構築し、コミュニケヌションを確立し、䜜業効率を向䞊させるのを支揎する方法論者は、本質的に倉化の䞻䜓です。 珟圚、最初のグルヌプの卒業生はチヌムず協力し、チヌムの成功を支揎しおいたす。 

珟圚の状況は、おそらく私たち自身もただ十分に気づいおいない機䌚ず展望を私たちにもたらしおいるず思いたす。 しかし、私たちが珟圚埗おいる経隓ず実践は、私たちが開発の正しい道を遞択したこずを裏付けおおり、将来的にこれらの新しい機䌚を逃すこずはなく、スポヌツマスタヌが盎面するであろう課題にも同様に効果的に察応できるでしょう。

所芋

この困難な時期に、私たちは゜フトりェア開発の基瀎ずなる䞻芁原則を策定したした。これは、この問題に取り組むすべおの䌁業に関係があるず思いたす。

人。 これがすべおの䞊に成り立っおいるのです。 埓業員は仕事を楜しみ、䌚瀟の目暙ず自分が取り組んでいる補品の目暙を理解する必芁がありたす。 そしおもちろん、圌らは専門的に成長するこずができたす。 

ТехМПлПгОя。 䌁業は、自瀟のテクノロゞヌスタックを掻甚する成熟したアプロヌチを採甚し、本圓に必芁ずされる胜力を構築する必芁がありたす。 それは非垞に単玔か぀明癜に聞こえたす。 そしお無芖されるこずが非垞に倚いです。

ПрПцессы。 補品チヌムずコンピテンス センタヌの䜜業を適切に組織し、ビゞネスずの察話を確立しおパヌトナヌずしお協力するこずが重芁です。

抂しお、それが私たちが生き残った方法です。 私たちの時代の䞻芁な理論は、額に鳎り響くクリック音ずずもに再び確認されたした

倚くの店舗や倚くの郜垂を拠点ずする巚倧なオフラむン ビゞネスであっおも、オンラむン ビゞネスを開発しおください。 これは単なる远加の販売チャネルや、䜕かを賌入できる矎しいアプリケヌションではありたせん (たた、競合他瀟にも矎しいアプリケヌションがあるためです)。 これは、嵐を乗り切るための緊急甚のスペアタむダではありたせん。

これは絶察に必芁なものです。 それには、技術的胜力ずむンフラストラクチャだけでなく、人材ずプロセスも準備する必芁がありたす。 結局のずころ、远加のメモリやスペヌスを賌入したり、新しいむンスタンスをデプロむしたりするこずは、数時間以内にすぐに行うこずができたす。 ただし、人やプロセスは事前にこれに備えおおく必芁がありたす。

出所 habr.com

コメントを远加したす