AWSユーザーにもお勧めできる「インフラ/ネットワークエンジニアのためのネットワーク技術&設計入門」

興味をそそられたので読んでみました。

インフラ/ネットワークエンジニアのためのネットワーク技術&設計入門

インフラ/ネットワークエンジニアのためのネットワーク技術&設計入門

本書の内容は、ネットワークの物理的なレイヤーから、ネットワークプロトコルの概要、セキュリティ(主にSSL)や負荷分散や可用性の確保など、幅広い内容に及んでおり、それぞれの分野が網羅的に書かれています。各技術についても、すぐに古くなりがちな個別の実装の詳細に入るのではなく、プロトコルや設計ポリシーなど基礎的、基本的なところがしっかりと記述されており読み応えがあり、また数年単位で長持ちする知識が得られます。

例えば、第1章の「物理設計」では、機能分散や冗長化まで考慮された、具体的な機器の構成例まで図にしてあり参考になりますし、機種選定の方針までも書かれています。第3章の「セキュリティ設計・負荷分散設計」では、TCP/IPレベルの挙動から、HTTP上でのセッション制御や、SSLでの証明書のやりとりまで書かれており、ここだけで一冊の本になりそうな内容の厚みがあります。

第0章に対象読者として「サーバサイトを設計したいネットワークエンジニア」「ネットワークを知っておきたいサーバエンジニア」「サーバサイトを運用管理するサイト管理者」と書かれているのですが、AWSだけを使っているアプリケーションエンジニアにも、読んでおく価値があると思います。AWSでも不具合や不調、パフォーマンス限界にあたることは時々あり、いろいろ調べていくとこの本でかかれているようなレイヤーの問題が発生しているんだろうな、と推測されることがあります。もちろん本当にネットワークレイヤーの問題だった場合には、AWSの中の人の対応を待つか、work-aroundを入れるしかないのですが、それでも問題の切り分けや、原因分析のスピードは違ってきます。

というわけで、本書はいわゆるインフラエンジニアだけではなく、ちゃんと自分で深い問題分析を行いたいアプリケーションエンジニアにもお勧めできる本です。

またよりネットワークの基本から知りたい方は、定番のマスタリングTCP/IP 入門編をお勧めします。(第5版になってたんですね。)

マスタリングTCP/IP 入門編 第5版

マスタリングTCP/IP 入門編 第5版

さようなら、自作サーバー

一昨日、自作サーバー同窓会というイベントを開催しました。 このイベントは2009/11(4年半前!)に開催した自作サーバーカンファレンスに登壇された方々を中心に、自作サーバー現役の方々を交え、あの頃の自作サーバーと、自作サーバーの今を振り替えってみようという趣旨のものでした。

イベントの詳細は吉岡さんのエントリ桑野さんのエントリ@nekoyaさんのエントリtoggetterのまとめを参照してください。

僕の思いは「自作サーバー同窓会」という名付けに集約されています。AWSが常識になり、物理的な世界との距離が広がりつつある今、各社の様々な取り組みなどを楽しく振り返ることができました。

さようなら、自作サーバー。いろいろな面白い経験と仲間を得ることができました。登壇及び参加された皆さん、ありがとうございました!

余談

会場はフリークアウトさんの新オフィスで、シャレオツすぎて、前向きになれました。 また新しい方向に向けて、楽しく探求していきましょう。

Github製エディタAtomでパッケージを作ってみた

先週にpublic betaが始まったgithub製のエディタのAtomを使ってみたので、旬な内にパッケージ (他のエディタでいうところの拡張とかプラグインとか)を作ってみました。 公式ドキュメントが充実しており、開発が活発(バージョンも毎日にようにあがっている)で変化も大きそうですので、ちゃんと触りたい方はそれを読んだほうが良いと思いますが、雰囲気を知りたい人向けの解説を書いてみました。

Atomのエディタとしての基本的な使い方は、次のリンクをどうぞ http://qiita.com/spesnova@github/items/d3096d062d70e7385e9d

Invite権もまだ残っているので、欲しい方は@stanakaまでmentionしてみてください。→権利終了しました

パッケージ作成の基本

パッケージ作成の基本は、次の二つの公式ドキュメントを読むと分かります。 - https://atom.io/docs/v0.64.0/creating-a-package - https://atom.io/docs/v0.64.0/your-first-package

特徴をざっと並べると次のようなものです。 - coffee scriptでnode.jsのmoduleとして書く - activate, serialize, deactiveのメソッドを用意する (後ろの2つはoptional) - activateのところで、コマンドに対応するメソッドの登録などを行う - package.jsonがパッケージのメタデータで名前やらバージョンやら依存ライブラリやらを記述する - スタイルシートやキー/メニュー設定もここに記述

