October 21, 2021
Cloud Auto-Scaling

Tổng quan về “automatic scaling” và “basic scaling” của GAE

Google App Engine (GAE) là nền tảng PaaS của Google được tất cả Google Cloud Plaatform (GCP) user biết đến, thế nhưng không phải ai cũng biết rằng, tuỳ theo cách cấu hình mà phương thức scale sẽ có sự khác nhau. GAE có tất cả 3 kiểu scale, nhưng trong bài này chúng tôi sẽ chỉ so sánh sự khác nhau của 2 trong 3 kiểu scale đó là “automatic scaling” và “basic scaling”. Nội dung bài viết bao gồm:

  • Các kiểu instance có thể chọn
  • Các mục có thể thiết lập trên từng kiểu scale
  • Sự khác nhau của deadline theo request

Việc phân biệt được những điểm khác nhau trên đóng vai trò rất quan trọng khi bạn bước vào công việc xây dựng một hệ thống trên GAE. Là một nhà phát triển, bạn cần phải hiểu rõ được những ưu điểm, nhược điểm của từng kiểu scale, để xây dựng cho mình một bản thiết kế hoàn hảo nhất phù hợp với yêu cầu đề ra.

Bây giờ, chúng ta hãy cùng tìm hiểu về các kiểu scale của GAE!

※Note 1: Hiện tại, GAE được chia ra làm hai môi trường chính là “Standard Environment” và “Flexible Environment”. Trong bài viết này, chúng tôi tiến hành trên “Standard Environment”. Trên “Flexible Environment” bạn cũng có thể chọn kiểu scale, nhưng chỉ có 2 kiểu là “automatic scaling” và “manual scaling”. Ngoài ra, những mục ta có thể thiết lập trên “automatic scaling” của “Flexble Environment” hơi khác so với “Standard Enviroment”. Chi tiết các bạn có thể tham khảo theo URL bên dưới :

https://cloud.google.com/appengine/docs/flexible/nodejs/configuring-your-app-with-app-yaml

※Note 2: Kiểu còn lại trong 3 kiểu scale của GAE là “manual scaling”, cho phép bạn có thể khởi động các instance chỉ định theo cách thông thường. Bài viết sẽ không giải thích về kiểu scale này.

 

[alert-note]Tổng quan về hai kiểu Scale[/alert-note]

Automatic Scaling là kiểu scale sử dụng khi bạn muốn xử lý với lượng request lớn!

Automatic scaling là kiểu scale theo giải pháp scale out tương ứng với tình trạng truy cập. Đây là kiểu scale không còn xa lạ với những bạn đã làm việc trên GAE từ lâu. Kiểu scale này thích hợp với những trang web thường xuyên có lưu lượng truy cập tăng đột biến.

 

Basic Scaling là kiểu scale sử dụng khi bạn muốn thực hiện batch processing!

 

Basic Scaling là kiểu scale được chỉ định với một số lượng instance tối đa. Kiểu scale này không thực hiện scale out vượt qua số instance được chỉ định. Đây là kiểu scale thích hợp sử dụng khi bạn muốn thực hiện batch processing trong một khoảng scale out nhất định.

 

[alert-announce]Các kiểu Instance có thể chọn trên GAE[/alert-announce]

Các class và số lượng của instance mà bạn có thể dùng trên automatic scaling và basic scaling là khác nhau. Trong quá trình sử dụng GAE, có thể bạn sẽ muốn thay đổi class của instance tuỳ theo tình hình cụ thể. Nhưng các bạn nên lưu ý rằng, số hiệu của class instance càng lớn, thì phí sử dụng càng cao.

 

Các Instance có thể chọn trên Automatic Scaling

Dưới đây là bảng instance class mà bạn có thể chọn trên automatic scaling. Các số hiệu F1, F2,… càng tăng, thì dung lượng và phí sử dụng (theo giờ) cũng lớn hơn. Google cấp Free Quota cho 1 ngày là 28 instances-hour, nên đối với những start-up service, các bạn có thể sử dụng hầu như miễn phí (không vượt quá 28 instance-hour) cho đến khi dịch vụ của bạn đạt được một lượng truy cập đủ lớn.

 

Instance ClassMemoryCPUFee
F1128MB600MHz$0.05
F2256MB1.2GHz$0.10
F4512MB2.4GHz$0.20
F4_1G1024MB2.4GHz$0.30

H1. Insance Class có thể thiết lập trên automatic scaling

※Trường hợp các bạn chọn B1 (~B8) cho instance class trong automatic scaling, thì sẽ không deploy được và xuất hiện lỗi bên dưới:

Error 400: — begin server output —

Instance class B1 is only allowed with the ‘manual’ or ‘basic’ scaling value.

— end server output —

 

Instance có thể chọn trên Basic Scaling

