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サービスを作るだけではなく、どのように作って、どのようにビジネスにつなげて 行くかが鍵です。また、フリーランスの方だけではなく、就職を考えている方にも 「実践力」を養うことで「即戦力」のエンジニアとしてのスキルを身に着ける事ができます!

興味のある方は今すぐお問合せください!



またよろしければ、ニュースレターの登録をお願いします!大体週一回お届けしています。ブログよりは一歩踏み込んだもっと濃い内容を発信しています。


Copyright(c) 2020 by Silicon Valley Super Ware, all rights reserved.

コメント

このブログの人気の投稿

ユーザーインターフェースの設計

足し算以外もできるようにする

改良版足し算プログラム