1. Tổng quan
Loạt lớp học lập trình về Trạm di chuyển không máy chủ (hướng dẫn thực hành theo tiến độ riêng) và video có liên quan nhằm giúp các nhà phát triển Google Cloud không máy chủ không 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 quá trình di chuyển, chủ yếu là ngừng sử dụng các dịch vụ cũ. Việc này giúp ứng dụng của bạn dễ di chuyển hơn, đồng thời mang đến cho bạn nhiều lựa chọn và độ 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 của Cloud hơn, đồng thời dễ dàng nâng cấp lên 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ó.
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ông việc lấy hàng đợi tác vụ của App Engine cho ứng dụng mẫu từ Lớp học lập trình Mô-đun 1. Chúng tôi sẽ bổ sung cách sử dụng tác vụ kéo trong hướng dẫn này của Mô-đun 18, sau đó di chuyển hoạt động sử dụng đó sang Cloud Pub/Sub ngay trong Mô-đun 19. Những người sử dụng Hàng đợi công việc cho các tác vụ đẩy sẽ chuyển sang Cloud Tasks và nên tham khảo Mô-đun 7-9.
Bạn sẽ tìm hiểu cách
- Sử dụng API/dịch vụ theo gói/API hàng đợi tác vụ của App Engine
- Thêm cách sử dụng hàng đợi kéo vào ứng dụng NDB cơ bản của Python 2 Flask App Engine
Bạn cần có
- Một dự án Google Cloud Platform có tài khoản thanh toán GCP đang hoạt động
- Kỹ năng Python cơ bản
- Kiến thức thực hành về các lệnh Linux phổ biến
- Kiến thức cơ bản về việc phát triển và triển khai ứng dụng App Engine
- Một ứng dụng App Engine của Mô-đun 1 đang hoạt động (hoàn tất lớp học lập trình của ứng dụng [nên làm] 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 sử dụng Python?
Bạn đánh giá thế nào về trải nghiệm sử dụng các dịch vụ của Google Cloud?
2. Thông tin khái quát
Để di chuyển khỏi các công việc kéo ra khỏi Hàng đợi công việc của App Engine, hãy thêm cách sử dụng của công việc đó vào ứng dụng NDB của Flask và App Engine hiện có từ Lớp học lập trình của Mô-đun 1. Ứng dụng mẫu cho thấy những lượt truy cập gần đây nhất của người dùng cuối. Điều đó thì tốt, nhưng việc theo dõi khách truy cập để xem ai truy cập nhiều nhất thậm chí còn thú vị hơn.
Mặc dù có thể sử dụng tác vụ đẩy cho số lượng khách truy cập này, nhưng chúng tôi 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 lập tức cho người dùng và một "nhân viên" được chỉ định có nhiệm vụ kiểm đếm số lượng khách truy cập nằm ngoài quy trình làm việc yêu cầu-phản hồi thông thường.
Để triển khai thiết kế này, chúng ta sẽ thêm tính năng 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 trình thực thi. Worker này có thể chạy dưới dạng một quy trình riêng biệt (chẳng hạn như thực thể phụ trợ hoặc mã chạy trên máy ảo luôn hoạt động), công việc cron hoặc yêu cầu HTTP dòng lệnh cơ bản bằng curl
hoặc wget
. Sau quá trình tích hợp này, 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 bao gồm các bước sau:
- Thiết lập/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/Chuẩn bị
Phần này giải thích cách:
- Thiết lập dự án trên Cloud
- 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 giúp đảm bảo bạn đang bắt đầu với đoạn 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 về Mô-đun 1, hãy sử dụng lại chính dự án (và đoạn mã) đó. Ngoài ra, hãy 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. Hãy đảm bảo dự án này có một tài khoản thanh toán đang hoạt động và có một ứng dụng App Engine đã bật. Tìm mã dự án của bạn vì bạn sẽ cần sử dụng 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ó ứng dụng App Engine của Mô-đun 1 hoạt động được. Hoàn thành Lớp học lập trình Mô-đun 1 (nên có) hoặc sao chép Ứng dụng Mô-đun 1 từ kho lưu trữ. Cho dù bạn sử dụng mã của bạn hay mã của chúng tôi, mã Mô-đun 1 là nơi chúng tôi sẽ "BẮT ĐẦU". Lớp học lập trình này sẽ hướng dẫn bạn qua từng bước, kết thúc bằng mã tương tự như những gì trong thư mục kho lưu trữ của Mô-đun 18 "Finish".
- START: Thư mục mô-đun 1 (Python 2)
- XONG: 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 dùng ứng dụng Mô-đun 1 nào, thư mục đó sẽ có dạng như kết quả bên dưới, cũng có thể là 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 thi 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
. Thay vào đó, bạn có thể cần phải sử dụng lệnhpip2
nếu đã cài đặt cả Python 2 và 3. - Hãy đả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. - Thiết lập dự án trên Cloud bằng
gcloud config set project
PROJECT_ID
nếu bạn không muốn nhậpPROJECT_ID
cho mỗi lệnhgcloud
được đưa ra. - Triển khai ứng dụng mẫu bằng
gcloud app deploy
- Xác nhận ứng dụng Mô-đun 1 chạy như dự kiến và hiển thị những lượt truy cập gần đây nhất (hình minh hoạ bên dưới)
4. Cập nhật cấu hình
Không cần thay đổi gì đối với các tệp cấu hình App Engine chuẩn (app.yaml
, requirements.txt
, appengine_config.py
). Thay vào đó, hãy thêm tệp cấu hình mới queue.yaml
với 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ả hàng đợi công việc hiện có cho ứng dụng của bạn (ngoại trừ hàng đợi [push] default
do App Engine tạo tự động). 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 chỉ định lệnh mode
là pull
, nếu không thì 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 này. Ngoài ra, hãy xem trang tham khảo về queue.yaml
để biết những cách khác.
Hãy triển khai tệp này một cách riêng biệt với ứng dụng của bạn. Bạn vẫn sẽ sử dụng gcloud app deploy
nhưng đồng thời 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 mô tả nội dung cập nhật cho các 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ệnh nhập mới và một vài hằng số để hỗ trợ hàng đợi kéo:
- Thêm tệp nhập của 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ác vụ kéo tối đa (
TASKS
) trong một giờ (HOUR
) qua hàng đợi kéo (QUEUE
). - Thêm một hằng số để hiển thị số lượt truy cập gần đây nhất cũng như khách truy cập hàng đầu (
LIMIT
).
Dưới đây là mã gốc và giao diện sau khi thực hiện những cập nhật này:
TRƯỚC KHI:
from flask import Flask, render_template, request
from google.appengine.ext import ndb
app = Flask(__name__)
SAU KHI:
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 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 KHI:
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 KHI:
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ô hình dữ liệu VisitorCount
để theo dõi khách truy cập; nó 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 (có thể là hàm classmethod
Python) 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ừ ít 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ã worker
Thêm hàm mới log_visitors()
để ghi nhật ký khách truy cập thông qua yêu cầu GET vào /log
. Dịch vụ này sử dụng từ điển/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 tác vụ, hệ thống sẽ đo lường tất cả lượt truy cập của cùng một khách truy cập. Với trong tay, ứng dụng sẽ cập nhật tất cả thực thể VisitorCount
tương ứng đã có trong Datastore hoặc tạo thực thể mới nếu cần. Bước cuối cùng sẽ trả về một thông báo văn bản thuần tuý cho biết số lượng khách truy cập đã đăng ký từ số lượng công việc được 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 để hiển thị số lượng khách truy cập hàng đầu và số 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ả dữ liệu đó vào một context
duy nhất để chuyển vào mẫu web. Dưới đây là mã trước cũng như sau khi thay đổi này được thực hiện:
TRƯỚC KHI:
@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 KHI:
@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ả thay đổi bắt buộc của main.py
và sau đây là hình ảnh minh hoạ các nội dung cập nhật đó để giúp bạn hiểu rộng hơn về những thay đổi mà bạn sẽ 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 web templates/index.html
yêu cầu bản cập nhật để hiển thị những khách truy cập hàng đầu bên cạnh tải trọng thông thường của 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 và tiếp tục hiển thị các 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ị qua biến limit
thay vì mã hoá cứng số đó. Dưới đây là những nội dung cập nhật mà bạn nên thực hiện cho mẫu web của mình:
TRƯỚC KHI:
<!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 KHI:
<!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>
Điều này kết thúc những thay đổi cần thiết trong đó bổ sung việc sử dụng tính năng lấy hàng đợi tác vụ của App Engine vào ứng dụng mẫu Mô-đun 1. Thư mục của bạn hiện đạ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 tóm tắt lớp học lập trình này 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. Hãy chạy riêng worker để xử lý số lượng khách 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à xem xét các bước tiếp theo.
Triển khai và xác minh ứng dụng
Hãy đảm bảo rằng 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 với gcloud app deploy queue.yaml
. Nếu quá trình này hoàn tất và ứng dụng mẫu của bạn đã sẵn sàng hoạt động, hãy triển khai ứng dụng bằng gcloud app deploy
. Kết quả phải giống với ứng dụng Mô-đun 1, ngoại trừ việc ứng dụng hiện có "khách truy cập hàng đầu" bảng ở trên cùng:
Mặc dù giao diện người dùng web đã cập nhật hiển thị số khách truy cập hàng đầu và lượt truy cập gần đây nhất, nhưng hãy lưu ý rằng số lượt khách 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 đây trong khi xoá một công việc mới để làm tăng số lượng khách truy cập này trong hàng đợi kéo – một công việc đang chờ được xử lý.
Bạn có thể thực thi tác vụ này bằng cách gọi /log
theo nhiều cách:
- Dịch vụ phụ trợ của App Engine
- Công việc trong
cron
- Trình duyệt web
- Yêu cầu HTTP dòng lệnh (
curl
,wget
, v.v.)
Ví dụ: nếu sử dụng curl
để gửi yêu cầu GET đến /log
, kết quả sẽ có dạng như sau, sau khi 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ượng đã cập nhật sẽ được phản ánh vào lần truy cập trang web tiếp theo. 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 hàng đợi tác vụ của 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 bạn đã hoàn tất, chúng tôi khuyên bạn nên tắt ứng dụng App Engine để tránh phát sinh thanh toán. Tuy nhiên, nếu bạn muốn kiểm tra hoặc thử nghiệm thêm, nền tảng App Engine có hạn mức miễn phí, và bạn sẽ không bị tính phí, miễn là bạn không vượt quá cấp sử dụng đó. Đó là cho dịch vụ điện toán nhưng bạn cũng có thể bị tính phí cho các dịch vụ có liên quan của App Engine, vì vậy hãy xem trang 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ụ khác trên Google Cloud, thì những 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 "Dành riêng cho lớp học lập trình này" phần dưới đây.
Để công bố đầy đủ thông tin, việc triển khai cho một nền tảng điện toán không máy chủ của Google Cloud như App Engine sẽ làm phát sinh chi phí bản dựng và bộ nhớ thấp. Cloud Build cũng 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ẽ sử dụng hết một phần hạn mức đó. Tuy nhiên, bạn có thể sống ở một khu vực không có bậc miễn phí như vậy, vì vậy hãy chú ý đến mức sử dụng bộ nhớ của bạn để giảm thiểu chi phí tiềm ẩn. "Thư mục" cụ thể trên Cloud Storage bạn nên xem xét, bao gồm:
console.cloud.google.com/storage/browser/LOC.artifacts.PROJECT_ID.appspot.com/containers/images
console.cloud.google.com/storage/browser/staging.PROJECT_ID.appspot.com
- Các đường liên kết lưu trữ ở trên phụ thuộc vào
PROJECT_ID
và hoạt động *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 định tiếp tục sử dụng ứng dụng này hoặc các lớp học lập trình di chuyển khác có liên quan và muốn xoá hoàn toàn mọi thứ, hãy ngừng dự án của bạn.
Dành riêng cho lớp học lập trình này
Các dịch vụ được liệt kê dưới đây là những dịch vụ dành riêng cho 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 công việc của App Engine không phát sinh thêm bất kỳ khoản thanh toán nào cho mỗi trang giá cho các dịch vụ đi kèm cũ, chẳng hạn như Hàng đợi tác vụ.
- Dịch vụ App Engine Datastore do Cloud Datastore (Cloud Firestore ở chế độ Datastore) cung cấp, cũng có một bậc miễn phí; hãy xem trang giá của YouTube để 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 lần di chuyển tiếp theo, bạn sẽ nâng cấp các nhiệm vụ lấy dữ liệu từ App Engine lên Cloud Pub/Sub. Kể từ cuối năm 2021, người dùng không còn 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ề điều 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 của Mô-đun 19. Ngoài ra, bạn có thể cân nhắc các quá trình 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, chúng tôi cũng sẽ di chuyển giữa nhiều sản phẩm sang Cloud Run và Cloud Functions. Bạn có thể truy cập tất cả nội dung của Trạm di chuyển không máy chủ (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ó.
7. Di chuyển sang Python 3
Mùa thu năm 2021, nhóm App Engine mở rộng khả năng hỗ trợ nhiều dịch vụ đi kèm cho môi trường thời gian chạy thế hệ 2 (có thời gian chạy thế hệ 1). Do đó, khi chuyển ứng dụng sang Python 3, bạn không cần phải di chuyển từ các dịch vụ đi kèm (như Danh sách nhiệm vụ của App Engine) sang các dịch vụ độc lập của bên thứ ba hoặc Cloud như Cloud Pub/Sub. 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 App Engine Python 3 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 hoạt động sử dụng các dịch vụ theo gói sang Python 3 trong Lớp học lập trình về 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 được liên kết bên dưới 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 App Engine NDB. (Vào 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à phát triển đang tìm hiểu thêm về Phụ lục di chuyển này hoặ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ó cả những nơi để đưa ra ý kiến phản hồi về nội dung này, các đường liên kết đến mã nguồn và nhiều thông tin hữu ích khác của tài liệu.
Vấn đề/ý kiến phản hồi về lớp học lập trình này
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 vấn đề của bạn trước khi gửi. Đường liên kết để tìm kiếm và báo cáo vấn đề mới:
Tài nguyên di chuyển
Bạn có thể tìm thấy các đường liên kết đến các thư mục repo cho Mô-đun 1 (START) và Mô-đun 18 (complete) trong bảng bên dưới. Bạn cũng có thể truy cập vào các kho lưu trữ này qua kho lưu trữ dành cho mọi quá trình di chuyển trong lớp học lập trình App Engine; sao chép tệp đó hoặc tải xuống một tệp ZIP.
Codelab | Python 2 | Python 3 |
mã (không có trong hướng dẫn này) | ||
Mô-đun 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 có liên quan cho hướng dẫn này:
Hàng đợi tác vụ của App Engine
- Tổng quan về hàng đợi tác vụ của App Engine
- Tổng quan về hàng đợi lấy hàng đợi tác vụ của App Engine
- Ứng dụng mẫu đầy đủ lấy hàng đợi tác vụ của App Engine
- Tạo hàng đợi kéo hàng đợi tác vụ
- Video khởi chạy hàng đợi kéo tại Google I/O 2011 ( Ứng dụng mẫu cho người bỏ phiếu)
- Tài liệu tham khảo về
queue.yaml
queue.yaml
so với Cloud Tasks- Kéo danh sách chờ để xem hướng dẫn di chuyển sang Pub/Sub
- Hàng đợi tác vụ của App Engine kéo hàng đợi đến mẫu tài liệu về Cloud Pub/Sub
Nền tảng App Engine
Tài liệu về App Engine
Thời gian chạy của Python 2 App Engine (môi trường tiêu chuẩn)
Thời gian chạy của Python 3 App Engine (môi trường tiêu chuẩn)
Điểm khác biệt giữa Python 2 và 3 môi trường thời gian chạy của App Engine (môi trường tiêu chuẩn)
Hướng dẫn di chuyển từ Python 2 sang 3 App Engine (môi trường 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 môi trường thời gian chạy cũ
Mẫu di chuyển tài liệu
Thông tin khác về đám mây
- Python trên Google Cloud Platform
- Thư viện ứng dụng Google Cloud Python
- Google Cloud "Luôn miễn phí" cấp
- Google Cloud SDK (công cụ dòng lệnh
gcloud
) - Tất cả tài liệu của Google Cloud
Video
- Trạm di chuyển không máy chủ
- Thám hiểm không máy chủ
- Đăng ký sử dụng Google Cloud Tech
- Đăng ký Google Developers
Giấy phép
Tác phẩm này được cấp phép theo Giấy phép chung Ghi nhận tác giả Creative Commons 2.0.