1. トップ
  2. NHKの「ニュースAPI」とは?概要を解説します

NHKの「ニュースAPI」とは?概要を解説します

NHK NEWSWEBより後に開発された「ニュース・防災アプリ」。

最新のニュースはもちろん、地域ごとの天気予報や気象警報・注意報、地震や津波などの災害情報をいち早くお届けしています。お住まいの地点を登録することで、各自治体が出す避難情報やNHKが取材したライフライン情報、また熱中症情報なども地域に応じてプッシュ通知しています。

リリース当初からアップデートを繰り返していますが、このアプリで最新ニュースを取得し表示する部分に、ニュースAPIが使われています。

ハッカソンでは同じシステム環境を別に用意して、イベント開催に臨みました。

ニュースAPIのシステム概要図は以下のようになっています。

全体概要としては、 全国ニュースと地域ニュースを受け取り、必要に応じたリクエストを返却するシステムをサーバレスでAWS上に構築しています。

データフロー概要

1. 全国ニュースと地域ニュース(地域局分)を出稿し配信する仕組みが別々にあり、それぞれの運用タイミングで最新ニュースがPUTされる

・各々のタイミングで開発され、ベンダーもシステム設計も異なる
・ニュースが出稿される運用タイミングももちろん異なる

2. 1でPUTされた各々の最新記事セット(XML)をJSONに変換するFargateを置き、S3に順次、ファイル更新して格納する

3. 取得したいニュースに応じたGETリクエストをALB経由でFargateに要求する

4. S3 Selectでデータ取得した後、必要に応じてソートやフォーマット変換結果を返却する

・ 最新ニュース、カテゴリー別のニュース、キーワード検索など特定のニュースを検索
・リクエスト回数や有効期限などの取得制限を設定

順を追って説明します

PUTリクエスト

全国ニュースについて解説します。NHKの放送センターに記事を入稿できるオンプレシステムがあり、24時間365日、最新ニュースを公開しています。

全国の記者がまとめた放送用の記事をWEBニュース用にリライトし、タイトル、関連タグ、関連ニュースなどのメタデータを付与できる専用のCMSを運用しています。

このオンプレシステムにWebニュースが出稿されると、都度、PUT用のニュースAPIに自動でリクエストします。

PUTリクエストされるデータはXML。オンプレシステムが抱えている編集可能な記事すべてがPUTされます。

当初、PUT用のAPIはAPI Gateway経由でLambdaに渡しパースした結果をS3に格納するプロトタイプも構築しました。

Lambdaでのプロトタイプは、ニュースAPIの主要機能が使えることを目的に開発しました。フォーマット変換、S3 Select、ページネーション処理など想定していた実装は問題ありませんでした。今後の開発も実用に耐えるか検証しましたが、API Gatewayのペイロード制限に引っかかりました。

(NHKのサイトを離れます)

デフォルトのクォータが10MBであり、引き上げもできません。
PUTリクエストされるXMLは通常は4-5MBです。全国ニュースのオンプレシステムは選挙や台風、緊急ニュースなどが輻輳することを考慮して、配信するXMLのサイズ容量について10MB以上を許容しています。ですので、API Gateway - Lambdaを採用せず、現在のALB - Fargate を採用しました。

ただ、Lambdaの可能性を確認することができましたし、他システムをサーバレスで構築していく良い開発になりました。

S3 Selectの前準備

ニュースAPIのデータストアにはS3を採用しています。RDSやインスタンスを要することなくそもそも高可用、高耐久性を誇るS3が利用できること、S3に格納したデータをそのままSQL(S3 Select)できることが主な理由です。またS3にデータレイクとしてデータを保管すれば、他システムでも活用できることができますし、他のデータストアより勉強コストも低いのも魅力でした。

S3 Select は、CSV、JSON、または Apache Parquet 形式で保存されたオブジェクトで機能します。

(NHKのサイトを離れます)

XMLはS3 Selectの対象外でしたので、JSONに変換するFargateをパーサとして用意し、PUTに応じて全更新されるJSONをS3に格納します。

GETリクエスト

カテゴリ別のニュース検索やキーワード検索など、S3に格納されたデータのサブセットのみを取得するFargate(GET用)が動作します。S3に格納されているJSONをS3 Selectした後、S3 Selectでは対応できないデータのソートやページネーションを司る値の返却をFargate側で実装し、ユーザーに要求されたフォーマットでデータを返却します。

GET用のAPIリクエストはREST形式に設計しました。各種クエリパラメータをURLに付与することで、特定の記事をフィルタリングできるようにしています。

耐久テストと負荷分散

GETリクエストの耐久性については、慎重に検証を実施しました。Fargate単体、ALB越し、CDN経由での負荷テストを実施、またS3 Selectの公式理論値の是非についても実験しました。

(NHKのサイトを離れます)

負荷テストにはAWS での分散負荷テストやJMaterを用いたシナリオテストも検討しましたが、NHKの他アプリでの実績やその際のテストDockerイメージも再利用できたので、Locustを採用しています。

単体テストでは頻繁に利用されるリクエストをベースに負荷をかけ、RPSとレスポンス速度を測定しました。

その結果、高負荷時の要因や状況を考察することができ、測定値をもとにFargateの構成やミドルウェアの設定変更を行い、運用上許容できるような設定値を調査しました。

また、AWS 公式ドキュメントには

アプリケーションでバケット内のプレフィックスごとに 1 秒あたり 3,500 回以上の PUT/COPY/POST/DELETE リクエストまたは 5,500 回以上の GET/HEAD リクエストを達成できます。

とあり、本システムの要であるS3 Selectについて、念には念をでS3のキープレフィックスによる上限値の検証も実施ました。

(NHKのサイトを離れます)

基本的なGETリクエストをシナリオとして想定し、Locust(EC2内部のDockerでmaster/Worker構成)を利用し多数のタスクを配置した負荷試験です。

最終的に、CDNでキャッシュされれば単一エンドポイントに対する大量アクセスは問題ないと判断し、GETリクエストにおけるFargateのvCPUやメモリを調整、AZで合計台数を負荷分散させてシステム運用しています。



斉藤一成  メディア開発企画センター

2004年入局。ソリューションアーキテクト、プロトタイパー、システム設計、データビジュアライズ。NHK NEWS WEB、NHKニュース・防災アプリ、AIリポーター・ヨミ子も。

トップページに戻る