2023年 春期 応用情報技術者試験 問4
ITニュース配信サービスの再構築
H社は、IT関連のニュースを配信するサービスを提供している。このたび、OSや開発フレームワークの保守期間終了を機に、システムを再構築することにした。
【現状のシステム構成と課題】
ITニュース配信サービスでは、多くの利用者にサービスを提供するために、複数台のサーバでシステムを構成している。配信される記事には、それぞれ固有の記事番号が割り振られている。現状のシステム構成を図1に、ニュースを表示する画面一覧を表1に示す。
画面名 | 概要 |
---|---|
ITニュース一覧 | 記事に関連する画像、見出し、投稿日時を新しいものから順に一覧形式で表示する。一覧は一定の記事数ごとにページを切り替えることで、古い記事の一覧を閲覧することができる。 |
ITニュース記事 | ITニュース一覧画面で記事を選択すると、この画面に遷移し、選択された記事の見出し、投稿日時、本文及び本文内に表示する画像の URL、関連する記事の記事番号のリストを返す。さらに、選択された記事と関連する一定数の記事の画面と見出しを一覧形式で表示する。 |
現状のシステム構成では、PC、タブレット、スマートフォン、それぞれに最適化したWebサイトを用意している。APでは、RDBとのデータ入出力とHTMLファイルの生成を行っている。また、関連する記事を見つけるために、夜間にWebサーバのアクセスログをRDBに取り込み、URL中の記事番号を用いたアクセス解析をRDB上のストアドプロシージャによって行っている。
最近、利用者の増加に伴い、通勤時間帯などにアクセスが集中すると、応答速度が遅くなったり、タイムアウトが発生したりしている。
【新システムの方針】
この課題を解決するために、次の方針に沿った新システムの構成とする。
・aの機能を用いて、一つのWebサイトで全ての種類の端末に最適な画面を表示できるようにする。
・APでの動的なHTMLの生成処理を行わない、SPA(Single Page Application)の構成にする。HTML、スクリプトなどのファイルはWebサーバに配置する。動的なデータはAPからWeb APIを通して提供し、データ形式は各端末のWebブラウザ上で実行されるスクリプトが扱いやすいbとする。
・RDBへの負荷を減らし、応答速度を短縮するために、キャッシュサーバを配置する。
・ITニュース一覧画面に表示する記事の一覧のデータと、ITニュース記事画面に表示する関連する記事に関するデータは、キャッシュサーバに格納する。キャッシュサーバには、これらのデータを全て格納できるだけの容量をもたせる。その上で、記事のデータは、閲覧されたデータをキャッシュサーバに設定したメモリの上限値まで格納する。
・RDBのデータベース構造と、関連する記事を見つける処理は現状の仕組みを利用する。
APで提供するWeb APIを表2に示す。
Web API名 | 概要 |
---|---|
ITNewsList | 表示させたいITニュース一覧画面のページ番号を受け取り、そのページに含まれる記事の記事番号、関連する画像のURL、見出し、投稿日時のリストを返す。データは、キャッシュサーバから取得する。 |
ITNewsDetail | ITニュース記事画面に必要な見出し、投稿日時、本文、本文内に表示する画像のURL、関連する記事の記事番号のリストを返す。1件の記事に対して関連する記事は6件である。データは、キャッシュサーバに格納されている場合はそのデータを、格納されていない場合は、RDBから取得してキャッシュサーバに格納して利用する。キャッシュするデータは①LFU方式で管理する。 |
ITNewsHeadline | ITニュース記事画面に表示する、関連する記事1件分の記事に関する画像のURLと見出しを返す。データは、キャッシュサーバから取得する。 |
次に、Webブラウザ上で実行されるスクリプトの概要を表3に示す。
画面名 | 概要 |
---|---|
ITニュース一覧 | 表示させたいITニュース一覧画面のページ番号を指定してWeb API "ITNewsList"を呼び出し、取得したデータを一覧表として整形する。 |
ITニュース記事 | 表示させたい記事の記事番号を指定してWeb API "ITNewsDetail"を呼び出し、対象記事のデータを取得する。次に、表示させたい記事に関連する記事の記事番号を一つずつ指定してWeb API "ITNewsHeadline"を呼び出し、関連する記事の表示に必要なデータを取得する。最後に、取得したデータを文書フォーマットとして整形する。 |
【キャッシュサーバの実装方式の検討】
キャッシュサーバの実装方式として、次に示す二つの方式を検討する。
(1)各APの内部にインメモリデータベースとして実装する方式
(2)1台のNoSQLデータベースとして実装する方式
APのOSのスケジューラーが5分間隔で、ITニュース一覧画面に表示する記事の一覧と、各記事に関連する記事の一覧のデータとを更新する処理を起動する。(1)の場合、各AP上のプロセスが内部のキャッシュデータを更新する。(2)の場合、特定のAP上のプロセスがキャッシュデータを更新する。
なお、APのCPU使用率が高い場合、Web APIの応答速度を優先するために、更新処理は行わない。
【応答速度の試算】
新システムにおける応答速度を試算するために、キャッシュサーバの二つの方式をそれぞれテスト環境に構築して、本番相当のテストデータを用いて処理時間を測定した。その結果を表4に示す。
No. | 測定内容 | 測定結果 | |
---|---|---|---|
方式(1) | 方式(2) | ||
1 | WebサーバがITニュース一覧画面又はITニュース記事画面のリクエストを受けてから、HTMLやスクリプトなどのファイルを全て転送するまでの時間 | 60ms | 60ms |
2 | APがWeb API "ITNewsList"のリクエストを受けてから、応答データを全て転送するまでの時間 | 100ms | 200ms |
3 | APがWeb API "ITNewsDetail"でリクエストされた対象記事のデータがキャッシュサーバに格納されている割合 | 60% | 90% |
4 | APがWeb API "ITNewsDetail"のリクエストを受けてから、キャッシュサーバにある対象記事のデータを全て転送するまでの時間 | 60ms | 120ms |
5 | APがWeb API "ITNewsDetail"のリクエストを受けてから、RDBにある対象記事のデータを全て転送するまでの時間 | 300ms | 300ms |
6 | APがWeb API "ITNewsHeadline"のリクエストを受けてから、応答データを全て転送するまでの時間 | 15ms | 20ms |
インターネットを介した転送時間やWebブラウザ上の処理時間は掛からないと仮定して応答時間を考える。その場合、ITニュース一覧画面を初めて表示する場合の応答時間は、方式(1)では180ms、方式(2)ではcmsである。ITニュース一覧画面のページを切り替える場合の応答時間は、方式(1)では100ms、方式(2)ではdmsである。次に、記事をリクエストした際の平均応答時間を考える。
Web API "ITNewsDetail"の平均応答時間は、方式(1)では156ms、方式(2)ではemsである。したがって、Web API "ITNewsHeadline"の呼び出しも含めたITニュース記事画面を表示するための平均応答時間は、方式(1)ではfms、方式(2)では258msとなる。
以上の試算から、方式(1)を採用することにした。
【不具合の指摘と改修】
新システムの方式(1)を採用した構成についてレビューを実施したところ、次の指摘があった。
(1)ITニュース記事画面の応答速度の不具合
ITニュース記事画面を生成するスクリプトが実際にインターネットを介して実行された場合、試算した応答速度より大幅に遅くなってしまうことが懸念される。
Web API "g"内から、Web API "h"を呼び出すように処理を改修する必要がある。
(2)APのCPU使用率が高い状態が続いた場合の不具合
APに処理が偏ってCPU使用率が高い状態が続いた場合、②ある画面の表示内容に不具合が出てしまう。
この不具合を回避するためには、各APのCPU使用率を監視して、しきい値を超えた状態が一定時間以上続いた場合、APをスケールアウトして負荷を分散させる仕組みをあらかじめ用意する。
(3)関連する記事が取得できない不具合
関連する記事を見つける処理について、③現状の仕組みのままでは関連する記事が見つけられない。Webサーバのアクセスログを解析する処理を、APのアクセスログを解析する処理に改修する必要がある。
以上の指摘を受けて、必要な改修を行った結果、新システムをリリースできた。