シンプルなシステム最適化思考の実践

著者: Yan Xiaonan、JD Logistics

1. 問題

昨年の半ば、当時の深刻な流行状況にもかかわらず、私の親友(Hua Geと呼ぶことができます)は情熱を持ってビジネスを始めました.彼は彼のカフェテリアでいくつかの屋台を契約するために多額のお金を費やしました.元の会社で、突然上司になりました。社長になった華葛は、少しも手を抜かず、十分な市場調査を行うだけでなく、過去に食べたときの自分の苦労点をもとに工夫を凝らしました。肉料理は十数元、精進料理は十元近くで、問題が生じます.一般的に、男の子は数十ドルを費やしても、2-3皿しか食べられません.栄養は十分ではありません.ピットに入って、高い期待を持っていても実際の食べ物が美味しくないという状況に遭遇すると、経験はさらに悪くなります.

そのため、華兄弟は市場に出回っているマラタンのオプションの計量モードの特徴を借りて、自己選択計量モードを開始し、食卓にはさまざまな種類の既製料理(肉と野菜の両方)があり、誰もが主食のご飯とまんじゅうは無料、おかゆと汁物も無料、あとはサツマイモやとうもろこしなどの主食が有料で提供されます。下の図に示すように、主食、次にスープと粥を選択し、チェックアウトしてカードをスワイプします。

Hua Ge は元インターネット大手の金賞製品マネージャーにふさわしく、ユーザーの悩みを鋭く把握し、それに対応するソリューションを非常によく提供しており、セルフサービスの計量モードは、発売以来、同僚から温かく歓迎されています。は毎回長蛇の列です.11時30分に食事が始まるときでも.11時20分前には多くの同僚が並んで待っています.ここに書いているように長蛇の列の直感的な例を挙げたいと思います.五道口の棗餅店の入り口に長い行列ができていると思っていたのですが、後で考えてみると、京東ビル2号B棟4階のレストランの鍋の列の方が適切に思えました。 .

Hua 兄弟は最初はとても喜んでいましたが、1 か月後に収益の棚卸しを行ったところ、何かがおかしいことがわかりました.列が長く混雑しているように見えましたが、実際の収益は期待したほどではありませんでした. 華兄弟は注文価格が低い要因を分析し、除外しました.自己選択モードでは、誰もが見た後に注文したい料理がたくさんあります.行き来した後、彼らは大きなプレートを作ります.基本的に,注文価格20元から、あとは残りわずか 数量が少ない可能性あり 実際に分析してみると、料理の種類が多いため、一人一人に時間がかかっていることが判明野菜の選択工程で料理を選ぶ.また、スープとご飯を準備する必要がある.食事をピックアップするプロセス全体を完了するには長い時間がかかります.後ろの同僚は前の同僚の後ろで順番に料理を注文できますが、人それぞれ好みが違うので、料理の前にいる時間も人それぞれ違うので、前の同僚がある料理の前に少し時間をかけると、後ろの同僚は待ち状態になります。

また、極端な状況が発生することもあります。たとえば、お気に入りの料理の前に長時間滞在して選択する同僚もいれば、無料のスープを注文しながら時計回りと反時計回りを交互に行う同僚もいます。スープに散らばった野菜の葉と卵白を拾うために、華兄弟は、彼が以前に報告したマネージャーが、チリチキン野菜ボウルの奥に隠されたものを探して、何度もひっくり返ったのを自分の目で目撃しました。コショウ. 少しの鶏肉, 鶏肉が見つかるたびに, マネージャーは満足のいく笑顔を見せます. 実際, マネージャーが鶏肉を選んでいるとき, チーム全体は実際には完全な停滞状態にあります,チーム全体のパフォーマンスを見ると、食事プロセスの実行が非常に遅く、実際に食事代を支払う人の数が予想ほど多くないという事実につながります。

二、プログラム

その後、友人の集まりで、Brother Hua がこの問題について私と話し、彼は私に尋ねました。華兄弟のやや挑発的な要求を聞いた後、私は突然自分自身に重い責任を感じ、技術者の尊厳を守らなければならないと感じました. しばらく考えてみたところ、このビジネス上の問題は実際には技術的な問題と見なすことができると感じました. 食卓はシステムと見なすことができ、食事を注文するプロセスはインタラクティブなプロセスと見なすことができます.各呼び出しのパフォーマンスが低すぎて、システム全体のスループットが低すぎて、システム全体のパフォーマンスに影響を与えるため、呼び出しと見なすことができます。低、その時点で3ラウンド酔っていましたが、私の心はそれほど明確ではありませんが、華兄弟のためにいくつかの方法を考えるために最善を尽くしています.

2.1 システム拡張

