テクニカルトレーナーのネタ帳 ! ~ 非同期処理とキュー
Author : 野邊 哲男
builders.flash 読者の皆さん、こんにちは ! シニアテクニカルトレーナーの 野邊 哲男 (のべ) です。
私は、テクニカルトレーナーとして主に AWS の有償トレーニングに登壇し、お客様に AWS をご理解いただき、より良く使っていただくための支援をしています。
トレーニングを受講されるお客様のバックグラウンドやスキルは、様々です。トレーニングのコースにもよりますが、AWS の初学者の方もいれば、IT の初学者、または ITの技術者ではないお客様が受講される場合もあります。
そんな中、トレーナーは限られた期間の中で、様々な受講者に「なるほど!わかった!」という体験をして頂けるよう、様々な工夫を行います。
本記事では、私がトレーニングで説明を工夫しているネタの一つを紹介したいと思います。
このネタにより、builders.flash の読者の皆さんにも、「なるほど ! わかった !」を体験してもらえると嬉しいです。
今回は、非同期処理とキューをテーマにしたネタを紹介します。
例えば AWSのトレーニングにおいて、Amazon SQS について説明する時は、「キューの機能を提供するマネージドサービスですよ」とか「キューのタイプとして、標準キューや FIFO キューがありますよ」など、Amazon SQS 自体の説明も重要ですが、そもそも、「非同期処理やキューとは何なのか、それにより、どのようなメリットがあるのか」ということをご理解いただくことが肝要です。
それを IT の初学者または IT の技術者ではないお客様にもわかりやすく説明するためのネタを紹介します。
まず身近な比喩で「キュー」を使わない場合の問題点を理解しよう
「非同期処理」や「キュー」というワードを出しても、そのままでは IT の初学者や IT の技術者でない方には、具体的なイメージを発想しにくいと思います。
そのため、身近な比喩を用いて説明します。その際、口頭で説明するだけでなく、次のような図を用いて説明することでイメージしやすくなります。
では、図をみていきましょう。まず、会社で部長さんが忙しく働いています。
そんな中、部下 A がやってきて、部長に稟議の決裁を依頼します。
稟議の内容は何でもいいです。新しい企画、取引、融資などの承認を得るための稟議だと思ってください。
稟議の決裁を依頼された部長さんは、今やっていた仕事をいったん中断して、稟議書の内容をチェックします。
でも一般的に稟議の決裁って、短時間でできるものではないですよね。
そのため、部長が稟議書の内容をチェックしている間は、部下 A はそれが終わるまで待たされることになります。
そうこうしている間に、他の部下 B や 部下 C も同様に部長に稟議の決裁を依頼しにやってきますが、今 部下 Aの稟議をチェック中なので、やはり待たされることになります。
ようやく部長さんの稟議のチェックが終わり、決裁が完了しました。部下 Aは決裁済の稟議書を受け取り、ようやく他の仕事に取り掛かることができます。ただし、部長さんは続けて 部下 B や部下 Cの稟議をチェックする必要があります。
このように、部長さんに仕事を依頼して、その結果が出るまで他の仕事をせずに待つ、ということは、「部下たちは、部長さんが稟議決裁処理をする時間 (タイミング) に合わせて動いている」ともいえます。このような処理形態のことを「同期処理」といいます。
クリックすると拡大します
同期処理自体が悪い手法ということではありません。ただしこの例の稟議書の決裁のように、時間がかかる処理の場合は効率が良いとはいえません。現に部下たちが待たされ、その間何も仕事していないことになりますよね。
また、「もし部長さんが体調不良で休んでしまった」ケースも考えてみましょう。
そうなると、部下たちは、もはや稟議の決裁を依頼するということ自体ができなくなりますよね。
では、稟議の決裁ができる人を増やせばどうでしょう ? 次の例をみてみましょう。
部長さん以外にも副部長 Y、副部長 Z が稟議の決裁を行えるようにすると、部下 A の稟議決裁が終わるまでの部下 B や 部下 C の待ち時間は短縮できそうですよね。また、部長さんが休んでしまって決裁が滞るということも防げます。
これはこの例における同期処理の問題を解消する一つの方策と言えます。
ただし、この方策も完全ではありません。1 つ 1 つの稟議の決裁にはやはり時間がかかるため、部長や副部長たちの決裁が終わるまでの時間については待たされる、ということになるからです。
さらに、部長や副部長の人数より部下の人数が多い場合だと、やはり前の人の稟議決裁が終わるまで待たされるということは起こりえますよね。
再び身近な比喩で「キュー」を使うことで問題が解消できることを理解しよう
今回の例における同期処理の問題においては、決裁箱を使うことで解消できます。会社では部長さんなど何か決裁を行う権限をもった役職の人のデスクの上に置かれている場合もありますよね。
では、決裁箱を使った場合はどうなるか見ていきましょう。
さきほどと同じく、部長さんに部下 A が稟議を依頼します。
しかし、同期処理と異なり、部下 Aは稟議書を部長のデスクにある未決の決裁箱に入れます。
入れた後は、部長の決裁を待たず、またすぐに他の仕事に取り掛かります。
部長は、自分の手が空いた時に未決の決裁箱から取り出して決裁すればいいわけです。
決裁が終わって稟議書を部下たちに返すときも、同じように決裁箱を活用できますね。
既決の決裁箱に稟議書を入れておけば、部下たちは自分が都合がいいタイミングで取りに来ることができます。
この決裁箱で稟議書の受け渡しをすることで、この例における同期処理で解消された点を挙げてみましょう。
- 部下たちは、部長の稟議決裁が終わるまで、待つ必要はなくなりました。
- 部長は、今やっている仕事を途中でやめずとも、自分が手が空いた時に稟議の決裁を行うことができます。
- たとえ部長が体調を崩して休んだとしても、部下たちは稟議書を作って未決の決裁箱に入れておくことができます。つまり部長が復帰するまで待つ必要はありません。
- 部下たちは、自分の都合いいタイミングで既決の決裁箱をチェックして、決裁が終わった稟議書を取りに来ることができます。
この例のように決裁箱を用いることで部下たちや部長は、それぞれ相手からの依頼のタイミングで決裁を行ったり、決裁が終わるまで待ったりする必要がなくなります。
つまり、相手の時間 (タイミング) に合わせて動く必要がありません。このような処理の事を「非同期処理」といいます。
これまでは決裁できる人が部長だけという前提で説明してきましたが、部長一人だと、決裁箱の中の稟議をすべて決裁するのはやはり大変ですよね。では、決裁箱を使ったうえで、さらに決裁できる人を増やすとどうでしょう ?
決裁箱に稟議書がたまっていても、決裁できる人が多ければその分手分けして稟議のチェックを行えるので、さらに効率を向上させることが期待できますよね。
さて、この例で非同期処理を実現するために重要な役割を果たしたのは、決裁箱でした。
では、IT の観点に切り替えてみるとどうなるでしょう。部下たちや部長は、連携して動くアプリケーションになります。
稟議書は、アプリケーション間で受け渡しするデータ (メッセージ) です。決裁箱は、そのメッセージの器になります。これを一般的に「キュー」といいます。
この例のように、アプリケーション間で連携しながら、時間のかかる処理を実施していくような場合は、キューを使用した非同期処理が一つのソリューションになるわけです。
AWS では、この「キュー」の機能を使用できるサービスの一つとして、Amazon SQS を提供しています。
・・・ということで、実際のトレーニングでは、このあと Amazon SQS のサービスの機能の説明やデモ、事例の紹介などを実施します。
この記事では Amazon SQS の説明はしませんが、興味があれば下記をチェックしてみてください。
非同期処理と同期処理
今回は、キューを使用した非同期処理を「稟議書をやりとりするための決裁箱」という現実世界の比喩で説明しましたが、他にも、下記のような比喩で説明される場合もあります。
- 郵便ポスト
- 手紙を送りたい人と、郵便局員さんの仕事を非同期で行うために設けます。
- こちらの記事 にも説明があるので、読んでみてください !
- ファーストフードの注文
- 注文する人と、フードを調理、提供する店員さんの仕事を非同期で行います。
- 注文後、「できたらお呼びしますので隣の窓口で受け取ってください」となるので、それまでレジにいる必要ないですよね。
また同期処理については、下記のような比喩も当てはまります。
- スーパーやコンビニのレジ
- レジ係の人は、お客さんが買い物カゴを出したら精算を同期的に行います。
- その場ですぐに品物の金額を計算して精算しますよね。
- 銀行のATM
- ATMは、お客さんの「引き出し」や「預け入れ」や「通帳記入」のリクエストを同期的に対応します。
- その場ですぐにお金を出し入れしたり、通帳に印字しますよね。
さて、こうして比喩をみてみると、非同期処理が適用できる処理の特性がみえてきそうですね。それは、「あとでやっておきますよ。」ということが許容される処理になります。逆に、「いま、その場でやってください。」ということが必須の処理だと、同期処理が必要になります。
例えば、ITのアプリケーションの処理だと、「今現在の株価が知りたい」とか「現在の在庫を全て引き当てたい」といった処理になります。そのため、どのような処理で同期処理が必要か、非同期処理でも大丈夫か、ということは要件と照らし合わせて検討していくことが重要です。
まとめ
いかがでしたか ? 前置きとしては長いかもしれませんが、まず「キューを使った非同期処理ではどのようなメリットがあるのか」というアーキテクチャ上のポイントをまず理解していただき、その後にキューの実装である Amazon SQS というサービスの理解を進めたほうが、サービスとその活用についての理解を深めることができそうだと感じていただけたと思います。
こういった理解を深めていく上での「ネタ」は他にもあるので、またいつか builders.flash で紹介したいと思います ! お楽しみに !
筆者プロフィール
野邊 哲男
アマゾン ウェブ サービス ジャパン合同会社
AWS トレーニングサービス本部 シニアテクニカルトレーナー
自分が体験した「成功」と「失敗」、そこから「学んだこと」を皆さんにお伝えするべく、日々 AWS のトレーニングの登壇をしています。
最近は「仮面サーバーレス」として サーバーレスのトレーニング や デジタルトレーニング の情報を皆様にお届けしています。
AWS を無料でお試しいただけます