開発者向けエディタだけあって、プログラミング言語のサポートも標準であり、syntax-highlightも実装しやすくなっています。

カーソル上の単語をDash.appで検索するためのパッケージを書いてみたのですが、本体のコードはコンパクトにあっさりと書けました。

module.exports =
  activate: (state) ->
    atom.workspaceView.command "dash-on-cursor:open", => @open()

  open: ->
    editor = atom.workspace.getActiveEditor()
    return unless editor?

    token = editor.tokenForBufferPosition(editor.getCursorBufferPosition())
    return unless token?.value

    grammar = editor.getGrammar()
    docsets = grammar2docsets[grammar.name] if grammar
    if docsets
      shell.openExternal("dash-plugin://keys=#{docsets}&query=#{token.value}")
    else
      shell.openExternal("dash://#{token.value}")

またパッケージの雛形も「Package Generator: Generate Package」で生成されますので、書き始めもイージーです。テストも標準でサポートされており、モダンですね。

標準機能の多くもパッケージとして実装されており、 https://github.com/atom で公開されいます。こういう機能はどう実装すればいいのかな、と悩んだ時に参考になります。

パッケージを公開する

Atomにはapmというパッケージを触るためのコマンドが付いてきて、それで簡単に公開することができます。これも詳細は次の公式ドキュメントを参照してください。 - https://atom.io/docs/v0.64.0/publishing-a-package

公開手順はgithub上にリポジトリを作っておいて、

apm public minor

とするだけで公開されます。

実行結果は次のようになります。

% apm publish minor
GitHub Username or Email> stanaka
Password>
Saving token to Keychain ✓
Registering dash-on-cursor ✓
Preparing and tagging a new version ✓
Pushing v0.1.0 tag ✓
Publishing dash-on-cursor@v0.1.0 ✓
Congrats on publishing a new package!
Check it out at https://atom.io/packages/dash-on-cursor

実行するとこんなコミットとタグの付与が自動的に行われます。 https://github.com/stanaka/dash-on-cursor/commit/07643903b7e5a3129c269b04d50123e9c694dfc0

githubのidとパスワードの入力が求められるので、ちょっとヒヤッとしますが、version番号の管理までされるのは便利です。

というわけで、カーソル上の単語をDash.appで検索するためのパッケージを公開してみました。 https://atom.io/packages/dash-on-cursor

DashとAtomを使っている方はよろしければお使いください。

「インフラデザインパターン」を読みました

「インフラデザインパターン」を献本いただきましたので、ざっと読んでみました。いつもありがとうございます!

インフラデザインパターン ~安定稼動に導く127の設計方式 (WEB+DB PRESS plus)

インフラデザインパターン ~安定稼動に導く127の設計方式 (WEB+DB PRESS plus)

「インフラデザインパターン」は、NTTデータの人による各種システムのインフラを設計する上でのいろいろな設計方法をパターンとして整理した本です。内容は、可用性、セキュリティ、性能、保守性や、サーバーネットワーク構成、クラウドまで言及されていて、網羅的に書かれています。 例えば、DBサーバの可用性のところは、FTサーバー、並列DBクラスタ、N+1クラスタ、相互待機クラスタと、それぞれの定性評価がかかれていて、確かにこれぐらいの選択肢はあるよね、ということが一通り書かれています。NTTデータの人が書いているだけあって、世の中の数あるシステムの様々な要件を満たすために必要なパターンが書かれています。

AWSのようなクラウドを主体としてWebサービスを構築する上では、選択肢にはなり得ない技術(典型的にはFTサーバ)もあって、教養として知っておくのは良さそうです。ただ、Webサービスの可用性や性能を挙げるための観点でいくと、ちょっと低レイヤーの技術/機能に寄りすぎの印象です。もっと上のレイヤーのアプリケーション自体やミドルウェアの機能を有効活用して、可用性とスケーラビリティを担保するほうがモダンな設計だと思います。もちろん、それぞれ適材適所ということです。

というわけで、ウェブに限らず、世の中のシステムで可用性などがどのように確保されているかの一端を知るのには読んでおいても良い本だと思います。

デザインパターンの粒度

ちなみに余談ですが、一部のパターンで特定の技術、例えば「生体認証パターン」で生体認証を使うとだけあって「えっこれもパターン??」となるところもあり、パターンという言葉を多用し過ぎなんじゃないかと思いました。オブジェクト指向の継承を、継承パターンと呼ぶような違和感ですね。GoF本ではあの厚さで23パターンですし、デザインパターンと称するならもうすこし汎用性と抽象度を挙げたほうがいいんじゃないかと思いました。