[2020年7月] Google Cloud Certified – Professional Data Engineer日本語版(プロ認定):暗記ポイント、意味不明単語リストの解説など(4)

どうも、すえきあおいです。

前回に引き続き、Professional Data Engineer日本語版の模試を受けて、勉強して理解したことや暗記ポイントと思われる箇所を、私なりに噛み砕いてピックアップしております。

いよいよ明日(7/29)!4連休、遊んじゃったことが悔やまれます。

※この記事は予約投稿なので書いてる今(7/28)とちょっとズレがあります。

 

模擬試験の解説を読んでわかった暗記ポイント(続き)

Pub/Subにおける重複メッセージの検出

各メッセージには Pub/Sub によって一意の「message_id」が割り当てられるため、これを使用してサブスクライバーが受信した重複メッセージを検出できます。ただし、同じデータに対する複数のパブリッシュ リクエストによって重複する結果となったメッセージを検出することはできません。こうしたメッセージを検出するには、パブリッシャーによって一意のメッセージ識別子が指定されている必要があります。

つまり、重複の検出には、message_idに加え、クライアント(端末)側でも各クライアントを一意に識別できるものが必要。

 

at-least-once 配信とは、、、

Pub/Sub は、確認応答されていないメッセージの配信を繰り返し試行する。

メッセージがサブスクライバーに送信されたら、サブスクライバーはメッセージを確認応答する必要があります。メッセージは、配信のために送信された後、サブスクライバーが確認応答するまでは未処理とみなされます。

つまり、場合によっては重複が発生する。

 

BigQueryアンチパターン

①自己結合

自己結合は行依存。BigQueryで使うと出力行が2倍になる可能性がある。

→代わりに、ウィンドウ関数を使う。

 

②データスキュー(パーティション スキュー)

skew(スキュー):歪み。

サイズがバラバラのパーティションにデータが分割された状態。

スロット間で送信されるデータの量が不均衡になる。スロット間でパーティションを共有することはできないため、1 つのパーティションが特別に大きい場合は、サイズの大きいパーティションを処理するスロットが遅くなる可能性があります。

→クエリがいくつかの値に大きく偏ったキーを処理する場合は、できるだけ早い段階でデータをフィルタ処理する。

 

③クロス結合(デカルト積)

1 つ目のテーブルの各行が 2 つ目のテーブルのすべての行に結合されているクエリです(両側に一意ではないキーが存在します)。最悪の場合の出力は、左側のテーブルの行数に右側のテーブルの行数を掛けたものになります。極端な場合、クエリが終了しないことがあります。

→GROUP BY句で事前集計する、もしくは、ウィンドウ関数を使う。

 

④単一行を更新または挿入する DML ステートメント

BigQuery をオンライン トランザクション処理(OLTP)システムのように扱おうとしていることになります。BigQuery は、ポイント検索ではなく、テーブル スキャンを使用したオンライン分析処理(OLAP)に重点が置かれています。

→一度に 1 行ずつの更新または挿入は避けて、バッチ処理する。

→そもそもBigQueryではなくCloud SQLを使う。

 

継続的デリバリー パイプラインのアーキテクチャ

GKE と Spinnaker(スピニカー。単語の意味は後述) を使用すると、安定的な継続的デリバリー フローを作成できる。

アプリの更新を継続的にユーザーに配布するには、ソフトウェアを確実にビルド、テスト、更新する自動プロセスが必要です。コードに加えた変更は、アーティファクトの作成、単体テスト、機能テスト、本番環境ロールアウトで構成されたパイプラインに自動的に届けられる必要があります。場合によっては、コードの変更をユーザーベース全体に配布する前にユーザーのサブセットにのみ適用し、実際の動作を確認したいケースもあるでしょう。こうしたカナリアテストのいずれかで不十分なことが判明した場合は、ソフトウェアの変更を自動プロセスですばやくロールバックできる必要があります。

処理の流れ↓

  1. デベロッパーがコードを変更してリポジトリに push します。
  2. Cloud Build によって、変更が検出され、Docker イメージのビルドとテストが行われてから Spinnaker にイメージが push されます。
  3. Spinnaker はイメージを検出すると、そのイメージを Canary にデプロイして、Canary デプロイメントのテストを行います。手動で承認すると、Spinnaker によってそのイメージが本番環境にデプロイされます。

Cloud IoT Core

広範囲に分散したデバイスの接続、管理、データ取り込みを、セキュリティを維持しながら簡単に行うためのフルマネージド サービス。

 

MQTTかHTTPか?
デバイスの接続と通信用にMQTTとHTTPの2つのプロトコルをサポートしています。デバイスは、「ブリッジ」(MQTTブリッジまたはHTTPブリッジ)を介してCloud IoT Coreと通信します。

MQTT (Message Queue Telemetry Transport):IoT分野における標準的な通信プロトコル。Telemetry、つまりノード側(IoTデバイス側)からデータをPushする。

HTTP:「コネクションレス」プロトコル。HTTPブリッジを使用すると、デバイスはCloud IoT Coreへの接続を維持しません。代わりに、要求を送信し、応答を受信します。

 

