読者です 読者をやめる 読者になる 読者になる

しまてく

学んだ技術を書きためるブログ

【ヒカ☆ラボ】さくらインターネットとMilkcocoa!年末イベント:ここだけのウラ話 に行ってきた。

ヒカ☆ラボことヒカリエ・ラボラトリー(レバレジーズが運営するイベント)に行ってきました。
最近は随分勉強会から離れてしまっていたので久しぶりの参加でした。

mlkcca.connpass.com

レバレジーズとは?

  • 941さんが紹介してたので引用。

blog.kushii.net

  • プログラミングに特化したQAサイト「teratail」を運営している。

teratail.com

Milkcocoaの裏側 - Technical Rockstars CEO 部谷(ひや) 修平さん

モデル駆動開発をやっていた。
  • 設計図を書いて、シミュレーションし、ソースコードに落とす手法。
  • これを実践するためのプラットフォーム CloudMDD でIPA未踏に採択された。
Technical Rockstarsのサービス
  • milkcocoa
    • MQTTでデータのやりとりができるAPIを提供しているBaaS
  • FLOWer
    • データの流れが見えるビジュアルプログラミング
  • clooca
Milkcocoaとは
  • シンプルなコンセプト
  • イデアx技術でかんたんに作れる
  • 裏はErlang x cassandra

実際にサイトを見てみるとかっこよくて、ワクワクするサービスです。

開発の裏話
  • スタートアップの開発現場あるある
    • とにかく早く開発しないといけない。
    • 開発できなければ価値があるかどうかわからない。
      • 2014/8: 開発開始
      • 2015/4: IoTに方針転換 (この時点でサーバーサイドは部谷さん一人)
      • 2015/5: リリース
  • 開発速度をあげるには
    • プロトタイピング力
      • 道具の幅を持つこと
      • 普段から広げておくことが大事
    • 継続的インテグレーション
      • 石橋を高速に叩いて渡る
      • 心理的負担を減らす
    • アーキテクチャ
      • コード量を減らす
      • 機能追加をしやすくする
      • テストを書きやすくする
  • アーキテクチャ
    • 目的を持って設計する。
      • まず「良い設計」を定義すべき
    • コンピューターサイエンスとか情報工学とかの下地は必要
  • Milkcocoaの初期の開発方針 (優先順位は上から)
    • 簡単に機能を追加したい
    • ベンダロックインを防ぎたい
    • 運用を楽にしたい
    • 多人数で開発したい(学習コストを減らしたい)
    • 早く動くものを作りたい
  • 開発する中でなにが起こるかわからないので、
    • 型を決めてテストバリバリした
    • Dockerでポータブルに環境構築
    • サーバーイメージは全てコード化して構築は自動化(fabric)
    • クライアント/サーバーサイドは全てHexe
    • サーバーサイドはHexe x node.js
  • すると...
    • 途中からなにも進まなくなった
      • 新しくなにかを追加する時にハードルが劇高になった。
  • 最終的な構成
    • Node.js + MongoDB の構成を Erlang + Cassandra に変更 (1サーバーあたりの処理量アップ)
    • MQTTに対応
    • さくらサーバーに変更 (コスト削減)
  • 再度、開発方針を立て直し
    • とにかくシステムを小さく分ける。
    • とにかく初期コストを抑える。
    • 前の方針はそれぞれは良い方法なので、採用できる部分をところどころ採用。
    • テストは初めに少し書いて後から追加するように。
      • →マイクロサービスっぽい感じで。
    • サービス分けまくってインターフェースで結合するように
    • サーバーレスアーキテクチャ
    • 既存のSaaSも連携させて高速に。
  • Microservicesの利点
    • ちゃんとIFが切れていればそこだけ変更しやすい
    • 性能や通信が問題な箇所だけ重課金、それ以外はDockerとはHeroku
    • とにもかくにもインターフェース重要。
  • やったこといろいろ
    • MQTTベースにする。
      • 良かった点
        • 自前でやることが減った。
        • 再送制御とか乗っかった利点がある。
      • 悪かった点
        • アクセス制御のパーミッションの応答とか返しづらかった。
        • 工夫次第でなんとかなる。
    • AWSからさくらクラウド
      • 移行はかなり簡単にできた。
    • Node.jsからErlang
      • セキュリティルール言語
        • もともとHexeでパーサー作ってた。
        • Erlangでもパーサーは楽に作れた。
      • HexeはHexe Serializerが、ErlangはBERT(Binary ERlang Term)がある。
    • Erlanのデプロイ

まとめ

  • 目的をもって設計する
  • 小さいサービスにシステムを分ける
  • 細かいことはサービス毎に分ける
  • クリティカルな部分は重課金で

使ってみたいサービス

*1:milkcocoaと競合らしい。