狠狠撸

狠狠撸Share a Scribd company logo
Bo-Yi Wu
2017.08.10
? 聯發科技後端工程師
? DevOps
? Golang, PHP, Node.js ..
? 維護數個 Go 開源專案
? Gitea
? Gin
? Drone
? appleboy @GitHub
? appleboy @twitter
? appleboy @slideshare
? appleboy46 @facebook
2
?Microservices vs. Monolithic 差異
?微服務核心架構 (Go 工具專案)
?Go 語言核心高並發
?為什麼選用 Go 語言
?微服務代價跟準備
?Microservices vs. Monolithic 差異
?微服務核心架構 (Go 工具專案)
?Go 語言核心高並發
?為什麼選用 Go 語言
?微服務代價跟準備
用一张图解释两个差异
圖片出處: https://goo.gl/azg49a
传统开发模式
瀏覽器
使用者介面 (UI)
產品功能 訂單功能 帐户功能
?集中管理
?開發簡單
?容易上手
?除錯簡單
?單一主機
圖片來源: https://goo.gl/J9GUD4
Happy Coding
需求变多
?開發效率低
?不易維護
?不易開發
?穩定性差
?不易擴充
解决衝突
用 Go 語言打造微服務架構
用 Go 語言打造微服務架構
用 Go 語言打造微服務架構
效能瓶颈
瀏覽器
使用者介面 (UI)
產品功能 訂單功能 帐户功能
瀏覽器
使用者介面 (UI)
用 Go 語言打造微服務架構
用 Go 語言打造微服務架構
用 Go 語言打造微服務架構
老闆心目中架构
需求
開發
測試
部署
上線
敏捷開發
用 Go 語言打造微服務架構
用 Go 語言打造微服務架構
?Microservices vs. Monolithic 差異
?微服務核心架構 (Go 工具專案)
?Go 語言核心高並發
?為什麼選用 Go 語言
?微服務代價跟準備
拆分应用层,实现敏捷开发及部署
桌機
產品功能 訂單功能 帐户功能
手機
用 Go 語言打造微服務架構
? 依照業務區分
? 自動化部署
? 高度容錯
? 可快速置換
? 可獨立開發
? 容易擴充
用 Go 語言方案
桌機 手機
Load Balancer
API
Gateway
API
Gateway
API
Gateway
REST REST
RPC
REST REST
RPC
REST REST
RPC
Database Cache NoSQLFile
API
Gateway
REST REST
RPC
服務發現
系統監控
負載平衡
API
Gateway
程式溝通
服務發現 部署分配 消息佇列
日誌管理 服務監控 CI/CD
Caddy
seesaw
Caddy Server Config
traefikfabiotyk
用 Go 語言打造微服務架構
用 Go 語言打造微服務架構
RPC REST 其他
gin kit micro
kite echo goa
grpc thrift hprose
Proto file
用 Go 語言打造微服務架構
用 Go 語言打造微服務架構
用 Go 語言打造微服務架構
用 Go 語言打造微服務架構
etcd consul serf
k8s swarm
NSQ nats
appdash cloudinsight opentracing
beats elastic grafana
用 Go 語言打造微服務架構
prometheusopen-falcon
用 Go 語言打造微服務架構
用 Go 語言打造微服務架構
用 Go 語言打造微服務架構
ConcourseDrone
用 Go 語言打造微服務架構
用 Go 語言打造微服務架構
代碼 測試 發佈 上傳 通知
62
? 測試程式碼
? 分析程式碼
? 程式碼品質
? 編譯 Binary
? 部署 Binary
? 編譯 Docker Image
? 部署 Docker Container
? 通知訊息
63
驗證代碼品質
測試程式覆蓋率
编译执行挡
上传执行档
編譯
打包
上傳到 Docker Hub
http://plugins.drone.io/mactynow/drone-kubernetes/
為什麼大家都選 Go
?Microservices vs. Monolithic 差異
?微服務核心架構 (Go 工具專案)
?Go 語言核心高並發
?為什麼選用 Go 語言
?微服務代價跟準備
goroutine
没输出东西?
用 Go 語言打造微服務架構
用 Go 語言打造微服務架構
用 Go 語言打造微服務架構
用 Go 語言打造微服務架構
Go channel
对调
用 Go 語言打造微服務架構
透過 Select 管理多個通道
正確輸出, 錯誤輸出, 指令超時
用 Go 語言打造微服務架構
使用 sync 及 channel
等待指令完成
關閉通道
https://github.com/appleboy/drone-ssh
?Microservices vs. Monolithic 差異
?微服務核心架構 (Go 工具專案)
?Go 語言核心高並發
?為什麼選用 Go 語言
?微服務代價跟準備
用 Go 語言打造微服務架構
用 Go 語言打造微服務架構
Go 語言核心開發者
https://goo.gl/jGcwXK
開發 運行
類 C
語法
編譯
快速
交叉
編譯
無依賴
部署
編譯
檢查
統一
工具
用 Go 語言打造微服務架構
?Microservices vs. Monolithic 差異
?微服務核心架構 (Go 工具專案)
?Go 語言核心高並發
?為什麼選用 Go 語言
?微服務代價跟準備
用 Go 語言打造微服務架構
? 系統複雜度提升
? 系統資料一致性
? 维运工作复杂化
用 Go 語言打造微服務架構
?快速建置 (Develop)
?監控機制 (Monitor)
?快速部署 (Deploy)
用 Go 語言打造微服務架構
A push notification server
https://github.com/appleboy/gorush
谢谢大家参与

More Related Content

用 Go 語言 打造微服務架構

Editor's Notes

  1. 1.
  2. 開發效率低 所有功能都在同一包代碼修改,每次修改玩,跟同事衝突,還要去解决衝突現象 2. 不易維護 所有代碼都在同一包,邏輯混在一起,新人要入手非常不容易 3. 不易開發 為了解決一個小 bug 可能要動到很多地方,花的時間也很久 4. 穩定性差 修改了單一 bug 但是可能造成其他 bug 產生,讓系統 crash 5. 不易擴充 系統變慢了,想要擴充,變成整個系統複製,而無法擴充瓶頸的地方
  3. https://github.com/google/seesaw https://caddyserver.com/docs/proxy
  4. https://github.com/TykTechnologies/tyk https://github.com/fabiolb/fabio A fast, modern, zero-conf load balancing HTTP(S) router for deploying microservices managed by consul. https://github.com/fabiolb/fabio/wiki/Routing https://github.com/containous/traefik http://docs.traefik.io/basics/
  5. https://github.com/goadesign/goa
  6. https://github.com/apache/thrift http://www.jianshu.com/p/a58665a38022 https://github.com/hprose/hprose-golang
  7. https://www.consul.io/ https://github.com/coreos/etcd