ফ্লাস্ক অ্যাপে অ্যাপ ইঞ্জিন টাস্ক কিউ (টান টাস্ক) কীভাবে ব্যবহার করবেন (মডিউল 18)

1. সংক্ষিপ্ত বিবরণ

সার্ভারলেস মাইগ্রেশন স্টেশন সিরিজের কোডল্যাব (স্ব-গতিসম্পন্ন, হাতে-কলমে টিউটোরিয়াল) এবং সম্পর্কিত ভিডিওগুলির লক্ষ্য হল গুগল ক্লাউড সার্ভারলেস ডেভেলপারদের তাদের অ্যাপ্লিকেশনগুলিকে আধুনিকীকরণে সাহায্য করা, এক বা একাধিক মাইগ্রেশনের মাধ্যমে, প্রাথমিকভাবে লিগ্যাসি পরিষেবাগুলি থেকে দূরে সরে যাওয়ার মাধ্যমে। এটি আপনার অ্যাপগুলিকে আরও পোর্টেবল করে তোলে এবং আপনাকে আরও বিকল্প এবং নমনীয়তা দেয়, যা আপনাকে ক্লাউড পণ্যের বিস্তৃত পরিসরের সাথে একীভূত করতে এবং অ্যাক্সেস করতে এবং আরও সহজেই নতুন ভাষার রিলিজে আপগ্রেড করতে সক্ষম করে। প্রাথমিকভাবে প্রাথমিক ক্লাউড ব্যবহারকারীদের উপর, মূলত অ্যাপ ইঞ্জিন (স্ট্যান্ডার্ড এনভায়রনমেন্ট) ডেভেলপারদের উপর ফোকাস করার সময়, এই সিরিজটি ক্লাউড ফাংশন এবং ক্লাউড রানের মতো অন্যান্য সার্ভারলেস প্ল্যাটফর্ম, অথবা প্রযোজ্য ক্ষেত্রে অন্য কোথাও অন্তর্ভুক্ত করার জন্য যথেষ্ট বিস্তৃত।

এই কোডল্যাব আপনাকে মডিউল ১ কোডল্যাব থেকে নমুনা অ্যাপে অ্যাপ ইঞ্জিন টাস্ক কিউ পুল টাস্কগুলি কীভাবে অন্তর্ভুক্ত এবং ব্যবহার করতে হয় তা শেখায়। আমরা এই মডিউল ১৮ টিউটোরিয়ালে পুল টাস্কগুলির ব্যবহার যুক্ত করব, তারপর মডিউল ১৯-এ সেই ব্যবহারটি ক্লাউড পাব/সাব-এ স্থানান্তর করব। যারা পুশ টাস্কের জন্য টাস্ক কিউ ব্যবহার করেন তারা পরিবর্তে ক্লাউড টাস্কে স্থানান্তরিত হবেন এবং তাদের মডিউল ৭-৯ উল্লেখ করা উচিত।

তুমি শিখবে কিভাবে

  • অ্যাপ ইঞ্জিন টাস্ক কিউ API/বান্ডেলড পরিষেবা ব্যবহার করুন
  • একটি বেসিক পাইথন 2 ফ্লাস্ক অ্যাপ ইঞ্জিন এনডিবি অ্যাপে পুল কিউ ব্যবহার যোগ করুন

তোমার যা লাগবে

জরিপ

আপনি এই টিউটোরিয়ালটি কীভাবে ব্যবহার করবেন?

শুধু পুরোটা পড়ুন এটি পড়ুন এবং অনুশীলনগুলি সম্পূর্ণ করুন।

পাইথনের সাথে আপনার অভিজ্ঞতাকে আপনি কীভাবে মূল্যায়ন করবেন?

নবীন মধ্যবর্তী দক্ষ

গুগল ক্লাউড পরিষেবা ব্যবহারের অভিজ্ঞতাকে আপনি কীভাবে মূল্যায়ন করবেন?

নবীন মধ্যবর্তী দক্ষ

2. পটভূমি

