1. Tổng quan
Loạt lớp học lập trình Serverless Migration Station (hướng dẫn thực hành theo tốc độ của riêng bạn) và các video liên quan nhằm giúp các nhà phát triển Google Cloud không máy chủ hiện đại hoá các ứng dụng của họ bằng cách hướng dẫn họ thực hiện một hoặc nhiều quy trình di chuyển, chủ yếu là chuyển từ các dịch vụ cũ. Làm như vậy sẽ giúp ứng dụng của bạn dễ dàng di chuyển hơn, đồng thời mang đến cho bạn nhiều lựa chọn và sự linh hoạt hơn, cho phép bạn tích hợp và truy cập vào nhiều sản phẩm trên đám mây hơn, cũng như dễ dàng nâng cấp lên các bản phát hành ngôn ngữ mới hơn. Mặc dù ban đầu tập trung vào những người dùng Cloud sớm nhất, chủ yếu là các nhà phát triển App Engine (môi trường tiêu chuẩn), nhưng loạt bài này đủ rộng để bao gồm các nền tảng không máy chủ khác như Cloud Functions và Cloud Run, hoặc ở những nơi khác nếu có thể.
Lớp học lập trình này hướng dẫn bạn cách đưa vào và sử dụng các tác vụ kéo Hàng đợi tác vụ App Engine cho ứng dụng mẫu trong lớp học lập trình Mô-đun 1. Chúng ta sẽ thêm việc sử dụng các tác vụ kéo trong hướng dẫn Mô-đun 18 này, sau đó di chuyển việc sử dụng đó sang Cloud Pub/Sub ở Mô-đun 19. Những người sử dụng Hàng đợi tác vụ cho các tác vụ đẩy sẽ di chuyển sang Cloud Tasks và nên tham khảo các Mô-đun 7-9.
Bạn sẽ tìm hiểu cách
- Sử dụng API Hàng đợi tác vụ/dịch vụ đi kèm của App Engine
- Thêm việc sử dụng hàng đợi kéo vào một ứng dụng NDB cơ bản của Python 2 Flask App Engine
Bạn cần có
- Một dự án trên Google Cloud Platform có một tài khoản thanh toán GCP đang hoạt động
- Kỹ năng cơ bản về Python
- Có kiến thức cơ bản về các lệnh Linux thường dùng
- Kiến thức cơ bản về cách phát triển và triển khai các ứng dụng App Engine
- Một ứng dụng App Engine hoạt động ở Mô-đun 1 (hoàn thành lớp học lập trình này [nên dùng] hoặc sao chép ứng dụng từ kho lưu trữ)
Khảo sát
Bạn sẽ sử dụng hướng dẫn này như thế nào?
Bạn đánh giá thế nào về trải nghiệm của mình với Python?
Bạn đánh giá thế nào về trải nghiệm khi sử dụng các dịch vụ của Google Cloud?
2. Thông tin khái quát
Để di chuyển từ các tác vụ kéo của Hàng đợi tác vụ App Engine, hãy thêm việc sử dụng hàng đợi này vào ứng dụng Flask và App Engine NDB hiện có có được từ lớp học lập trình Mô-đun 1. Ứng dụng mẫu hiển thị những lượt truy cập gần đây nhất cho người dùng cuối. Điều đó cũng tốt, nhưng sẽ thú vị hơn nếu bạn cũng theo dõi khách truy cập để xem ai truy cập nhiều nhất.
Mặc dù có thể sử dụng push tasks (đẩy tác vụ) cho số lượng khách truy cập này, nhưng chúng ta muốn phân chia trách nhiệm giữa ứng dụng mẫu (có nhiệm vụ đăng ký lượt truy cập và phản hồi ngay cho người dùng) và một "worker" (có nhiệm vụ tính tổng số lượt truy cập bên ngoài quy trình yêu cầu-phản hồi thông thường).
Để triển khai thiết kế này, chúng tôi sẽ thêm việc sử dụng hàng đợi kéo vào ứng dụng chính cũng như hỗ trợ chức năng của worker. Worker có thể chạy dưới dạng một quy trình riêng biệt (chẳng hạn như một thực thể hậu cảnh hoặc mã chạy trên một máy ảo luôn hoạt động), một dịch vụ chạy ngầm theo thời gian định trước hoặc một yêu cầu HTTP cơ bản trên dòng lệnh bằng cách sử dụng curl hoặc wget. Sau khi tích hợp, bạn có thể di chuyển ứng dụng sang Cloud Pub/Sub trong lớp học lập trình tiếp theo (Mô-đun 19).
Hướng dẫn này có các bước sau:
- Thiết lập/Công việc chuẩn bị
- Cập nhật cấu hình
- Sửa đổi mã xử lý ứng dụng
3. Thiết lập/Công việc chuẩn bị
Phần này giải thích cách:
- Thiết lập dự án trên đám mây
- Tải ứng dụng mẫu cơ sở
- (Triển khai lại) và xác thực ứng dụng cơ sở
Các bước này đảm bảo bạn bắt đầu bằng mã đang hoạt động.
1. Thiết lập dự án
Nếu bạn đã hoàn thành Lớp học lập trình mô-đun 1, hãy dùng lại chính dự án (và mã) đó. Ngoài ra, bạn có thể tạo một dự án hoàn toàn mới hoặc sử dụng lại một dự án hiện có khác. Đảm bảo dự án có một tài khoản thanh toán đang hoạt động và một ứng dụng App Engine đã bật. Tìm mã dự án vì bạn sẽ cần mã này nhiều lần trong lớp học lập trình này và sử dụng mã này bất cứ khi nào bạn gặp biến PROJECT_ID.
2. Tải ứng dụng mẫu cơ sở
Một trong những điều kiện tiên quyết của lớp học lập trình này là phải có một ứng dụng App Engine hoạt động ở Mô-đun 1. Hãy hoàn thành lớp học lập trình Mô-đun 1 (nên dùng) hoặc sao chép ứng dụng Mô-đun 1 từ kho lưu trữ. Cho dù bạn dùng mã của mình hay của chúng tôi, mã của Mô-đun 1 sẽ là nơi chúng ta "BẮT ĐẦU". Lớp học lập trình này sẽ hướng dẫn bạn từng bước, kết thúc bằng đoạn mã tương tự như đoạn mã trong thư mục "FINISH" của kho lưu trữ Mô-đun 18.
- BẮT ĐẦU: Thư mục Mô-đun 1 (Python 2)
- HOÀN TẤT: Thư mục Mô-đun 18 (Python 2)
- Toàn bộ kho lưu trữ (để sao chép hoặc tải tệp ZIP xuống)
Bất kể bạn sử dụng ứng dụng Mô-đun 1 nào, thư mục này sẽ có dạng như đầu ra dưới đây, có thể có cả thư mục lib:
$ ls README.md appengine_config.py requirements.txt app.yaml main.py templates
3. (Triển khai lại) Ứng dụng cơ sở
Thực hiện các bước sau để triển khai ứng dụng Mô-đun 1:
- Xoá thư mục
lib(nếu có) rồi chạy:pip install -t lib -r requirements.txtđể điền lạilib. Bạn có thể cần dùng lệnhpip2nếu đã cài đặt cả Python 2 và 3. - Đảm bảo bạn đã cài đặt và khởi chạy công cụ dòng lệnh
gcloud, đồng thời đã xem xét cách sử dụng công cụ này. - Đặt dự án trên đám mây bằng
gcloud config set projectPROJECT_IDnếu bạn không muốn nhậpPROJECT_IDmỗi khi đưa ra lệnhgcloud. - Triển khai ứng dụng mẫu bằng
gcloud app deploy - Xác nhận rằng ứng dụng Mô-đun 1 chạy như dự kiến và hiển thị các lượt truy cập gần đây nhất (minh hoạ bên dưới)