頭に浮かぶ最初の解決策は拡張です. エンジニアリング技術の分野では、システムのパフォーマンスが標準に達していない場合、一般的に最初に思い浮かぶ解決策は拡張です. エンジニアリング分野での容量拡張は、一般的に垂直方向に分けることができます.拡張と水平拡張. 方法: 単一インスタンスのハードウェア能力を向上させることによって単一インスタンスの処理能力を増加させる垂直拡張と、インスタンス ノードを追加することによってシステム全体の処理能力を増加させる水平拡張.

この2つの理論を適用して、ダイニングテーブルのスループットを向上させる方法を見てみましょう. 垂直方向の拡張ではあまり効果がないようです. 調理用スプーンをドイツから輸入した金メッキのスプーンにアップグレードすることはできません. 良いことはありません.垂直方向に拡張する方法ですが、水平方向の拡張は多くのことを行うことができるようです。ただし、調理テーブルをさらに数セット追加して、並行して実行される 2 つの調理チームが直接 4 つ、または 8 つになることができるようにする必要があります。実現 マルチスレッドは並行であるため、システム全体のスループットがすぐに 2 倍になります. その効果は効果的であるだけでなく、すぐにも現れます. そこで、次の図に示すように、横方向の展開の模式図を描きました。

しかし、水平展開計画は華兄弟によってすぐに拒否されました. エンジニアリング技術の分野では、クラウドネイティブ技術の成熟に伴い、アプリケーションレベルの拡張と縮小は、システム処理能力を向上させるための非常に成熟したソリューションですが、ここでは、 Brother Hua が別のダイニング テーブルを設置することは不可能であり、Brother Hua が契約したブースには 2 つ目のダイニング テーブルを設置するような広いスペースがないことは言うまでもありません。

お金で解決できるこの世界の問題は問題とは呼びませんが、今の問題は華兄弟がお金を持っていないことです。

2.2 単一実行の最適化

システムの同時実行性を向上させる方法が失敗した場合、システムのスループットを向上させる方法は、1 つの要求の処理および実行時間を短縮することであり、これにより、システムが単位時間あたりに処理する要求の数が増加し、それによってシステムのスループットが向上します。食卓に関して言えば、1 人が注文する時間を短縮する必要が生じます。特に、Hua Ge の元マネージャーが 1 つの料理の前で多くの時間を費やす場合、どのように最適化すればよいでしょうか?

各呼び出しを分割してみましょう。各料理の前で野菜を作るプロセスをシミュレートして、ロジックの一部を実行するものとして理解できるため、野菜を作るプロセス全体を小さなコード ブロックに分解でき、呼び出し時間の合計は次のようになります。これは、これらのコード ブロックの実行時間の合計によって決定されます. エンジニアリング テクノロジの観点からは、各ロジックが予測可能な時間内に完了することを保証することであり、各ロジックは各ピースの実行を制御できます.タイムアウト判定ロジックによるコードの時間. 時間, これは百度検索の例です. 返される結果の多様性を高めるために,百度はアラジンアーキテクチャを立ち上げました. 各クエリがスターマップモデルによって分析された後, それはに分配されます.さまざまな垂直カテゴリ. 各垂直カテゴリは処理および生成されます. 独自のビジネス分野のカード, 次にアラジンのルートアプリケーションは、垂直カテゴリによって返された結果を集約してユーザーに返します. 特定の垂直カテゴリの実行は遅くなります.このようなアプリケーションは、検索者の経度と緯度に基づいて近くの o2o 薬局をフィルタリングし、店舗内の医薬品のプロモーション割引価格を計算します.この計算には多くの場合、長い時間がかかります.ということで、ルートアプリは380msのタイムアウト判定を追加します.すべてのバーティカルアプリは同じです.返すコンテンツがこの時間を超えた場合,結果は破棄されます.この例では,それぞれのタイムアウト設定を長くすることで,誰もが理解できるようにしましょう.リンク、これにより、プロセス全体が制御可能であることを保証できます。時間枠内で実行されるため、ユーザーエクスペリエンスの一貫性が保証されます。

プログラムには感情がないので、タイムアウトを増やしやすいが、食事を注文するシーンは異なる. 料理の後ろにウェイターを配置して、123 時間遅れてカウントし、123 回を超えると彼を前に押し出すことは不可能である. 5 秒. これはできません. まあ, その理由は, 料理を注文することは主観的で能動的だからです. 彼は料理の前に好きなだけ停止することができます. この問題について考えた後, ユーザーから注文する権利を奪う考えがあります.そこで私はBrother Huaのタイムアウト装置を設計しました.これは空港のセキュリティ通過後のターミナルへのコンベヤーベルトと同様に,ダイニングテーブルの両側に自動コンベヤーのセットを追加することです.両側で料理を注文している場合は、一人で歩き回る必要がなく、料理の前に全員が同じ時間滞在するので、一人が料理の前にいても問題ありません。ある料理を長時間出しすぎたり、目の前に誰かが長時間いることによる食卓のズレを回避したり、タイムラグによる全体の停滞の問題を解消し、食卓のスループットを向上させ、ベルトコンベアを追加することで、人が少ないときは非常にゆっくりと運転したり停止したりできるという利点があり、ピーク時にはベルトコンベアの速度を適切に上げることができます。ダイニングテーブル全体のスループット率を確保します。

