n週刊 自宅サーバを作る 創刊号

おことわり

本記事は勉強のメモがてら作成している。内容の正確性については一切保証できないためご了承いただきたい。誤りがあればご指摘いただければ大変うれしい!

きっかけ

なにかモノづくりとIT学習を兼ねた勉強方法が無いか探していたところ...

自宅サーバ作りたい...作りたくない?

と聞こえてきた。たしかに! しかもRaspberry Piという手ごろなハードが便利らしいとの情報を入手。
AWSなどのクラウドに触れる前に、まずはオンプレミスで作ってみて修行したい。

野望

超ざっくり、以下のようなキーワードで学習を進めたい。

  • Web サーバ
  • APサーバ
  • API
  • ネットワーク
  • セキュリティ
  • IoT

ステップとしては以下のような流れを想定。

  • STEP0
    • サーバとなるハードを調達/整備する
    • 環境構築する
      • 大変そう...?
  • STEP1
    • Webサーバを立てる
    • 何かしらデプロイ?する
    • ローカルホストで立ててアクセスする
  • STEP2
  • STEP3
    • アプリを作る
      • まずは簡単なものから
      • そのうち簡単なAPI設計とかもしてみたい
      • その前にWeb サーバとAPIの違いあたりも勉強せねば
  • STEP4
    • IoT機器として機能させる
      • 各種ハードの整備
      • アプリの整備
      • ここまで常時稼働させるなら電気代とか熱設計とかも考慮した方がいいのか?
    • 例えば
      • 気温を取ってDBに記録するとか
      • API経由でDBのデータを取ってこれるようにするとか

Raspberry Piとは

シングルボードコンピュータの1種。
ざっくり言うと手のひらサイズコンピュータのこと。(マイコンとはちょっと違うらしい?)
https://www.raspberrypi.com/
CPU、メモリ、オンボードチップセットからI/Oまで一通りそろっている。しかも1万円程度で購入できる。安い。それでいてデュアルディスプレイ対応などそれなりにハイスペック。いい時代になった。

OSはLinuxGUICUICLI?)も使える。

他のシングルボードコンピュータとの違い

他の有名どころとしてはArduino、M5Stackなどがある。違いはよくわからん。
以下を参考にする。
比べれば分かる!ラズパイ・Arduino・M5Stackの特徴と使い分け【第1回】

こんなときはRaspberry Pi(ラズパイ)から始めよう
① 映像を表示するデバイスの開発がしたい
② USB接続で使える機器を導入したい
③ パソコン上で動作するプログラムを扱いたい
④ 大部分はパソコン上のアプリケーションで動くが、簡単な入出力もしたい

.

ArduinoやM5Stackのほうがいい“かもしれない“ケース
①必ずしもパソコン上のアプリで動作させなくてもいいとき
②電源を立ち上げて瞬時に動作させたいとき
③消費電流を抑えたいとき

うーん、アプリをデプロイしたり、将来的にIoT機器として働かせたいeat-sushiとしてはRaspberry Piでよさそう?

Raspberry Piの種類

色々あるらしい。3とか4とか。
Pico(マイコン)やZero(低スペック)はもはや別物。
https://sozorablog.com/raspberry-pi-pico/
https://raspi-school.com/versions-of-raspberrypi/#Raspberry_Pi_%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA
https://manumaruscript.com/raspberrypi-model-comparison/
今回はサーバとして無理なくアプリを稼働させたいので、余裕のある4B+でよさそう。というか3以前のものは入手困難OR高額。

次回

Webサーバの立ち上げまでには何を準備すべきか学ぼう。

Wカップ日本代表戦で学ぶCDN

経緯

2022年Wカップは日本がジャイアントキリングを達成して決勝トーナメントに進出。その1回戦は非常に注目されていたが、その中でも特に「本田の解説がおもしろい!」とAbemaTVでのインターネット中継放送が人気であった。

当日は約2000万人(延べ)がAbemaTVの放送を視聴していたようだ。

同時にこれだけの人数に映像を配信する仕組み(バックエンドとフロントエンド)にはCDN(Content Delivery Network)が深くかかわっている。 (詳しくはAbemaやAkamaiの中の人たちが後日発表してくれるだろう。)

CDNとは