Bên dưới là bảng class bạn có thể sử dụng trên basic scaling. Các bạn có thể thấy, instance class có thể chọn trên basic scaling nhiều hơn 1 so với automatic scaling. Và cũng giống như automatic scaling, instance class có số hiệu càng cao, thì phí sử dụng và dung lượng càng lớn. Ngoài ra đối với basic scaling, Google cung cấp Free Quota cho 1 ngày là 8 instance-hour.

 

Instance classMemoryCPUFee
B1128MB600MHz$0.05
B2256MB1.2GHz$0.10
B4512MB2.4GHz$0.20
B4_1G1024MB2.4GHz$0.30
B81024MB4.8GHz$0.40

 

[alert-success]Các mục có thể thiết lập với hai kiểu scale[/alert-success]

Có tất cả 5 mục thiết lập đối với automatic scaling và 2 mục đối với basic scaling. Số lượng không nhiều, nên các bạn có thể nhớ hết tất cả các mục thiết lập này. Trường hợp các bạn sử dụng GAE để phát triển một hệ thống với dự kiến sẽ xảy ra tình trạng truy cập tăng đột biến, thì bạn nên hiểu sâu về các hạng mục của automatic scaling. Và đương nhiên, ứng với mỗi sự điều chỉnh của từng hạng mục, mà hiệu suất và chi phí cũng sẽ thay đổi.

Các mục thiết lập trên Automatic Scaling

Trên automatic scaling có tất cả 5 mục thiết lập cụ thể như sau:

Mục thiết lậpGiải thíchTrị thiết lập
min_idle_instancesChỉ định số instance tối thiểu cho phép chờ ở trạng thái idle. Giá trị càng cao, thì càng dễ ứng phó với trường hợp truy tập tăng đột biến, nhưng chi phí vận hành cũng sẽ tăng theo.Phạm vi chỉ định từ 0 đến 1000. Bạn có thể chọn thiết lập tự động bằng cách chọn “automatic”.
max_idle_instancesChỉ định số instance tối đa cho phép chờ ở trạng thái idle. Trường hợp dung lượng sử dụng phát sinh định kỳ, bạn nên chọn giá trị cao để tối ưu hoá hiệu suất. Phạm vi chỉ định từ 1 đến 1000. Giá trị default là “automatic”, dùng khi bạn muốn để thiết lập tự động.
min_pending_latencyChỉ định thời gian tối thiểu mà truy cập chờ ở trạng thái “Pending Request Queue”. Giá trị càng nhỏ, thì càng dễ spin-up instance.  Phạm vi chỉ định từ 0.010000s~15.000000s. Giá trị default là “automatic”
max_pending_latencyChỉ định thời gian tối đa mà truy cập chờ ở trạng thái “Pending Request Queue”. Giá trị càng cao, thì các instance hiện có sẽ càng dễ bị trống, dẫn đến khó spin-up instance. Phạm vi chỉ định từ 0.010000s~15.000000s. Giá trị default là 30ms. Bạn có thể chọn “automatic” để thiết lập tự động.
max_concurrent_requestsChỉ định số request được instance xử lý đồng thời. Nếu thiết lập giá trị càng gần so với giá trị lớn nhất, thì tài nguyên sử dụng cho instance đó sẽ lớn hơn.Phạm vi chỉ định từ 1 ~ 80. Không có tuỳ chọn “automatic”. Giá trị default là 8, lớn nhất là 80.

 

Các mục thiết lập được ghi trên file thiết lập “appengine”. Dưới đây là sample của file thiết lập. Theo như bảng trên, thì mục “max_concurrent_requests” không có tuỳ chọn “automatic”, nên các bạn lưu ý cần phải nhập giá trị thông số này.

 

1

2

3

4

5

6

7

8

9

10

11

application: simple-sample

version: uno

runtime: go

api_version: go1

instance_class: F2

automatic_scaling:

 min_idle_instances: 5

 max_idle_instances: automatic # default value

 min_pending_latency: 30ms

 max_pending_latency: automatic

 max_concurrent_requests: 50

ex 1. Thiết lập app.yaml trên automatic scaling

Các mục thiết lập trên Basic Scaling

Dưới đây là các mục thiết lập trên basic scaling. Chỉ có 2 mục thiết lập như sau:

Mục thiết lậpGiải thíchTrị thiết lập
max_instancesChỉ định số instance tối đa khi scale Phạm vi chỉ định từ 1 ~ 25
idle_timeoutChỉ định thời gian từ trạng thái    idle cho đến khi time out.Phạm vi chỉ định từ 10 ~ 3600s. Giá trị default là 5 phút.

 

Cũng giống như “automatic scaling”, các mục thiết lập được ghi trên file thiết lập “appengine”(app.yaml). Dưới đây là sample của file thiết lập. Các bạn chú ý rằng, Instance class có thể sử dụng ở đây khác với “automatic scaling”, được chọn từ B1 ~ B8. Trường hợp bạn chọn F1 ~ F4_1G, khi deploy sẽ bị phát sinh lỗi.

1

2

3

4

