デフォルト値の怖さ
何も設定せずに動かせることは便利ではある
様々なサーバアプリケーションや、ミドルウェアを使う場合に、設定がない場合のデフォルト値が用意されていることがあります。
広く配布して使われるアプリケーションは、様々な人達が使うこともあり、なるべく何もいじらずにとりあえず使い始める(試す)ことができるようにされていることが多いです。特にローカル環境やサーバ1台でとりあえず動くようになっている場合があり、これは開発者が自分のマシンで試すことを前提にしている場合があります。
これと似た様に、開発者がローカルや開発環境で動かしやすいように、設定がなければローカルや開発環境のデフォルト値を使うように実装してしまうことがあります。サンプルの設定ファイルではなく、設定がない場合に勝手に使う値として。これは開発者にとって便利な反面、事故を誘発する場合があるので、気をつける必要があります。
開発より大事な本番リリース
このデフォルト値で事故が起こるケースがあります。それは本番環境にリリースする時です。本来は本番環境向けの設定で、他のサーバに接続すべきところを、デフォルト動作があることによって、気づかずにローカルや開発環境の設定で動作してしまうケースです。
基本的に開発と本番ネットワークは分離されているべきなので、DBなどは問題ないかもしれませんが、特定の状態をローカルに持ってしまうといった動作が考えられ、冗長、分散構成を取っていると問題になる可能性があります。
例えば、以下のような、複数台で共有しなければならないものです。
もちろん、設定の確認や動作の確認は行うべきですが、一見すると動作しているように見える場合もあるため、事故を誘発する危険性があることを理解しておく必要があります。設定ファイルを置いたつもりで、Pathや設定変数名が違い、デフォルト値で動作していたということも考えられます。きちんとチェックすべきだ!という話ではありますが、現実全てを行えない状況もままあります。
設定自体を間違えている場合はどうしようも無いですが、運用では様々な人が関わり、開発者自身が忘れてしまうことも当たり前です。そういった時に、少しでも事故の可能性を減らすようにしておくことは重要です。
動き続けることが重要か、きちんと動作することが重要か
個人的には、暗黙的なデフォルト値で動くよりは、無ければ落ちて動作させない。という方針をとっています。確実に気づくためです。また、アプリケーションのデプロイと設定の配置を別々に行うようにしています。アプリケーションと一緒にデフォルトの設定ファイルを置いて、後から本番設定に上書きするといった手順でも同じように事故を誘発します。
ちなみに、設定内容次第では、動き続けることが大事な場合もあるため、もしこういうことが起きたらどうあるべきかを考える必要があります。
2015年技術でやってきたこと
毎月やらないとと言っていた振り返りが結局また年をまたぐという状態です。前半何やってたか記憶がないぐらい衰えを感じるので、2016年は四半期ぐらいにはまとめようと思います。。。
キーワードだけあげるとこんな感じ
- さらにgolang
- プライベート開発
- Aurora移行
golang本格化、WebAPI作成
2014年から、golangでWebAPIを作りだして、そこからサービス全体の各機能を順に実装していきました。また、他の人にもgolangを広めることも行っていきました。Webフロント側はPHPで作られているため、バッチやツール等でもPHPを使いがちだったところを、なるべくgolangに置き換えるように促しました。その甲斐あって、今では5人ぐらいgolang書けるようになっていて、今後もフロント以外はgolangでやっていきたいです。
省力化、ラッパーコマンド
ansibleを使ってデプロイの省力化を行っていますが、ansible-playbookコマンドが全部打つと長いこともあり、特定の環境によく使うものを短いコマンドとオプションで実行できるようにラッパーコマンドを作りました。 また、必ずplaybookを作ってそれを使って開発環境で開発を行うように促し、golang同様に使える人を増やしていきました。最初は少しハードルがありますが、開発中は何度もデプロイするのでplaybookに慣れると、自分でメリットを実感しやすく、覚えてもらえました。
AWSの設定周りは、roadworker, miam, piculetを使いコード化して、変更を記録できるようにしました。
冗長化、マイクロサービス化
2014年は冗長化周りを行っていましたが、2015年はマイクロサービス化も進め始めました。マイクロサービスに何を求めるかというと、部分的な置き換えです。一番最初は新卒と外注で作られたため、いろんなところに問題点が潜んでいます。それを一気に刷新するほど、お金も人も余裕がないため、一部分をマイクロサービス化して置き換えていくことで、全体を刷新しようとしています。データ構造も修正していくため、2016年以降もかかりそうです。
監視周りnagios(Icinga)
10月に、監視周りの構築(と検索エンジン全般)を任せていたエンジニアが辞めたので、そこから少し監視周りを見ることになりました。 監視の設定更新などは、ansible+ラッパーコマンドが用意されていたので非常にスムーズでした。Icingaはnagiosベースなので、チェックはコマンドの戻り値で判断されます。やってみると簡単に実装できるため、サーバ側の開発者には自分で作らせるようにしました。逆にIcingaの設定ファイル構成などはものすごくわかりづらいのでその点はどうにかしたいところです。
Amazon Aurora移行
RDS(MySQL)のDB容量不足の懸念が急に来ました。急激ではないですが、ありがたいことに利用者増によって、ほっとくと2016年1月にサービスが死ぬ可能性が出るぐらいに。当初、容量を増やしたRDS MySQLに移行するつもりでしたが、利用者数によっては1年ほどでまた同じ問題にぶつかる可能性がありました。さらに、PIOPSをつけると、使っていない容量の分まで利用料金が発生して、あまりよい出費ではありませんでした。
そんな検討の最中、注目していたAuroraが10月にTokyoリージョンに来ました。Auroraは容量をあらかじめ決める必要がなく、自動で拡張されます。さらに、PIOPSは不要かつ、Slaveがホットスタンバイになるので、MultiAZ待機側の料金も減らせます。加えて、接続数が増える、データが増えた場合のパフォーマンス低下も抑えられているということで、今後のスケールにも対処可能。まさに夢のような解決策が降ってきました。
そこから、移行に関してはどうしてもサービス停止が必要になるため、年末に計画停止(※)を挟むことにして、移行手順の確立や動作検証を進めていきました。無事年末に移行を終えて(今の所)問題なく稼働しています。 ※ビジネス系のサービスなので、年末はトラフィックが下がる
プライベート開発(rnssh, rnzoo, cstoreなど)
プライベートでも、自分のツール開発を再開し、rnsshとrnzooに機能追加や改善を行いました。11月に活発に開発を行いましたが、12月はAurora移行であまり手をつけられませんでした。2016年は、cstoreのようなよく使う部分をライブラリ化して、プライベートでも仕事でも使えるようにしていきたいと思っています。
2016年は
面白そうなことをやってくスタンスはあまり変わらないです。
マイクロサービス化を進めると同時に、プロダクション環境にDockerを投入していきたいと考えています。Docker自体は前からありますが、AWSでの環境が揃い始めたことや、ノウハウが十分に公開されてきているので、踏み切れるかなと思います。
ディープラーニング周りもやりたいんですが、正直よくわからないので、詳しい人と話せる機会を持っていきたい所です。画像認識周りはサービス内でやらざるを得ない状況になっているので、その辺りでやることにはなるかもしれません。
あとはブロックチェーン周りも応用がききそうなので、詳しく見ていこうと思ってます。
振り返りもそうですが、普段の調査検証もwebにアウトプットする癖を付けないと。
2015年に購入してよかったもの
去年に引き続いて何点か。今年はそんなにもの買ってないかなーというところ。来年引越しする時に色々買い換えるので、その時にまた便利にしたいところです。
ドラム式乾燥機能付き洗濯機
Amazon.co.jp: Panasonic ドラム式洗濯乾燥機 9kg 左開き クリスタルホワイト NA-VX3500L-W: 大型家電
多分一番有効に時間を使えるようになった買い物。15万ぐらいしましたが、全然ペイしてます。何がいいかというと、天気に関係なく、洗濯が完了すること。ヒートポンプ式で、3時間ぐらいで乾燥まで完了。
今までは、干すために晴れた休日を使ってましたが、それがいつでもよくなったので、休日が有効に使えます。梅雨や雨続きでも関係ありません。大体平日昼ぐらいにタイマーかけて、帰ってきたらたたむという流れで、時間がだいぶ浮きました。
今は新しいモデルが出てるようで買ったやつは、もう生産終了の様子。
iPad mini 4
iPad mini初代からの買い替え。2,3が初代より厚く重い点がネックで渋ってましたが、やっと軽く薄くなり、TouchIDも付いたので買いでした。 さすがに初代と比べると全然スピードが違うので、家でちょっと調べたりニュース見るのには最適です。
NEC モバイルルータ
タイ行きでSIMフリー購入しましたが、iPhoneの方だけで済んだので、単なるバージョンアップ。 仕事柄常にMacでリモート作業が必要なのもあり使ってます。単にちょっと使いたいだけの人は、iPhoneでテザリングでいいと思います。(通信量制限は気をつけないといけません)
iPhoneは、OCNの最小プランで済ませているので、これは別のSIMを刺して使ってます。電池の持ちもあるので、私は分けたい派。まだデュアルSIMでは使ったことはないです。
買った後、amazonが値引きセールしていて、値段的にも2万前後ぐらいに下がってるようです。
ベッドマットレス
フランスベッドで高いのを買ってみて、寝心地がすごくいいです。人生1/3ぐらいは寝てるので、睡眠に投資するのはいいと思います。展示場で寝転がってみて、えいやで買いましたが、2,3日買う前に使えたらいいのになと思います。来年は掛け布団も少しいいやつにしてみようと思います。
取り寄せ海老 2kg
贈り物でもらって、自分でもリピートしてる海老。大体50匹ぐらい入っていて、サイズ的にも冷凍庫に入りやすいです。流水で解凍すれば生で食べられて、焼いても茹でても甘くて美味しい。取り寄せはカニが目立ちますが、この海老はコスパ良くておすすめです。
釣り道具各種
趣味的な物欲は全て釣り道具だった2015年。竿とリールが5セットぐらいとバスルアー、ソルトルアー、船タイラバと結構買いました。一応バスもサバもタイも釣って(釣れないのも含めて)楽しめたので満足してます。
技術本
暗号化入門など、色々買いました。やろうと思ったことが書籍化されて、それを参考にできるという流れに乗っているので助かります。最近は本当に数が多く触りだけのも増えましたが、ややニッチな感じの詳しい書籍も多く出ているので、気になったら買って会社に置いてます。
来年
引っ越すので、冷蔵庫を買い替えたり、ルンバを導入したりしようと画策中。食洗機は付けられるかどうかがまだ不明。どんどん機械や外部サービスに任せてやりたいことをやれるようにしていきたいところ。