Blogでは初めまして、藤本です。IIJが運営している他のブログ、「Bルートブログ」では何度か記事を書かせていただいています。普段の業務はwebサービスの開発・運用がメインで、数年前から開始している「Bルート活用サービス」を担当しています。低圧向け高圧向け各家庭や工場などのスマートメーターから電力データを収集するサービスで、まとめて「電力サービス」などと呼んでいます。運用についてあれこれ書きたいと思います。電力サービスについてまず始めに電力サービスについて簡単に紹介したいと思います。検針端末から送られてくる電力データを保存・可視化するwebアプリで成り立っています。検針端末から送られてくるデータは主に以下のようなものです。他にも色々ありますが、上記のような時系列データを保存するためのデータベースとして、MongoDBを利用しています。(ちなみに時系列でない契約情報などのデータは、お堅くMySQLに保存しています)MongoDBMongoDBはMongoDB社(ややこしい)によって開発されている、いわゆるNoSQLと呼ばれるDBで、その中でもドキュメント指向型に分類されます。ドキュメント指向型はXMLやJSONといったドキュメントを保存する機能を持つDBであり、MongoDBはJSONドキュメントを保存することからこう呼ばれます。そのJSON繋がりかJavaScriptと親和性が高いように思われ、shellでクエリを書く際もJavaScriptライクな記法で書きます。合わせて「MEANスタック」と呼ばれるほど、webアプリケーション開発でよく利用されています。ありますが、あえて特徴をまとめるとスキーマレス(当然?)複合indexに対応レプリケーションと自動フェイルオーバーによる冗長化=レプリカセットshardingでの負荷分散RDBっぽく使えるNoSQLとよく言われるRDBの概念が結構そのまま通用するトランザクション機能がNoSQLでは比較的強力プロトタイプの開発に便利あたりでしょうか。上記の特徴がそのまま採用利用にもなりますが、後から考えると何よりDBとして「できないこと」が少なく、indexの貼り方や構成を変更したり、aggregationを導入したりとアプリケーションの変化に耐えうる柔軟さが大きかった気がしています。アーキテクチャ簡単にですが、電力サービスにおけるMongoDBホストのアーキテクチャ図をまとめました。詳しくは公式ドキュメントなどを参考にしてもらうとして、それぞれの用語について軽く説明します。レプリケーション+フェイルオーバー機能を実現する1単位。どちらのシャードにデータが保存されているか記録しておくMongoDB。これ自体もレプリカセット。図のように電力サービスでは2シャードにデータを分散して保存することで負荷分散をしています。ホストを8台も増やす必要があります。この台数の設定を管理しつつ、例えばMongoDBのversionを上げたりなんかしようとするとかなりの重労働ですね。いうMongoDB社のサービスを利用しています。Managerはその名の通り、MongoDBのホストを管理するためのクラウドサービスです。いう名前で、今でも略称として「MMS」が使われるようです)有料サービスですが、今は30日間の無料トライアルがあるようです。主な機能として以下のようなものがあります。要追加課金なため使ってません)以下はその実際の画面です。左は管理中ホストの一覧と設定画面を開いたところです。upをサボってるからですね!右はメトリックを閲覧できる画面です。fault数など様々なメトリックが閲覧できます。MMSを利用するとホストの管理が劇的に楽になります。Agent」と呼ばれるツールをインストールし、設定ファイルにMMSアカウントのtokenを追記します。あとは画面から設定を入力すると自動的にmongodがインストールされ、上記画面のようにホストとして利用可能な状態にしてくれます。変わっており、性能が劇的に上がることが分かっていました。そのためどうしても正式リリース前にversionを上げておきたかったのです。トライアルという形で外部のお客様相手にサービスを提供していたことを考えると、簡単にサービスを止めるわけには行かない状況でもありました。secondaryの切り替えを考慮しつつversionアップし、データを再投入という気の遠くなる作業が必要でした。(それを22台分!)しかしMMSを利用したことで、上記作業は全て画面上で設定を変更するだけで完了しました。upし、データを再投入してくれます。MongoDB社の有料サービスということで、下手にこちらで手順を作って作業するよりもミスなく進められるのも大きな利点です。まとめ電力サービスでのMongoDBの運用について紹介しました。半分MMSの宣伝のようになってしまいましたが、大規模なMongoDBの運用をする際には本当に便利なサービスだと思います。そのうちindexやシャードキーの張り方、アプリケーションとの連携方法なども紹介できたらと思います。2015年に新卒入社。webアプリケーション実装・運用を中心にやりたいことがあれば何でも手を出してみる所存です。~3/12(木)開催のエンジニア向けイベントです。