たろログ2

実験的運用により、記事品質が乱高下することがあります。予めご了承ください。

計画テンプレート

よく利用している、計画を立てるためのテンプレート。

ゴールの確認

求められているものを確認する

期日の確認

成果物の洗い出し

情報収集

  • 以前に同じものを作った人はいないか?
  • 手順はないか?

プロセスの洗い出し

成果物の生産に必要なプロセスをすべて洗い出す

今回において不要なプロセスを除外する。


見積もり作成可能なタイミング1


計画

テスト仕様書の作成


見積もり作成可能なタイミング2


手順の作成

優先度付け

スケジューリング


見積もり作成可能なタイミング3


実施

振り返り

  • 見積もりからずれた場合、原因を考える。
  • 進行に合わせて計画を調整し、リスケジュールする。

スループットと IOPS

前書き

AWS EC2 の EBS について学んでいたところ、ストレージのタイプにおいて「スループット」、「IOPS」という用語が出てきた。

前から両者の違いがあいまいなままにしていたので、この機会にしっかりと調べてみた。

スループット (Throughput)

単位時間当たりのデータ転送量、もしくは処理能力のことである。

データが、どれだけの量、そのデバイスを通過できるのかを表現するものと考えればいい。

CPU 然り、ディスクの I/O 然り、メモリの I/O 然りである。

データ転送量なので、ディスクなどにおいては 2.4GB/s などで表現される。

CPU などにおいては、クロック周波数などで表現される。

IOPS (Input / Output Per Second)

単位時間当たりの読み込み、書き込みの回数を表す。

シーケンシャルアクセスによって測定した場合と、ランダムアクセスによって測定した場合で大きく結果が変化するため、条件を揃えて実施した結果が比較される。

例として、 4KB ランダムライトIOPS などが挙げられる。 4KB のデータをランダムに書き込んだ際の IOPS の値であり、これが比較可能な指標として用いられる。

HDD と SDD の性能差

IOPS

ディスクを物理的にシークする HDD と、電気的に処理している SDD では、圧倒的に SDD の方が IOPS の値はよい。

一般に、HDD よりも SSD の方がこの値は優れるといえる。

スループット

一方で、断片化が発生しているようなことがなく、データにシーケンシャルにアクセスできれば HDD も理論値が出るはずであるであり、この場合においてスループットについては、 HDD と SDD の性能に大差がない場合が考えられる。

一概に、SDD の方が HDD よりもスループットがいいとは言えない。

Ref

紙のノートにまとめたやつ。

2022-11-25 スループット、IOPS ノート 20221125180416412.pdf - Google Drive

PHP と Python の比較

前書き

最近、 Python をよく使うようになった。

PHP との違いについて書く。

環境構築が楽

PHP に比べて、圧倒的に環境構築が楽である。

それも特に、 Windows での環境構築が楽なのが非常に助かっている。

「エコシステムが整っている」というらしい。

プリインストールされている

まず、 Linux ディストリビューションにおいても、 Windows においても、 Python はプリインストールされており、特に何をするでもなく Python は利用できる。

パッケージや dll のインストールがいらない。

PHP のパッケージを使う際、 Linux では so ファイル、 Windows では dll ファイルの設置が必要である。

Linux においては apt や dnf などでインストールできるパッケージが用意されていることが多いので多少簡単だが、 Windows では dll をインストールする必要があり、これが非常に面倒くさい。

Python は pip コマンドで対象のライブラリをインストールするだけでよく、非常に環境構築が楽である。

デバッグの設定が楽

PHPデバッグを行うためには XDebug のセットアップが必要だが、これが結構難易度が高く、詰まるところが多い。

特に、 Windows 環境においては顕著である。最近ようやくローカルでデバッグできるようになった。

Python では、特に何を設定するでもなく、PyCharm でブレークポイントを設定してデバッグ実行すると「バチッ」とコード実行が止まり、デバッグすることができたので感動した。