4. Cập nhật cấu hình
Bạn không cần thay đổi các tệp cấu hình App Engine tiêu chuẩn (app.yaml, requirements.txt, appengine_config.py). Thay vào đó, hãy thêm một tệp cấu hình mới (queue.yaml) có nội dung sau, đặt tệp này vào cùng một thư mục cấp cao nhất:
queue:
- name: pullq
mode: pull
Tệp queue.yaml chỉ định tất cả các hàng đợi tác vụ hiện có cho ứng dụng của bạn (ngoại trừ hàng đợi default [push] do App Engine tự động tạo). Trong trường hợp này, chỉ có một hàng đợi kéo có tên là pullq. App Engine yêu cầu bạn chỉ định chỉ thị mode là pull, nếu không, chỉ thị này sẽ tạo một hàng đợi đẩy theo mặc định. Tìm hiểu thêm về cách tạo hàng đợi kéo trong tài liệu. Bạn cũng có thể xem trang tham khảo về queue.yaml để biết các lựa chọn khác.
Triển khai tệp này riêng biệt với ứng dụng. Bạn vẫn sẽ sử dụng gcloud app deploy nhưng cũng cung cấp queue.yaml trên dòng lệnh:
$ gcloud app deploy queue.yaml Configurations to update: descriptor: [/tmp/mod18-gaepull/queue.yaml] type: [task queues] target project: [my-project] WARNING: Caution: You are updating queue configuration. This will override any changes performed using 'gcloud tasks'. More details at https://cloud.google.com/tasks/docs/queue-yaml Do you want to continue (Y/n)? Updating config [queue]...⠹WARNING: We are using the App Engine app location (us-central1) as the default location. Please use the "--location" flag if you want to use a different location. Updating config [queue]...done. Task queues have been updated. Visit the Cloud Platform Console Task Queues page to view your queues and cron jobs. $
5. Sửa đổi mã xử lý ứng dụng
Phần này có các bản cập nhật cho những tệp sau:
main.py– thêm việc sử dụng hàng đợi kéo vào ứng dụng chínhtemplates/index.html– cập nhật mẫu web để hiển thị dữ liệu mới
Nhập và hằng số
Bước đầu tiên là thêm một lần nhập mới và một số hằng số để hỗ trợ hàng đợi kéo:
- Thêm một lệnh nhập cho thư viện Hàng đợi tác vụ,
google.appengine.api.taskqueue. - Thêm 3 hằng số để hỗ trợ cho thuê số lượng tối đa các tác vụ kéo (
TASKS) trong một giờ (HOUR) từ hàng đợi kéo của chúng tôi (QUEUE). - Thêm một hằng số để hiển thị những lượt truy cập gần đây nhất cũng như những khách truy cập hàng đầu (
LIMIT).
Dưới đây là mã ban đầu và mã sau khi thực hiện các nội dung cập nhật này:
TRƯỚC:
from flask import Flask, render_template, request
from google.appengine.ext import ndb
app = Flask(__name__)
SAU:
from flask import Flask, render_template, request
from google.appengine.api import taskqueue
from google.appengine.ext import ndb
HOUR = 3600
LIMIT = 10
TASKS = 1000
QNAME = 'pullq'
QUEUE = taskqueue.Queue(QNAME)
app = Flask(__name__)
Thêm một tác vụ kéo (thu thập dữ liệu cho tác vụ và tạo tác vụ trong hàng đợi kéo)
Mô hình dữ liệu Visit vẫn giữ nguyên, cũng như việc truy vấn lượt truy cập để hiển thị trong fetch_visits(). Thay đổi duy nhất cần thiết trong phần mã này là trong store_visit(). Ngoài việc đăng ký lượt truy cập, hãy thêm một tác vụ vào hàng đợi kéo cùng với địa chỉ IP của khách truy cập để worker có thể tăng bộ đếm khách truy cập.
TRƯỚC:
class Visit(ndb.Model):
'Visit entity registers visitor IP address & timestamp'
visitor = ndb.StringProperty()
timestamp = ndb.DateTimeProperty(auto_now_add=True)
def store_visit(remote_addr, user_agent):
'create new Visit entity in Datastore'
Visit(visitor='{}: {}'.format(remote_addr, user_agent)).put()
def fetch_visits(limit):
'get most recent visits'
return Visit.query().order(-Visit.timestamp).fetch(limit)
SAU:
class Visit(ndb.Model):
'Visit entity registers visitor IP address & timestamp'
visitor = ndb.StringProperty()
timestamp = ndb.DateTimeProperty(auto_now_add=True)
def store_visit(remote_addr, user_agent):
'create new Visit in Datastore and queue request to bump visitor count'
Visit(visitor='{}: {}'.format(remote_addr, user_agent)).put()
QUEUE.add(taskqueue.Task(payload=remote_addr, method='PULL'))
def fetch_visits(limit):
'get most recent visits'
return Visit.query().order(-Visit.timestamp).fetch(limit)
Tạo mô hình dữ liệu và hàm truy vấn để theo dõi khách truy cập
Thêm một mô hình dữ liệu VisitorCount để theo dõi khách truy cập; mô hình này phải có các trường cho chính visitor cũng như một số nguyên counter để theo dõi số lượt truy cập. Sau đó, hãy thêm một hàm mới (hoặc có thể là một classmethod Python) có tên là fetch_counts() để truy vấn và trả về những khách truy cập hàng đầu theo thứ tự từ nhiều nhất đến ít nhất. Thêm lớp và hàm ngay bên dưới phần nội dung của fetch_visits():
class VisitorCount(ndb.Model):
visitor = ndb.StringProperty(repeated=False, required=True)
counter = ndb.IntegerProperty()
def fetch_counts(limit):
'get top visitors'
return VisitCount.query().order(-VisitCount.counter).fetch(limit)
Thêm mã người dùng
Thêm một hàm mới log_visitors() để ghi nhật ký khách truy cập thông qua yêu cầu GET đến /log. Nó sử dụng từ điển/hàm băm để theo dõi số lượng khách truy cập gần đây nhất, cho thuê nhiều tác vụ nhất có thể trong một giờ. Đối với mỗi nhiệm vụ, hệ thống sẽ tính tổng tất cả lượt truy cập của cùng một khách truy cập. Sau khi có được các số liệu thống kê, ứng dụng sẽ cập nhật tất cả các thực thể VisitorCount tương ứng đã có trong Datastore hoặc tạo các thực thể mới nếu cần. Bước cuối cùng sẽ trả về một tin nhắn văn bản cho biết có bao nhiêu khách truy cập đã đăng ký trong số bao nhiêu tác vụ đã xử lý. Thêm hàm này vào main.py ngay bên dưới fetch_counts():
@app.route('/log')
def log_visitors():
'worker processes recent visitor counts and updates them in Datastore'
# tally recent visitor counts from queue then delete those tasks
tallies = {}
tasks = QUEUE.lease_tasks(HOUR, TASKS)
for task in tasks:
visitor = task.payload
tallies[visitor] = tallies.get(visitor, 0) + 1
if tasks:
QUEUE.delete_tasks(tasks)
# increment those counts in Datastore and return
for visitor in tallies:
counter = VisitorCount.query(VisitorCount.visitor == visitor).get()
if not counter:
counter = VisitorCount(visitor=visitor, counter=0)
counter.put()
counter.counter += tallies[visitor]
counter.put()
return 'DONE (with %d task[s] logging %d visitor[s])\r\n' % (
len(tasks), len(tallies))
Cập nhật trình xử lý chính bằng dữ liệu hiển thị mới
Để hiển thị những khách truy cập hàng đầu, hãy cập nhật trình xử lý chính root() để gọi fetch_counts(). Ngoài ra, mẫu này sẽ được cập nhật để cho biết số lượng khách truy cập hàng đầu và lượt truy cập gần đây nhất. Đóng gói số lượng khách truy cập cùng với các lượt truy cập gần đây nhất từ lệnh gọi đến fetch_visits() và thả lệnh gọi đó vào một context duy nhất để truyền đến mẫu web. Dưới đây là mã trước và sau khi thay đổi này được thực hiện:
TRƯỚC:
@app.route('/')
def root():
'main application (GET) handler'
store_visit(request.remote_addr, request.user_agent)
visits = fetch_visits(10)
return render_template('index.html', visits=visits)
SAU:
@app.route('/')
def root():
'main application (GET) handler'
store_visit(request.remote_addr, request.user_agent)
context = {
'limit': LIMIT,
'visits': fetch_visits(LIMIT),
'counts': fetch_counts(LIMIT),
}
return render_template('index.html', **context)
Đây là tất cả những thay đổi bắt buộc đối với main.py. Sau đây là hình ảnh minh hoạ về những nội dung cập nhật đó nhằm giúp bạn nắm được những thay đổi mà bạn đang thực hiện đối với main.py:

Cập nhật mẫu web bằng dữ liệu hiển thị mới
Mẫu trang web templates/index.html cần được cập nhật để hiển thị những khách truy cập hàng đầu ngoài tải trọng thông thường của những khách truy cập gần đây nhất. Thả những khách truy cập hàng đầu và số lượng của họ vào một bảng ở đầu trang, đồng thời tiếp tục hiển thị những lượt truy cập gần đây nhất như trước. Thay đổi duy nhất khác là chỉ định số được hiển thị thông qua biến limit thay vì mã hoá cứng số. Sau đây là những nội dung bạn nên cập nhật cho mẫu trang web:
TRƯỚC:
<!doctype html>
<html>
<head>
<title>VisitMe Example</title>
<body>
<h1>VisitMe example</h1>
<h3>Last 10 visits</h3>
<ul>
{% for visit in visits %}
<li>{{ visit.timestamp.ctime() }} from {{ visit.visitor }}</li>
{% endfor %}
</ul>
SAU:
<!doctype html>
<html>
<head>
<title>VisitMe Example</title>
<body>
<h1>VisitMe example</h1>
<h3>Top {{ limit }} visitors</h3>
<table border=1 cellspacing=0 cellpadding=2>
<tr><th>Visitor</th><th>Visits</th></tr>
{% for count in counts %}
<tr><td>{{ count.visitor|e }}</td><td align="center">{{ count.counter }}</td></tr>
{% endfor %}
</table>
<h3>Last {{ limit }} visits</h3>
<ul>
{% for visit in visits %}
<li>{{ visit.timestamp.ctime() }} from {{ visit.visitor }}</li>
{% endfor %}
</ul>
Đến đây là kết thúc các thay đổi cần thiết để thêm việc sử dụng các tác vụ kéo của Hàng đợi tác vụ App Engine vào ứng dụng mẫu Mô-đun 1. Giờ đây, thư mục của bạn sẽ đại diện cho ứng dụng mẫu Mô-đun 18 và phải chứa các tệp sau:
$ ls README.md appengine_config.py queue.yaml templates app.yaml main.py requirements.txt
6. Tóm tắt/Dọn dẹp
Phần này kết thúc lớp học lập trình bằng cách triển khai ứng dụng, xác minh rằng ứng dụng hoạt động như dự kiến và trong mọi đầu ra được phản ánh. Chạy worker riêng để xử lý số lượt truy cập. Sau khi xác thực ứng dụng, hãy thực hiện mọi bước dọn dẹp và cân nhắc các bước tiếp theo.
Triển khai và xác minh ứng dụng
Đảm bảo bạn đã thiết lập hàng đợi kéo như chúng ta đã làm ở gần đầu lớp học lập trình này bằng gcloud app deploy queue.yaml. Nếu bạn đã hoàn tất bước này và ứng dụng mẫu đã sẵn sàng hoạt động, hãy triển khai ứng dụng bằng gcloud app deploy. Đầu ra sẽ giống hệt với ứng dụng Mô-đun 1, ngoại trừ việc ứng dụng này hiện có một bảng "khách truy cập hàng đầu" ở trên cùng:

