ぱと隊長日誌

ブログ運用もエンジニアとしての生き方も模索中

志あるチームであれ

チームリーダーとして、このチームをどこへ導くか(リーダーシップ)を考えることは最重要課題ととらえています。私がチームとメンバーに求めることを、現時点の考えに基づいてまとめてみます。いずれ変わるかもしれないけれど、その時はこの基準に対してなにが・どうして変わったかを説明できるようにしたい。

チームの存在意義は、個人だけでは成し遂げられないことを達成するためにある、と考えています。個人で動けばコミュニケーションコストが発生しません。こんな風にチームとしての方針を打ち出す必要もない。ただ、ひたすら前に進めばいい。でも、それでは到達点に限界があります。この限界を引き延ばすためにチームがあります。そして、チームが個人の寄せ集めではなく、お互いを補完し合う存在になれたなら、より遠くまで行けるはずです。

個人とチームの信念は直交しています。個人としての信念は各自が考え、それに従って生きていくもの。一方、チームとしての信念はチーム全員がこの軸に従って行動するものです。

それでは、システムの開発・運用チームとして、我々のチームが持つべき信念は何かを考えます。

まず、チームのミッションは「ビジネスをシステムで支える」です。システムは目的ではなく手段です。会社はビジネスで利益を生みます。そして、会社でシステムエンジニアとして働く我々はシステムという手段でビジネスを支えるのです。これがサブミッションとして開発・運用のプロジェクトやタスクとなります。

また、我々はプロのエンジニアです。プロとしての姿勢を忘れず、日々の業務に真摯に向き合ってください。各自が自分の立場で何をすべきか、チームに対してどんな貢献ができるのか、考えてください。

各自が目指すものは違っても、チームとして目指すものは同じ方向を向いていたい。そういう志を持ったチームを作りたいと考えています。

目指すチーム像

AWS Certified Cloud Practitioner (CLF-C01) 合格までの道のり

はじめに

2023/07/30 に AWS Certified Cloud Practitioner (CLF-C01) に合格することができました。今回の挑戦に向けて、どのような準備を行ったかまとめます。

なお、私のAWS経験は5年以上前にWEBシステムを1~2年程度運用していました。

教材と利用方法

教材の略記は個別に定義しました。

AWS認定資格 クラウドラクティショナーの教科書

略記:CLF教科書

Kindle版を0円(つまりタダ!)で入手できます。

AWSの経験があって、試験範囲のキーワードと解説を学ぶのであれば有用です。ただ、未経験だとイメージし辛いと思います。その場合は他の参考書を選んだほうが良いかもしれません。

CloudTech

CloudTech | AWS初学者を導く体系的な動画学習

略記:CloudTech問題集

全資格試験の問題集や講義動画を提供しています。

複数のコースが用意されており、私は問題集のみ利用したかったので「資格会員」を選びました。有料会員になるのであれば、割引コードを紹介している記事などを探してみるとよいかもしれません。

AWS Skill Builder

Self-paced digital training on AWS - AWS Skill Builder

略記:AWS Skill Builder

資格に役立つ講座や練習問題が無料・有料で公開されています。資格に関連するコンテンツを探すのであれば、資格試験のページからたどるのがアクセスしやすいです。

AWS Certified Cloud Practitioner 認定 | AWS 認定 | AWS
「試験を準備する」セクションの以下を利用しました。いずれも無料です。

各コンテンツでは日本語を選択しました。また、字幕版・実写版があれば実写版を選択しました。

特に「AWS クラウドラクティショナーの基礎知識」は体系的に学ぶためにとても役立ちました。トレーナーの演出に思わず固まることもありましたが、内容はとても良いです。動画とノートに分かれていますが、動画にも目を通すことをお勧めします。

勉強時間と進め方

勉強時間の測定には Studyplus のスマホアプリを利用しました。

学習総合サイト Studyplus(スタディプラス)

教材 時間
CLF教科書 4.25
CloudTech問題集 9.75
AWS Skill Builder 10.0
合計 24.0

CLF教科書を読み進めつつ、CloudTech問題集に取り組みました。CloudTech問題集の模擬試験で80点以上取れることを基準とし、受験することにしました。

