Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Goサーバをあえて不安定にするパッケージを作った話
Search
Hazumi Ichijo
January 31, 2019
Programming
1.5k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Goサーバをあえて不安定にするパッケージを作った話
Go(Un)Conference(Goあんこ)LT大会 5kg
https://gounconference.connpass.com/event/112942/
Hazumi Ichijo
January 31, 2019
More Decks by Hazumi Ichijo
See All by Hazumi Ichijo
RailsとRidgepoleの マイグレを120倍早くする
hazumirr
0
420
CIを整備してメンテナンスを生成AIに任せる
hazumirr
0
1.5k
病院の情報フローを理解して、 予約〜会計の見え方が変わった話
hazumirr
1
1.9k
Rubyのコード削除したい時 僕がやること
hazumirr
0
280
テーブル駆動テストと状態
hazumirr
5
2.2k
オンラインテストしようと思った その日に開始できる環境を目指して
hazumirr
0
1.1k
推薦によるプロダクト改善とマイクロサービスが噛み合った話
hazumirr
2
4.8k
ChatGPTで僕が知っていることまとめ
hazumirr
3
3.1k
プロダクトチームとどう 協業し分析環境を改善するか
hazumirr
2
1.6k
Other Decks in Programming
See All in Programming
ローカルLLMでどこまでコードが書けるか -拡張版 / How much code can be written on a local LLM Extended
kishida
12
4.7k
壊れたパーサから始める関数型設計と構成的なパーサ #fp_matsuri
raiga0310
2
190
LLMによるContent Moderationの本番運用の裏側と品質担保への挑戦
suikabar
3
840
言語を使う側から、作る側へ。 自作 Lisp で得た新たな気づき。
andpad
0
110
act1-costs.pdf
sumedhbala
0
210
コンテキストの使い捨てをやめる — ビジネスルール駆動開発と miko —
ioki
0
270
共通化で考えるべきは、実装より公開する型だった
codeegg
0
200
鹿野さんに聞く!『TypeScriptコードレシピ集』で磨く実践力
tonkotsuboy_com
4
1.1k
使用 Meilisearch 建立新聞搜尋工具
johnroyer
0
130
えっ!!コードを読まずに開発を!?
hananouchi
0
190
Even G2とAWSで推しのエージェントを召喚しよう!
har1101
1
160
エンジニアにデザインハーネスを 〜デザインプロセスを規定するためのハーネス〜 / Design harness from an engineer's perspective
rkaga
2
1.3k
Featured
See All Featured
Designing for Performance
lara
611
70k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.3k
The Cost Of JavaScript in 2023
addyosmani
55
10k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.6k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
410
Tell your own story through comics
letsgokoyo
1
990
Code Review Best Practice
trishagee
74
20k
Thoughts on Productivity
jonyablonski
76
5.2k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.2k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
490
From π to Pie charts
rasagy
0
230
How GitHub (no longer) Works
holman
316
150k
Transcript
©2018 Wantedly, Inc. GoαʔόΛෆ҆ఆʹ͢Δ ύοέʔδΛ࡞ͬͨ 31.Jan.2019 - Hazumi Ichijo
©2018 Wantedly, Inc. ࣗݾհ Ұᑍ!IB[VNJSS!SFSPTU 4FSWFS4JEF&OHJOFFSJO8BOUFEMZ (P 3BJMT 3FBDUʜ ग़ւಓ
©2018 Wantedly, Inc. མͪͯͯྑ͍αʔϏε ϝΠϯͷαʔϏε Ϣʔβʔ
©2018 Wantedly, Inc. མͪͯͯྑ͍αʔϏε ϝΠϯͷαʔϏε Ϣʔβʔ མͪͯͯྑ͍αʔϏε ϝΠϯͷαʔϏε Ϣʔβʔ
©2018 Wantedly, Inc. མͪͯͯྑ͍αʔϏε ϝΠϯͷαʔϏε Ϣʔβʔ མͪͯӨڹ͕ग़ͳ͍Α͏ʹ͢ΔͨΊʹɺ $JSDVJU#SFBLFSͱ͍͏ͷ͕ଘࡏ͢Δ IUUQTHJUIVCDPNTPOZHPCSFBLFS
IUUQTHJUIVCDPNSVCZJTUDJSDVJUCSFBLFS
©2018 Wantedly, Inc. CircuitBreaker͕ຊʹ͏·͘ಈ͔͘ෆ҆ => ಈ͔͚ͩ͘γϡοͱ֬ೝ͍ͨ͠
©2018 Wantedly, Inc. Ͳ͏ͬͯෆ҆ఆʹ͢Δ͔ w ίʔυʹQBOJDͱ͔ΛೖΕΔʁ Ͳ͏͍ͬͨৼΔ͍Λ͢Δ͖͔ w
൪Λฦ͢ʁϨεϙϯεΛ͘͢Δʁ
©2018 Wantedly, Inc. Ͳ͏ͬͯෆ҆ఆʹ͢Δ͔ Ϣʔβʔ ϝΠϯͷαʔό͔Βݟ͑Δͷ Ϩεϙϯε͚ͩ IUUQH31$
©2018 Wantedly, Inc. Ͳ͏ͬͯෆ҆ఆʹ͢Δ͔ Ϣʔβʔ ͚ͩ͜͜ʹෆ҆ఆ͞Λ͍ΕΕ͍͍
©2018 Wantedly, Inc. Ͳ͏ͬͯෆ҆ఆʹ͢Δ͔ Ϣʔβʔ H31$*OUFSDFQUPS IUUQ.JEEMFXBSF
©2018 Wantedly, Inc. Ͳ͏͍ͬͨৼΔ͍Λ͖͔͢ https://engineering.linkedin.com/blog/2018/05/linkedout--a-request-level-failure-injection-framework -JOLFEJOͷ'BJMVSF*OKFDUJPO'SBNFXPSLͰ w &SSPS w %FMBZ
w 5JNFPVU ͷͭΛೖΕ͍ͯΔ
©2018 Wantedly, Inc. Ͳ͏͍ͬͨৼΔ͍Λ͖͔͢ https://engineering.linkedin.com/blog/2018/05/linkedout--a-request-level-failure-injection-framework -JOLFEJOͷ'BJMVSF*OKFDUJPO'SBNFXPSLͰ w &SSPS w %FMBZ
w 5JNFPVU ͷͭΛೖΕ͍ͯΔ ͦͷ͏ͪɺ&SSPSɾ5JNFPVU͕͋Εࢼͤͦ͏ɻ ߋʹɺͦ͏͍ͬͨৼΔ͍ϥϯμϜʹى͖ΔΑ͏ʹ͍ͨ͠ αʔϏεΛ6OJY5JNF͕/ͰׂΓΕΔͱ͖ΞϗʹͳΔΑ͏ʹ͢Εྑ͛͞
©2018 Wantedly, Inc. Ͳ͏͍ͬͨৼΔ͍Λ͖͔͢ { "interval": 1, "slow_response_option": { "enable":
true, "time": 5 }, "server_error_option": { "enable": true } }
©2018 Wantedly, Inc. ͦ͏͍ͬͨύοέʔδΛ࡞ͨ͠ https://github.com/rerost/unstable
©2018 Wantedly, Inc. package main import ( "fmt" "net/http" "github.com/rerost/unstable/uhttp"
) func main() { http.Handle("/", uhttp.WithUnstable(handler)) if err := http.ListenAndServe(":3000", nil); err != nil { fmt.Println(err) } } func handler(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Sample")) }
©2018 Wantedly, Inc. package main import ( "context" "log" "net"
"github.com/golang/protobuf/ptypes/empty" api_pb "github.com/rerost/unstable/example/grpc/server/api" "github.com/rerost/unstable/ugrpc" "google.golang.org/grpc" "google.golang.org/grpc/reflection" ) type server struct{} func (s *server) GetSample(ctx context.Context, req *empty.Empty) (*api_pb.GetSampleResponse, error) { return &api_pb.GetSampleResponse{Message: "Sample"}, nil } func main() { l, err := net.Listen("tcp", ":5000") if err != nil { log.Fatalf("Failed to listen: %v", err) } s := grpc.NewServer( grpc.UnaryInterceptor(ugrpc.UnstableUnaryServerInterceptor()), ) api_pb.RegisterSampleServiceServer(s, &server{}) reflection.Register(s) if err := s.Serve(l); err != nil { log.Fatalf("Failed to serve: %v", err) } }
©2018 Wantedly, Inc. Demo
©2018 Wantedly, Inc. γϡοͱ'BVMU*OKFDUJPO͍ͨ͠ͱ͖ʹ͓͢͢Ί $IBPT&OHJOFFSJOHͱ͔ఆ͍ͯ͠ͳ͍