অ্যাপ ইঞ্জিন টাস্ক কিউ পুল টাস্ক থেকে মাইগ্রেট করার জন্য, মডিউল 1 কোডল্যাব থেকে প্রাপ্ত বিদ্যমান ফ্লাস্ক এবং অ্যাপ ইঞ্জিন এনডিবি অ্যাপে এর ব্যবহার যোগ করুন। নমুনা অ্যাপটি শেষ ব্যবহারকারীর সাম্প্রতিক ভিজিটগুলি প্রদর্শন করে। ঠিক আছে, তবে কে সবচেয়ে বেশি ভিজিট করে তা দেখার জন্য ভিজিটরদের ট্র্যাক করা আরও আকর্ষণীয়।

যদিও আমরা এই ভিজিটর কাউন্টের জন্য পুশ টাস্ক ব্যবহার করতে পারি, আমরা স্যাম্পল অ্যাপের মধ্যে দায়িত্ব ভাগ করে দিতে চাই, যার কাজ ভিজিট নিবন্ধন করা এবং ব্যবহারকারীদের তাৎক্ষণিকভাবে প্রতিক্রিয়া জানানো, এবং একজন মনোনীত "কর্মী" যার কাজ হল স্বাভাবিক অনুরোধ-প্রতিক্রিয়া কর্মপ্রবাহের বাইরে ভিজিটর কাউন্টের হিসাব করা।

এই নকশাটি বাস্তবায়নের জন্য, আমরা মূল অ্যাপ্লিকেশনে পুল কিউ ব্যবহার করার পাশাপাশি ওয়ার্কার কার্যকারিতা সমর্থন করছি। ওয়ার্কারটি একটি পৃথক প্রক্রিয়া (যেমন একটি ব্যাকএন্ড ইনস্ট্যান্স বা একটি VM-এ চলমান কোড যা সর্বদা চালু থাকে), একটি ক্রোন জব, অথবা curl বা wget ব্যবহার করে একটি মৌলিক কমান্ড-লাইন HTTP অনুরোধ হিসাবে চালাতে পারে। এই ইন্টিগ্রেশনের পরে, আপনি পরবর্তী (মডিউল 19) কোডল্যাবে অ্যাপটিকে ক্লাউড পাব/সাবে স্থানান্তর করতে পারেন।

এই টিউটোরিয়ালে নিম্নলিখিত ধাপগুলি রয়েছে:

  1. সেটআপ/প্রিওয়ার্ক
  2. কনফিগারেশন আপডেট করুন
  3. অ্যাপ্লিকেশন কোড পরিবর্তন করুন

৩. সেটআপ/প্রিওয়ার্ক

এই বিভাগটি ব্যাখ্যা করে কিভাবে:

  1. আপনার ক্লাউড প্রোজেক্ট সেট আপ করুন
  2. বেসলাইন নমুনা অ্যাপ পান
  3. (পুনরায়) বেসলাইন অ্যাপ স্থাপন এবং যাচাই করুন

এই ধাপগুলি নিশ্চিত করে যে আপনি কার্যকরী কোড দিয়ে শুরু করছেন।

১. সেটআপ প্রকল্প

যদি আপনি মডিউল ১ কোডল্যাব সম্পন্ন করে থাকেন, তাহলে একই প্রকল্প (এবং কোড) পুনরায় ব্যবহার করুন। বিকল্পভাবে, একটি নতুন প্রকল্প তৈরি করুন অথবা অন্য একটি বিদ্যমান প্রকল্প পুনরায় ব্যবহার করুন। নিশ্চিত করুন যে প্রকল্পটিতে একটি সক্রিয় বিলিং অ্যাকাউন্ট এবং একটি সক্রিয় অ্যাপ ইঞ্জিন অ্যাপ রয়েছে। আপনার প্রকল্প আইডিটি খুঁজুন কারণ এই কোডল্যাবে এটি বেশ কয়েকবার রাখতে হবে এবং যখনই আপনি PROJECT_ID ভেরিয়েবলের মুখোমুখি হবেন তখন এটি ব্যবহার করুন।

2. বেসলাইন নমুনা অ্যাপ পান

এই কোডল্যাবের পূর্বশর্তগুলির মধ্যে একটি হল একটি কার্যকরী মডিউল ১ অ্যাপ ইঞ্জিন অ্যাপ থাকা। মডিউল ১ কোডল্যাবটি সম্পূর্ণ করুন (প্রস্তাবিত) অথবা রেপো থেকে মডিউল ১ অ্যাপটি অনুলিপি করুন। আপনি আপনার ব্যবহার করুন বা আমাদের, মডিউল ১ কোডটিই হল যেখানে আমরা "START" করব। এই কোডল্যাব আপনাকে প্রতিটি ধাপে নিয়ে যাবে, এবং শেষ করবে এমন কোড দিয়ে যা মডিউল ১৮ রেপো ফোল্ডার "FINISH"-এর অনুরূপ।

