Webサービスのチューニング 価値あるサービスに仕上げる
Silicon Valley Super Ware
2020年7月23日
Webサービスのチューニング
Webサービス内で外部のサービスに関係するデータを更新すると、 更新した後の処理が必要になります。この更新後の処理のやり方を工夫すると同じようなサービスでも かなり違った「使用感」になります。
個人向けのサービスでは、既に取得しているデータをそのまま更新するのも 一つの方法です。
データを使うのが基本的に利用中の人に限定される場合が殆どなので この方法でも、利用者の待ち時間を大きく減らす事が可能になります。しかし、同じような機能のサービスでも会社などで使う場合は状況が変わってきます。 ある人が更新したデータを他の利用者が必要にするケースが多くなるためです。
そのためには、データの更新を上手くやる必要が出てきます。
複数の人が利用する場合のデータの同期
会社などで複数の利用者が顧客情報などの同じデータを共有して利用するサービスの場合 誰かが更新したデータを何らかの方法で取得できると、サービスの利用価値がより 高い物になります。この場合、個人で利用するサービスの場合の様に、既に取得しているデータだけを更新しても 他の人には最新データはいきわたりません。 外部のサービスのデータ自体は、外部サービスに更新の処理をしているので更新されています。 しかし、更新前に既にデータを取得している利用者がいた場合何らかの方法で 外部のサービスから更新したデータを再取得しないと最新のデータは利用できません。
このように、取得しているデータを細心にする処理は「同期」と呼ばれます。
一つのシンプルな方法は、「使う前に毎回データを取得する」というやり方です。このやり方を使えば、利用の際は必ず最新のデータを使うことができます。 今回作っているサービスで言えば、毎回宛先のリストと、登録送信者のリストを 新しいいメッセージフォームを開く度に取得する方法です。
ところがこの方法だと毎回フォームを開くたびにデータを取るので、フォームを開くのに時間がかかります
この問題が元々、サービスの実装方法の改善を考えた大きな理由でした。
この方法の問題は、データが更新されていなくても、毎回データを読む必要があります。 取り込むデータが小さい場合はこの方法でも十分ですが、宛先の登録が増えたりした場合には その分待ち時間も長くなります。
そう考えると、何か別の方法で待ち時間を減らす事が出来れば、よりよいサービスにすることが出来ます。
いろいろやり方はありますが、今回は「Firebase」を利用する方法を紹介します。
Firebaseのアクセスは高速!
実際に、SendGridからデータを取得するのと、同じデータをFirebaseから取得するのでは Firebaseの方が圧倒的に高速です。Firebaseの利用例によくあるアプリに「チャット(メッセージング)」アプリがありますが、 ほぼリアルタイムで送信した情報を手に入れる事ができます。
今回は、Firebaseのデータベース機能である「Cloud Firestore」を利用してデータを取得する というやり方で性能の改善を行う方法を紹介します。
簡単に一言で言うと、SendGridからデータを取得する代わりにFirebaseからデータを取得するようにする 方法です。
SendGridのデータと同じデータをFirebaseに取り込んで、利用者はFirebaseからデータを取得するように すれば、冒頭に挙げた問題を解決できます。具体的にはどうやるか?
まずは、サービスを立ち上げた際は、毎回バックエンドにリクエストしてFirebaseのデータを更新するようにします。 バックエンドは、SendGridからデータを受け取ったらFirebaseに書き込みます。 これで、サービスを立ち上げた時にはFirebaseはその時点では最新のデータに更新されます。Firebaseのデータを更新した時点で、各クライアント(ブラウザー)は、Firebaseからデータを取得してそのデータを使います。 当然システムの起動時は、Firebaseの更新と、データの取得で多少の待ち時間は発生しますが、 実質はFirebaseのアクセスはSendGridに比べると高速なので実質的な待ち時間は直接SendGridからのデータを使うのと余り変わりません。
データを更新する際は、まずSendGridにデータの更新のリクエストを出して、そのデータを基にFirebaseを更新します。
Firebaseのアクセスは高速なので毎回、メッセージを送るたびにデータを取得しても直接取得するよりは 待ち時間は大幅に短縮可能です。
しかし、さらに良い方法があります!
Firebaseには「OnSnapshot」という機能がサポートされています。
この機能を使うと、Firebaseのデータが更新されると自動で、既に取り込んでいるデータの更新処理をする事ができます。 つまり、誰かがデータを更新したら自動で既に取り込んでいるデータも更新されるという事です。 この処理はほぼリアルタイムで行うことができるので、利用者はほぼ待ち時間なくサービスが使えるというわけです。
同じような機能のWebサービスですが、利用者の使い勝手を追及すると実際の機能以外でも 出来る事は沢山あるものです。より良い、そして価値のあるWebサービスにするには 単にプログラムの技法だけではなく、既存のサービスを含めて、良い物を組み合わせて より使いやすく快適なサービスにすることが成功の秘訣です。
シリコンバレースーパーウエアでは、単に機能を作るだけではなく、利用者を第一に考えた 使いやすく価値のあるサービス作りの手法を提供しています。 単純に、Webサービスを作るだけではなく、どのように作って、どのようにビジネスにつなげて 行くかが鍵です。また、フリーランスの方だけではなく、就職を考えている方にも 「実践力」を養うことで「即戦力」のエンジニアとしてのスキルを身に着ける事ができます!
興味のある方は今すぐお問合せください!
またよろしければ、ニュースレターの登録をお願いします!大体週一回お届けしています。ブログよりは一歩踏み込んだもっと濃い内容を発信しています。
コメント
コメントを投稿