その後、AWS Skill Builder で公開されているコンテンツの有用さに気づき、集中的に取り組みました。

挑戦の振り返り

試験には1回目で合格できました。スコアは 850 / 1000 (合格スコア:700)でした。

CLF は AWS の全体像をつかむために有用な資格試験でした。最初の一歩を踏み出すために適しています。

AWS Skill Builder が無料の部分でも想像以上に有用でした。事前に知っていれば、このコンテンツから取り組んでいました。

私は過去の経験があったので比較的短期間で取得できましたが、各自の経験に基づいて勉強時間の調整をお勧めします。

PostgreSQL は "soft edge" によるデッドロックを回避することがある

PostgreSQLデッドロック検出アルゴリズムの説明に "soft edge" という記載があります。

PostgreSQL 15.3
src/backend/storage/lmgr/README

2. If a process A is behind a process B in some lock's wait queue, and their requested locks conflict, then we must say that A waits for B, since ProcLockWakeup will never awaken A before B. This creates additional edges in the WFG. We call these "soft" edges, as opposed to the "hard" edges induced by locks already held. Note that if B already holds any locks conflicting with A's request, then their relationship is a hard edge not a soft edge.

A "soft" block, or wait-priority block, has the same potential for inducing deadlock as a hard block. However, we may be able to resolve a soft block without aborting the transactions involved: we can instead rearrange the order of the wait queue. This rearrangement reverses the direction of the soft edge between two processes with conflicting requests whose queue order is reversed. If we can find a rearrangement that eliminates a cycle without creating new ones, then we can avoid an abort. Checking for such possible rearrangements is the trickiest part of the algorithm.

この "soft edge" の例が PostgreSQL ML で説明されていました。
Re: Soft deadlocks

記載されていた例を実行可能な形にしました。トランザクションが2つあり、どちらで実行したかは TX1, TX2 で記載しています。

CREATE TABLE t(v INTEGER);

BEGIN; -- TX1

BEGIN; -- TX2

LOCK TABLE t IN ACCESS SHARE MODE; -- TX1

LOCK TABLE t IN ACCESS EXCLUSIVE MODE; -- TX2

LOCK TABLE t IN ACCESS EXCLUSIVE MODE; -- TX1

実行順通りにロックを獲得するのであれば、TX2 は TX1 の ACCESS SHARE LOCK の解放を待ちます。そして、TX1 は TX2 の ACCESS EXCLUSIVE LOCK の取得・解放を待つことになります。これはデッドロック状態です。

ですが、TX2 はロックをまだ獲得していません。つまり、TX1 はロック解放を待っているわけではないので、"soft edge" となります。

そして、この場合は TX1, TX2 のロック取得順序を入れ替えることでデッドロック状態を解消できます。つまり、以下の順序で実行されたことにします。

CREATE TABLE t(v INTEGER);

BEGIN; -- TX1

BEGIN; -- TX2

LOCK TABLE t IN ACCESS SHARE MODE; -- TX1

LOCK TABLE t IN ACCESS EXCLUSIVE MODE; -- TX1

LOCK TABLE t IN ACCESS EXCLUSIVE MODE; -- TX2

このようにロック順序を入れ替えることで、トランザクション分離レベルに影響しないのかが気になりました。ですが、Serializable Snapshot Isolation (SSI) で用いるのは SIREAD ロックという別の仕組みであり、今回のロック入れ替えは影響しないと思われます(裏付けまでは取れておらず、推測です)。
PostgreSQL のトランザクション & MVCC & スナップショットの仕組み

また、"soft edge" がロックを「待機」している場合に発生する、というのもポイントです。TX1 がロックを要求した後に TX2 がロックを要求しています。ですが、TX1 のロック要求が処理されていないのであれば、TX2 のロック要求が先行したことにしても、各トランザクションには矛盾が発生しません。トランザクション全体でみれば操作の実行順が入れ替わっていますが、トランザクション単位でみれば矛盾は起きていない、ということです。これは Serializability の検証の為に、各トランザクションの操作を並び替え、直列に実行した場合と同じ結果になるかを確認するのと同じです。やはり、ロック順序の入れ替えはトランザクション分離レベルに影響しないようです。