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

1. ওভারভিউ

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

এই কোডল্যাব আপনাকে মডিউল 1 কোডল্যাব থেকে নমুনা অ্যাপে অ্যাপ ইঞ্জিন টাস্ক কিউ পুল টাস্কগুলিকে অন্তর্ভুক্ত করতে এবং ব্যবহার করতে শেখায়। আমরা এই মডিউল 18 টিউটোরিয়ালে এর পুল টাস্কের ব্যবহার যোগ করি, তারপর সেই ব্যবহারটি মডিউল 19-এ এগিয়ে ক্লাউড পাব/সাব-এ স্থানান্তরিত করি। যারা পুশ টাস্কের জন্য টাস্ক সারি ব্যবহার করে তারা পরিবর্তে ক্লাউড টাস্কে স্থানান্তরিত হবে এবং পরিবর্তে মডিউল 7-9 উল্লেখ করা উচিত।

আপনি কিভাবে শিখবেন

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

আপনি কি প্রয়োজন হবে

সমীক্ষা

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

শুধুমাত্র মাধ্যমে এটি পড়ুন এটি পড়ুন এবং ব্যায়াম সম্পূর্ণ করুন

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

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

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

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

2. পটভূমি

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

a7a9d2b80d706a2b.png

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

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

queue:
- name: pullq
  mode: pull

queue.yaml ফাইলটি আপনার অ্যাপের জন্য বিদ্যমান সমস্ত টাস্ক সারি নির্দিষ্ট করে ( default [পুশ] সারি ছাড়া যা অ্যাপ ইঞ্জিন দ্বারা স্বয়ংক্রিয়ভাবে তৈরি হয়)। এই ক্ষেত্রে, শুধুমাত্র একটি, pullq নামে একটি পুল সারি আছে। অ্যাপ ইঞ্জিনের জন্য mode নির্দেশিকাটিকে pull হিসাবে নির্দিষ্ট করা প্রয়োজন, অন্যথায় এটি ডিফল্টরূপে একটি পুশ সারি তৈরি করে। ডকুমেন্টেশনে পুল সারি তৈরি সম্পর্কে আরও জানুন। এছাড়াও অন্যান্য বিকল্পের জন্য 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.
$

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

এই বিভাগে নিম্নলিখিত ফাইলগুলির আপডেটগুলি বৈশিষ্ট্যযুক্ত:

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

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

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

আগে:

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 থাকা উচিত। তারপরে একটি নতুন ফাংশন যোগ করুন (বিকল্পভাবে, এটি একটি পাইথন classmethod হতে পারে ) নামক fetch_counts() সর্বাধিক থেকে সর্বনিম্ন ক্রমে শীর্ষ দর্শকদের অনুসন্ধান করতে এবং ফেরত দিতে। 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_visitors() একটি GET অনুরোধের মাধ্যমে ভিজিটরদের লগ করার জন্য /log এটি একটি অভিধান/হ্যাশ ব্যবহার করে সাম্প্রতিক ভিজিটর গণনা ট্র্যাক করে, যতটা সম্ভব কাজ এক ঘন্টার জন্য লিজ দেয়। প্রতিটি কাজের জন্য, এটি একই পরিদর্শকের দ্বারা সমস্ত পরিদর্শনকে তুল্য করে। হাতের মুঠোয়, অ্যাপটি ইতিমধ্যে ডেটাস্টোরে থাকা সমস্ত সংশ্লিষ্ট 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))

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

শীর্ষ দর্শকদের প্রদর্শন করতে, fetch_counts() চালু করতে প্রধান হ্যান্ডলার root() আপডেট করুন। অধিকন্তু, শীর্ষ দর্শকদের সংখ্যা এবং সাম্প্রতিক পরিদর্শন দেখানোর জন্য টেমপ্লেট আপডেট করা হবে। 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>

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

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

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

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

প্রয়োগ এবং আবেদন যাচাই

নিশ্চিত করুন যে আপনি ইতিমধ্যেই আপনার পুল সারি সেট আপ করেছেন যেমনটি আমরা এই কোডল্যাবের উপরের দিকে 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])

