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

用 Go 語言打造為服務架構

Bo-Yi Wu
August 10, 2017
1k

用 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 full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  7. 傳統開發模式

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  11. 需求變多

    View full-size slide

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

    View full-size slide

  13. 解決衝突

    View full-size slide

  14. 效能瓶頸

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  17. 老闆⼼心⽬目中架構

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  23. ⽤用 Go 語⾔言⽅方案

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  27. Caddy Server Config

    View full-size slide

  28. traefik
    fabio
    tyk

    View full-size slide

  29. RPC REST 其他

    View full-size slide

  30. gin kit micro
    kite echo goa

    View full-size slide

  31. grpc thrift hprose

    View full-size slide

  32. etcd consul serf

    View full-size slide

  33. appdash cloudinsight opentracing

    View full-size slide

  34. beats elastic grafana

    View full-size slide

  35. prometheus
    open-falcon

    View full-size slide

  36. Concourse
    Drone

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  40. 編譯執⾏行行擋

    View full-size slide

  41. 上傳執⾏行行檔

    View full-size slide

  42. 編譯
    打包

    View full-size slide

  43. 上傳到 Docker Hub

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  47. 沒輸出東⻄西?

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  50. 使⽤用 sync 及 channel

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  55. https://goo.gl/jGcwXK

    View full-size slide

  56. 開發 運⾏行行

    View full-size slide

  57. 類 C
    語法
    編譯
    快速

    View full-size slide

  58. 交叉
    編譯
    無依賴
    部署

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  64. 謝謝⼤大家參參與

    View full-size slide