Upgrade to Pro — share decks privately, control downloads, hide ads and more …

用 Go 語言打造為服務架構

Bo-Yi Wu
August 10, 2017
760

用 Go 語言打造為服務架構

Go 語言 (又稱Golang) 是 Google 推出新一代的強大語言,2017 年 3 月 Google 公佈了去年底統計的問卷結果,發現 63% 用 Go 來寫網站,38% 用來開發系統程式,35% 用來做 DevOps,本次議題將會帶您瞭解為什麼 Go 語言適合打造微服務架構,Go 語言大給微服務什麼樣的特性以及 Go 語言適合用來開發什麼樣的系統?

部落格 ▶ https://blog.wu-boy.com
GitHub ▶ https://github.com/appleboy
Linkedin ▶ https://www.linkedin.com/in/appleboy/
SlideShare ▶ https://www.slideshare.net/appleboy
臉書 ▶ https://www.facebook.com/appleboy46

Go 語言線上課程目前特價 $1800,持續錄製中,每週都會有新的影片上架,歡迎大家參考看看,請點選底下購買連結:

https://www.udemy.com/golang-fight/?couponCode=GOLANG-TOP

Bo-Yi Wu

August 10, 2017
Tweet

Transcript

  1. Bo-Yi Wu
    2017.08.10

    View Slide

  2. —  聯聯發科技後端⼯工程師
    —  DevOps
    —  Golang, PHP, Node.js ..
    —  維護數個 Go 開源專案
    —  Gitea
    —  Gin
    —  Drone
    —  appleboy @GitHub
    —  appleboy @twitter
    —  appleboy @slideshare
    —  appleboy46 @facebook
    2

    View Slide

  3. — Microservices vs. Monolithic 差異異
    — 微服務核⼼心架構 (Go ⼯工具專案)
    — Go 語⾔言核⼼心⾼高並發
    — 為什什麼選⽤用 Go 語⾔言
    — 微服務代價跟準備

    View Slide

  4. — Microservices vs. Monolithic 差異異
    — 微服務核⼼心架構 (Go ⼯工具專案)
    — Go 語⾔言核⼼心⾼高並發
    — 為什什麼選⽤用 Go 語⾔言
    — 微服務代價跟準備

    View Slide

  5. ⽤用⼀一張圖解釋兩兩個差異異

    View Slide

  6. 圖片出處: https://goo.gl/azg49a

    View Slide

  7. 傳統開發模式

    View Slide

  8. 瀏覽器
    使⽤用者介⾯面 (UI)
    產品功能 訂單功能 帳⼾戶功能

    View Slide

  9. — 集中管理理
    — 開發簡單
    — 容易易上⼿手
    — 除錯簡單
    — 單⼀一主機

    View Slide

  10. 圖片來來源: https://goo.gl/J9GUD4
    Happy Coding

    View Slide

  11. 需求變多

    View Slide

  12. — 開發效率低
    — 不易易維護
    — 不易易開發
    — 穩定性 差
    — 不易易擴充

    View Slide

  13. 解決衝突

    View Slide

  14. View Slide

  15. View Slide

  16. View Slide

  17. 效能瓶頸

    View Slide

  18. 瀏覽器
    使⽤用者介⾯面 (UI)
    產品功能 訂單功能 帳⼾戶功能

    View Slide

  19. 瀏覽器
    使⽤用者介⾯面 (UI)

    View Slide

  20. View Slide

  21. View Slide

  22. View Slide

  23. 老闆⼼心⽬目中架構

    View Slide

  24. 需求
    開發
    測試
    部署
    上線
    敏捷開發

    View Slide

  25. View Slide

  26. View Slide

  27. — Microservices vs. Monolithic 差異異
    — 微服務核⼼心架構 (Go ⼯工具專案)
    — Go 語⾔言核⼼心⾼高並發
    — 為什什麼選⽤用 Go 語⾔言
    — 微服務代價跟準備

    View Slide

  28. 拆分應⽤用層,實現敏捷開發及部署

    View Slide

  29. 桌機
    產品功能 訂單功能 帳⼾戶功能
    ⼿手機

    View Slide

  30. View Slide

  31. — 依照業務區分
    — ⾃自動化部署
    — ⾼高度容錯
    — 可快速置換
    — 可獨立開發
    — 容易易擴充

    View Slide

  32. ⽤用 Go 語⾔言⽅方案

    View Slide

  33. 桌機 ⼿手機
    Load Balancer
    API
    Gateway
    API
    Gateway
    API
    Gateway
    REST REST
    RPC
    REST REST
    RPC
    REST REST
    RPC
    Database Cache NoSQL
    File

    View Slide

  34. API
    Gateway
    REST REST
    RPC
    服務發現
    系統監控

    View Slide

  35. 負載平衡 API
    Gateway
    程式溝通
    服務發現 部署分配 消息佇列列
    ⽇日誌管理理 服務監控 CI/CD

    View Slide

  36. Caddy
    seesaw

    View Slide

  37. Caddy Server Config

    View Slide

  38. traefik
    fabio
    tyk

    View Slide

  39. View Slide

  40. View Slide

  41. RPC REST 其他

    View Slide

  42. gin kit micro
    kite echo goa

    View Slide

  43. grpc thrift hprose

    View Slide

  44. Proto file

    View Slide

  45. View Slide

  46. View Slide

  47. View Slide

  48. View Slide

  49. etcd consul serf

    View Slide

  50. k8s swarm

    View Slide

  51. NSQ nats

    View Slide

  52. appdash cloudinsight opentracing

    View Slide

  53. beats elastic grafana

    View Slide

  54. View Slide

  55. prometheus
    open-falcon

    View Slide

  56. View Slide

  57. View Slide

  58. View Slide

  59. Concourse
    Drone

    View Slide

  60. View Slide

  61. View Slide

  62. 代碼 測試 發佈 上傳 通知
    62

    View Slide

  63. — 測試程式碼
    — 分析程式碼
    — 程式碼品質
    — 編譯 Binary
    — 部署 Binary
    — 編譯 Docker Image
    — 部署 Docker Container
    — 通知訊息
    63

    View Slide

  64. 驗證代碼品質
    測試程式覆蓋率

    View Slide

  65. 編譯執⾏行行擋

    View Slide

  66. 上傳執⾏行行檔

    View Slide

  67. 編譯
    打包

    View Slide

  68. 上傳到 Docker Hub

    View Slide

  69. http://plugins.drone.io/mactynow/drone-kubernetes/

    View Slide

  70. 為什什麼⼤大家都選 Go

    View Slide

  71. — Microservices vs. Monolithic 差異異
    — 微服務核⼼心架構 (Go ⼯工具專案)
    — Go 語⾔言核⼼心⾼高並發
    — 為什什麼選⽤用 Go 語⾔言
    — 微服務代價跟準備

    View Slide

  72. goroutine

    View Slide

  73. 沒輸出東⻄西?

    View Slide

  74. View Slide

  75. View Slide

  76. View Slide

  77. View Slide

  78. Go channel

    View Slide

  79. 對調

    View Slide

  80. View Slide

  81. 透過 Select 管理理多個通道

    View Slide

  82. 正確輸出, 錯誤輸出, 指令超時

    View Slide

  83. View Slide

  84. 使⽤用 sync 及 channel

    View Slide

  85. 等待指令完成
    關閉通道

    View Slide

  86. https://github.com/appleboy/drone-ssh

    View Slide

  87. — Microservices vs. Monolithic 差異異
    — 微服務核⼼心架構 (Go ⼯工具專案)
    — Go 語⾔言核⼼心⾼高並發
    — 為什什麼選⽤用 Go 語⾔言
    — 微服務代價跟準備

    View Slide

  88. View Slide

  89. View Slide

  90. Go 語⾔言核⼼心開發者

    View Slide

  91. https://goo.gl/jGcwXK

    View Slide

  92. 開發 運⾏行行

    View Slide

  93. 類 C
    語法
    編譯
    快速

    View Slide

  94. 交叉
    編譯
    無依賴
    部署

    View Slide

  95. 編譯
    檢查
    統⼀一
    ⼯工具

    View Slide

  96. View Slide

  97. — Microservices vs. Monolithic 差異異
    — 微服務核⼼心架構 (Go ⼯工具專案)
    — Go 語⾔言核⼼心⾼高並發
    — 為什什麼選⽤用 Go 語⾔言
    — 微服務代價跟準備

    View Slide

  98. View Slide

  99. —  系統複雜度提升
    —  系統資料⼀一致性
    —  維運⼯工作複雜化

    View Slide

  100. View Slide

  101. — 快速建置 (Develop)
    — 監控機制 (Monitor)
    — 快速部署 (Deploy)

    View Slide

  102. View Slide

  103. A push notification server
    https://github.com/appleboy/gorush

    View Slide

  104. 謝謝⼤大家參參與

    View Slide