華兄弟は私の天才的なアイデアを聞いて長い間驚いていました.可能性を計算した後,彼はこの方法が本当に実現可能であると感じました.国慶節または5月1日の休日まで待って建設を開始し、両方にコンベアベルトを追加するだけです.最後に、実行可能な計画を持っていたフア兄弟が少し興奮しているのを聞いて、彼の頬もわずかに紅潮しました。

2.3 非コアプロセスの排除

華兄弟が私の計画を受け入れてくれたのを見て、私はすぐに多くの励ましを感じたので、このプロセスを最適化するにはどうすればよいかを考え続けました.重要なのは、プロセスを簡素化し、ゴールデン プロセスと呼ばれることが多いコア プロセス リンクのみを維持し、メイン プロセスから非コア ビジネス ノードを削除することです。ある程度、メインプロセスのプロセス実行のロジックが少なくなり、エラーの可能性も減少します. JD Retailの注文計算プロセスを例にとると、小売側が決済するときに次のことを行う必要があります.

実際には、ショッピング カート内の関連する決済済みアイテムの削除、事前に占有されているセルフ ピックアップ キャビネットなど、決済で処理するメイン以外のノードがまだ多数ありますが、これらは非コア プロセスであり、メインプロセスから削除されました。

食卓の話に戻りますが、ゴールデンプロセスとは、収益に直結するプロセスであり、収益につながらないご飯、まんじゅう、汁物、おかゆなどが考えられます。非主要なプロセスとして. それは主要なプロセスから取り除かれます, これにより、すべての人のために食事を取る主要なプロセスが継続的に簡素化され、レストランのスペースも節約されます. 残りのスペースはいくつかのことに使用できます. 1つは、より多くを配置することです主食を注文するか、いくつかの料理を追加する. このようにして、収入を増やすことができます. 2つ目は、いくつかのセルフサービスのレジ装置を追加することです. 以前の2つのレジカウンターは、食事の注文が遅いときの需要を満たすことができます, しかし、今ではプロセス全体がこの方法では、2 つのレジが新たなボトルネックになり、特にコードをスキャンして直接支払いを行っている学生に遭遇した場合、ボトルネックはより明白になります。 、レジの数を増やすことで、レジの同時処理能力が向上し、食事をとるプロセス全体がスムーズになり、新しいパフォーマンスのボトルネックの発生が回避されます。完璧です!

この提案を聞いた Hua 兄弟は非常に満足しました.彼は、ダイニング テーブルが小さすぎて食器が十分ではないと感じていました.このように、スペースをより合理的に利益をもたらす食品に使用することができました.それはまさに Hua 兄弟でした.ブラザー・フア 私を尊重してくれることをとてもうれしく思います。

2.4 分散キャッシュ

さらに、インターネットがシステムのスループットを向上させ、1 回の実行時間を短縮するための非常に重要な魔法の武器は、分散キャッシング技術を使用することです.分散キャッシング技術は、システムのボトルネックとなる多くの呼び出しのデータ取得時間を大幅に短縮できます.処理時間を短縮するために、ここの食卓でも分散キャッシング技術は使えるのでしょうか?

先ほどメインプロセスから外した無料の主食とスープと粥は、キャッシングの原理、特にCDNキャッシングの原理を利用して、主食とスープと粥を同僚の食卓の近くに配ることができます. , 食事をする同僚が最も近い範囲で主食とスープとおかゆを提供できるようにする. 表面的には収益の増加はありませんが、実際には、1つは全員の食事体験が良くなり、2つ目は全員が食事が便利になり、食事の時間が短縮され、食卓の稼働率が向上します。次に食事をする同僚がすぐに席を見つけられるようにすると、エクスペリエンスも向上します。ここでは絵を描きませんが、誰もが理解できると思います。

3.あとがき

ブラザーフアは私の最適化計画を全体的に聞いた後、頭を下げて深い考えに陥りました. 久しぶりに頭を上げて私を見ました. 彼の目は少しぼやけていました.私の計画について体系的にコメントしたかった. 私のは、今何時ですか. フア兄弟が飲みすぎて頭を下げて寝てしまったことに気づきました.

{{o.name}}
{{m.name}}

おすすめ

転載: my.oschina.net/u/4090830/blog/8586941
おすすめ