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 को शामिल करके, हम एक पूरी तरह से प्रबंधित Redis सेवा की शक्ति का उपयोग करते हैं जो Fly.io की वैश्विक वितरण क्षमताओं को पूरक करती है, जिसके परिणामस्वरूप एक मजबूत और प्रतिक्रियाशील वेब एप्लिकेशन आर्किटेक्चर होता है। आइए कार्यान्वयन में तल्लीन करें और प्रदर्शित करें कि Upstash Redis Fly.io के साथ आपके प्रोजेक्ट को नई ऊंचाइयों तक कैसे ले जा सकता है।
पूर्वापेक्षाएँ
हमारी यात्रा शुरू करने से पहले, सुनिश्चित करें कि आपके पास निम्नलिखित पूर्वापेक्षाएँ हैं:
एक 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 के साथ इंटरैक्ट कर पाएंगे।
अब जब हमने Fly सेटअप कर लिया है, तो आइए एक Redis डेटाबेस बनाएं, जिसका उपयोग हम अपना लीडरबोर्ड बनाने के लिए करेंगे:
अब हमारे पास हमारा Upstash Redis डेटाबेस है जिसे हमने Fly.io के माध्यम से एक कमांड के साथ बनाया है। अब आप आउटपुट से या टर्मिनल में एक कमांड के साथ REDIS_URL देख सकते हैं:
flyctl redis status upstash-fly-leaderboard
# या Upstash डैशबोर्ड खोलें
fly redis dashboard <your_org_name | personal>
private_url को पकड़ें और इसे स्टोर करें क्योंकि हमें इसकी आवश्यकता हमारे Flask_APP में होगी।
Flask एप्लिकेशन विकसित करें
अपना लीडरबोर्ड बनाने के लिए हम Flask का उपयोग करने जा रहे हैं। Flask वेब एप्लिकेशन बनाने के लिए एक न्यूनतम Python फ्रेमवर्क है। तो आइए निर्भरताओं को इंस्टॉल करके शुरू करें।
# flask - वेब एप्लिकेशन फ्रेमवर्क के रूप में
# redis - Redis से कनेक्ट और इंटरैक्ट करने के लिए एक रैपर
# gunicorn - Python वेब एप्लिकेशन चलाने के लिए WSGI सर्वर
$ pip install flask redis gunicorn
# निर्भरताओं को requirements.txt में निर्यात करें
$ pip freeze > requirements.txt
अब, आइए अपने Flask ऐप के लिए आधार रखें। एक मॉड्यूल app.py बनाकर शुरू करें और Flask एप्लिकेशन आरंभ करने और Upstash Redis से कनेक्ट करने के लिए न्यूनतम कोड लिखें।
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'
# कनेक्शन स्ट्रिंग का उपयोग करके Upstash Redis इंस्टेंस से कनेक्शन आरंभ करें
redis_client = redis.from_url(UPSTASH_FLY_REDIS_CONNECTION_STRING)
तो हमने:
एक Flask ऐप आरंभ किया
पर्यावरण चर से REDIS_URL पढ़ा
Fly.io में हमारे द्वारा बनाए गए 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 सॉर्टेड सेट (लीडरबोर्ड) से स्कोर के साथ शीर्ष 10 प्रविष्टियों को पुनर्प्राप्त करता है, और उन्हें खिलाड़ी आईडी और उनके संबंधित स्कोर वाली एक फॉर्मेट की गई सूची में वापस करता है।
ठीक है, अब आइए अपने Upstash Redis डेटाबेस के साथ इंटरैक्ट करने के लिए तीन एंडपॉइंट जोड़ें।
[GET] / — लीडरबोर्ड पुनर्प्राप्त करें
POST /submit_score — लीडरबोर्ड में स्कोर सबमिट करें
GET /clear_table — लीडरबोर्ड साफ़ करें
@app.route('/')
def leaderboard():
# लीडरबोर्ड से शीर्ष 10 खिलाड़ियों को पुनर्प्राप्त करें और डेटा के साथ लीडरबोर्ड पेज पर रीडायरेक्ट करें
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 पर तैनात करें
अब, आइए अपने Flask ऐप को 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 और एक Procfile उत्पन्न करेगा:
app = "upstash-fly-leaderboard"
primary_region = "otp"
# [build]
builder = "paketobuildpacks/builder:base"
[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
मैंने सब कुछ डिफ़ॉल्ट छोड़ दिया, सिवाय उस क्षेत्र के जिसे मैं otp में बदलता हूं। अब आइए Procfile अपडेट करें, जहां निष्पादन कमांड परिभाषित है, और इसे gunicorn के साथ 8080 पोर्ट पर चलाएं।
web: gunicorn -b 0.0.0.0:8080 app:app
जहां app मॉड्यूल नाम है और दूसरा app मॉड्यूल में परिभाषित वेरिएबल है जहां हमने Flask ऐप को परिभाषित किया है। हम लगभग पूरा कर चुके हैं, लेकिन याद रखें कि कोड में हमने REDIS_URL को पर्यावरण चर के रूप में जोड़ा था, और हमने स्थानीय रूप से मान को Fly CLI का उपयोग करके बनाए गए Upstash Redis पर सेट किया था, आइए इसे 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 के निर्बाध एकीकरण को देखा। एक सर्वरलेस 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/