আপনি যে মডিউল ১ অ্যাপই ব্যবহার করুন না কেন, ফোল্ডারটি নীচের আউটপুটের মতো দেখতে হবে, সম্ভবত একটি lib ফোল্ডারও থাকবে:

$ ls
README.md               appengine_config.py     requirements.txt
app.yaml                main.py                 templates

৩. (পুনরায়) বেসলাইন অ্যাপ স্থাপন করুন

মডিউল ১ অ্যাপটি স্থাপন করতে নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করুন:

  1. যদি lib ফোল্ডার থাকে তাহলে সেটি মুছে ফেলুন এবং lib পুনরায় পূরণ করতে pip install -t lib -r requirements.txt লিখুন। যদি আপনার Python 2 এবং 3 উভয়ই ইনস্টল করা থাকে তবে আপনাকে pip2 কমান্ড ব্যবহার করতে হতে পারে।
  2. নিশ্চিত করুন যে আপনি gcloud কমান্ড-লাইন টুলটি ইনস্টল এবং আরম্ভ করেছেন এবং এর ব্যবহার পর্যালোচনা করেছেন।
  3. আপনার ক্লাউড প্রজেক্টটি gcloud config set project দিয়ে সেট করুন, যদি আপনি প্রতিটি gcloud কমান্ডের সাথে আপনার PROJECT_ID লিখতে না চান, তাহলে প্রজেক্ট PROJECT_ID সেট করুন।
  4. gcloud app deploy মাধ্যমে নমুনা অ্যাপটি ডিপ্লয় করুন
  5. নিশ্চিত করুন যে মডিউল ১ অ্যাপটি প্রত্যাশা অনুযায়ী চলছে এবং সাম্প্রতিক ভিজিটগুলি প্রদর্শন করছে (নীচে চিত্রিত)

a7a9d2b80d706a2b.png সম্পর্কে

৪. কনফিগারেশন আপডেট করুন

স্ট্যান্ডার্ড অ্যাপ ইঞ্জিন কনফিগারেশন ফাইলগুলিতে ( app.yaml , requirements.txt , appengine_config.py ) কোনও পরিবর্তন করার প্রয়োজন নেই। পরিবর্তে, নিম্নলিখিত বিষয়বস্তু সহ একটি নতুন কনফিগারেশন ফাইল, queue.yaml যোগ করুন, এটি একই শীর্ষ-স্তরের ডিরেক্টরিতে রাখুন:

queue:
- name: pullq
  mode: pull

queue.yaml ফাইলটি আপনার অ্যাপের জন্য বিদ্যমান সমস্ত টাস্ক কিউ নির্দিষ্ট করে ( default [push] কিউ ছাড়া যা অ্যাপ ইঞ্জিন দ্বারা স্বয়ংক্রিয়ভাবে তৈরি হয়)। এই ক্ষেত্রে, শুধুমাত্র একটি আছে, pullq নামক একটি pull queu। App Engine mode নির্দেশিকাটিকে pull হিসাবে নির্দিষ্ট করতে বাধ্য করে, অন্যথায় এটি ডিফল্টরূপে একটি push queu তৈরি করে। ডকুমেন্টেশনে pull queues তৈরি সম্পর্কে আরও জানুন। অন্যান্য বিকল্পগুলির জন্য queue.yaml রেফারেন্স পৃষ্ঠাটিও দেখুন।

এই ফাইলটি আপনার অ্যাপ থেকে আলাদাভাবে স্থাপন করুন। আপনি এখনও gcloud app deploy ব্যবহার করবেন তবে কমান্ড লাইনে queue.yaml ও প্রদান করবেন:

$ 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.
$

৫. অ্যাপ্লিকেশন কোড পরিবর্তন করুন

এই বিভাগে নিম্নলিখিত ফাইলগুলির আপডেট রয়েছে:

  • main.py — প্রধান অ্যাপ্লিকেশনে পুল কিউ ব্যবহার যোগ করুন
  • templates/index.html — নতুন ডেটা প্রদর্শনের জন্য ওয়েব টেমপ্লেট আপডেট করুন।