https://voice.stream.co.jp/technology/20211109/ https://www.cloudflare.com/ja-jp/learning/cdn/what-is-a-cdn/ https://www.akamai.com/ja/our-thinking/cdn/what-is-a-cdn 1つのコンテンツを1つのサーバにおいてしまうと、同時アクセスが増えるほどサーバ負荷が増大してそのうちパンクする。 そこでキャッシュサーバによりリソースを散在させ、加えてロードバランサーを用いて負荷の分散を図る。

自分が見ている映像はどこからきているのか?verAkamai

ブラウザの開発者ツール(デベロッパーツール)から簡単に確認できる。 F12などから開発者ツールを開き、Networkタブを選択する。

画像では伝わらないが、このNetworkの情報はリアルタイムで更新されており、常にリクエスト/レスポンスがやり取りされている。(わかりにくい場合はWaterfallを降順にするとよい)

Name列に注目すると、○○.mp4となっているものが2種類あり、それぞれ「audio」「video」とある。これが今見ている映像だと思われる。

カーソルを合わせてクリックすると詳細が表示される。

Request URL: https:// *****.akamaized.net/seoul

とある。 AkamaiCDNサービスの一つである。 驚くべきはソウルのCDNサーバへリクエストを飛ばしているということ!すごい。ロードバランシング極まれりといった感がある。

自分が見ている映像はどこからきているのか?verCloud Front

再度接続しなおし、同様の手順で調べると今度はCloud Frontだった。 (Via部を見ればわかる)

ちなみにリクエスト先のdig結果はこちら

$ dig text live-playout-cf-sel.p-c2-x.abema-tv.com

; <<>> DiG 9.11.9 <<>> text live-playout-cf-sel.p-c2-x.abema-tv.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 2235
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: a827fec471825dca0377ecbf638e32319a6fd0d5cd7f1245 (good)
;; QUESTION SECTION:
;text.                          IN      A

;; AUTHORITY SECTION:
.                       10800   IN      SOA     a.root-servers.net. nstld.verisign-grs.com. 2022120500 1800 900 604800 86400

;; Query time: 15 msec
;; SERVER: 192.168.10.1#53(192.168.10.1)
;; WHEN: Tue Dec 06 03:02:28 JST 2022
;; MSG SIZE  rcvd: 136

;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11182
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: a827fec471825dca67fe28d7638e32318f536a06f9c3a4e1 (good)
;; QUESTION SECTION:
;live-playout-cf-sel.p-c2-x.abema-tv.com. IN A

;; ANSWER SECTION:
live-playout-cf-sel.p-c2-x.abema-tv.com. 58 IN A 13.32.50.68
live-playout-cf-sel.p-c2-x.abema-tv.com. 58 IN A 13.32.50.107
live-playout-cf-sel.p-c2-x.abema-tv.com. 58 IN A 13.32.50.78
live-playout-cf-sel.p-c2-x.abema-tv.com. 58 IN A 13.32.50.106

;; Query time: 10 msec
;; SERVER: 192.168.10.1#53(192.168.10.1)
;; WHEN: Tue Dec 06 03:02:28 JST 2022
;; MSG SIZE  rcvd: 160

合わせ技

Abemaは普段からAkamaiを利用しているらしいが、今回はAWS CloudFrontやGoogleGCPも併用していた。CDNサービスの合わせ技だ。他にも入場制限のsorryページはFastlyだったらしい。

トラフィックがいかに異常だったか

今回の延べ視聴者数が2000万人を超えているということも驚きだが、もっと定量的なデータもある。

JPNAPサービス(Internet Exchange) https://www.jpnap.net/ix/traffic.html 詳細までは筆者は理解していないが、ある種のトラフィックを計測しておりグラフが見られる。

これによると普段に比べて2T bits/sもトラフィックが多いことが分かる!普段のおよそ2倍である。

おまけ:H.264コーデック

今回AbemaはH.264コーデックの映像を配信していたようだが、H.264は次世代のH.265と比べて圧縮率が半分であるため、トラフィック増大に拍車をかけていた可能性がある。 https://atcl-dsj.com/useful/4678/

どのように調べたか。 開発者ツール→Networkと進んでNameが「manifes.mpd」となっているものの詳細を眺める。Responseにほしい情報がある。

codecs="avc1.4D4028" とあるが、これを検索するとGoogle Castのページにたどり着き、H.264コーデックであることが分かる。 おもしろいね。

参考ツイート