Upstash Redis এবং Fly.io ব্যবহার করে প্রান্তে একটি লিডারবোর্ড তৈরি করুন
গতিশীল এবং আকর্ষক ওয়েব অ্যাপ্লিকেশনগুলিতে, লিডারবোর্ডগুলি প্রতিযোগিতা এবং ব্যবহারকারীর ব্যস্ততা বৃদ্ধির জন্য একটি শক্তিশালী হাতিয়ার। এই টিউটোরিয়ালে, আমরা Upstash Redis ব্যবহার করে একটি রিয়েল-টাইম লিডারবোর্ড তৈরি করার জন্য একটি যাত্রা শুরু করব ব্যাকএন্ড স্টোরেজ হিসাবে এবং এটিকে Fly.io-এর সাথে প্রান্তে স্থাপন করুন . এই ডাইনামিক ডুও একটি সার্ভারবিহীন রেডিস পরিষেবার দক্ষতাকে Fly.io-এর বৈশ্বিক বিতরণ ক্ষমতার সাথে একত্রিত করে, বিশ্বব্যাপী ব্যবহারকারীদের জন্য কম লেটেন্সি অ্যাক্সেস নিশ্চিত করে৷
Upstash Redis সম্পর্কে
Upstash হল একটি ক্লাউড পরিষেবা যা সরলতা, পরিমাপযোগ্যতা এবং ব্যবহারের সহজতার উপর ফোকাস করে একটি সম্পূর্ণরূপে পরিচালিত Redis পরিষেবা প্রদান করে। Redis, তার বহুমুখীতা এবং উচ্চ-কর্মক্ষমতা ইন-মেমরি ডেটা স্টোর ক্ষমতার জন্য পরিচিত, Upstash-এর সাথে পেয়ার করা হলে এটি আরও আকর্ষণীয় হয়ে ওঠে। Upstash-এর সাহায্যে, বিকাশকারীরা পরিকাঠামো ব্যবস্থাপনার সাথে যুক্ত অপারেশনাল জটিলতা ছাড়াই বিভিন্ন ব্যবহারের ক্ষেত্রে রেডিসকে নির্বিঘ্নে স্থাপন এবং স্কেল করতে পারে।
Upstash Redis এর মূল বৈশিষ্ট্যগুলি অন্তর্ভুক্ত করে:
-
স্থাপনের সহজতা: Upstash স্থাপনার প্রক্রিয়াটিকে উল্লেখযোগ্যভাবে সরল করে, এটি ডেভেলপারদের জন্য একটি চমৎকার পছন্দ করে, যারা অবকাঠামোর সাথে যুক্ত অপারেশনাল জটিলতা কমাতে চায়।
-
উচ্চ কর্মক্ষমতা: Redis তার বিদ্যুত-দ্রুত ডেটা পুনরুদ্ধারের জন্য পরিচিত, এটিকে টাস্ক সারি, বার্তা পাসিং এবং রিয়েল-টাইম লিডারবোর্ড পরিচালনার জন্য উপযুক্ত করে তোলে কারণ আমরা এই টিউটোরিয়ালে অন্বেষণ করব। আপস্ট্যাশের সাহায্যে, আপনি নির্বিঘ্ন স্কেলিংয়ের জন্য ক্লাউড অবকাঠামোর উপর নির্ভর করতে পারেন, আপনার অ্যাপ্লিকেশনগুলি বিভিন্ন কাজের চাপ দক্ষতার সাথে পরিচালনা করতে পারে তা নিশ্চিত করে৷
-
মাপযোগ্যতা: Redis অত্যন্ত স্কেলযোগ্য, এবং Upstash এর সাথে, এটি চাহিদার উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে স্কেল করতে পারে। এটি নিশ্চিত করে যে আপনার অ্যাপ্লিকেশন সর্বদা বিভিন্ন স্তরের লোড পরিচালনা করতে সজ্জিত থাকে, এটি গতিশীল এবং মাপযোগ্য অ্যাপ্লিকেশনগুলির জন্য একটি আদর্শ পছন্দ করে তোলে৷
-
ডেটা স্টোর ইন্টিগ্রেশন: রেডিস একটি বার্তা ব্রোকার এবং একটি ফলাফলের দোকান উভয়ই কাজ করে, আপনার পরিচালনা করার জন্য প্রয়োজনীয় উপাদানগুলির সংখ্যা হ্রাস করে আর্কিটেকচারকে স্ট্রিমলাইন করে৷
আমাদের রিয়েল-টাইম লিডারবোর্ড অ্যাপ্লিকেশনে Upstash Redis অন্তর্ভুক্ত করার মাধ্যমে, আমরা একটি সম্পূর্ণরূপে পরিচালিত Redis পরিষেবার শক্তি ব্যবহার করি যা Fly.io-এর বিশ্বব্যাপী বিতরণ ক্ষমতার পরিপূরক করে, যার ফলে একটি শক্তিশালী এবং প্রতিক্রিয়াশীল ওয়েব অ্যাপ্লিকেশন আর্কিটেকচার হয়। আসুন বাস্তবায়নে ডুব দিন এবং Fly.io-এর সাথে Upstash Redis কীভাবে আপনার প্রকল্পগুলিকে নতুন উচ্চতায় উন্নীত করতে পারে তা দেখাই৷
পূর্বশর্ত
আমরা আমাদের যাত্রা শুরু করার আগে, নিশ্চিত করুন যে আপনার নিম্নলিখিত পূর্বশর্ত রয়েছে:
-
একটি Fly.io অ্যাকাউন্ট।
-
ফ্লাস্ক এবং পাইথনের প্রাথমিক জ্ঞান।
একটি Fly.io অ্যাকাউন্ট এবং Redis ডেটাবেস সেট আপ করুন
Fly.io-এ একটি অ্যাকাউন্ট তৈরি করে শুরু করুন এবং তারপর Fly CLI:
ইনস্টল করুন # Linux
curl -L https://fly.io/install.sh | sh
# Other type of installation: https://fly.io/docs/hands-on/install-flyctl/ ইনস্টল করার পরে, আপনার টার্মিনাল থেকে, Fly:
দিয়ে লগ ইন করুনfly auth login এটি একটি ব্রাউজার খুলবে যেখানে এটি আপনাকে এইমাত্র তৈরি করা অ্যাকাউন্টের সাথে লগইন অনুমোদন করতে বলবে। দারুণ, এখন আপনি আপনার টার্মিনাল থেকে Fly এর সাথে ইন্টারঅ্যাক্ট করতে পারবেন।
এখন আমরা ফ্লাই সেট আপ করেছি, আসুন একটি রেডিস তৈরি করি ডাটাবেস, যা আমরা আমাদের লিডারবোর্ড তৈরি করতে ব্যবহার করতে যাচ্ছি:
এখন আমাদের Upstash Redis ডাটাবেস আছে যা আমরা Fly.io-এর মাধ্যমে একক কমান্ড দিয়ে তৈরি করেছি। এখন আপনি আউটপুট থেকে বা টার্মিনালে একটি কমান্ড দিয়ে REDIS_URL দেখতে পারেন:
flyctl redis status upstash-fly-leaderboard
# Or open the upstash dashboard
fly redis dashboard <your_org_name | personal> private_url ধরুন এবং আমাদের Flask_APP-এ আমাদের প্রয়োজন অনুযায়ী এটি সংরক্ষণ করুন
ফ্লাস্ক অ্যাপ্লিকেশন বিকাশ করুন
আমাদের লিডারবোর্ড তৈরি করতে আমরা ফ্লাস্ক ব্যবহার করতে যাচ্ছি। ফ্লাস্ক ওয়েব অ্যাপ্লিকেশন তৈরির জন্য একটি ন্যূনতম পাইথন ফ্রেমওয়ার্ক। তাহলে চলুন শুরু করা যাক নির্ভরতা ইনস্টল করার মাধ্যমে।
# flask - for as a web application framework
# redis - A wrapper to connect and interact with Redis
# gunicorn - wsgi server for running Python web applications
$ pip install flask redis gunicorn
# export the dependencies to requirements.txt
$ pip freeze > requirements.txt এখন, আমাদের ফ্লাস্ক অ্যাপের ভিত্তি স্থাপন করা যাক। একটি মডিউল app.py তৈরি করে শুরু করুন এবং একটি ফ্লাস্ক অ্যাপ্লিকেশন শুরু করার জন্য সর্বনিম্ন কোড লিখুন এবং Upstash Redis-এর সাথে সংযোগ করুন৷
import os
from flask import Flask, render_template, request, redirect, url_for
import redis
app = Flask(__name__)
# Read the connection string from the environment variable
UPSTASH_FLY_REDIS_CONNECTION_STRING = os.getenv('REDIS_URL')
LEADERBOARD_KEY = 'leaderboard'
# Initiate a connection to Upstash Redis Instance using the connection string
redis_client = redis.from_url(UPSTASH_FLY_REDIS_CONNECTION_STRING)
তাই আমরা:
-
একটি ফ্লাস্ক অ্যাপ শুরু করেছে
-
পরিবেশ পরিবর্তনশীল থেকে REDIS_URL পড়ুন
-
আমাদের Upstash Redis ডাটাবেসের সাথে ইন্টারঅ্যাক্ট করার জন্য একটি redis_client চালু করেছি যা আমরা Fly.io এ তৈরি করেছি
এখন লিডারবোর্ডে একজন প্লেয়ার যোগ করার ফাংশন সংজ্ঞায়িত করা যাক এবং লিডারবোর্ড থেকে সংশ্লিষ্ট স্কোর সহ খেলোয়াড়দের পুনরুদ্ধার করা যাক:
def add_score(player_id, score):
# Add or update the score for the player in the leaderboard
redis_client.zadd(LEADERBOARD_KEY, {player_id: score})
def get_leaderboard():
leaderboard = redis_client.zrevrange(LEADERBOARD_KEY, 0, 9, withscores=True)
formatted_leaderboard = [{'player_id': player_id.decode('utf-8'), 'score': int(score)} for player_id, score in
leaderboard]
return formatted_leaderboard
ফাংশন add_score একটি player_id পায় এবং একটি স্কোর এবং লিডারবোর্ডে যোগ করে। জ্যাড রেডিসের একটি কমান্ড যা একটি সাজানো সেটে স্কোর সহ এক বা একাধিক সদস্য যোগ করতে ব্যবহৃত হয়।
দ্বিতীয় ফাংশন get_leaderboard() রেডিস সাজানো সেট (লিডারবোর্ড) থেকে স্কোর সহ শীর্ষ 10টি এন্ট্রি পুনরুদ্ধার করে এবং প্লেয়ার আইডি এবং তাদের সংশ্লিষ্ট স্কোর সমন্বিত একটি ফরম্যাট তালিকায় ফেরত দেয়।
ঠিক আছে, এখন আমাদের Upstash Redis ডাটাবেসের সাথে ইন্টারঅ্যাক্ট করতে তিনটি শেষ পয়েন্ট যোগ করা যাক।
-
[GET] / — লিডারবোর্ড পুনরুদ্ধার করুন
-
পোস্ট করুন /submit_score — লিডারবোর্ডে স্কোর জমা দিন
-
GET /clear_table — লিডারবোর্ড পরিষ্কার করে
@app.route('/')
def leaderboard():
# Retrieve the top 10 players from the leaderboard and redirect to the leaderboard page with the data
leaderboard = get_leaderboard()
return render_template('leaderboard.html', leaderboard=leaderboard)
@app.route('/submit_score', methods=['POST'])
def submit_score():
player_id = request.form['player_id']
score = int(request.form['score'])
# Call the function to add or update the score for the player in the leaderboard
add_score(player_id, score)
return redirect(url_for('leaderboard'))
@app.route('/clear_table', methods=['GET'])
def clear_table():
# Delete all the data from the leaderboard
redis_client.delete(LEADERBOARD_KEY)
return redirect(url_for('leaderboard')) আমরা দেখতে পাচ্ছি, এটিকে আরও ইন্টারেক্টিভ এবং বাস্তব সময়ে করতে আমরা একটি ফ্রন্ট-এন্ড পেজ leaderboard.html রেন্ডার করছি৷ প্রকল্পের মূলে, একটি ফোল্ডার টেমপ্লেট তৈরি করুন এবং ভিতরে একটি ফাইল লিডারবোর্ড তৈরি করুন. html নিম্নলিখিত কোড সহ৷
পারফেক্ট, এখন আপনার টার্মিনালে এনভায়রনমেন্ট ভেরিয়েবল লোড আপ করার জন্য এটি স্থানীয়ভাবে পরীক্ষা করার জন্য:
# Linux
export REDIS_URL='YOUR_UPSTASH_FLY_REDIS_CONNECTION_STRING'
# Windows
set REDIS_URL='YOUR_UPSTASH_FLY_REDIS_CONNECTION_STRING'
# After that run:
$ flask run আপনার অ্যাপ্লিকেশনটি একটি লিডারবোর্ডের সাথে প্রস্তুত হওয়া উচিত এবং লিডারবোর্ডে রেকর্ড যোগ করার জন্য একটি উপায়।
আপনি ফলাফল যোগ করার সাথে সাথে, আপনি সহজেই দেখতে পাবেন যে ফলাফলগুলি আপডেট করা হবে এবং রিয়েল-টাইমে সাজানো হবে, যা আমরা করতে চেয়েছিলাম! 🎉
Fly.io-তে স্থাপন করুন
এখন, আসুন আমাদের ফ্লাস্ক অ্যাপটিকে Fly.io-এ স্থাপন করে নতুন উচ্চতায় উন্নীত করি। আপনার কোডবেসের রুট থেকে, এক্সিকিউট করুন:
flyctl launch
Scanning source code
Detected a Python app
Using the following build configuration:
Builder: paketobuildpacks/builder:base
Creating app in /home/valon/code/upstash-fly-leaderboard
We're about to launch your Python app on Fly.io. Here's what you're getting:
Organization: <MyOrg> (fly launch defaults to the personal org)
Name: upstash-leaderboard (derived from your directory name)
Region: Amsterdam, Netherlands (this is the fastest region for you)
App Machines: shared-cpu-1x, 1GB RAM (most apps need about 1GB of RAM)
Postgres: <none> (not requested)
Redis: <none> (not requested)
? Do you want to tweak these settings before proceeding? (y/N) : N এটি আপনার কোডবেস সনাক্ত করবে এবং আপনার অ্যাপ্লিকেশনের নাম, কোড ইত্যাদির উপর ভিত্তি করে কিছু ডিফল্ট কনফিগারেশন প্রয়োগ করবে। আমি ডিফল্ট সেটিংসের সাথে যাব তাই আমি N এর সাথে চালিয়ে যাব .
এখন এটি একটি fly.toml তৈরি করবে এবং একটি প্রোফাইল :
app = "upstash-fly-leaderboard"
primary_region = "otp" #
[build]
builder = "paketobuildpacks/builder:base"
[env]
PORT = "8080"
[http_service]
internal_port = 8080 # Port where the app runs
force_https = true
auto_stop_machines = true
auto_start_machines = true
min_machines_running = 0
processes = ["app"]
[[vm]]
cpu_kind = "shared"
cpus = 1
memory_mb = 1024 আমি সমস্ত কিছু ডিফল্ট হিসাবে রেখেছি, আমি যে অঞ্চলটি otp তে পরিবর্তন করি তা ছাড়া। এখন Procfile আপডেট করা যাক , যেখানে এক্সিকিউশন কমান্ড সংজ্ঞায়িত করা হয়েছে এবং এটিকে gunicorn দিয়ে চালান 8080-এ পোর্ট।
web: gunicorn -b 0.0.0.0:8080 app:app যেখানে অ্যাপ হল মডিউলের নাম এবং অন্যটি অ্যাপ মডিউলে সংজ্ঞায়িত ভেরিয়েবল যেখানে আমরা ফ্লাস্ক অ্যাপটি সংজ্ঞায়িত করেছি। আমরা বেশিরভাগই সম্পন্ন করেছি, কিন্তু মনে রাখবেন যে কোডটিতে আমরা REDIS_URL যোগ করেছি একটি এনভায়রনমেন্ট ভেরিয়েবল হিসাবে, এবং আমরা স্থানীয়ভাবে মান সেট করি Upstash Redis যা আমরা Fly CLI ব্যবহার করে তৈরি করেছি। , আসুন fly.io-এ এটিকে একটি গোপনীয়তা হিসাবে সেট আপ করি৷
৷ fly secrets set --app upstash-fly-leaderboard REDIS_URL=<> আমরা সবাই প্রস্তুত, আসুন অ্যাপটিকে fly.io-এ স্থাপন করি এখন:
fly deploy --ha=false আউটপুট আমাদের সদ্য মোতায়েন করা অ্যাপ্লিকেশন দেখার জন্য URL দিতে হবে।
Watch your deployment at https://fly.io/apps/<app_name>/monitoring
-------
Updating existing machines in '<app_name>' with rolling strategy
-------
✔ Machine <machine_id> [app] update succeeded
-------
Visit your newly deployed app at https://<app_name>.fly.dev/ উপসংহার
এই টিউটোরিয়ালে, আমরা Upstash Redis-এর নির্বিঘ্ন ইন্টিগ্রেশন দেখেছি এবং Fly.io একটি রিয়েল-টাইম লিডারবোর্ড তৈরি করতে। Fly.io-এর গ্লোবাল ডিস্ট্রিবিউশন ক্ষমতার সাথে সার্ভারবিহীন Redis পরিষেবার কার্যকারিতা একত্রিত করে, আমরা নিশ্চিত করেছি যে সারা বিশ্ব জুড়ে ব্যবহারকারীরা কম লেটেন্সি অ্যাক্সেসের অভিজ্ঞতা লাভ করে৷
ব্যবহারকারীর প্রমাণীকরণ, অতিরিক্ত পরিসংখ্যান, বা আপনার অ্যাপ্লিকেশনের প্রয়োজন অনুসারে অন্য কোনো বৈশিষ্ট্য যোগ করে আপনার লিডারবোর্ড অ্যাপ্লিকেশনটিকে আরও উন্নত করতে নির্দ্বিধায়৷ আকর্ষক এবং প্রতিক্রিয়াশীল ওয়েব অ্যাপ্লিকেশনগুলির ভবিষ্যত এখানে, Upstash Redis-এর শক্তি এবং Fly.io-এর বিশ্বব্যাপী পৌঁছানোর দ্বারা চালিত৷
নির্দেশ সহ আপনি GitHub সংগ্রহস্থলে নিবন্ধটির সম্পূর্ণ উৎস কোড খুঁজে পেতে পারেন।
https://github.com/vjanz/upstash-fly-redis-leaderboard
যদি আপনার কোন প্রশ্ন থাকে, আমার সাথে যোগাযোগ করতে নির্দ্বিধায়. এছাড়াও, আপনি LinkedIn, GitHub
-এ আমার সাথে সংযোগ করতে পারেনরেফারেন্স
আপস্ট্যাশ
https://redis.io
https://fly.io/