Upstash Redis এবং Fly.io ব্যবহার করে এজে লিডারবোর্ড বিল্ড করুন
ডাইনামিক এবং এনগেজিং ওয়েব অ্যাপ্লিকেশনে লিডারবোর্ড প্রতিযোগিতা এবং ব্যবহারকারীর জড়িত থাকাকে বাড়াতে একটি শক্তিশালি টুল। এই টিউটোরিয়ালে আমরা Upstash Redis ব্যাকএন্ড স্টোরেজ হিসেবে এবং Fly.io এজ ডিপ্লয়মেন্টের জন্য ব্যবহার করে একটি রিয়েল-টাইম লিডারবোর্ড তৈরি করব। এই ডাইনামিক জোড়া সার্ভারলেস Redis সার্ভিসের দক্ষতা এবং Fly.io-এর গ্লোবাল ডিস্ট্রিবিউশন ক্যাপাবিলিটি কম্বাইন করে বিশ্বব্যাপী ব্যবহারকারীদের জন্য লো-লেটেন্সি অ্যাক্সেস নিশ্চিত করে।
Upstash Redis সম্পর্কে
Upstash একটি ক্লাউড সার্ভিস যা সিমপ্লিসিটি, স্কেলেবিলিটি এবং ইজ অফ ইউজ ফোকাস করে ফুলি ম্যানেজড Redis সার্ভিস প্রদান করে। Redis তার ভার্সাটিলিটি এবং হাই-পারফরম্যান্স ইন-মেমরি ডেটা স্টোর ক্যাপাবিলিটির জন্য পরিচিত, Upstash-এর সাথে যুগল করলে আরও কম্পেলিং হয়। Upstash-এর সাথে ডেভেলপাররা ইনফ্রাস্ট্রাকচার ম্যানেজমেন্টের অপারেশনাল কমপ্লেক্সিটি ছাড়া বিভিন্ন ইউজ কেসের জন্য Redis ডিপ্লয় ও স্কেল করতে পারে।
Upstash Redis-এর মূল বৈশিষ্ট্যগুলো:
- ইজ অফ ডিপ্লয়মেন্ট: Upstash ডিপ্লয়মেন্ট প্রসেস ভাবলেই সহজ করে দিয়েছে, ডেভেলপাররা যারা ইনফ্রাস্ট্রাকচার কমপ্লেক্সিটি কমানো চান তাদের জন্য চমৎকার চয়েস।
- হাই পারফরম্যান্স: Redis লাইটনিং-ফাস্ট ডেটা রিট্রিভালের জন্য পরিচিত, টাস্ক কিউইং, মেসেজ পাসিং এবং রিয়েল-টাইম লিডারবোর্ড হ্যান্ডেল করার জন্য উপযুক্ত। Upstash-এর সাথে ক্লাউড ইনফ্রাস্ট্রাকচার ব্যবহার করে স্মूद স্কেলিং নিশ্চিত হয়।
- স্কেলেবিলিটি: Redis হাইলি স্কেলেবল, Upstash-এর সাথে ডিমান্ড অনুযায়ী অটোমেটিক্যালি স্কেল করে। আপনার অ্যাপ্লিকেশন সবসময় ভিন্ন লোড হ্যান্ডেল করার জন্য সজ্জিত থাকে।
- ডেটা স্টোর ইন্টিগ্রেশন: Redis মেসেজ ব্রোকার এবং রেজাল্ট স্টোর দুটোর রোল প্লে করে, আর্কিটেকচার স্ট্রিমলাইন করে কম্পোনেন্ট সংখ্যা কমানো।
Upstash Redisকে আমাদের রিয়েল-টাইম লিডারবোর্ড অ্যাপ্লিকেশনে ইনকর্পোরেট করে আমরা Fly.io-এর গ্লোবাল ডিস্ট্রিবিউশন ক্যাপাবিলিটির সাথে পুরোপুরি কম্প্লিমেন্ট করা একটি ফুলি ম্যানেজড Redis সার্ভিসের শক্তি হারনেস করছি, যা একটি রোবাস্ট এবং রেসপন্সিভ ওয়েব অ্যাপ্লিকেশন আর্কিটেকচারের ফলাফল। বাস্তবায়নে যাই।
পূর্বশর্ত
- Fly.io অ্যাকাউন্ট।
- Flask এবং Python-এর বেসিক নলেজ।
Fly.io অ্যাকাউন্ট এবং Redis ডেটাবেস সেটআপ
Fly.io-তে অ্যাকাউন্ট তৈরি করুন এবং Fly CLI ইনস্টল করুন:
# Linux curl -L https://fly.io/install.sh | sh # অন্যান্য ইনস্টলেশন: https://fly.io/docs/hands-on/install-flyctl/
টার্মিনাল থেকে Fly-এ লগ ইন করুন:
fly auth login
ব্রাউজারে অথোরাইজেশন প্রম্পট আসবে। এখন টার্মিনাল থেকে Fly-এ ইন্টারঅ্যাক্ট করতে পারবেন।
এখন Redis ডেটাবেস তৈরি করুন যা লিডারবোর্ডের জন্য ব্যবহার করব:
Fly.io-তে একক কমান্ড দিয়ে Upstash Redis ডেটাবেস তৈরি হয়েছে। আউটপুট থেকে বা টার্মিনাল কমান্ড দিয়ে REDIS_URL দেখুন:
flyctl redis status upstash-fly-leaderboard # অথবা Upstash ড্যাশবোর্ড খুলুন fly redis dashboard <your_org_name | personal>
private_url নিন এবং আমাদের Flask_APP-এ ব্যবহার করার জন্য সংরক্ষণ করুন।
Flask অ্যাপ্লিকেশন ডেভেলপ করা
লিডারবোর্ডের জন্য Flask ব্যবহার করব। Flask পাইথন 웹 অ্যাপ্লিকেশন ফ্রেমওয়ার্ক। ডিপেন্ডেন্সি ইনস্টল করুন:
# flask - ওয়েব অ্যাপ্লিকেশন ফ্রেমওয়ার্ক # redis - Redis-এ কানেক্ট ও ইন্টারঅ্যাক্ট করার র্যাপার # gunicorn - পাইথন ওয়েব অ্যাপ্লিকেশন রান করার WSGI সার্ভার $ pip install flask redis gunicorn # ডিপেন্ডেন্সি এক্সপোর্ট করুন requirements.txt-এ $ pip freeze > requirements.txt
Flask অ্যাপের ফাউন্ডেশন বানান। app.py মডিউল তৈরি করুন:
import os from flask import Flask, render_template, request, redirect, url_for import redis app = Flask(__name__) UPSTASH_FLY_REDIS_CONNECTION_STRING = os.getenv('REDIS_URL') LEADERBOARD_KEY = 'leaderboard' redis_client = redis.from_url(UPSTASH_FLY_REDIS_CONNECTION_STRING)
আমরা: Flask অ্যাপ ইনিশিয়ালাইজ করেছি, এনভায়রনমেন্ট ভেরিয়েবল থেকে REDIS_URL পড়েছি, Upstash Redis-এ কানেক্ট করার জন্য redis_client ইনিশিয়ালাইজ করেছি।
প্লেয়ার যোগ এবং লিডারবোর্ড রিট্রিভ করার ফাংশন:
def add_score(player_id, score): 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 এবং score নেয়, লিডারবোর্ডে অ্যাড বা আপডেট করে। zadd Redis কমান্ড সোর্টেড সেটে মেম্বার এবং স্কোর অ্যাড করে।
get_leaderboard(): Redis সোর্টেড সেট (লিডারবোর্ড) থেকে টপ ১০ এন্ট্রি স্কোরসহ রিট্রিভ করে, ফরম্যাটেড লিস্ট রিটার্ন করে।
এখন তিনটি এন্ডপয়েন্ট যোগ করুন:
- [GET] / — লিডারবোর্ড রিট্রিভ
- POST /submit_score — লিডারবোর্ডে স্কোর সাবমিট
- GET /clear_table — লিডারবোর্ড ক্লিয়ার
@app.route('/') def leaderboard(): 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']) add_score(player_id, score) return redirect(url_for('leaderboard')) @app.route('/clear_table', methods=['GET']) def clear_table(): redis_client.delete(LEADERBOARD_KEY) return redirect(url_for('leaderboard'))
ফ্রন্টএন্ড পেজ leaderboard.html রেন্ডার করা হয়। প্রজেক্ট রুটে templates ফোল্ডার তৈরি করে leaderboard.html ফাইল যোগ করুন।
লোকালি টেস্ট করতে টার্মিনালে এনভায়রনমেন্ট ভেরিয়েবল লোড করুন:
# Linux export REDIS_URL='YOUR_UPSTASH_FLY_REDIS_CONNECTION_STRING' # Windows set REDIS_URL='YOUR_UPSTASH_FLY_REDIS_CONNECTION_STRING' # তারপর: $ flask run
অ্যাপ্লিকেশন রেডি, রিয়েল-টাইমে রেজাল্ট স্টোর, আপডেট এবং সোর্ট হবে। 🎉
Fly.io-এ ডিপ্লয় করা
কোডবেসের রুট থেকে:
flyctl launch
ডিফল্ট সেটিংসقبুল করুন (N)। এটি fly.toml এবং Procfile জেনারেট করবে।
fly.toml উদাহরণ:
app = "upstash-fly-leaderboard" primary_region = "otp" [env] PORT = "8080" [http_service] internal_port = 8080 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
Procfile আপডেট করুন gunicorn ব্যবহার করে পোর্ট ৮০৮০-এ রান করার জন্য:
web: gunicorn -b 0.0.0.0:8080 app:app
REDIS_URL সিক্রেট হিসেবে Fly.io-তে সেট করুন:
fly secrets set --app upstash-fly-leaderboard REDIS_URL=<>
এখন ডিপ্লয় করুন:
fly deploy --ha=false
আউটপুটে নতুন ডিপ্লয় করা অ্যাপ্লিকেশনের URL পাবেন।
উপসংহার
এই টিউটোরিয়ালে আমরা Upstash Redis এবং Fly.io-র স্মूद ইন্টিগ্রেশন দেখেছি রিয়েল-টাইম লিডারবোর্ড তৈরি করতে। সার্ভারলেস Redis সার্ভিসের দক্ষতা এবং Fly.io-এর গ্লোবাল ডিস্ট্রিবিউশন কম্বাইন করে বিশ্বব্যাপী ব্যবহারকারীদের জন্য লো-লেটেন্সি অ্যাক্সেস নিশ্চিত করা হয়েছে।
আপনার লিডারবোর্ড অ্যাপ্লিকেশন আরও উন্নত করতে ইউজার অথেন্টিকেশন, অতিরিক্ত পরিসংখ্যান বা অন্যান্য ফিচার যোগ করতে পারেন। আকর্ষণীয় এবং রেসপন্সিভ ওয়েব অ্যাপ্লিকেশনের ভবিষ্যৎ এখানেই, Upstash Redis এবং Fly.io-এর গ্লোবাল রিচ দ্বারা চালিত।
আর্টিকেলের পূর্ণ সোর্স কোড GitHub রিপোজিটরিতে পাওয়া যাবে, ইনস্ট্রাকশনসহ।
https://github.com/vjanz/upstash-fly-redis-leaderboard
প্রশ্ন থাকলে আমাকে যোগাযোগ করুন। LinkedIn, GitHub-এও কানেক্ট করতে পারেন।
রেফারেন্স
Upstash
https://redis.io
https://fly.io/