Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
EN
Uploaded by
Yusuke Komatsu
1,259 views
Go と Couchbase で microservices を作るには?
golang.tokyo 7 at TECHPLAY で話した内容
Technology
◦
Read more
1
Save
Share
Embed
Embed presentation
Download
Download to read offline
1
/ 26
2
/ 26
3
/ 26
4
/ 26
5
/ 26
6
/ 26
7
/ 26
8
/ 26
9
/ 26
10
/ 26
11
/ 26
12
/ 26
13
/ 26
14
/ 26
15
/ 26
16
/ 26
17
/ 26
18
/ 26
19
/ 26
20
/ 26
21
/ 26
22
/ 26
23
/ 26
24
/ 26
25
/ 26
26
/ 26
More Related Content
PDF
New Generation Build System "Fly"
by
deepblue will
PDF
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
by
Tsuyoshi Yamamoto
PDF
GNU awk (gawk) を用いた Apache ログ解析方法
by
博文 斉藤
PDF
awk v.s. bashどっちが強い?@OSC2011Tokyo
by
Ryuichi Ueda
PDF
Offline Hoogleで何処でもはすはす
by
Kiwamu Okabe
PDF
Mac_Terminal_ver1.0
by
Satoshi Kume
PDF
Sinatra and heroku for mac
by
Naoyuki Mitsuboshi
PDF
Siphone coffeemaker okayama-js-1
by
NISHIMOTO Keisuke
New Generation Build System "Fly"
by
deepblue will
Grails-1.1を斬る!~Grails-1.1からのチーム開発~ in Tokyo
by
Tsuyoshi Yamamoto
GNU awk (gawk) を用いた Apache ログ解析方法
by
博文 斉藤
awk v.s. bashどっちが強い?@OSC2011Tokyo
by
Ryuichi Ueda
Offline Hoogleで何処でもはすはす
by
Kiwamu Okabe
Mac_Terminal_ver1.0
by
Satoshi Kume
Sinatra and heroku for mac
by
Naoyuki Mitsuboshi
Siphone coffeemaker okayama-js-1
by
NISHIMOTO Keisuke
What's hot
PDF
ActiveRecordでレガシーテーブルにつないだ話
by
ryonext Shimamoto
PDF
Hakyll
by
Kazufumi Ohkawa
PDF
Rails
by
卓馬 三浦卓馬
PDF
Fabric
by
Joe_noh
PDF
Rails3.1rc4を試してみた
by
Takahiro Hidaka
PDF
オンプレでPrivate Registry使ったDockerイメージの運用について
by
YASUKAZU NAGATOMI
PDF
静岡のHaskellerはEmacsを使う
by
Kazufumi Ohkawa
PDF
GradleによるG*なビルドシステムの構築
by
Masatoshi Hayashi
PPTX
実用裏方 Perl 入門
by
keroyonn
PDF
2日間Fabricを触った俺が 色々解説してみる
by
airtoxin Ishii
KEY
Fabricでサーバー管理をDRYにしよう
by
max747
PDF
Testman
by
makoto tsuyuki
PDF
Start printf 6_takarakasai
by
takara kasai
PDF
CHP survey
by
Makoto Kishimoto
PDF
Nginx lua
by
Moriyoshi Koizumi
PDF
Haskell超初心者勉強会11
by
Takashi Kawachi
PPTX
YosemiteでApacheを設定してみる
by
Nな人 -enunahito-
KEY
Mojoliciousをウェブ制作現場で使ってみてる
by
jamadam
PDF
zsh とわたし
by
Toshihiko Shimokawa
PPTX
serverspecを使用したサーバ設定テストの実例
by
Koichi Shimozono
ActiveRecordでレガシーテーブルにつないだ話
by
ryonext Shimamoto
Hakyll
by
Kazufumi Ohkawa
Rails
by
卓馬 三浦卓馬
Fabric
by
Joe_noh
Rails3.1rc4を試してみた
by
Takahiro Hidaka
オンプレでPrivate Registry使ったDockerイメージの運用について
by
YASUKAZU NAGATOMI
静岡のHaskellerはEmacsを使う
by
Kazufumi Ohkawa
GradleによるG*なビルドシステムの構築
by
Masatoshi Hayashi
実用裏方 Perl 入門
by
keroyonn
2日間Fabricを触った俺が 色々解説してみる
by
airtoxin Ishii
Fabricでサーバー管理をDRYにしよう
by
max747
Testman
by
makoto tsuyuki
Start printf 6_takarakasai
by
takara kasai
CHP survey
by
Makoto Kishimoto
Nginx lua
by
Moriyoshi Koizumi
Haskell超初心者勉強会11
by
Takashi Kawachi
YosemiteでApacheを設定してみる
by
Nな人 -enunahito-
Mojoliciousをウェブ制作現場で使ってみてる
by
jamadam
zsh とわたし
by
Toshihiko Shimokawa
serverspecを使用したサーバ設定テストの実例
by
Koichi Shimozono
Similar to Go と Couchbase で microservices を作るには?
PDF
Couchbase MeetUP Tokyo - #11 Omoidenote
by
kitsugi
PDF
CouchDB JP & BigCouch
by
Yohei Sasaki
PDF
今日から使えるCouchbaseシステムアーキテクチャデザインパターン集
by
Couchbase Japan KK
PDF
GoCon2016 spring 自作Webフレームワーク uconを作った話
by
Masahiro Wakame
PPT
もうひとつのNo sql couchdbとは
by
Koji Kawamura
PDF
忍者ツールズのCouchbase導入事例
by
Kenichi Tsunokawa
PDF
Couchbase server入門
by
Yusuke Komatsu
PDF
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
by
Shoot Morii
PDF
Couchbase meetup20140925
by
ktoda
PDF
Couchbase 30-dbtechshowcase-tokyo2014
by
Koji Kawamura
PDF
Couchbaseの紹介 2015/03/05
by
Couchbase Japan KK
PPTX
Couchbase 101 ja
by
Couchbase Japan KK
PDF
増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの作り方〜開発編 先生:増井 雄一郎
by
schoowebcampus
PDF
membase
by
Yohei Sasaki
PPTX
クラウドで運用するCouchbase Server
by
Kazumi Hirose
PDF
20130315 abc firefox_os
by
Tomoaki Konno
PDF
Dist 29 gcp_serverless_web_app_development
by
Shotaro Suzuki
PDF
Couch DB for 197X
by
Makoto Ohnami
PDF
appengine ja night #24 Google Cloud Endpoints and BigQuery
by
Ryo Yamasaki
PPTX
What's new in Couchbase Server 4.0 ja
by
Couchbase Japan KK
Couchbase MeetUP Tokyo - #11 Omoidenote
by
kitsugi
CouchDB JP & BigCouch
by
Yohei Sasaki
今日から使えるCouchbaseシステムアーキテクチャデザインパターン集
by
Couchbase Japan KK
GoCon2016 spring 自作Webフレームワーク uconを作った話
by
Masahiro Wakame
もうひとつのNo sql couchdbとは
by
Koji Kawamura
忍者ツールズのCouchbase導入事例
by
Kenichi Tsunokawa
Couchbase server入門
by
Yusuke Komatsu
Go言語入門者が Webアプリケーション を作ってみた話 #devfest #gdgkyoto
by
Shoot Morii
Couchbase meetup20140925
by
ktoda
Couchbase 30-dbtechshowcase-tokyo2014
by
Koji Kawamura
Couchbaseの紹介 2015/03/05
by
Couchbase Japan KK
Couchbase 101 ja
by
Couchbase Japan KK
増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの作り方〜開発編 先生:増井 雄一郎
by
schoowebcampus
membase
by
Yohei Sasaki
クラウドで運用するCouchbase Server
by
Kazumi Hirose
20130315 abc firefox_os
by
Tomoaki Konno
Dist 29 gcp_serverless_web_app_development
by
Shotaro Suzuki
Couch DB for 197X
by
Makoto Ohnami
appengine ja night #24 Google Cloud Endpoints and BigQuery
by
Ryo Yamasaki
What's new in Couchbase Server 4.0 ja
by
Couchbase Japan KK
Go と Couchbase で microservices を作るには?
1.
Photo by Toa
Heftiba on Unsplash GoとCouchbase で microservicesを作るには? 2017/07/03 Yusuke Komatsu
2.
⾃⼰紹介 ⼩松祐介 所属:パーソルキャリア株式会社 github:usk81 Qiita:tienlen お仕事: ・GoでAPIとかを作る ・おいしいコーヒーを淹れる
3.
構成(前提) フレームワーク ・labstack/echo データベース ・Couchbase4.5+ ・MySQL その他 ・企業秘密
4.
labstack/echo
5.
labstack/echo package main import ( "net/http" "github.com/labstack/echo" "github.com/labstack/echo/middleware" ) func
main() { e := echo.New() // Middleware e.Use(middleware.Logger()) e.Use(middleware.Recover()) // Routes e.POST("/users", createUser) e.GET("/users/:id", getUser) e.PUT("/users/:id", updateUser) e.DELETE("/users/:id", deleteUser) // Start server e.Logger.Fatal(e.Start(":1323")) }
6.
labstack/echo ・ mainの処理書くの⾯倒 ・ middleware毎回宣⾔するのも⾯倒 ・
Routingをきれいにしたい ・ サーバの実⾏とHandler, routingを切り分 けたい ・ RequestIDがない(開発当時)
7.
go-shosa/shosa
8.
go-shosa/shosapackage main import ( "github.com/go-shosa/shosa/router" "github.com/go-shosa/shosa/server" ) func
main() { // Server runs server.Run(":1323", routes) } var ( routes = []router.Route{ router.Route{ Method: "POST", Routing: "/users", Func: createUser, }, router.Route{ Method: "GET", Routing: "/users/:id", Func: getUser, }, router.Route{ Method: "PUT", Routing: "/users/:id", Func: updateUser, }, router.Route{ Method: "DELETE", Routing: "/users/:id", Func: deleteUser, }, } )
9.
go-shosa/shosa ・ Logger ・ Middleware ・
Response ・ Server ・ Generator (go-shosa/kata作成中)
10.
RequestIDがない!
11.
RequestIDがない!
12.
Couchbase?
13.
Couchbaseとは? ・ スキーマレス ・ SQL準拠のクエリがある ・
JSONでデータが保存できる ・ 第⼆階層にダイレクトにアクセスできる ・ オフライン設計ができている ・ マルチマスター構造 ・ Gitのようにデータが履歴管理されている ・ なんかよくわかんないけど速い
14.
MySQLからの移⾏ type Standard struct
{ ID int Name string CreatedAt time.Time UpdatedAt time.Time DeletedAt *time.Time } => うごきません!!
15.
MySQLからの移⾏ cluster, _ :=
gocb.Connect("couchbase://localhost") bucket, _ := cluster.OpenBucket("default", "") query := gocb.NewN1qlQuery("SELECT * FROM default") rows, _ := bucket.ExecuteN1qlQuery(query) var row interface{} for rows.Next(&row) { fmt.Printf("Row: %+vn", row) } rows.Close() See. https://blog.couchbase.com/go-sdk-1-0-ga/
16.
usk81/generic
17.
usk81/generic ・ NULL判定を勝⼿にしてくれる ・ 緩やかな型解釈 ・
とりあえず⼀通りのTypeは存在 ・ Marshal/Unmarshal対応
18.
MySQLからの移⾏ type Standard struct
{ ID int Name string CreatedAt time.Time UpdatedAt time.Time DeletedAt generic.Time }
19.
fixtureを使ったテスト(MySQL) 1.fixtureからデータをロード 2.テスト実⾏する 3.truncate table ⽂を実⾏する
20.
fixtureを使ったテスト(MySQL) func TestMain(m *testing.M)
{ // setup database db, err := database.Connect() if err != nil { log.Fatalf("failed to connect database. %v", err) } Tx = db.Begin() err = testfixtures.LoadFixtures(FixturesPath, db.DB(), &testfixtures.MySQLHelper{}) if err != nil { log.Fatalf("failed to load fixtures. %v", err) } defer func() { Tx.Rollback() database.Close(db) }() retCode := m.Run() tearDown(Tx) os.Exit(retCode) } func tearDown(d *gorm.DB) { d.Exec(fmt.Sprintf("TRUNCATE TABLE %s;", table)) os.Unsetenv("testing") }
21.
fixtureを使ったテスト(Couchbase) 1.fixtureからデータをロード 2.テスト実⾏する 3.データをflushする(データを削除する)
22.
fixtureを使ったテスト(Couchbase) 1.fixtureからデータをロード ・そんな処理もパッケージもない ・レスポンスが返るのはInsert完了前 2.テスト実⾏する 3.データをflushする(データを削除する) ・このためのパッケージはない ・レスポンスが返るのは処理完了前 ・データの⼀括作成・削除を繰り返すと遅延する ・そもそもFlushは開発向けオプション ・こんなことのためにあるのではない
23.
fixtureを使ったテスト(Couchbase) // Import imports
data from json files in specified directory. func Import(bucket *gocb.Bucket, path string) error { files, err := ioutil.ReadDir(path) if err != nil { return err } for _, fi := range files { filename := fi.Name() if !fi.IsDir() && validateJSONFile(filename) { bs, err := ioutil.ReadFile(filepath.Join(path, filename)) if err != nil { return err } var req map[string]interface{} err = json.Unmarshal(bs, &req) if err != nil { return err } for k, v := range req { if _, err = bucket.Upsert(k, v, 0); err != nil { return err } } } } return nil } func validateJSONFile(filename string) bool { match, _ := regexp.MatchString(".json$", filename) return match }
24.
fixtureを使ったテスト(Couchbase) // Flush will
delete all the of the data from a bucket. func Flush(bucket *gocb.Bucket, username, password string) error { bm := bucket.Manager(username, password) return bm.Flush() } // IsActive checks bucket is active or not func IsActive(bucket string) (result bool, err error) { req, err := BucketStat(bucket) if err != nil { return } b, err := json.Marshal(req) if err != nil { return } var rq CBNodeStatus err = json.Unmarshal(b, &rq) if err != nil { return } for _, n := range rq.Nodes { if n.Status != "healthy" { return false, nil } } return true, nil }
25.
fixtureを使ったテスト(Couchbase) func TestMain(m *testing.M)
{ (省略) // import data err = couchbase.Import(b, FixturesPath) if err != nil { log.Fatalf("failed to load fixtures. %v", err) } // waiting couchbase server warmup r := false i := 0 for !r { if i > 0 { if i >= 10 { log.Panic("timeout loading data") } log.Printf("loading data...%s", strings.Repeat(".", i)) time.Sleep(6 * time.Second) } r, err = couchbase.IsActive(bucketNameTest) if err != nil { log.Fatalf("failed to connect database (by management API). %v", err) } i++ } // Insertが完了する前にhealthyに戻るようなので、念のため time.Sleep(5 * time.Second) (省略) retCode := m.Run() tearDown(b) os.Exit(retCode) }
26.
Thank you!!
Download