Cloud IoT Coreは公開鍵(または非対称)認証を使用します。

デバイスは、秘密鍵を使用してJSON Web Token(JWT)に署名します。

 

MQTTにおける、3つのサービス品質(QoS)レベル

  1. QoS 0:最大で1回配信
    • →構成が頻繁に更新され(秒または分単位)、デバイスがすべての更新を受信する必要がない場合に役立つ。
  2. QoS 1:少なくとも1回配信
    • →デバイス構成にとって最も安全なモード。デバイスが最終的に最新の構成を取得することを保証する。
  3. QoS 2:正確に1回配信

※Cloud IoT CoreはQoS 2をサポートしていない。

 

意味不明単語リストの解説(続き)

シャーディング

DataBaseの負荷分散方法の1種です。 水平分割とも呼ばれます。 同じテーブルを複数のDataBaseに用意し、1つのテーブルに保存していたレコードを分散する事で各DataBase内に保持されるレコードの量をへらす負荷分散の方法です。

 

Spinnaker(スピニカー)

無料でオープンソースの継続的デリバリーソフトウェアプラットフォーム。

もともとはNetflixによって開発され、Googleによってすぐに採用および拡張された。

 

カナリアリリース(カナリアテスト)

変更をインフラストラクチャ全体に展開してすべての人が利用できるようにする前に、変更を小さなユーザーのサブセットにゆっくり展開することにより、本番環境に新しいソフトウェアバージョンを導入するリスクを軽減する手法です。

 

ZigBee

Bluetoothと同じく近距離無線通信規格の一つ。

 

Telemetry(テレメトリ)

SNMPではサーバ側からデータ送信を要求(Pull)していたが、Telemetryではノード側から自動的にデータ送信を行う(Push)。

 

ジッター (Jitter)

電気通信などの分野において、時間軸方向での信号波形の揺らぎの事であり、その揺らぎによって生じる映像等の乱れのことも指す。 「いらいらする」という意味の英語”Jitter”に由来する。

 

切り捨て型指数バックオフ

ネットワーク アプリケーションの標準的なエラー処理方法で、クライアントはリクエスト間の遅延を増加させながら、失敗したリクエストを定期的に再試行します。

 

キープアライブ値

ブローカー(仲介)がクライアントがPUBLISHメッセージなどのメッセージを送信することを期待している時間間隔(秒単位)。

インターバル中にクライアントからブローカーにメッセージが送信されない場合、ブローカーは自動的に接続を閉じます。指定するキープアライブ値は1.5倍されるため、10分キープアライブを設定すると、実際には15分間隔になることに注意してください。

最良の結果を得るには、クライアントのキープアライブ間隔を最低60秒に設定します。

 

アイドル時間制限

Cloud IoT Coreには20分の独自のアイドル時間制限があります。この制限に基づいて、キープアライブ間隔が長くても、クライアントが20分間メッセージを送信しない場合、クライアント接続は自動的に終了します。

 

本番試験を目前に控えて、、、勉強した感想

片手間ですが1ヶ月ほど勉強しました。

GCP歴は2年くらい。

資格の賞味期限?は2年となっていますが、確かに、2年も勉強しなかったら完全に置いてかれるだろうなってスピード感でどのプロダクトも進化しまくってますからね。どの分野においても、勉強はやめちゃダメですね。一生学び続けます。とはいえ、今回の勉強で点と点が繋がった、的な学びが多かったので、今後は差分アップデートで済むから楽だろうなと。

 

これまでは場当たり的に、必要なプロダクトについて必要な範囲だけキャッチアップしてとりあえず触ってみるということを繰り返していたのですが、ここにきて包括的に勉強できてよかったです。

この記事をここまで読んでくださった方は、「オメーこんなことも知らねーのかよ!?」ってビックリされたかもしれませんが、、、はい、結構いろいろ知りませんでした(恥)

知らないことたくさんあったし、あの時知ってればこれ使って楽できたのにー!というのもチラホラで、もっと早く受けとけばよかったなとw

フリーランスエンジニアとしてもGCPプロ認定資格はアピールになるので、GCP触ってみたい方は、勉強して損はないかと思います。

 

いよいよ、試験は明日(7/29)!がんばりまーす!

それでは!

本番の結果はこちら

末岐 碧衣
  • 末岐 碧衣
  • フリーランス のシステムエンジニア。独立後、一度も営業せずに月収 96 万円を達成。1986年大阪生まれ。早稲田大学理工学部卒。システムエンジニア歴 12年。
    2009年、ITコンサルティング企業に入社。3年目でコミュ障が爆発し人間関係が崩壊。うつにより休職するも、復帰後はコミュ障の自覚を持ち、「チームプレイ」を徹底的に避け、会社組織内においても「一人でできる仕事」に専念。社内外から評価を得た。
    無理に「チームプレイ」するよりも「一人でできる仕事」に専念した方が自分も周囲も幸せにできることを確信し、2015年フリーランスとして独立。

コメントする