オブジェクトの考え方が徹底されている

PHP ではプリミティブ扱いの文字列 (String) などがオブジェクト扱いであり、メソッドを生やして処理を行うことができる。

これにより、コードの書き味が異なる感じがする。

Ruby などもそうだが、個人的にこのようにオブジェクトの考え方が徹底されている言語設計の方が好みである。

多機能ではない印象

PHP は最近のバージョンで便利な記法が増えているが、 Python でやろうとするとできない印象 (Constructor property promotion など)。

他、関数についても PHP の方が豊富だなという印象がする。

Python は仕様変更が PHP に比べゆっくりで、安定している印象。

そのために、機能追加は比較的ゆっくりなのかもしれない。

2022-11-19 AWS SAA-C03

AWS Solution Architect Associate (SAA) の更新をしないといけないため、学び直しを行った。

概要

合格点

720点

配点

100 ~ 1000点

セクション

セキュアなアーキテクチャの設計

ここでは、システムがセキュアになることを目的とする。

そのようなシステムを実現できるセキュアなアーキテクチャの設計となるよう、サービスを選定や設定を行う。

アクセス制限を行うようシステムを構成しましょう。

  • IAM のベストプラクティスに従ったアクセス許認可を設計しましょう。
  • プライベートサブネット構成によるネットワークアクセスの制限
    • (関連) VPN、NAT、ルーティング
  • インスタンスへのネットワークアクセス許認可
    • (関連) Security Group、ネットワーク ACL

データは暗号化するようシステムを構成しましょう。

  • S3 のオブジェクトの暗号化 (暗号化オプション)
  • KMS 管理の秘密鍵を利用した暗号化 (S3 のオブジェクト、 EC2 のボリュームなど)

弾力性に優れたアーキテクチャの設計

ここでは、スケーリング等の弾力性に優れたアーキテクチャの設計となるよう、サービスを選定する。

また、耐障害性のような信頼性についても意識して利用するサービスの選定を行う。

適切なストレージを選定しましょう。

多層アーキテクチャの構成で、システムを構成しましょう。

例として、ストレージ層であれば

  • インスタンスの停止なしに容量の増減を行うことのできる EFS
  • そもそもスケーリングの必要のない S3

例として、アプリケーション層であれば

  • ELB
  • SQS
  • Auto Scaling
  • Lambda

例として、DB 層であれば

  • RDS

なぜ信頼性・弾力性に優れたアーキテクチャ

「あらゆるものは、必ず壊れる」ため。

高性能アーキテクチャの設計

適切なストレージを選定しましょう。

適切なデータベースを選定しましょう

  • RDS
  • DynamoDB
  • RedShift

キャッシュを利用する形でシステムを構成しましょう

  • CloudFront
  • ElastiCache

スケーリングする形でシステムを構成しましょう。

  • CloudWatch + Auto Scaling + ELB による構成等

コストを最適化したアーキテクチャの設計

課金体系に照らして最適な形でシステムを構成しましょう。

  • リザーブインスタンスを利用しましょう。
  • 利用のない EBS ボリュームは削除しましょう。
  • S3 の転送量を減らすために CloudFront のキャッシュを利用しましょう。
  • CPU の遊休時間を減らしましょう。

人の手のかからない形で、システムを構成しましょう。

  • 冗長化やスケーリングによって、障害が発生しにくい構成
  • 環境作成・設定変更の自動化、省力化

関連サービス

  • AWS Config
  • AWS Cloud Formation
  • AWS Inspector
  • VPC フローログ
  • Cloud Tail
  • Cloud Watch Logs

2022-11-09 フォーマットの変更を分けてコミットする

手順

リフォーマッタを無効にして変更を行う

自動リフォーマッタを有効化したまま変更を行うと、変更の差分とフォーマット修正の変更が混ざる。

自動リフォーマッタを無効化して開発を行う。

変更のプルリクエストを提出する

変更のみで、プルリクエストを行う。

コードの変更のみの差分が出る。

フォーマットの修正を行う

変更したファイル全てにおいて、自動リフォーマッタによる修正を行う。

変更のプルリクエストを行う

フォーマット修正のみで、プルリクエストを行う。

フォーマット修正のみの差分が出る。

課題

フォーマット修正なしに変更を行わないといけない

ツールによる自動フォーマット修正はコードを読みやすくする効果があり、可能であれば実施した状態でコードの修正を行いたい気持ちはある。

しかし、この手法ではそれが行えないのは懸念点である。

ツール探し、利用、開発

上記のような手順を踏まずに適宜リフォーマットをしながら開発を行い、最後変更をコミットする段になって、変更のコミットとリフォーマットのコミットを分けて行えるような Git 関連のツールがあれば、ぜひ利用したい。

今のところ見つかっていない。

また、世の中にないのであれば開発してみたい。

2022-09-28 Windows に PHP のバイナリをインストールする

前書き

Xampp でインストールするのが一般的であると思われるが、バイナリを設置することでインストールすることもできる。

単に PHPコマンドラインから利用したいだけであれば、これで足りる。

環境

  • Windows10
  • PHP 7.4

インストール方法

下記ページから、バイナリの zip ファイルをダウンロードする。

特に理由がなければ Non Thread Safe 版がおすすめ。

PHP For Windows: Binaries and sources Releases

zip ファイルを解凍し、任意の階層に設置する。自分は「C:\Users\taro_hida」の階層に設置した。フォルダ名称は「php-7.4.30-nts-Win32-vc15-x64」である。

この zip ファイルに含まれる「php.exe」を実行することで phpインタプリタが利用できる。

パスを通す

環境変数「PATH」を設定し、パスを通す。Administrator 権限の必要ない、ユーザの環境変数を変更する形で問題ない。

以下のような形で設定した。

C:\Users\taro_hida\php-7.4.30-nts-Win32-vc15-x64

拡張を有効化する

デフォルトでは、 PHP拡張はすべて無効化されている。

php.ini を変更し、拡張を有効化する。

以下、コメントアウトを外す

extension_dir = "ext"

デフォルトで有効化できる拡張をすべて有効化すると、以下のようになる

extension=php_bz2.dll
extension=php_curl.dll
extension=php_fileinfo.dll
extension=php_gd2.dll
extension=php_gettext.dll
extension=php_gmp.dll
extension=php_intl.dll
extension=php_imap.dll
;extension=php_interbase.dll
;extension=php_ldap.dll
extension=php_mbstring.dll
;extension=php_exif.dll      ; Must be after mbstring as it depends on it
;extension=php_mysql.dll
;extension=php_mysqli.dll
;extension=php_oci8.dll      ; Use with Oracle 10gR2 Instant Client
;extension=php_oci8_11g.dll  ; Use with Oracle 11gR2 Instant Client
extension=php_openssl.dll
;extension=php_pdo_firebird.dll
;extension=php_pdo_mysql.dll
;extension=php_pdo_oci.dll
;extension=php_pdo_odbc.dll
;extension=php_pdo_pgsql.dll
;extension=php_pdo_sqlite.dll
;extension=php_pgsql.dll
;extension=php_pspell.dll
;extension=php_shmop.dll

2022-09-27 RRDtool の概要

RRD とは、 Round Robin Database の頭字語 (acronym)。

Round Robin 方式については参考元の記事を参照。

最初に、利用するディスク領域すべてを確保する。

時系列データを順に保存していき、確保した領域を使い果たした場合は最も古い領域にデータを上書きする。

こういう仕組みなので

  • 時間経過によってディスク使用量がどんどん増えていくというようなことはない。

一方

  • データが何もない状態であっても、データベース作成時点ですごい容量を食う

という特徴がある。

Ref

RRDtool - rrdtutorial (oetiker.ch)