আমদানি এবং ধ্রুবক

প্রথম ধাপ হল পুল কিউ সমর্থন করার জন্য একটি নতুন আমদানি এবং বেশ কয়েকটি ধ্রুবক যোগ করা:

  • টাস্ক কিউ লাইব্রেরির একটি আমদানি যোগ করুন, google.appengine.api.taskqueue
  • আমাদের পুল কিউ ( QUEUE ) থেকে এক ঘন্টা ( HOUR ) এর জন্য সর্বাধিক সংখ্যক পুল টাস্ক ( TASKS ) লিজ দেওয়ার জন্য তিনটি ধ্রুবক যোগ করুন।
  • সাম্প্রতিক ভিজিট এবং শীর্ষ দর্শনার্থীদের ( LIMIT ) প্রদর্শনের জন্য একটি ধ্রুবক যোগ করুন।

নিচে মূল কোডটি এবং এই আপডেটগুলি করার পরে এটি কেমন দেখাচ্ছে তা দেওয়া হল:

আগে:

from flask import Flask, render_template, request
from google.appengine.ext import ndb

app = Flask(__name__)

পরে:

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__)

একটি পুল টাস্ক যোগ করুন (টাস্কের জন্য ডেটা সংগ্রহ করুন এবং পুল কিউতে টাস্ক তৈরি করুন)

fetch_visits() এ প্রদর্শনের জন্য ভিজিট অনুসন্ধানের মতো ডেটা মডেল Visit একই থাকে। কোডের এই অংশে কেবলমাত্র store_visit() এ পরিবর্তন প্রয়োজন। ভিজিট নিবন্ধন করার পাশাপাশি, ভিজিটরের IP ঠিকানা সহ পুল কিউতে একটি টাস্ক যুক্ত করুন যাতে কর্মী ভিজিটর কাউন্টার বৃদ্ধি করতে পারে।

আগে:

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)

পরে:

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)

ভিজিটর ট্র্যাকিংয়ের জন্য ডেটা মডেল এবং কোয়েরি ফাংশন তৈরি করুন

ভিজিটর ট্র্যাক করার জন্য একটি ডেটা মডেল VisitorCount যোগ করুন; এতে visitor জন্য ফিল্ড থাকা উচিত এবং ভিজিটের সংখ্যা ট্র্যাক করার জন্য একটি পূর্ণসংখ্যা counter থাকা উচিত। তারপর fetch_counts() নামে একটি নতুন ফাংশন (বিকল্পভাবে, এটি একটি Python classmethod হতে পারে) যোগ করুন যাতে আপনি সর্বাধিক থেকে সর্বনিম্ন ক্রমে শীর্ষ দর্শকদের জিজ্ঞাসা করতে পারেন এবং ফেরত পাঠাতে পারেন। 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)

কর্মী কোড যোগ করুন

/log এ GET অনুরোধের মাধ্যমে ভিজিটরদের লগ করার জন্য একটি নতুন ফাংশন log_visitors() যোগ করুন। এটি একটি অভিধান/হ্যাশ ব্যবহার করে সাম্প্রতিক ভিজিটর সংখ্যা ট্র্যাক করে, এক ঘন্টার জন্য যতটা সম্ভব কাজ লিজ দেয়। প্রতিটি কাজের জন্য, এটি একই ভিজিটরের সমস্ত ভিজিট গণনা করে। হাতে থাকা ট্যালি দিয়ে, অ্যাপটি ডেটাস্টোরে ইতিমধ্যেই থাকা সমস্ত সংশ্লিষ্ট VisitorCount সত্তা আপডেট করে অথবা প্রয়োজনে নতুন তৈরি করে। শেষ ধাপে একটি প্লেইন টেক্সট বার্তা ফেরত পাঠানো হয় যা নির্দেশ করে যে কতগুলি প্রক্রিয়াজাত কাজ থেকে কতজন ভিজিটর নিবন্ধিত হয়েছেন। fetch_counts() ঠিক নীচে main.py তে এই ফাংশনটি যোগ করুন:

@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))

নতুন ডিসপ্লে ডেটা সহ প্রধান হ্যান্ডলার আপডেট করুন