আপডেট করা গণনা পরবর্তী ওয়েবসাইট পরিদর্শনে প্রতিফলিত হবে। তাই তো!

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

পরিষ্কার করুন

সাধারণ

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

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

  • 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 *করণের উপর নির্ভর করে, উদাহরণস্বরূপ, " us " যদি আপনার অ্যাপটি USA তে হোস্ট করা হয়৷

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

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

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

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

এই "মাইগ্রেশন"-এ আপনি মডিউল 1 নমুনা অ্যাপে টাস্ক কিউ পুশ কিউ ব্যবহার যোগ করেছেন, দর্শকদের ট্র্যাক করার জন্য সমর্থন যোগ করার মাধ্যমে, এর ফলে মডিউল 18 নমুনা অ্যাপটি বাস্তবায়ন করা হচ্ছে। পরবর্তী মাইগ্রেশনে, আপনি অ্যাপ ইঞ্জিন পুল টাস্কগুলিকে ক্লাউড পাব/সাব-এ আপগ্রেড করবেন। 2021 সালের শেষের দিকে, পাইথন 3-এ আপগ্রেড করার সময় ব্যবহারকারীদের আর ক্লাউড পাব/সাব-এ স্থানান্তরিত করার প্রয়োজন নেই। পরবর্তী বিভাগে এই সম্পর্কে আরও পড়ুন।

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

7. পাইথন 3 এ মাইগ্রেশন

2021 সালের শরত্কালে, অ্যাপ ইঞ্জিন টিম 2য় প্রজন্মের রানটাইমগুলিতে (যেগুলির একটি 1ম প্রজন্মের রানটাইম আছে) অনেকগুলি বান্ডিল পরিষেবার সমর্থন বাড়িয়েছে । ফলস্বরূপ, আপনার অ্যাপটি পাইথন 3 এ পোর্ট করার সময় আপনাকে আর অ্যাপ ইঞ্জিন টাস্ক কিউয়ের মতো বান্ডিল পরিষেবাগুলি থেকে স্বতন্ত্র ক্লাউডে বা ক্লাউড পাব/সাবের মতো তৃতীয় পক্ষের পরিষেবাগুলি থেকে স্থানান্তর করতে হবে না৷ অন্য কথায়, আপনি টাস্ক কিউ ব্যবহার চালিয়ে যেতে পারেন পাইথন 3 অ্যাপ ইঞ্জিন অ্যাপে যতক্ষণ না আপনি পরবর্তী প্রজন্মের রানটাইম থেকে বান্ডিল পরিষেবাগুলি অ্যাক্সেস করতে কোডটি পুনরুদ্ধার করেন।

আপনি মডিউল 17 কোডল্যাব এবং এর সংশ্লিষ্ট ভিডিওতে পাইথন 3 এ বান্ডিল পরিষেবার ব্যবহার কীভাবে স্থানান্তর করবেন সে সম্পর্কে আরও শিখতে পারেন। যদিও সেই বিষয়টি মডিউল 18-এর জন্য সুযোগের বাইরে, নীচে লিঙ্ক করা হল Python 3 সংস্করণ মডিউল 1 অ্যাপের Python 3-এ পোর্ট করা হয়েছে এবং এখনও অ্যাপ ইঞ্জিন NDB ব্যবহার করছে। (কিছু সময়ে, মডিউল 18 অ্যাপের একটি পাইথন 3 সংস্করণও উপলব্ধ করা হবে।)

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

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

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

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

মাইগ্রেশন সম্পদ

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

কোডল্যাব

পাইথন 2

পাইথন 3

মডিউল 1

কোড

কোড (এই টিউটোরিয়ালে বৈশিষ্ট্যযুক্ত নয়)

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

কোড

N/A

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

নীচে এই টিউটোরিয়ালের জন্য প্রাসঙ্গিক সংস্থান রয়েছে:

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

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

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

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

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

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

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

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

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

উত্তরাধিকার রানটাইম জন্য দীর্ঘমেয়াদী সমর্থন

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

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

ভিডিও

লাইসেন্স

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