Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Goサーバをあえて不安定にするパッケージを作った話
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Hazumi Ichijo
January 31, 2019
Programming
1.6k
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
Transcript
18 slides
©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ͱ͔ఆ͍ͯ͠ͳ͍
More Decks by Hazumi Ichijo
See All by Hazumi Ichijo
RailsとRidgepoleの マイグレを120倍早くする
hazumirr
0
490
CIを整備してメンテナンスを生成AIに任せる
hazumirr
0
1.5k
病院の情報フローを理解して、 予約〜会計の見え方が変わった話
hazumirr
1
2k
Rubyのコード削除したい時 僕がやること
hazumirr
0
310
テーブル駆動テストと状態
hazumirr
5
2.3k
オンラインテストしようと思った その日に開始できる環境を目指して
hazumirr
0
1.2k
推薦によるプロダクト改善とマイクロサービスが噛み合った話
hazumirr
2
4.9k
ChatGPTで僕が知っていることまとめ
hazumirr
3
3.2k
プロダクトチームとどう 協業し分析環境を改善するか
hazumirr
2
1.7k
Other Decks in Programming
See All in Programming
エラーチャンネルのボールを拾い続けて鍛えるエンジニアの地力 / phpcon-niigata2026
meihei3
1
160
ビジネスロジックを堅牢に~Scala 3のドメインプリミティブ~
j5ik2o
0
180
なぜ私たちは「現時点では」KMPの導入を見送ったのか
chigichan24
0
220
作れるエンジニアから、価値を届けるエンジニアへ
ryunakayama
1
290
エージェントを使い続けるためのメタワーク / Meta-work for keeping using the agent
rkaga
6
2.3k
地方こそサーバーレス — 10年続けた、顔が見えるチームで確かな基盤を / Serverless Matters Most in Regional Areas — 10 Years of Building Reliable Foundations with Close-Knit Teams
seike460
PRO
1
450
우리의 Nitro Modules는 당신의 Turbo Modules보다 아름답다
l2hyunwoo
0
260
AI時代のシニアエンジニアとは
yosuke_furukawa
PRO
15
12k
どうしても Eloquent でリポジトリパターンをやりたいんだ #phpcon_niigata / phpcon-niigata-2026
shogogg
0
300
Crash Auto Pipelines
veronikapj
1
420
LLM 101: Exploring LLMs, Starting with Tokens.
dalinaum
0
110
선언형 햅틱 라이브러리 진동을 소개합니다
l2hyunwoo
1
310
Featured
See All Featured
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
48k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
1.1k
Building the Perfect Custom Keyboard
takai
2
960
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.7k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
590
Fantastic passwords and where to find them - at NoRuKo
philnash
53
4k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.9k
Scaling GitHub
holman
464
140k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
2
520
Facilitating Awesome Meetings
lara
57
7.2k