Mặc dù giao diện người dùng web mới cập nhật hiển thị những khách truy cập hàng đầu và những lượt truy cập gần đây nhất, nhưng số lượt truy cập không bao gồm lượt truy cập này. Ứng dụng hiển thị số lượng khách truy cập trước đó trong khi giảm một tác vụ mới làm tăng số lượng khách truy cập này trong hàng đợi kéo, một tác vụ đang chờ được xử lý.
Bạn có thể thực thi tác vụ bằng cách gọi /log theo nhiều cách:
- Một dịch vụ phụ trợ App Engine
- Một
croncông việc - Trình duyệt web
- Yêu cầu HTTP trên dòng lệnh (
curl,wget, v.v.)
Ví dụ: nếu bạn dùng curl để gửi yêu cầu GET đến /log, thì đầu ra sẽ có dạng như sau, giả sử bạn đã cung cấp PROJECT_ID:
$ curl https://PROJECT_ID.appspot.com/log DONE (with 1 task[s] logging 1 visitor[s])
Sau đó, số lượt truy cập đã cập nhật sẽ xuất hiện trong lần truy cập tiếp theo vào trang web. Vậy là xong!
Chúc mừng bạn đã hoàn thành lớp học lập trình này để thêm thành công việc sử dụng dịch vụ hàng đợi kéo của Hàng đợi tác vụ App Engine vào ứng dụng mẫu. Giờ đây, bạn có thể di chuyển sang Cloud Pub/Sub, Cloud NDB và Python 3 trong Mô-đun 19.
Dọn dẹp
Giải pháp chung
Nếu đã hoàn tất, bạn nên tắt ứng dụng App Engine để tránh bị tính phí. Tuy nhiên, nếu muốn kiểm thử hoặc thử nghiệm thêm, nền tảng App Engine có một hạn mức miễn phí. Vì vậy, miễn là không vượt quá cấp sử dụng đó, bạn sẽ không bị tính phí. Đó là mức phí cho hoạt động tính toán, nhưng cũng có thể có các khoản phí cho các dịch vụ App Engine có liên quan. Vì vậy, hãy xem trang định giá của dịch vụ này để biết thêm thông tin. Nếu quá trình di chuyển này liên quan đến các dịch vụ đám mây khác, thì các dịch vụ đó sẽ được tính phí riêng. Trong cả hai trường hợp, nếu có, hãy xem phần "Cụ thể cho lớp học lập trình này" bên dưới.
Để công bố đầy đủ, việc triển khai trên một nền tảng điện toán không máy chủ của Google Cloud như App Engine sẽ phát sinh một khoản chi phí nhỏ cho việc tạo và lưu trữ. Cloud Build có hạn mức miễn phí riêng, tương tự như Cloud Storage. Việc lưu trữ hình ảnh đó sẽ chiếm một phần hạn mức. Tuy nhiên, có thể bạn sinh sống ở một khu vực không có gói miễn phí như vậy, vì vậy, hãy lưu ý đến mức sử dụng bộ nhớ để giảm thiểu chi phí phát sinh. Bạn nên xem xét các "thư mục" cụ thể trên Cloud Storage, bao gồm:
console.cloud.google.com/storage/browser/LOC.artifacts.PROJECT_ID.appspot.com/containers/imagesconsole.cloud.google.com/storage/browser/staging.PROJECT_ID.appspot.com- Các đường liên kết đến bộ nhớ ở trên phụ thuộc vào
PROJECT_IDvà *LOC*của bạn, ví dụ: "us" nếu ứng dụng của bạn được lưu trữ ở Hoa Kỳ.
Mặt khác, nếu bạn không tiếp tục với ứng dụng này hoặc các lớp học lập trình di chuyển có liên quan khác và muốn xoá hoàn toàn mọi thứ, hãy tắt dự án của bạn.
Cụ thể đối với lớp học lập trình này
Các dịch vụ trong danh sách dưới đây là riêng biệt đối với lớp học lập trình này. Hãy tham khảo tài liệu của từng sản phẩm để biết thêm thông tin:
- Dịch vụ Hàng đợi tác vụ của App Engine không phát sinh thêm bất kỳ khoản phí nào theo trang định giá cho các dịch vụ đi kèm cũ như Hàng đợi tác vụ.
- Dịch vụ App Engine Datastore do Cloud Datastore (Cloud Firestore ở chế độ Datastore) cung cấp, dịch vụ này cũng có một cấp miễn phí; hãy xem trang định giá của dịch vụ này để biết thêm thông tin.
Các bước tiếp theo
Trong quá trình "di chuyển" này, bạn đã thêm việc sử dụng hàng đợi đẩy Hàng đợi tác vụ vào ứng dụng mẫu Mô-đun 1 bằng cách thêm tính năng hỗ trợ theo dõi khách truy cập, từ đó triển khai ứng dụng mẫu Mô-đun 18. Trong quá trình di chuyển tiếp theo, bạn sẽ nâng cấp các tác vụ kéo App Engine lên Cloud Pub/Sub. Kể từ cuối năm 2021, người dùng không bắt buộc phải di chuyển sang Cloud Pub/Sub khi nâng cấp lên Python 3. Đọc thêm về vấn đề này trong phần tiếp theo.
Để di chuyển sang Cloud Pub/Sub, hãy tham khảo lớp học lập trình Mô-đun 19. Ngoài ra, bạn cần cân nhắc các hoạt động di chuyển khác, chẳng hạn như Cloud Datastore, Cloud Memorystore, Cloud Storage hoặc Cloud Tasks (hàng đợi đẩy). Ngoài ra, còn có các hoạt động di chuyển trên nhiều sản phẩm sang Cloud Run và Cloud Functions. Bạn có thể truy cập vào tất cả nội dung của Serverless Migration Station (lớp học lập trình, video, mã nguồn [nếu có]) tại kho lưu trữ nguồn mở của nội dung đó.
7. Di chuyển sang Python 3
Vào mùa thu năm 2021, nhóm App Engine đã mở rộng phạm vi hỗ trợ của nhiều dịch vụ đi kèm sang thời gian chạy thế hệ thứ 2 (có thời gian chạy thế hệ thứ 1). Do đó, bạn không còn phải di chuyển từ các dịch vụ đi kèm như Hàng đợi tác vụ App Engine sang các dịch vụ độc lập trên đám mây hoặc dịch vụ của bên thứ ba như Cloud Pub/Sub khi chuyển ứng dụng sang Python 3. Nói cách khác, bạn có thể tiếp tục sử dụng Hàng đợi tác vụ trong các ứng dụng Python 3 App Engine miễn là bạn điều chỉnh mã để truy cập các dịch vụ đi kèm từ thời gian chạy thế hệ tiếp theo.
Bạn có thể tìm hiểu thêm về cách di chuyển việc sử dụng các dịch vụ đi kèm sang Python 3 trong lớp học lập trình mô-đun 17 và video tương ứng. Mặc dù chủ đề đó nằm ngoài phạm vi của Mô-đun 18, nhưng dưới đây là các phiên bản Python 3 của ứng dụng Mô-đun 1 được chuyển sang Python 3 và vẫn sử dụng NDB của App Engine. (Tại một thời điểm nào đó, phiên bản Python 3 của ứng dụng Mô-đun 18 cũng sẽ được cung cấp.)
8. Tài nguyên khác
Dưới đây là các tài nguyên bổ sung dành cho những nhà phát triển muốn tìm hiểu thêm về Mô-đun di chuyển này hoặc các mô-đun di chuyển có liên quan, cũng như các sản phẩm có liên quan. Trong đó có những nơi để bạn gửi ý kiến phản hồi về nội dung này, đường liên kết đến mã và nhiều phần tài liệu mà bạn có thể thấy hữu ích.
Vấn đề/ý kiến phản hồi về lớp học lập trình
Nếu bạn gặp vấn đề với lớp học lập trình này, vui lòng tìm kiếm vấn đề của bạn trước khi báo cáo. Đường liên kết để tìm kiếm và tạo vấn đề mới:
Tài nguyên di chuyển
Bạn có thể tìm thấy đường liên kết đến các thư mục kho lưu trữ cho Mô-đun 1 (BẮT ĐẦU) và Mô-đun 18 (KẾT THÚC) trong bảng bên dưới. Bạn cũng có thể truy cập vào kho lưu trữ cho tất cả các hoạt động di chuyển codelab App Engine; sao chép hoặc tải tệp ZIP xuống.
Lớp học lập trình | Python 2 | Python 3 |
mã (không có trong hướng dẫn này) | ||
Học phần 18 (lớp học lập trình này) | Không có |
Tài liệu tham khảo trực tuyến
Dưới đây là các tài nguyên liên quan đến hướng dẫn này:
Hàng đợi tác vụ App Engine
- Tổng quan về Hàng đợi tác vụ của App Engine
- Tổng quan về hàng đợi kéo của Hàng đợi tác vụ App Engine
- Ứng dụng mẫu đầy đủ của hàng đợi kéo Hàng đợi tác vụ App Engine
- Tạo hàng đợi kéo Task Queue
- Video ra mắt hàng đợi kéo Google I/O 2011 ( Ứng dụng mẫu Votelator)
queue.yamltài liệu tham khảoqueue.yamlso với Cloud Tasks- Hướng dẫn di chuyển hàng đợi kéo sang Pub/Sub
- Mẫu tài liệu về hàng đợi kéo của Hàng đợi tác vụ App Engine cho Cloud Pub/Sub
Nền tảng App Engine
Tài liệu về App Engine
Thời gian chạy Python 2 App Engine (môi trường tiêu chuẩn)
Thời gian chạy Python 3 App Engine (môi trường tiêu chuẩn)
Sự khác biệt giữa thời gian chạy Python 2 và 3 App Engine (môi trường tiêu chuẩn)
Hướng dẫn di chuyển ứng dụng từ Python 2 sang Python 3 trên App Engine (môi trường tiêu chuẩn)
Thông tin về giá và hạn mức của App Engine
Ra mắt nền tảng App Engine thế hệ thứ hai (2018)
Hỗ trợ dài hạn cho các thời gian chạy cũ
Các mẫu di chuyển tài liệu
Thông tin khác về Cloud
- Python trên Google Cloud Platform
- Thư viện ứng dụng Google Cloud Python
- Cấp "Luôn miễn phí" của Google Cloud
- SDK Google Cloud (công cụ dòng lệnh
gcloud) - Tất cả tài liệu của Google Cloud
Video
- Serverless Migration Station
- Expeditions không cần máy chủ
- Đăng ký theo dõi Google Cloud Tech
- Đăng ký theo dõi Google Developers
Giấy phép
Tác phẩm này được cấp phép theo giấy phép Ghi công theo Creative Commons 2.0 Chung.