শীর্ষ দর্শনার্থীদের প্রদর্শনের জন্য, প্রধান হ্যান্ডলার root() আপডেট করুন যাতে fetch_counts() ব্যবহার করা যায়। এছাড়াও, শীর্ষ দর্শনার্থীদের সংখ্যা এবং সাম্প্রতিক পরিদর্শনগুলি দেখানোর জন্য টেমপ্লেটটি আপডেট করা হবে। fetch_visits() এ কল থেকে সাম্প্রতিক পরিদর্শনগুলি সহ দর্শনার্থীদের গণনা প্যাকেজ করুন এবং ওয়েব টেমপ্লেটে পাস করার জন্য এটি একটি একক context ফেলে দিন। এই পরিবর্তনটি করার আগে এবং পরে কোডটি নীচে দেওয়া হল:

আগে:

@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)

পরে:

@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)

main.py তে প্রয়োজনীয় সকল পরিবর্তন এখানে দেওয়া হল, এবং main.py তে আপনি যে পরিবর্তনগুলি করছেন তার একটি বিস্তৃত ধারণা দেওয়ার জন্য এখানে সেই আপডেটগুলির একটি চিত্রিত উপস্থাপনা দেওয়া হল:

ad5fd3345efc13d0.png সম্পর্কে

নতুন ডিসপ্লে ডেটা সহ ওয়েব টেমপ্লেট আপডেট করুন

ওয়েব টেমপ্লেট templates/index.html জন্য সাম্প্রতিক ভিজিটরদের স্বাভাবিক পেলোডের পাশাপাশি শীর্ষ ভিজিটরদের প্রদর্শনের জন্য একটি আপডেট প্রয়োজন। শীর্ষ ভিজিটর এবং তাদের সংখ্যা পৃষ্ঠার শীর্ষে একটি টেবিলে রাখুন এবং আগের মতো সাম্প্রতিক ভিজিটগুলি রেন্ডার করতে থাকুন। অন্য একমাত্র পরিবর্তন হল সংখ্যাটি হার্ডকোড করার পরিবর্তে limit ভেরিয়েবলের মাধ্যমে দেখানো সংখ্যাটি নির্দিষ্ট করা। আপনার ওয়েব টেমপ্লেটে আপনার করা উচিত এমন আপডেটগুলি এখানে দেওয়া হল:

আগে:

<!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>

পরে:

<!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>

এর ফলে মডিউল ১ নমুনা অ্যাপে অ্যাপ ইঞ্জিন টাস্ক কিউ পুল টাস্কের ব্যবহার যুক্ত করে প্রয়োজনীয় পরিবর্তনগুলি সম্পন্ন হয়। আপনার ডিরেক্টরি এখন মডিউল ১৮ নমুনা অ্যাপের প্রতিনিধিত্ব করে এবং এতে এই ফাইলগুলি থাকা উচিত:

$ ls
README.md               appengine_config.py     queue.yaml              templates
app.yaml                main.py                 requirements.txt

৬. সারাংশ/পরিষ্কারকরণ

এই বিভাগটি অ্যাপটি স্থাপন করে, এটি উদ্দেশ্য অনুসারে এবং যেকোনো প্রতিফলিত আউটপুটে কাজ করে কিনা তা যাচাই করে এই কোডল্যাবটি শেষ করে। ভিজিটর গণনা প্রক্রিয়া করার জন্য কর্মীকে আলাদাভাবে চালান। অ্যাপ যাচাইকরণের পরে, যেকোনো পরিষ্কার-পরিচ্ছন্নতার পদক্ষেপগুলি সম্পাদন করুন এবং পরবর্তী পদক্ষেপগুলি বিবেচনা করুন।

অ্যাপ্লিকেশন স্থাপন এবং যাচাই করুন

নিশ্চিত করুন যে আপনি ইতিমধ্যেই আপনার পুল কিউ সেট আপ করেছেন যেমনটি আমরা এই কোডল্যাবের শীর্ষে gcloud app deploy queue.yaml দিয়ে করেছি। যদি এটি সম্পন্ন হয়ে থাকে এবং আপনার নমুনা অ্যাপটি ব্যবহারের জন্য প্রস্তুত থাকে, তাহলে gcloud app deploy দিয়ে আপনার অ্যাপটি স্থাপন করুন। আউটপুটটি মডিউল 1 অ্যাপের মতোই হওয়া উচিত, তবে এটিতে এখন শীর্ষে একটি "শীর্ষ দর্শনার্থী" টেবিল রয়েছে:

b667551dcbab1a09.png সম্পর্কে

আপডেট করা ওয়েব ফ্রন্টএন্ডে শীর্ষ দর্শনার্থী এবং সাম্প্রতিক পরিদর্শনগুলি প্রদর্শিত হলেও, মনে রাখবেন দর্শনার্থীর সংখ্যায় এই পরিদর্শনটি অন্তর্ভুক্ত নয় । অ্যাপটি পূর্ববর্তী দর্শনার্থীর সংখ্যা প্রদর্শন করে এবং পুল কিউতে এই দর্শনার্থীর সংখ্যা বৃদ্ধি করে একটি নতুন কাজ ফেলে দেয়, একটি কাজ যা প্রক্রিয়াকরণের জন্য অপেক্ষা করছে।

আপনি /log কল করে বিভিন্ন উপায়ে কাজটি সম্পাদন করতে পারেন:

উদাহরণস্বরূপ, যদি আপনি /log এ GET অনুরোধ পাঠাতে curl ব্যবহার করেন, তাহলে আপনার PROJECT_ID প্রদান করলে আপনার আউটপুটটি এইরকম দেখাবে:

$ curl https://PROJECT_ID.appspot.com/log
DONE (with 1 task[s] logging 1 visitor[s])

আপডেট করা সংখ্যাটি পরবর্তী ওয়েবসাইট ভিজিটে প্রতিফলিত হবে। ব্যস!

নমুনা অ্যাপে অ্যাপ ইঞ্জিন টাস্ক কিউ পুল কিউ পরিষেবা সফলভাবে যোগ করার জন্য এই কোডল্যাবটি সম্পন্ন করার জন্য অভিনন্দন। এটি এখন মডিউল ১৯-এ ক্লাউড পাব/সাব, ক্লাউড এনডিবি এবং পাইথন ৩-এ স্থানান্তরের জন্য প্রস্তুত।

পরিষ্কার কর

সাধারণ

যদি এখনকার মতো কাজ শেষ হয়ে যায়, তাহলে বিলিং এড়াতে আমরা আপনাকে আপনার অ্যাপ ইঞ্জিন অ্যাপটি অক্ষম করার পরামর্শ দিচ্ছি। তবে আপনি যদি আরও কিছু পরীক্ষা বা পরীক্ষা করতে চান, তাহলে অ্যাপ ইঞ্জিন প্ল্যাটফর্মের একটি বিনামূল্যের কোটা আছে, এবং যতক্ষণ না আপনি সেই ব্যবহারের স্তর অতিক্রম করেন, ততক্ষণ আপনাকে চার্জ করা উচিত নয়। এটি গণনার জন্য, তবে প্রাসঙ্গিক অ্যাপ ইঞ্জিন পরিষেবাগুলির জন্যও চার্জ হতে পারে, তাই আরও তথ্যের জন্য এর মূল্য পৃষ্ঠাটি দেখুন। যদি এই মাইগ্রেশনে অন্যান্য ক্লাউড পরিষেবা জড়িত থাকে, তবে সেগুলি আলাদাভাবে বিল করা হয়। উভয় ক্ষেত্রেই, প্রযোজ্য হলে, নীচের "এই কোডল্যাবের জন্য নির্দিষ্ট" বিভাগটি দেখুন।

সম্পূর্ণ প্রকাশের জন্য, অ্যাপ ইঞ্জিনের মতো গুগল ক্লাউড সার্ভারলেস কম্পিউট প্ল্যাটফর্মে স্থাপনের জন্য সামান্য বিল্ড এবং স্টোরেজ খরচ হয়। ক্লাউড স্টোরেজের মতো ক্লাউড বিল্ডেরও নিজস্ব ফ্রি কোটা রয়েছে। সেই ছবির স্টোরেজ সেই কোটার কিছু অংশ ব্যবহার করে। তবে, আপনি এমন একটি অঞ্চলে বাস করতে পারেন যেখানে এই ধরণের ফ্রি টিয়ার নেই, তাই সম্ভাব্য খরচ কমাতে আপনার স্টোরেজ ব্যবহার সম্পর্কে সচেতন থাকুন। আপনার পর্যালোচনা করা উচিত এমন নির্দিষ্ট ক্লাউড স্টোরেজ "ফোল্ডার"গুলির মধ্যে রয়েছে:

  • 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
  • উপরের স্টোরেজ লিঙ্কগুলি আপনার PROJECT_ID এবং * LOC *ation এর উপর নির্ভর করে, উদাহরণস্বরূপ, " us " যদি আপনার অ্যাপটি মার্কিন যুক্তরাষ্ট্রে হোস্ট করা হয়।

অন্যদিকে, যদি আপনি এই অ্যাপ্লিকেশন বা অন্যান্য সম্পর্কিত মাইগ্রেশন কোডল্যাবগুলি চালিয়ে যেতে না চান এবং সবকিছু সম্পূর্ণরূপে মুছে ফেলতে চান, তাহলে আপনার প্রকল্পটি বন্ধ করে দিন

এই কোডল্যাবের জন্য নির্দিষ্ট

নীচে তালিকাভুক্ত পরিষেবাগুলি এই কোডল্যাবের জন্য অনন্য। আরও তথ্যের জন্য প্রতিটি পণ্যের ডকুমেন্টেশন দেখুন:

পরবর্তী পদক্ষেপ

এই "মাইগ্রেশন"-এ, আপনি মডিউল ১ নমুনা অ্যাপে টাস্ক কিউ পুশ কিউ ব্যবহার যোগ করেছেন, যার ফলে ভিজিটরদের ট্র্যাক করার জন্য সমর্থন যোগ করা হয়েছে, যার ফলে মডিউল ১৮ নমুনা অ্যাপটি বাস্তবায়িত হয়েছে। পরবর্তী মাইগ্রেশনে, আপনি অ্যাপ ইঞ্জিন পুল টাস্কগুলিকে ক্লাউড পাব/সাব-এ আপগ্রেড করবেন। ২০২১ সালের শেষের দিকে, পাইথন ৩-এ আপগ্রেড করার সময় ব্যবহারকারীদের আর ক্লাউড পাব/সাব-এ মাইগ্রেট করার প্রয়োজন নেই। পরবর্তী বিভাগে এই সম্পর্কে আরও পড়ুন।

ক্লাউড পাব/সাব-এ মাইগ্রেট করার জন্য, মডিউল ১৯ কোডল্যাব দেখুন। এর বাইরেও বিবেচনা করতে হবে অতিরিক্ত মাইগ্রেশন, যেমন ক্লাউড ডেটাস্টোর, ক্লাউড মেমোরিস্টোর, ক্লাউড স্টোরেজ, অথবা ক্লাউড টাস্ক (পুশ কিউ)। ক্লাউড রান এবং ক্লাউড ফাংশনে ক্রস-প্রোডাক্ট মাইগ্রেশনও রয়েছে। সমস্ত সার্ভারলেস মাইগ্রেশন স্টেশন কন্টেন্ট (কোডল্যাব, ভিডিও, সোর্স কোড [যখন উপলব্ধ]) এর ওপেন সোর্স রেপোতে অ্যাক্সেস করা যেতে পারে।

৭. পাইথন ৩-এ মাইগ্রেশন

২০২১ সালের শরৎকালে, অ্যাপ ইঞ্জিন টিম অনেক বান্ডলড পরিষেবার সমর্থন দ্বিতীয় প্রজন্মের রানটাইম (যার প্রথম প্রজন্মের রানটাইম আছে) পর্যন্ত প্রসারিত করে । ফলস্বরূপ, আপনার অ্যাপটি পাইথন ৩-এ পোর্ট করার সময় আপনাকে আর অ্যাপ ইঞ্জিন টাস্ক কিউ-এর মতো বান্ডলড পরিষেবা থেকে স্ট্যান্ডঅ্যালোন ক্লাউড বা ক্লাউড পাব/সাবের মতো তৃতীয়-পক্ষের পরিষেবাগুলিতে স্থানান্তর করতে হবে না। অন্য কথায়, আপনি পাইথন ৩ অ্যাপ ইঞ্জিন অ্যাপগুলিতে টাস্ক কিউ ব্যবহার চালিয়ে যেতে পারেন যতক্ষণ না আপনি পরবর্তী প্রজন্মের রানটাইম থেকে বান্ডলড পরিষেবাগুলি অ্যাক্সেস করার জন্য কোডটি পুনঃনির্মাণ করেন।

