ಹುಡುಕಾಟ ಸೇವೆ ವಾಸ್ತುಶಿಲ್ಪ: Valkey ಜೊತೆ ಸ್ವತಂತ್ರ Flask ಅಪ್ಲಿಕೇಶನ್
ಈ ಲೇಖನವು ನಮ್ಮ ಹುಡುಕಾಟ ಸೇವೆಯು ಪ್ರತ್ಯೇಕ ಸರ್ವರ್ನಲ್ಲಿ ಸ್ವತಂತ್ರ Flask ಅಪ್ಲಿಕೇಶನ್ ಆಗಿ ಹೇಗೆ ಚಲಿಸುತ್ತದೆ ಎಂಬುದನ್ನು ವಿವರಿಸುತ್ತದೆ. ಇದು Valkey (Redis ಫೋರ್ಕ್) ಅನ್ನು ಹೆಚ್ಚಿನ-ಕಾರ್ಯಕ್ಷಮತೆಯ ವೆಕ್ಟರ್ ಹುಡುಕಾಟ, ಕ್ಯಾಶಿಂಗ್ ಮತ್ತು ಆಟೋಕಂಪ್ಲೀಟ್ಗಾಗಿ ಬಳಸುತ್ತದೆ.
ಸಮಸ್ಯೆ: ಹುಡುಕಾಟ ಕಾರ್ಯಕ್ಷಮತೆ ಮತ್ತು ಸ್ಕೇಲೆಬಿಲಿಟಿ
ಹುಡುಕಾಟ ಕಾರ್ಯಾಚರಣೆಗಳು ಕಂಪ್ಯೂಟೇಷನಲ್ ವೆಚ್ಚದಾಯಕವಾಗಿವೆ:
-
ಫಿಲ್ಟರ್ ಹೊರತೆಗೆಯುವಿಕೆ: ಪ್ರತಿ ಪ್ರಶ್ನೆಯ ವಿರುದ್ಧ 2,500+ ಪದಗುಚ್ಛಗಳನ್ನು ಹೊಂದಿಸಿ
-
ಸಂಬಂಧಿತ ಹುಡುಕಾಟಗಳು: 65K ಪ್ರಶ್ನೆಗಳಾದ್ಯಂತ ಸಾಮ್ಯತೆಯನ್ನು ಲೆಕ್ಕಹಾಕಿ
-
ಆಟೋಕಂಪ್ಲೀಟ್: 65K ಪ್ರಶ್ನೆಗಳ ಮೇಲೆ ಉಪಸರ್ಗ ಹೊಂದಾಣಿಕೆ
-
ಉತ್ಪನ್ನ ಫಿಲ್ಟರಿಂಗ್: ಬಹು ಮಾನದಂಡಗಳಿಂದ 5K+ ಉತ್ಪನ್ನಗಳನ್ನು ಫಿಲ್ಟರ್ ಮಾಡಿ
ಮುಖ್ಯ ವೆಬ್ ಸರ್ವರ್ನಲ್ಲಿ ಈ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ಚಲಾಯಿಸುವುದರಿಂದ:
-
ನಿಧಾನ ಪುಟ ಲೋಡ್ಗಳು: ಹುಡುಕಾಟವು ಇತರ ವಿನಂತಿಗಳನ್ನು ನಿರ್ಬಂಧಿಸುತ್ತದೆ
-
ಮೆಮೊರಿ ಒತ್ತಡ: ಎಂಬೆಡಿಂಗ್ಗಳು ದೊಡ್ಡ ಮೆಮೊರಿ ವ್ಯಾಪ್ತಿಯನ್ನು ಆಕ್ರಮಿಸುತ್ತವೆ
-
CPU ಸ್ಪರ್ಧೆ: ಸಾಮ್ಯತೆ ಲೆಕ್ಕಾಚಾರವು CPU-ತೀವ್ರವಾಗಿದೆ
-
ಸ್ಕೇಲಿಂಗ್ ಕಷ್ಟ: ಹುಡುಕಾಟವನ್ನು ಸ್ವತಂತ್ರವಾಗಿ ಸ್ಕೇಲ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ
ನಮಗೆ ಸ್ವತಂತ್ರವಾಗಿ ಸ್ಕೇಲ್ ಮಾಡಬಲ್ಲ ಮೀಸಲಾದ ಹುಡುಕಾಟ ಸೇವೆ ಬೇಕು.
ಪರಿಹಾರ: ಸ್ವತಂತ್ರ ಹುಡುಕಾಟ ಸೇವೆ
ನಾವು ಮೀಸಲಾದ ಸರ್ವರ್ನಲ್ಲಿ ಪ್ರತ್ಯೇಕ Flask ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಚಲಾಯಿಸುತ್ತೇವೆ:
Main Web Server
↓ HTTP API calls
Search Service
↓ Valkey queries
Valkey Server
ಈ ವಾಸ್ತುಶಿಲ್ಪವು ಒದಗಿಸುತ್ತದೆ:
-
ಸ್ವತಂತ್ರ ಸ್ಕೇಲಿಂಗ್: ಮುಖ್ಯ ವೆಬ್ ಸರ್ವರ್ ಮೇಲೆ ಪರಿಣಾಮ ಬೀರದೆ ಹುಡುಕಾಟ ಸೇವೆಯನ್ನು ಸ್ಕೇಲ್ ಮಾಡಿ
-
ಸಂಪನ್ಮೂಲ ಪ್ರತ್ಯೇಕತೆ: ಹುಡುಕಾಟ ಕಾರ್ಯಾಚರಣೆಗಳು ಮುಖ್ಯ ವೆಬ್ ಸರ್ವರ್ ಮೇಲೆ ಪರಿಣಾಮ ಬೀರುವುದಿಲ್ಲ
-
ಕ್ಯಾಶಿಂಗ್: ವೇಗದ ಪುನರಾವರ್ತಿತ ಪ್ರಶ್ನೆಗಳಿಗಾಗಿ Valkey ಫಲಿತಾಂಶಗಳನ್ನು ಕ್ಯಾಶ್ ಮಾಡುತ್ತದೆ
-
ಹೆಚ್ಚಿನ ಲಭ್ಯತೆ: ಮುಖ್ಯ ವೆಬ್ ಸರ್ವರ್ ಮೇಲೆ ಪರಿಣಾಮ ಬೀರದೆ ಹುಡುಕಾಟ ಸೇವೆಯನ್ನು ಮರುಪ್ರಾರಂಭಿಸಬಹುದು
ಹುಡುಕಾಟ ಸೇವೆ ಘಟಕಗಳು
1. ಫಿಲ್ಟರ್ ಹೊರತೆಗೆಯುವಿಕೆ API
-
ಎಂಡ್ಪಾಯಿಂಟ್:
/api/extract_filters -
ಉದ್ದೇಶ: ನೈಸರ್ಗಿಕ ಭಾಷೆಯ ಪ್ರಶ್ನೆಗಳಿಂದ ರಚನಾತ್ಮಕ ಫಿಲ್ಟರ್ಗಳನ್ನು ಹೊರತೆಗೆಯಿರಿ
-
ಉದಾಹರಣೆ:
GET /api/extract_filters?q=mini+pc+16gb+ram
Response:
{
"Form Factor": "Mini PC",
"Main Memory": "16"
}
ಅನುಷ್ಠಾನ:
-
Valkey ಅಥವಾ JSON ನಿಂದ ಪದಗುಚ್ಛ-ಫಿಲ್ಟರ್ ಮ್ಯಾಪಿಂಗ್ಗಳು ಅನ್ನು ಲೋಡ್ ಮಾಡಿ
-
ಪದ ಗಡಿ regex ಬಳಸಿ ಪದಗುಚ್ಛಗಳನ್ನು ಹೊಂದಿಸಿ
-
ರಚನಾತ್ಮಕ ಫಿಲ್ಟರ್ಗಳನ್ನು ಹಿಂತಿರುಗಿಸಿ
ಕ್ಯಾಶಿಂಗ್: ಪದಗುಚ್ಛ ಮ್ಯಾಪಿಂಗ್ಗಳನ್ನು Valkey ನಲ್ಲಿ ಕ್ಯಾಶ್ ಮಾಡಲಾಗುತ್ತದೆ (30-ದಿನಗಳ TTL)
2. ಸಂಬಂಧಿತ ಹುಡುಕಾಟಗಳು API
-
ಎಂಡ್ಪಾಯಿಂಟ್:
/api/related -
ಉದ್ದೇಶ: ವೆಕ್ಟರ್ ಹುಡುಕಾಟವನ್ನು ಬಳಸಿಕೊಂಡು ಅರ್ಥದಲ್ಲಿ ಸಮಾನವಾದ ಪ್ರಶ್ನೆಗಳನ್ನು ಕಂಡುಹಿಡಿಯಿರಿ
-
ಉದಾಹರಣೆ:
POST /api/related
{
"query": "mini pc",
"limit": 10
}
Response:
{
"related": [
{"query": "small computer", "similarity": 0.92},
{"query": "compact desktop", "similarity": 0.89},
{"query": "mini pc 8gb", "similarity": 0.87}
]
}
ಅನುಷ್ಠಾನ:
-
all-mpnet-base-v2 ಬಳಸಿ ಪ್ರಶ್ನೆಯನ್ನು ಎಂಬೆಡ್ ಮಾಡಿ
-
ಹತ್ತಿರದ ನೆರೆಹೊರೆಯವರಿಗಾಗಿ Valkey RediSearch ಅನ್ನು ಪ್ರಶ್ನಿಸಿ
-
ಸಾಮ್ಯತೆಯಿಂದ ವಿಂಗಡಿಸಲಾದ ಉನ್ನತ N ಫಲಿತಾಂಶಗಳನ್ನು ಹಿಂತಿರುಗಿಸಿ
ಕ್ಯಾಶಿಂಗ್: ಫಲಿತಾಂಶಗಳನ್ನು Valkey ನಲ್ಲಿ ಕ್ಯಾಶ್ ಮಾಡಲಾಗುತ್ತದೆ (7-ದಿನಗಳ TTL)
3. ಆಟೋಕಂಪ್ಲೀಟ್ API
-
ಎಂಡ್ಪಾಯಿಂಟ್:
/api/autocomplete -
ಉದ್ದೇಶ: ಬಳಕೆದಾರ ಟೈಪ್ ಮಾಡುತ್ತಿರುವಾಗ ಪ್ರಶ್ನೆಗಳನ್ನು ಸೂಚಿಸಿ
-
ಉದಾಹರಣೆ:
GET /api/autocomplete?q=mini+p&limit=5
Response:
{
"suggestions": [
"mini pc",
"mini pc 16gb",
"mini pc 8gb ram",
"mini pc fanless",
"mini pc windows 11"
]
}
ಅನುಷ್ಠಾನ:
-
ಉಪಸರ್ಗ ಹೊಂದಾಣಿಕೆಯೊಂದಿಗೆ Valkey RediSearch ಅನ್ನು ಪ್ರಶ್ನಿಸಿ
-
ಜನಪ್ರಿಯತೆಯಿಂದ ಶ್ರೇಣೀಕರಿಸಿ (ಇಂಪ್ರೆಶನ್ + ಕ್ಲಿಕ್ ಸ್ಕೋರ್)
-
ಉನ್ನತ N ಸೂಚನೆಗಳನ್ನು ಹಿಂತಿರುಗಿಸಿ
ಕ್ಯಾಶಿಂಗ್: Valkey ನಲ್ಲಿ ಆಟೋಕಂಪ್ಲೀಟ್ ಸೂಚ್ಯಂಕ (ದೈನಂದಿನ ನವೀಕರಣ)
4. ಜನಪ್ರಿಯ ಪ್ರಶ್ನೆಗಳು API
-
ಎಂಡ್ಪಾಯಿಂಟ್:
/api/popular -
ಉದ್ದೇಶ: ಅತ್ಯಂತ ಜನಪ್ರಿಯ ಪ್ರಶ್ನೆಗಳನ್ನು ಪಡೆಯಿರಿ
-
ಉದಾಹರಣೆ:
GET /api/popular?limit=10
Response:
{
"queries": [
"mini pc",
"thin client",
"industrial pc",
"all in one pc"
]
}
ಅನುಷ್ಠಾನ:
-
Valkey ಅಥವಾ JSON ನಿಂದ ಪ್ರಶ್ನೆಗಳನ್ನು ಲೋಡ್ ಮಾಡಿ
-
ಟ್ರಾಫಿಕ್ ಸ್ಕೋರ್ ಮೂಲಕ ವಿಂಗಡಿಸಿ (ಇಂಪ್ರೆಶನ್ಗಳು + ಕ್ಲಿಕ್ಗಳು)
-
ಉನ್ನತ N ಪ್ರಶ್ನೆಗಳನ್ನು ಹಿಂತಿರುಗಿಸಿ
ಕ್ಯಾಶಿಂಗ್: ಜನಪ್ರಿಯ ಪ್ರಶ್ನೆಗಳನ್ನು Valkey ನಲ್ಲಿ ಕ್ಯಾಶ್ ಮಾಡಲಾಗುತ್ತದೆ (30-ದಿನಗಳ TTL)
Valkey ಏಕೀಕರಣ
Valkey ಒಂದು Redis ಫೋರ್ಕ್ ಆಗಿದ್ದು, ಅದು ಒದಗಿಸುತ್ತದೆ:
-
ವೆಕ್ಟರ್ ಹುಡುಕಾಟ: ಸಾಮ್ಯತೆ ಹುಡುಕಾಟಕ್ಕಾಗಿ RediSearch ಮಾಡ್ಯೂಲ್
-
ಕ್ಯಾಶಿಂಗ್: ವೇಗದ ಇನ್-ಮೆಮೊರಿ ಕೀ-ಮೌಲ್ಯ ಸಂಗ್ರಹ
-
ಆಟೋಕಂಪ್ಲೀಟ್: ವಿಂಗಡಿಸಿದ ಸೆಟ್ಗಳೊಂದಿಗೆ ಉಪಸರ್ಗ ಹೊಂದಾಣಿಕೆ
-
ಶಾಶ್ವತತೆ: ಬಾಳಿಕೆಗಾಗಿ AOF (Append-Only File)
RediSearch ನೊಂದಿಗೆ ವೆಕ್ಟರ್ ಹುಡುಕಾಟ
ನಾವು ವೆಕ್ಟರ್ ಸಾಮ್ಯತೆ ಹುಡುಕಾಟಕ್ಕಾಗಿ Valkey ನ RediSearch ಮಾಡ್ಯೂಲ್ ಅನ್ನು ಬಳಸುತ್ತೇವೆ:
ಸೂಚ್ಯಂಕ ಸೃಷ್ಟಿ:
client.ft("queries_idx").create_index([
VectorField("embedding", "FLAT", {
"TYPE": "FLOAT32",
"DIM": 768,
"DISTANCE_METRIC": "COSINE"
}),
TextField("query"),
NumericField("score")
])
ವೆಕ್ಟರ್ ಹುಡುಕಾಟ:
query_embedding = model.encode(query)
results = client.ft("queries_idx").search(
Query("*=>[KNN 10 @embedding $vec AS score]")
.sort_by("score")
.return_fields("query", "score")
.dialect(2),
query_params={"vec": query_embedding.tobytes()}
)
ಇದು ಕೊಸೈನ್ ಸಾಮ್ಯತೆಯಿಂದ ಹತ್ತಿರದ 10 ನೆರೆಹೊರೆಯವರನ್ನು ಹಿಂತಿರುಗಿಸುತ್ತದೆ.
ಕ್ಯಾಶಿಂಗ್ ತಂತ್ರ
ನಾವು Valkey ನಲ್ಲಿ ಬಹು ಡೇಟಾ ಪ್ರಕಾರಗಳನ್ನು ಕ್ಯಾಶ್ ಮಾಡುತ್ತೇವೆ:
ಪದಗುಚ್ಛ ಮ್ಯಾಪಿಂಗ್ಗಳು (30-ದಿನಗಳ TTL):
client.setex(
"seo:phrase_mappings",
30 * 24 * 3600,
json.dumps(phrase_mappings)
)
ಸಂಬಂಧಿತ ಹುಡುಕಾಟಗಳು (7-ದಿನಗಳ TTL):
cache_key = f"related:{query_hash}"
client.setex(cache_key, 7 * 24 * 3600, json.dumps(results))
ಜನಪ್ರಿಯ ಪ್ರಶ್ನೆಗಳು (30-ದಿನಗಳ TTL):
client.setex(
"seo:popular_queries",
30 * 24 * 3600,
json.dumps(popular_queries)
)
ಆಟೋಕಂಪ್ಲೀಟ್ ಸೂಚ್ಯಂಕ (ದೈನಂದಿನ ನವೀಕರಣ):
for query, score in queries:
client.zadd("autocomplete:mini", {query: score})
ವಿಂಗಡಿಸಿದ ಸೆಟ್ಗಳೊಂದಿಗೆ ಆಟೋಕಂಪ್ಲೀಟ್
ನಾವು ಆಟೋಕಂಪ್ಲೀಟ್ಗಾಗಿ Valkey ವಿಂಗಡಿಸಿದ ಸೆಟ್ಗಳನ್ನು ಬಳಸುತ್ತೇವೆ:
ಸೂಚ್ಯಂಕ ರಚನೆ:
autocomplete:m → ["mini pc": 5000, "mini computer": 3000]
autocomplete:mi → ["mini pc": 5000, "mini computer": 3000]
autocomplete:min → ["mini pc": 5000, "mini computer": 3000]
autocomplete:mini → ["mini pc": 5000, "mini computer": 3000]
ಉಪಸರ್ಗ ನೋಟ:
prefix = "mini"
results = client.zrevrange(f"autocomplete:{prefix}", 0, 9, withscores=True)
ಇದು "mini" ಯಿಂದ ಪ್ರಾರಂಭವಾಗುವ ಉನ್ನತ 10 ಪ್ರಶ್ನೆಗಳನ್ನು ಸ್ಕೋರ್ ಮೂಲಕ ವಿಂಗಡಿಸಿ ಹಿಂತಿರುಗಿಸುತ್ತದೆ.
API ಸಂವಹನ
ಮುಖ್ಯ ವೆಬ್ ಸರ್ವರ್ HTTP ಮೂಲಕ ಹುಡುಕಾಟ ಸೇವೆಯನ್ನು ಕರೆಯುತ್ತದೆ:
ಫಿಲ್ಟರ್ ಹೊರತೆಗೆಯುವಿಕೆ
from app.shared.filter_service import extract_filters_from_query
filters = extract_filters_from_query("mini pc 16gb ram")
# Internally calls: GET SEARCH_SERVICE_URL/api/extract_filters?q=...
ಸಂಬಂಧಿತ ಹುಡುಕಾಟಗಳು
import requests
response = requests.post(
"SEARCH_SERVICE_URL/api/related",
json={"query": "mini pc", "limit": 10},
timeout=2
)
related = response.json()["related"]
ಆಟೋಕಂಪ್ಲೀಟ್
response = requests.get(
"SEARCH_SERVICE_URL/api/autocomplete",
params={"q": "mini p", "limit": 5},
timeout=1
)
suggestions = response.json()["suggestions"]
ದೋಷ ನಿರ್ವಹಣೆ ಮತ್ತು ಫಾಲ್ಬ್ಯಾಕ್ಗಳು
ಮುಖ್ಯ ವೆಬ್ ಸರ್ವರ್ ಹುಡುಕಾಟ ಸೇವೆಯ ವೈಫಲ್ಯಗಳನ್ನು ಸುಲಭವಾಗಿ ನಿಭಾಯಿಸುತ್ತದೆ:
try:
filters = extract_filters_from_query(query)
except Exception as e:
logger.error(f"Search service failed: {e}")
filters = {} # Fallback to empty filters
ಇದು ಹುಡುಕಾಟ ಸೇವೆ ಡೌನ್ ಆಗಿದ್ದರೂ ಮುಖ್ಯ ವೆಬ್ ಸರ್ವರ್ ಕಾರ್ಯನಿರ್ವಹಿಸುವುದನ್ನು ಮುಂದುವರಿಸುತ್ತದೆ ಎಂದು ಖಚಿತಪಡಿಸುತ್ತದೆ.
ನೆಟ್ವರ್ಕ್ ಕಾನ್ಫಿಗರೇಶನ್
ಎಲ್ಲಾ ಸರ್ವರ್ಗಳು ಖಾಸಗಿ ನೆಟ್ವರ್ಕ್ನಲ್ಲಿವೆ:
-
ಮುಖ್ಯ ವೆಬ್ ಸರ್ವರ್: ಹುಡುಕಾಟ ಸೇವೆ ಮತ್ತು Valkey ಅನ್ನು ಪ್ರವೇಶಿಸಬಹುದು
-
ಹುಡುಕಾಟ ಸೇವೆ: Valkey ಅನ್ನು ಪ್ರವೇಶಿಸಬಹುದು
-
Valkey: ಮುಖ್ಯ ವೆಬ್ ಸರ್ವರ್ ಮತ್ತು ಹುಡುಕಾಟ ಸೇವೆಯಿಂದ ಮಾತ್ರ ಪ್ರವೇಶಿಸಬಹುದು
ಹುಡುಕಾಟ ಸೇವೆ ಅಥವಾ Valkey ಗೆ ಯಾವುದೇ ಬಾಹ್ಯ ಪ್ರವೇಶವಿಲ್ಲ.
SEO ಪೈಪ್ಲೈನ್ನೊಂದಿಗೆ ಏಕೀಕರಣ
ಹುಡುಕಾಟ ಸೇವೆಯು SEO ಪೈಪ್ಲೈನ್ನೊಂದಿಗೆ ಸಂಯೋಜಿಸುತ್ತದೆ:
ಹಂತ 11: Valkey ಗೆ ವಲಸೆ
SEO ಪೈಪ್ಲೈನ್ Valkey ಗೆ ಡೇಟಾವನ್ನು ಲೋಡ್ ಮಾಡುತ್ತದೆ:
# Load query embeddings
for query, embedding in zip(queries, embeddings):
client.hset(f"query:{query_hash}", mapping={
"query": query,
"embedding": embedding.tobytes(),
"score": score
})
# Create RediSearch index
client.ft("queries_idx").create_index([...])
ವಿವರಗಳಿಗಾಗಿ Valkey ವಲಸೆ ನೋಡಿ.
ಪ್ರಶ್ನೆ ಲಾಗಿಂಗ್
ಹುಡುಕಾಟ ಸೇವೆಯು SEO ಪೈಪ್ಲೈನ್ಗಾಗಿ ಪ್ರಶ್ನೆಗಳನ್ನು ಲಾಗ್ ಮಾಡುತ್ತದೆ:
log_entry = {
"timestamp": datetime.now(timezone.utc).isoformat(),
"query": query,
"filters_extracted": filters,
"results_count": len(results)
}
with open(SEO_LIVE_QUERIES_LOG, "a") as f:
f.write(json.dumps(log_entry) + "\n")
ಈ ಲಾಗ್ಗಳು ಹಂತ 1d ಗೆ ಮರಳಿ ಫೀಡ್ ಆಗುತ್ತವೆ: ಲೈವ್ ಪ್ರಶ್ನೆಗಳನ್ನು ಪಡೆಯಿರಿ.
ಉಲ್ಲೇಖಗಳು
ತಾಂತ್ರಿಕ ಪರಿಕಲ್ಪನೆಗಳು
-
Valkey - ಅಧಿಕೃತ ವೆಬ್ಸೈಟ್
-
Redis - ಅಧಿಕೃತ ವೆಬ್ಸೈಟ್ (Valkey ಫೋರ್ಕ್)
-
RediSearch - ವೆಕ್ಟರ್ ಹುಡುಕಾಟ ಮಾಡ್ಯೂಲ್
-
ಕೊಸೈನ್ ಸಾಮ್ಯತೆ - ವಿಕಿಪೀಡಿಯಾ
ಸಂಬಂಧಿತ ಲೇಖನಗಳು
-
ಫಿಲ್ಟರ್ ಹೊರತೆಗೆಯುವಿಕೆ - ಫಿಲ್ಟರ್ಗಳನ್ನು ಹೇಗೆ ಹೊರತೆಗೆಯಲಾಗುತ್ತದೆ
-
ಸಂಬಂಧಿತ ಹುಡುಕಾಟ ಸೃಷ್ಟಿ - ಸಂಬಂಧಿತ ಹುಡುಕಾಟಗಳನ್ನು ಹೇಗೆ ರಚಿಸಲಾಗುತ್ತದೆ
-
ಎಂಬೆಡಿಂಗ್ ತಂತ್ರ - ಎಂಬೆಡಿಂಗ್ಗಳನ್ನು ಹೇಗೆ ರಚಿಸಲಾಗುತ್ತದೆ
-
SEO ಪೈಪ್ಲೈನ್ ಅವಲೋಕನ - ಸಂಪೂರ್ಣ ಪೈಪ್ಲೈನ್ ವಾಸ್ತುಶಿಲ್ಪ
-
Valkey ವಲಸೆ - Valkey ಗೆ ಡೇಟಾವನ್ನು ಲೋಡ್ ಮಾಡುವುದು
ಸಾರಾಂಶ
ನಮ್ಮ ಹುಡುಕಾಟ ಸೇವೆಯು ಪ್ರತ್ಯೇಕ ಸರ್ವರ್ನಲ್ಲಿ ಸ್ವತಂತ್ರ Flask ಅಪ್ಲಿಕೇಶನ್ ಆಗಿ ಚಲಿಸುತ್ತದೆ:
ವಾಸ್ತುಶಿಲ್ಪ:
-
ಮೀಸಲಾದ ಸರ್ವರ್ನಲ್ಲಿ ಸ್ವತಂತ್ರ Flask ಅಪ್ಲಿಕೇಶನ್
-
ಕ್ಯಾಶಿಂಗ್ ಮತ್ತು ವೆಕ್ಟರ್ ಹುಡುಕಾಟಕ್ಕಾಗಿ Valkey (Redis ಫೋರ್ಕ್)
-
ಮುಖ್ಯ ವೆಬ್ ಸರ್ವರ್ನೊಂದಿಗೆ ಸಂವಹನಕ್ಕಾಗಿ HTTP API
API ಗಳು:
-
/api/extract_filters- ಪ್ರಶ್ನೆಗಳಿಂದ ಫಿಲ್ಟರ್ಗಳನ್ನು ಹೊರತೆಗೆಯಿರಿ -
/api/related- ಸಮಾನ ಪ್ರಶ್ನೆಗಳನ್ನು ಕಂಡುಹಿಡಿಯಿರಿ (ವೆಕ್ಟರ್ ಹುಡುಕಾಟ) -
/api/autocomplete- ಪ್ರಶ್ನೆಗಳನ್ನು ಸೂಚಿಸಿ (ಉಪಸರ್ಗ ಹೊಂದಾಣಿಕೆ) -
/api/popular- ಜನಪ್ರಿಯ ಪ್ರಶ್ನೆಗಳನ್ನು ಪಡೆಯಿರಿ
Valkey ವೈಶಿಷ್ಟ್ಯಗಳು:
-
ವೆಕ್ಟರ್ ಹುಡುಕಾಟ (RediSearch ಮಾಡ್ಯೂಲ್)
-
ಕ್ಯಾಶಿಂಗ್ (ಪದಗುಚ್ಛ ಮ್ಯಾಪಿಂಗ್ಗಳಿಗೆ 30-ದಿನಗಳ TTL)
-
ಆಟೋಕಂಪ್ಲೀಟ್ (ವಿಂಗಡಿಸಿದ ಸೆಟ್ಗಳು)
-
ಶಾಶ್ವತತೆ (AOF)
ಪ್ರಯೋಜನಗಳು:
-
ಸ್ವತಂತ್ರ ಸ್ಕೇಲಿಂಗ್
-
ಸಂಪನ್ಮೂಲ ಪ್ರತ್ಯೇಕತೆ
-
ಹೆಚ್ಚಿನ ಕಾರ್ಯಕ್ಷಮತೆ (Valkey ಕ್ಯಾಶಿಂಗ್)
-
ದೋಷ ಸಹಿಷ್ಣುತೆ (ಸುಗಮ ಅವನತಿ)
ಈ ವಾಸ್ತುಶಿಲ್ಪವು ಮುಖ್ಯ ವೆಬ್ ಸರ್ವರ್ ಅನ್ನು ಸ್ಪಂದಿಸುವಂತೆ ಇರಿಸುತ್ತಾ ವೇಗವಾದ, ಸ್ಕೇಲೆಬಲ್ ಹುಡುಕಾಟವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ.