今週勉強したことまとめ(2017/11/27 ~ 2017/12/03)

今週はAWS re:Inventが開催され様々な新サービスが発表された。 サービス数が多すぎて全部を追うことができていないが、 今回特に気になったのはコンテナ周りのサービスで Managed KubernetesのEKSとFargeteという二つのサービスが発表された。 アプリケーションの実行環境の選択肢が増え、より自社のサービスに適した構成を構築できるようになったが、 AWSのサービスを組み合わせて適切なインフラを設計する難易度がどんどん上がっている気がする。 今後は機械学習で最適なアーキテクチャを提案するサービスが出てきてくるのではないだろうか。 そのほかに今週は、あまりにも忘れていることが多いので システムプログラミング周りやネットワーク周りの基礎を勉強し直し始めた。

AWS

re:Invent

CloudFront

Aurora

  • DBクラスターが作成される
  • DBクラスターは以下の二つから構成される
    • 一つ以上のDBインスタンス
      • プライマリインスタンス
        • 読み込みと書き込みの操作をサポートし、クラスタボリュームに対する全てのデータ変更を実行する
        • Aurora DBクラスターには一つのプライマリインスタンスが存在する
      • Auroraレプリカ
        • 読み取りオペレーションのみをサポートする
        • DBクラスタは15までのレプリカを持つことができる
    • 一つのクラスタボリューム
      • インスタンスのデータを管理する
      • 複数のアベイラリティゾーンにまたがる単一の仮想データベースストレージボリューム
      • SSDドライブを利用する
      • 単一リージョンの複数のアベイラリビリティゾーン間のデータのコピー
      • 3つのアベイラビリティゾーン間で自動的にレプリケートされる
      • データベースのデータ量が増えるにつれて自動的に容量が増加する
      • 最大64TB
  • エンドポイント
    • Amazon AuroraDBクラスターのDBインスタンスに接続するための口
    • ホストアドレスとポートがコロンで区切られたURL
    • クラスターエンドポイント
    • 読み取りエンドポイント
      • Auroraレプリカに接続するためのエンドポイント
      • DBクラスターへの読み取り専用接続のロードバランシングを提供する
      • 接続リクエストを利用可能なレプリカに分散する
    • インスタンスエンドポイント
      • 特定のDBインスタンスに接続するDBインスタンス用のエンドポイント
      • DBクラスターへの接続の直接制御を提供する
        • 例えば、クライアントアプリケーションで接続ではなく読み取りワークロードによるロードバランシングが必要な場合
    • インスタンスエンドポイントを使用する前にクラスターエンドポイントか読み取りエンドポイントが使用できないか確認する
  • 信頼性
    • ストレージの自動修繕
      • ディスクボリュームの障害を自動的に検出し、すぐにそのセグメントを修繕する
      • 修復時に他のボリュームないのデータを使用して、修復されるデータが最新であるようにする
    • キャッシュのウォームアップ
      • データベースがシャットダウン後に起動した場合バッファプールキャッシュをウォームアップする
      • メモリ内のページキャッシュに保存された既知のクエリのページをバッファプールに事前ロードする
      • ウォームアップをしなくて良いのでパフォーマンスが向上する
      • ページキャッシュはデータベースとは別のプロセスで管理される
      • このため、データベースに障害が発生した場合でもページキャッシュはメモリの残り、バッファプールはデータベース起動時に最新の状態にウォームアップされる
    • クラッシュ回復
      • クラッシュから瞬時に回復する
  • クラスターの作成
  • [Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス

コンテナ

システムプログラム

  • http://www.coins.tsukuba.ac.jp/~syspro/2017/
  • http://www.coins.tsukuba.ac.jp/~yas/
  • OSとは
    • OSはハードウェアの違いを隠蔽し、ユーザがプログラムを実行するための使いやすい環境を提供する
    • ハードウェアを抽象化した概念を提供することで、いろいろなコンピュータで共通に使用できる実行環境を提供する
    • OSが提供する抽象概念
      • (ハードウェア機能) -> (抽象概念)
      • プロセッサ、メモリ -> プロセス
      • ストレージ -> ファイル、ディレクト
      • コンピュータ間の通信 -> プロセス間通信
      • 割り込み -> シグナル
      • コンピュータ共有時の保護 -> アクセス制御
  • API
  • シェル
    • CLIを通して、ユーザからのコマンドを受け付け、解釈・実行し、その結果を出力する機能を提供するプログラム
    • コマンドの入出力をファイルや別のコマンドにするリダイレクションやパイプという機能を提供する
      • 比較的単純な機能を持つ複数のコマンドを組み合わせて複雑な機能を実現することが可能
  • コマンド
    • ユーザがコンピュータに与える命令
    • UNIXはシェルから利用できる非常に多くのコマンドを提供している
    • コマンドはシェルとは別のプログラムの場合もあるし、シェルに組み込まれている場合もある
  • システムコール
    • OSカーネルの機能を直接呼び出すためのインタフェース
    • できるだけシンプルになるように設計されている
  • ライブラリ・ミドルウェア
    • プログラムの部品となる関数の集合
  • システムコールもライブラリもCプログラムから呼び出す場合はどちらも関数呼び出しの形態で使用できるため同じに見える
  • UNIXカーネル
    • プロセッサの特権モードというハードウェアの全てを制御できる動作モードで動作し、直接ハードウェアを制御するプログラム
    • UNIX環境で特権モードで動作するプログラムはカーネルだけ
    • その他のプログラムは、ユーザモードと呼ばれるハードウェアへのアクセスが制限された環境で動作する
  • ライブラリ関数とシステムコールの違い
    • 実行時にライブラリ関数はそれを使用するプログラムの一部となるが、カーネルは完全に独立したプログラムとして存在する
    • プログラムとライブラリは同じプロセス空間にある、しかしカーネルは別の場所(カーネル空間)にありプロセスからアクセスできないところで実行されている
    • プロセスはシステムコールを通じてのみカーネルの機能を使うことができる
    • プログラムからの入出力は結局はシステムコールを通じて実行される
    • ライブラリだけで実現される機能もある
      • 文字数を数えたり、文字列を比較したりといった、入出力を伴わないがプログラムでよく使われる部品となるような機能をライブラリは提供している
  • プロセス
    • プログラムを実行中のもの
    • 一つのプログラムを複数実行することができる
    • プログラムは、CPUが実行できる機械語命令とそれにより処理されるデータの集合がファイルに格納されたもの
    • プロセスは実行中の情報
  • manコマンド
    • man -k キーワードでキーワードに関連するコマンドを表示してくれる

Redis

Network

  • CIDR
    • アドレスクラスの概念を気にしないことで、IPアドレスの割り当てや経路選択などの自由度をあげる仕組み
    • IP空間を分割する仕組みの一つ
      • アドレスクラスだとBとCの間で大きさが違いすぎて非効率
      • ブロックの大きさを柔軟に変更できる
    • /16で65536のホスト

Spring Boot

  • Spring Boot外部設定

  • ロック待ち

    • SpringBoot/jUnit/MySQL/DBSetup/AssertDBで単体テスト実行時、テストが終了しなくなることがあった
    • 一つのテストケースだけでは発生しないが、複数のテストケースをまとめて実行した際に発生するためロック待ちをしていると考えられる
    • 参照系のメソッドをテスト時にはテストクラスに@Transactionアノテーションを付与することでロック待ちに陥ることがなくなった
    • 逆に更新系のメソッドに@Transactionをつけてしまうとテストが終了しなくなったのでアノテーションを外しておいた

MySQL

  • private subnetないのDBに接続して操作したい場合、Sequel Proで踏み台サーバ経由でアクセスできる
  • SQLモード
  • IFNULL(expr1, expr2)
    • expr1がNULL出ない場合、IFNULL()はexpir1を返し、それ以外の場合はexpr2を返す
    • expr2もNULLの場合はNULLを返す

キーボード

  • Barroco
    • Fn + Aでレイヤー切り替え

英語

  • presumably
    • おそらく
  • density
    • 密度
  • At the moment
    • 現時点では
  • comes at a cost
    • 高くつく
    • コストが必要となる
  • Elastic
    • 伸縮自在の
  • That being the case
    • それなら、だとすれば、そういうことなら
  • pure play
    • ~を専業とする

その他

  • 年金

    • 厚生年金(国民年金)控除証明書はハガキで送られてくる
      • 年末調整で使用するため捨てないこと
    • 控除証明書を紛失した場合は年金事務所で再発行できる
    • 転職などで途中で支払いが途切れている場合は控除証明書を発行できない
  • Heptio

    • Kubernetesを専業とする起業
  • Entrepreneur in Residence

  • 客員企業制度
    • 起業家が特定の企業に入社し、その企業で起業準備をする