【参加レポ】各セッションで出た質問に答える座談会【LINE DEVELOPER DAY_2015】 #linedevday
4/28に開催されたLINEのエンジニアチームの様々な経験を、未解決の課題も含めて共有する技術カンファレンス、
に参加してきたのでその時のまとめ。
最後のセッションで出てきた質問に登壇者が答えてくれるセッションです。
ちなみにこちらのセッションについてはWebで公開されないらしいです。
他のセッションは以下からどうぞ
マイクロサービスはサービス間の通信が増えませんか
- 増えます
- サービス間のコネクションについては統一されていなくてここのサービスで別々になっている
- コネクションプールを使っていたりする
- 今後はコネクション1個でマルチに通信をできるようにしていきたい
単純にKeyを入れずにKeyにSalt使っているのはなぜですか(HBase)
- 分散データストア全般に言えるが、rawを分散させることによってホットスポットにならないようにしている
- 特定のサーバがたくさんデータをもたないようにしている
- 完全に分散させるだけならSHAハッシュキーを使えばいいが、LINEではストレージレベルでデバッグレベルで終えるようにしている
- 特定の期間中にユーザ登録に問題があったから調査してとかにつかわれる
iOSのバージョンによる互換性の問題について、何か困ったことがあるか
- 使えなくなるAPIが出たりする
- watchを作った時、普通のバイナリとは違うバイナリでできるのだが、ios6に影響ないと思ったら7.0以上じゃないとだめとiTunes Connectに怒られてしまった
- 新しいAPIが出た時に大体はほとんどしばらく古いのが残ったりするが、新しいのを使わないとバグが出たりするものがあった
- 新しいAPIで提供できるのをメソッドのすり替え古いものに対応したりしている
Swiftの体得はどのようにしていますか
- Appleが出しているSwiftの本を読んだ
- iOSのSDKはobj-cで実装されているので、どうしたらswiftっぽいコードを書けるかを、swiftの標準interfaceをいっぱいよんでみた
- githubのopensourceを読んで勉強した
- eitherという型をswiftに導入するというオープンソースを読んだりした
- haskhelにある概念をswiftに導入したらswiftらしい書き方が見えてきた
- swiftをかけるようになるにはobj-cかける人ならだいたい3日でできる
特殊または低スペック端末への最適化はワンソースで対応してますか(Androidアプリ) アプリケーションはバイナリも一つでやるべきなのかどうかなど
- 結果としてはひとつのソースコードでやっていたりする
- LINEのコードの中に国ごとにif文で分岐するコードが入ってるイメージ
- cpuの性能を見てアニメーションon/offしたり、通信量を下げるため解像度を低くしたりしている
- ばらばらになると管理が大変になるのでひとつのソースコードでやっている
NativeLayerをC++で実装されているとのことですが、どのような開発環境で行っているのでしょうか?
- ソース管理はgithub
- IDEはcuty clabve?
- buildはスクリプトで書いてcutyにいれている
- CIはジェンキンス
- テストはx86, i386ベースでやるが、ゲームプラットフォームに合わせてやっている
- 実機でのアーキテクチャでも試すのでほとんどすべてのデバイスのアーキテクチャを使ってやっている
開発はすんなり始められましたか?(ビジネスコネクト側での開発)
- オープンソースではなく、情報収集も限られているので担当者に質問をなげまくった
- ドキュメントが英語だけなのが辛かった
- どのくらいの流量がくるかが全く読めなかった
これから崩壊しそうなところってありますか? (Creators Market)
- ビルダーの計算時間が伸びていて、クリエイターさんに公開するっておしてから公開までに時間がかかるのではやくしたいのでなんとかしたい
- 90分~2時間程度を安全な幅としている
- 今頑張って改善しています
InfiniDBのパフォーマンスはどうですか
- MySQLだと100万超えると統計処理をするとつらいが、InfiniDBの場合は複数台でスケールアウトするので1000万きても1〜2秒でかえしてくれるのでパフォーマンスはいいです
- ここの分野はあまり選択肢がなく、オープンソースで使える唯一の選択肢
- ただ、最善の策ではないので今後も改善していく必要がある
MySQLかRedis+HBaseかの選択をする基準の分岐点は?
- MySQLでSSDやfusion.io使ったりすると国内向けサービスだったら対応できたりすることもある
- 以下にサービスを早く立ち上げる観点で選ぶと慣れてるエンジニアを用意したほうがいい。
- MySQLのほうが周辺ツールがたくさんある
- LINE以外の周辺のアプリはMySQLが殆ど使われている。
- HDD -> SSD -> fusion.ioまできたら考える必要があるが、チューニングしたりすればなんとかなったりする
εの値(売れ筋のレコメンデーション抑える計算式で使われた)はどれくらいになってますか?その値の採用基準はなんでしょうか?
- 0だとノイズとして関係のないものがでてしまう
- 0.5に近い値を採用している
- 確実にログを取った値に対してルートを取った影響度になる
- シミュレーションをした結果で性能が良くて一番小さい0.5を選んだ
- シミュレーションも実際に社員を使って出したりした
- 感覚値も入っている
Akkaのパフォーマンスってどうなんですか?
- I/Oのところが問題になりがちだがまだボトルネックになってない
- Scalaを使っている身としてはAkkaを使うのが自然なかんじ
- メッセージパッシングが問題になる場合は他のライブラリを選んだほうがいい
- NQPのメッセージヘッダにトレースのものをいれるのをできたりしたらいいな
所感
ファシリテーターの方が中々面白く会場をやわらかにリードしてくれたので終始和やかな雰囲気での座談会でした。
軽くどんなセッションだったかを最初に説明してたのですが、その説明を聞いてもおもしろそうな話は他にもあったので自分が参加したセッション以外をエロイ人がまとめてくれるのを期待して待っています。