web-dev-qa-db-ja.com

メッセージングアプリ内でキャッシュはどのように使用されますか?

私は実際にウェブ開発について勉強しています。なぜ多くのWebアプリやチャット(Whatsapp、Telegram、Discordなど、多くのこと!)がキャッシュを使用しているのかを尋ねたところです。つまり、RedisやMemcachedのようなキャッシュシステムを学んだ後、それらを実際に使用する方法を尋ねていました。たとえば、Redisは限られた時間(期限切れになる)だけページ全体をキャッシュできます。または、ログインセッションを保存できます。

しかし、どれほど多くのチャット(ウェブ、デスクトップ、モバイル)アプリがキャッシングを使用していますか?メッセージをキャッシュに保存することは知っていますが、一般的なデータベースだけで十分ではないでしょうか?また、メッセージはどのようにキャッシュで「ソート」されますか?キャッシュを理解するのは難しいようです。

5
DanielVip3

メッセージをキャッシュに保存することは知っていますが、一般的なデータベースだけで十分ではないでしょうか?

したがって、執筆時点では、Whatsappは...15億人を超えるユーザー( https://www.statista.com/topics/2018/whatsapp / は2017年12月の時点で1.5bを示しています)。特定のユーザーが送信するメッセージの数を掛けると、lotのメッセージがあります。そして確かに、データベースをシャーディングして、ユーザーベースの独自のサブセットを持つデータベースをたくさん持つことができます。

ただし、適切な永続ストレージには、いくつかの欠点があります。

  • レイテンシは大きなものです。メッセージングアプリを使用しているユーザーは、自分のメッセージnowを求めています。彼らはに応答したい。マスターデータベースに移動して、どのシャードに移動するかを特定し、ディスクからデータが読み取られるのを待ちます-合計します。
  • Costは一見大きなものです。適切な冗長ストレージは、(ほとんどの場合)インメモリキャッシュよりもコストがかかります。それらは(通常)より多くの電力を必要とし、さらに多くの冷却を必要とします。永続的なストレージは、単純なキャッシュサーバーよりも頻繁に失敗する傾向があり、メンテナンスコストが増加します。セキュリティと保持の要件が高まり、さらにコストがかかる傾向があります。

キャッシュの方が適しているものもあります。 「ボブが入力しています...」のような一時的なものは、データベースに移動する必要はありません。サービスによってはキャッシュに入れられない場合もありますが、「ボブがこのメッセージを読んだ」というメッセージは、数日以上保持する必要がないことがよくあります。オンラインステータスを保持する必要はありません。連絡先リストは頻繁に変更されないため、おそらくキャッシュに保持されます。

特にチャットアプリでは、recentメッセージへのアクセスが多く、1日以上前に書かれたものはほとんど見られません。頻繁にアクセスされるものは、予想される使用法に従ってキャッシュされ、パフォーマンスに大きなメリットをもたらします。

また、メッセージはどのようにキャッシュで「ソート」されますか?

オフハンドはわかりません。これは、サービスによって多少異なると思います。それぞれのワークフローと実装はわずかに異なります。つまり、特定の問題に対処するために、キャッシュの使用方法が少し異なります。たとえば、slackのようなものはチャネルベースの整理を好むかもしれませんが、1対1アプリは宛先ユーザーごとにメッセージを整理するかもしれません。

4
Telastyn