DevOps for f2e

By Tony Pai

tonyxpai@twitter / tonypai@medium / tpai@github

DevOps

--guide

--help

--info

man

google

define

有一天,有個老闆聽說了有 DevOps 工程師這種新職業。

馬上去 google DevOps,就看到這張圖

馬上拿起公司電話撥了分機給人資

 

過沒多久產品部門接到電話

 

人資說:「公司近期會找一位 DevOps 工程師進來」

產品部所有人都非常的開心

運說:「我們終於要有自動化部署了!」
測試說:「我們終於要有自動化測試了!」

人資接著說:「所以維運跟測試麻煩你們收拾一下東西。」

Development + Operations

Source: wiki

DevOps 系列文

https://goo.gl/qDCYkK

DevOps for f2e

By Tony Pai

Load Balancing

兩個不同的服務在同一網域下運行

服務 F

Monolithic 架構,前人自幹的 PHP Framework,由遠端團隊維護。

PHP

支援多網域

mycompany.com/admin/*

mycompany.com/services/*

sub.hiscompany.com/admin/*

sub.hiscompany.com/services/*

/admin/*

/service/*

Service

F

Load Balancer

Routing Rules

or

*

mycompany.com/admin/*

sub.hiscompany.com/service/*

服務 F

Monolithic 架構,前人自幹的 PHP Framework,由遠端團隊維護,服務 Z 的 API 由服務 F 提供

服務 Z

Microservice 架構,使用 Next.js Server Rendering Framework。

PHP

Next.js

API

支援多網域

mycompany.com/admin/*

mycompany.com/services/*

mycompany.com/api/*

mycompany.com/page/*

sub.hiscompany.com/admin/*

sub.hiscompany.com/services/*

sub.hiscompany.com/api/*

sub.hiscompany.com/page/*

/m/*

/admin/*

/services/*

/_next/*

/static/*

/page/*

/api/*

Service

F

Service

Z

Load Balancer

Routing Rules

mycompany.com/api/*

mycompany.com/page/*

系統架構

HTTP 80

HTTPS 443

SSL

Certificate

https://sub.newcompany.com

SSL Certificate

  • mycompany.com
  • *.mycompany.com
  • sub.hiscompany.com
  • sub.hercompany.com
  • sub.companyA.com
  • sub.companyB.com

Listener Rules

Load Balancer

憑證錯誤

SSL Certificate

  • mycompany.com
  • *.mycompany.com
  • sub.hiscompany.com
  • sub.hercompany.com
  • sub.companyA.com
  • sub.companyB.com
  • sub.newcompany.com

HTTP 80

HTTPS 443

SSL

Certificate

Listener Rules

Load Balancer

https://sub.newcompany.com

Load Balancer A

  • mycompany.com
  • *.mycompany.com

SSL Certificate

Load Balancer B

  • sub.hiscompany.com
  • sub.hercompany.com
  • sub.companyA.com
  • sub.companyB.com
  • sub.newcompany.com

SSL Certificate

Routing Rules

Routing Rules

Load Balancer

  • mycompany.com
  • *.mycompany.com

SSL Certificate*

  • sub.hiscompany.com
  • sub.hercompany.com
  • sub.companyA.com
  • sub.companyB.com
  • sub.newcompany.com

SSL Certificate

Routing Rules

Bonus!

Key Takeaways

  • 制定路由規則,將訪問請求導向對應的服務,便可讓一個網域提供兩個以上的服務。
  • Load Balancer 可同時裝載多個 SSL 憑證,提供 https 加密協定。(AWS 限定)
  • 增加新服務時,加前綴可減少需設定的路徑規則且避免衝突。(e.g. /m/)

CI/CD

每次都要花超過 90 秒處理的事就自動化

 $ ssh -i my.pem me@server

 $ git checkout master; git pull --rebase

 $ yarn

 $ jest

 $ node server.js

Manually

Source: draw.io

Automatically

1.

2.

3.

4.

5.

6.

Unit Tests

Build

Deploy to

Stage

Acceptance

Tests

Deploy to

Production

Continuous Delivery

Continuous Deployment

Continuous Integration

Manual

Auto

Unit Tests

Build

Deploy to

Stage

Acceptance

Tests

Deploy to

Production

Continuous Delivery

Continuous Deployment

Continuous Integration

Manual

Auto

Manual

Cluster Name

Service Name

Who

Revision Number

Commit Hash

Platform

Task Name

Key Takeaways

  • 利用 CircleCI 做 Stage 環境的自動化。
  • 待 Stage 環境驗收測試完畢後,手動進行 Production 環境的部署。
  • 利用 Slack 記錄每次部署的細節,方便 Debug 或 Rollback。

Auto Scaling

流量暴增時,自動擴展服務與機器

High Concurrency

Source: draw.io
Source: draw.io
Source: draw.io

EC2 (T2-Small): 1CPU, 2GB RAM

Resource

Memory: 300MB per task

Docker Container

Task

  • CPU Utilization
    • >= 30%, add 1 tasks
    • >= 50%, add 2 tasks
    • >= 70%, add 4 tasks
  • Capacity
    • Min: 2 tasks
    • Max: 20 tasks

70%: 1     50%: 4     30%: 5     10%: 16

Instance

  • Memory Reservation
    • >= 75%, add 1 instance
    • < 75%, subtract 1 instance
  • Capacity
    • Min: 1 instance
    • Max: 3 instances

Create Custom Dashboard

Key Takeaways

  • 觀察 CPU 使用率為 ECS Task 定義 Scaling Policy
  • 根據 Task 的記憶體佔用率為 EC2 Instance 定義 Scaling Policy
  • 打 log 到 AWS Cloudwatch,建立自己的 Dashboard,長期觀測與微調,定出更好的擴展策略,節省資源降低成本。

Conclusion

  • Load Balancer
    • Routing rules
    • SSL certificates
  • CI/CD Tools
    • TravisCI (open source project)
    • CircleCI (private project)
    • Log deployment details
  • Auto Scaling
    • Analyze logs
    • Test limits
    • Create dashboard
    • Adjust all the time

Q

A

DevOps for f2e

By Tony Pai

DevOps for f2e

Review my f2e life in 2017

  • 1,257