মডিউল ১৭ কোডল্যাব এবং এর সাথে সম্পর্কিত ভিডিওতে আপনি পাইথন ৩-এ বান্ডেলড পরিষেবা ব্যবহার কীভাবে স্থানান্তর করবেন সে সম্পর্কে আরও জানতে পারবেন। যদিও মডিউল ১৮-এর ক্ষেত্রে এই বিষয়টি প্রযোজ্য নয়, নীচে মডিউল ১ অ্যাপের পাইথন ৩ সংস্করণের লিঙ্ক দেওয়া হল যা পাইথন ৩-এ পোর্ট করা হয়েছে এবং এখনও অ্যাপ ইঞ্জিন এনডিবি ব্যবহার করছে। (কোনও সময়ে, মডিউল ১৮ অ্যাপের একটি পাইথন ৩ সংস্করণও উপলব্ধ করা হবে।)

৮. অতিরিক্ত সম্পদ

ডেভেলপারদের জন্য এই বা সম্পর্কিত মাইগ্রেশন মডিউল এবং সম্পর্কিত পণ্যগুলি আরও অন্বেষণ করার জন্য অতিরিক্ত সংস্থানগুলি নীচে তালিকাভুক্ত করা হয়েছে। এর মধ্যে এই বিষয়বস্তুতে প্রতিক্রিয়া প্রদানের স্থান, কোডের লিঙ্ক এবং আপনার জন্য দরকারী মনে হতে পারে এমন বিভিন্ন ডকুমেন্টেশন অন্তর্ভুক্ত রয়েছে।

কোডল্যাব সমস্যা/প্রতিক্রিয়া

এই কোডল্যাবে যদি কোনও সমস্যা খুঁজে পান, তাহলে ফাইল করার আগে অনুগ্রহ করে প্রথমে আপনার সমস্যাটি অনুসন্ধান করুন। নতুন সমস্যা অনুসন্ধান এবং তৈরি করার লিঙ্ক:

মাইগ্রেশন রিসোর্স

মডিউল ১ (START) এবং মডিউল ১৮ (FINISH) এর জন্য রেপো ফোল্ডারগুলির লিঙ্কগুলি নীচের টেবিলে পাওয়া যাবে। সমস্ত অ্যাপ ইঞ্জিন কোডল্যাব মাইগ্রেশনের জন্য রেপো থেকেও এগুলি অ্যাক্সেস করা যেতে পারে; এটি ক্লোন করুন অথবা একটি ZIP ফাইল ডাউনলোড করুন।

কোডল্যাব

পাইথন ২

পাইথন ৩

মডিউল ১

কোড

কোড (এই টিউটোরিয়ালে দেখানো হয়নি)

মডিউল ১৮ (এই কোডল্যাব)

কোড

নিষিদ্ধ

অনলাইন রেফারেন্স

এই টিউটোরিয়ালের জন্য প্রাসঙ্গিক রিসোর্সগুলি নীচে দেওয়া হল:

অ্যাপ ইঞ্জিন টাস্ক সারি

অ্যাপ ইঞ্জিন প্ল্যাটফর্ম

অ্যাপ ইঞ্জিন ডকুমেন্টেশন

পাইথন ২ অ্যাপ ইঞ্জিন (স্ট্যান্ডার্ড এনভায়রনমেন্ট) রানটাইম

পাইথন ৩ অ্যাপ ইঞ্জিন (স্ট্যান্ডার্ড এনভায়রনমেন্ট) রানটাইম

পাইথন ২ এবং ৩ অ্যাপ ইঞ্জিন (স্ট্যান্ডার্ড এনভায়রনমেন্ট) রানটাইমের মধ্যে পার্থক্য

পাইথন ২ থেকে ৩ অ্যাপ ইঞ্জিন (স্ট্যান্ডার্ড এনভায়রনমেন্ট) মাইগ্রেশন গাইড

অ্যাপ ইঞ্জিনের মূল্য এবং কোটার তথ্য

দ্বিতীয় প্রজন্মের অ্যাপ ইঞ্জিন প্ল্যাটফর্ম লঞ্চ (২০১৮)

লিগ্যাসি রানটাইমের জন্য দীর্ঘমেয়াদী সহায়তা

ডকুমেন্টেশন মাইগ্রেশন নমুনা

অন্যান্য ক্লাউড তথ্য

ভিডিও

লাইসেন্স

এই কাজটি ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন ২.০ জেনেরিক লাইসেন্সের অধীনে লাইসেন্সপ্রাপ্ত।