5

6

7

8

application: simple-sample

version: uno

runtime: go

api_version: go1

instance_class: B8

basic_scaling:

 max_instances: 11

 idle_timeout: 10m

Ex 2. Thiết lập app.yaml trên basic scaling

[alert-warning]Deadline của hai kiểu scale[/alert-warning]

Có thể nói, deadline của request là mục quan trọng nhất khi so sánh giữa “automatic scaling” và “basic scaling”. Bởi vì hai kiểu scale này có deadline hoàn toàn khác nhau.

Request Deadline của Automatic Scaling là 60s!

Deadline của “automatic scaling” là 60s. Bảng bên dưới là một chương trình xuất “Hello, world!” sau 120s. Tuy nhiên, do request deadline của front-end trên “automatic scaling” là 60s, nên khi chạy chương trình sẽ phát sinh lỗi “DeadLineExceedException”. Trừ trường hợp bạn sử dụng TaskQueue API, thì deadline là 10 phút/1 task.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

package src

import (

 “net/http”

 “fmt”

 “time”

)

func init() {

 // Handler

 http.HandleFunc(“/receive”, receive)

}

func receive(w http.ResponseWriter, r *http.Request) {

 time.Sleep(120 * time.Second) // 120s waiting

 fmt.Fprint(w, “Hello, world!”)

}

 

Sau khi deploy sample apply như trên, khi truy cập vào ứng dụng bằng trình duyệt web sẽ phát sinh lỗi “500 Internal Server Error”. Kiểm tra màn hình log của GCP console, bạn sẽ thấy message báo lỗi như hình bên dưới. Message báo lỗi “request deadline was exceeded” chính là lỗi deadline.

Request Dealine của Basic Scaling là 24H!

Deadline của “basic scaling” là 24H. Bên dưới là một chương trình xuất “Hello, world!” với thời gian chờ là 1H. Các bạn sẽ thấy chương trình chạy bình thường theo đúng yêu cầu.

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

package src

import (

 “net/http”

 “appengine”

 “time”

)

func init() {

 http.HandleFunc(“/receive”, receive)

}

func receive(w http.ResponseWriter, r *http.Request) {

 c := appengine.NewContext(r)

 time.Sleep(3600 * time.Second) // 1H waiting

 c.Infof(“Hello, world!”) // Log output

}

 

Sau khi deloy sample apple trên, bạn hãy gửi GET request bằng curl hoặc Web browser. 1 giờ sau bạn màn hình log của GCP console sẽ hiển thị log như bên dưới:

Ở đây các bạn có thể thấy, chương trình “Hello, world!” được thực hiện sau thời gian xử lý là 1H. Như đã nói ở trên, với “automatic scaling” thời gian chờ xử lý tối đa có thể là 10 phút khi bạn sử dụng thêm TaskQueue. Tuy nhiên với “basic scaling”, các bạn có thể xử lý dữ liệu trong vài tiếng (tối đa là 24 tiếng).

[alert-success]Tổng hợp về “auto scale” của GAE[/alert-success]

Dưới đây là bảng tổng hợp nội dung của hai kiểu scale trên. Qua bảng này, các bạn có thể nắm được các sử dụng các kiểu scale tuỳ vào điều kiện cụ thể của mình.

Mụcautomatic scalingbasic scaling
DeadLineBắt buộc hoàn thành xử lý trong 60s. Nếu sử dụng thêm TaskQueue, thời gian là 10 phút. Bắt buộc hoàn thành xử lý trong 24H.
Instance classF1、F2、F4、F4_1GB1、B2、B4、B4_1G、B8
ScalingScale out dựa trên lượng request trafic.Scale out dựa trên phạm vi instance được chỉ định.
Free Quota28 instance-hours8 instance-hours

 

“Automatic Scaling” thích hợp khi bạn muốn xử lý số lượng lớn request trong khoảng thời gian ngắn. Và “basic scaling” sẽ thích hợp hơn khi bạn muốn thực hiện Batch Processing như xử lý một lượng dữ liệu cực lớn.

 

Nội dung trên đã giải thích sự khác nhau giữa hai kiểu scale trên Google App Engine (GAE). Các bạn hãy thường xuyên truy cập blog để biết thêm nhiều nội dung liên quan đến GAE được chúng tôi liên tục cập nhật tại đây!

Ngoài ra, bạn có thể liên hệ trực tiếp với Cloud Ace Vietnam để nhận tư vấn miễn phí về GAE.

 

Pham Van Tuyen

Anh Tuyen Pham là Tổng giám đốc của Cloud Ace Việt Nam và là GDG Cloud HCM Chapter Lead. Anh là diễn giả quen thuộc tại các sự kiện do Google tổ chức tại Việt Nam như Kubernetes Vietnam, Google Cloud Next Extended. Anh đã có các chứng chỉ của Google Cloud như Google Cloud Architect và Data Engineer.

View all posts by Pham Van Tuyen →