DMMは日本で最大級の動画配信サービスを提供しています。
昨今はニーズの多様化と高品質への対応が急務となっており、動画配信基盤の刷新に取り組んでいます。モノリシックなシステムをマイクロサービス化すべく、Ruby on Rails・AngularJS・Go を利用しています。本セッションでは、それらのアーキテクトや開発フローについて判りやすく説明します。
⑥ TraceID をつけてログ出力
④URL + TraceID
① URL
③ なければ TraceID を生成
トレース ID をつけることでデバッグしやくすなります。
DMM.com ラボ マイクロサービスTIPS
15分
APIポリシー定義
System ‘A’
System ‘B’
System ‘C’
② X-DMM-
TRACEIDが
あるか
⑤ HTTP
ヘッダー を
参照
Ruby vs Go!
フレームワーク
Go
Railsor Sinatra
フレームワークのルールに従う
フレームワークとgemで賄う
言語仕様のルールに従う
いろいろ
(revel, gorilla, goji, gin,
gizmo, gocraft, go kit…)
必要なものを組み立てる
Ruby
78.
Ruby vs Go!
開発方法の比較
(なし)
rails/ runner / rake …
bundle / gems / gulp …
RSpec
便利だが覚えることが多い
RCover
Autodoc
peek / New Relicなど
go build
go run hoge.go
go get (バージョン管理不要)
go test
普通のプログラム(assertなし)
go test -cover
go doc
go test -pprof
ビルド
実行
依存設定
単体テスト
カバレッジ
ドキュメント
プロファイラ
79.
Ruby vs Go!∼ コードの比較
数字の文字配列を2倍にしてカンマ区切りの文字列を表示
Ruby
1 p ["1","2","3","4","5"].map {|n| n.to_i * 2}.join(‘,')
> "2,4,6,8,10"
80.
Ruby vs Go!∼ コードの比較
数字の文字配列を2倍にしてカンマ区切りの文字列を表示
Go
1 package main
2
3 import (
4 "fmt"
5 "strconv"
6 "strings"
7 )
8
9 func main() {
10 ary := [...]string{"1", "2", "3", "4", "5"}
11 nums := make([]string, len(ary))
12
13 for i, n := range ary {
14 if num, err := strconv.Atoi(n); err == nil {
15 nums[i] = strconv.Itoa(num * 2)
16 }
17 }
18
19 fmt.Printf("%+vn", strings.Join(nums, ","))
20 }