מומלץ להעביר את עומסי העבודה שלכם ב-Memorystore for Memcached אל Memorystore for Valkey. Memorystore for Memcached הוא מאגר נתונים של זוגות מפתח/ערך, אבל Memorystore for Valkey הוא שרת של מבני נתונים עם יותר תכונות.
Memorystore for Valkey מספק פונקציונליות דומה ל-Memorystore for Memcached. בנוסף, ל-Memorystore for Valkey יש את היתרונות הבאים:
- הוא מציע מאגר נתונים בזיכרון, מנוהל במלואו ובעל ביצועים גבוהים, ל-Valkey, פרויקט קוד פתוח שתואם ל-Redis.
- זהו שירות Valkey מנוהל במלואו ל- Google Cloud, שתומך במכונות עם Cluster Mode Enabled (מצב אשכול מופעל) וגם במכונות עם Cluster Mode Disabled (מצב אשכול מושבת).
- האפליקציות שפועלות ב- Google Cloud יכולות להגיע לביצועי שיא באמצעות שירות Valkey המאובטח, הזמין והניתן להתאמה לעומס, בלי הצורך לנהל פריסות מורכבות של Valkey.
תכונות של Memorystore for Valkey
מעבר ל-Memorystore for Valkey מאפשר לכם לגשת לתכונות שלא זמינות ב-Memorystore for Memcached. התכונות האלה מספקות פיתוח אפליקציות, מהימנות וביצועים טובים יותר.
בטבלה הבאה מפורטות התכונות שזמינות ב-Memorystore for Valkey, ומוסבר בה למה כדאי להשתמש בתכונות האלה.
| תכונה | תיאור | יתרונות |
|---|---|---|
| מסדי נתונים מרובים | Memorystore for Memcached הוא מרחב מפתחות שטוח ופשוט. עם זאת, כברירת מחדל, מצב Cluster Mode Disabled של Memorystore for Valkey תומך בעד 16 מסדי נתונים למופע. אתם יכולים להגדיר את הסביבה כך שיהיו עד 100 מסדי נתונים למופע. | שימוש בכמה מסדי נתונים במופע מונע נקודת כשל יחידה במופע, מאפשר לגבות או לשחזר מסד נתונים יחיד בלי להשפיע על הזמינות או העקביות של מסדי נתונים אחרים, ומאפשר להרחיב או להעביר את מסדי הנתונים בצורה יעילה יותר. |
| מבני נתונים עשירים | בנוסף למחרוזות, Memorystore for Valkey תומך ברשימות, בקבוצות, בקבוצות ממוינות, בגיבובים ובמפות ביטמפ. Memorystore for Valkey תומך גם במסנני Bloom, בחיפוש וקטורי וב-JSON. | אתם יכולים להשתמש ב-Memorystore for Valkey לתרחישי שימוש מורכבים כמו טבלאות הישגים, תורים של משימות ומטמון של אובייקטים, בלי לבצע סריאליזציה של האפליקציה. אפשר גם להשתמש בחיפוש וקטורי כדי להריץ שאילתות סמנטיות עם זמן אחזור של פחות מאלפית השנייה. |
| טרנזקציות | אפשר להשתמש בפקודות MULTI ו-EXEC כדי להריץ קבוצה של פקודות כיחידה אחת שלא ניתן לחלק. |
אמנם אפשר להשתמש ביכולות ההשוואה וההחלפה (CAS) של Memorystore for Memcached כדי לנעול אופטימיסטית ברמת המפתח, אבל Memorystore for Valkey מאפשר להריץ קבוצה של פקודות באופן אטומי. |
| העברת הודעות ב-Pub/Sub | באמצעות Pub/Sub עם Memorystore for Valkey, אפליקציות הלקוח יכולות להירשם לערוצים ולקבל הודעות בזמן אמת. | Memorystore for Valkey מאפשר לכם להפוך את הזיכרון שלכם למתווך הודעות קל משקל לעדכונים בזמן אמת ולתקשורת בין שירותים. |
| סקריפטים של Lua | אפשר להשתמש ב-Lua כדי להריץ לוגיקה מורכבת של אפליקציה באופן אטומי בשרת באמצעות הפקודה EVAL.
|
שימוש בסקריפטים בצד השרת מצמצם את מספר ההלוך ושוב ברשת, ומבטיח ש-Memorystore for Valkey יוכל לבצע פעולות מורכבות ללא הפרעות. כך משפרים את ביצועי האפליקציה. |
| זמינות גבוהה, שכפול ותמיכה בשברי נתונים | הארכיטקטורה של Memorystore for Valkey תומכת בזמינות גבוהה (HA) ומספקת אותה. אפליקציות הלקוח יכולות לגשת ישירות לצמתים של Memorystore for Valkey על ידי התחברות לנקודות קצה (או לשברים) ספציפיות. | זמינות גבוהה ושכפול משפרים את המהימנות של המערכת ומצמצמים את ההפרעות במהלך עדכונים קריטיים. השימוש בשברים עוזר לכם לחלק בצורה יעילה את העומס הגבוה של התנועה שקשור לאפליקציות הלקוח שלכם. |
| התמדה | Memorystore for Valkey תומך בסוגים הבאים של עמידות:
|
בעזרת שמירה מתמשכת של נתונים בפורמט AOF ו-RDB, אתם יכולים לשמור את הנתונים הקריטיים שלכם ב-Memorystore for Valkey באופן עמיד. אפשר לשחזר את הנתונים בכל שלב. Memorystore for Valkey מטפל במנגנון הבסיסי של שמירת הנתונים, כך שאין צורך בהכנה מוקדמת כדי להשתמש בשמירת הנתונים. |
העברת עומסי העבודה
כדי להעביר את עומסי העבודה שלכם ב-Memorystore for Memcached אל Memorystore for Valkey, אתם צריכים לבצע את הפעולות הבאות:
- שינוי ספריות הלקוח: צריך לשנות את ספריות הלקוח של האפליקציות מספריות Memcached לספריות Valkey.
- משנים את הפקודות: מחליפים את כל הפקודות של Memcached API באפליקציות הלקוח בפקודות התואמות של Valkey API.
- פריסה ואימות של ההעברה: מגדירים את ההעברה ומוודאים שאפשר להשתמש בה כדי להעביר את עומסי העבודה אל Memorystore for Valkey.
שינוי ספריות לקוח
בקטע הזה מוסבר איך לשנות את ספריות הלקוח של האפליקציות שלכם מספריית Memcached לספריית Valkey.
בטבלה הבאה מפורטות דוגמאות לספריות לקוח של Memcached ל-Python, ל-Java, ל-Go ול-Node.js, ולספריות התואמות ל-Valkey.
| שפה | ספריית לקוח Memcached | ספריית לקוח Valkey |
|---|---|---|
| Python | python-memcached, pymemcache | valkey-py |
| Java | spymemcached | Valkey GLIDE, valkey-java |
| המשך | gomemcache | Valkey GLIDE, valkey-go |
| Node.js | memjs | Valkey GLIDE, ioredis |
שינוי הפקודות
בקטע הזה, מחליפים את כל הפקודות של Memcached API באפליקציות הלקוח בפקודות התואמות של Valkey API.
כדי לשנות את הפקודות, צריך לבצע את הפעולות הבאות:
- שינוי הגדרת החיבור: שינוי החיבור של אפליקציות הלקוח משרת Memcached לשרת Valkey.
- משנים את הפקודות: מחליפים את כל הפקודות של Memcached API בפקודות התואמות של Valkey API.
שינוי הגדרת החיבור
בקטע הזה, משנים את החיבור של אפליקציות הלקוח משרת Memcached לשרת Valkey.
מחפשים את הקוד שמשמש לחיבור אפליקציות הלקוח לשרת Memcached. הקוד עשוי להיות דומה לקוד הבא:
import memcache; mc = memcache.Client(['MEMCACHED_IP_ADDRESS:11211'])
מחליפים את MEMCACHED_IP_ADDRESS בכתובת ה-IP של מופע Memorystore for Memcached.
משנים את הקוד הזה כדי שאפליקציות הלקוח יוכלו להתחבר לשרת Valkey. הקוד יכול להיראות כך:
import valkey; v = valkey.Valkey(host=VALKEY_IP_ADDRESS, port=6379, db=0)
מחליפים את VALKEY_IP_ADDRESS בכתובת ה-IP של מופע Memorystore for Valkey שיוצרים כשמבצעים פריסה ומאמתים את ההעברה.
שינוי הפקודות
בקטע הזה, מחליפים את כל הפקודות של Memcached API באפליקציות הלקוח בפקודות התואמות של Valkey API.
DECR
הפקודה DECR מאפשרת להקטין את הערך שמאוחסן במפתח בסכום מסוים.
מחפשים את הקוד שבו משתמשים ב-Memcached עבור הפקודה
DECR. הקוד יכול להיות דומה לקוד הבא:mc.DECR('KEY_NAME', AMOUNT)מחליפים את הפרטים הבאים:
- KEY_NAME: השם של המפתח.
- AMOUNT: הערך שרוצים להקטין את המספר שמאוחסן במפתח. הערך הזה חייב להיות מספר שלם.
משנים את הקוד כך שאפשר יהיה להשתמש בו עם Valkey. השינויים שלכם יכולים להיות דומים לקוד הבא:
v.DECR('KEY_NAME', AMOUNT)
מחיקה
הפקודה DELETE מאפשרת להסיר מפתח. לדוגמה, אפשר למחוק משתמש.
מחפשים את הקוד שבו משתמשים ב-Memcached עבור הפקודה
DELETE. הקוד יכול להיות דומה לקוד הבא:mc.DELETE('USERNAME')מחליפים את USERNAME בשם המשתמש שרוצים למחוק.
משנים את הקוד כך שאפשר יהיה להשתמש בו עם Valkey. השינויים שלכם יכולים להיות דומים לקוד הבא:
v.DELETE('USERNAME')
GET
הפקודה GET מאפשרת לאחזר ערך שמשויך למפתח. לדוגמה, אתם יכולים לקבל מידע על משתמש.
מחפשים את הקוד שבו משתמשים ב-Memcached עבור הפקודה
GET. הקוד יכול להיות דומה לקוד הבא:data = mc.GET('USERNAME')מחליפים את USERNAME בשם המשתמש שרוצים לקבל עליו מידע.
משנים את הקוד כך שאפשר יהיה להשתמש בו עם Valkey. השינויים שלכם יכולים להיות דומים לקוד הבא:
data = v.GET('USERNAME')
INCR
הפקודה INCR מאפשרת להגדיל את הערך שמאוחסן במפתח בסכום מסוים.
מחפשים את הקוד שבו משתמשים ב-Memcached עבור הפקודה
INCR. הקוד יכול להיות דומה לקוד הבא:mc.INCR('KEY_NAME', AMOUNT)מחליפים את הפרטים הבאים:
- KEY_NAME: השם של המפתח.
- AMOUNT: הערך שרוצים להוסיף למספר שמאוחסן במפתח. הערך הזה חייב להיות מספר שלם.
משנים את הקוד כך שאפשר יהיה להשתמש בו עם Valkey. השינויים שלכם יכולים להיות דומים לקוד הבא:
v.INCR('KEY_NAME', AMOUNT)
MGET
הפקודה MGET מאפשרת לאחזר ערכים של כמה מפתחות בפקודה אחת. השימוש ב-MGET משפר את הביצועים של הסביבה.
מחפשים את הקוד שבו משתמשים ב-Memcached עבור הפקודה
MGET. הקוד יכול להיות דומה לקוד הבא:data_map = mc.get_multi(['KEY_NAME_1', 'KEY_NAME_2'])
מחליפים את KEY_NAME_1 ואת KEY_NAME_2 בשמות של המפתחות שרוצים לאחזר לגביהם מידע.
משנים את הקוד כך שאפשר יהיה להשתמש בו עם Valkey. השינויים שלכם יכולים להיות דומים לקוד הבא:
data_list = v.MGET(['KEY_NAME_1', 'KEY_NAME_2'])
SET
הפקודה SET מאפשרת לציין ערך למפתח. לדוגמה, אפשר להגדיר זמן תפוגה למשתמש שניגש למערכת (בשניות).
מחפשים את הקוד שבו משתמשים ב-Memcached עבור הפקודה
SET. הקוד יכול להיות דומה לקוד הבא:mc.SET('USERNAME', 'data', time=EXPIRATION_TIME)מחליפים את הפרטים הבאים:
- USERNAME: השם של המשתמש שניגש למערכת
- EXPIRATION_TIME: מספר השניות שנותרו למשתמש עד שלא תהיה לו יותר גישה למערכת
משנים את הקוד כך שאפשר יהיה להשתמש בו עם Valkey. השינויים שלכם יכולים להיות דומים לקוד הבא:
v.SET('USERNAME', 'data', ex=EXPIRATION_TIME)
פריסה ואימות של ההעברה
בקטע הזה מגדירים את ההעברה ומוודאים שאפשר להשתמש בה כדי להעביר את עומסי העבודה אל Memorystore for Valkey.
כדי לפרוס ולאמת את ההעברה, מבצעים את השלבים הבאים:
- יצירת מכונת Memorystore for Valkey: חשוב לוודא שהמכונה שיוצרים דומה בגודלה למכונת Memorystore for Memcached. בנוסף, כדאי להשתמש ב-Cloud Monitoring כדי לעקוב אחר השימוש במכונת Memorystore for Valkey.
- כתיבה לשני המקרים: כדי לבצע העברה ללא השבתה, צריך לשנות את האפליקציות כך שיכתבו לשני המקרים. כך מאכלסים את מטמון Valkey ויכולים להשוות בין מדדי ניטור מרכזיים.
- הפסקת תעבורת הנתונים למופע Memorystore for Memcached: משנים את ההגדרה של האפליקציות כך שפעולות קריאה יצביעו על כתובת ה-IP ומספר היציאה (6379) של מופע Memorystore for Valkey.
- מעקב אחרי האפליקציות: מעקב אחרי שיעורי השגיאות וההשהיות של האפליקציות.
- מחיקת מכונת Memorystore for Memcached: מפסיקים לכתוב למכונת Memorystore for Memcached ואז מוחקים את המכונה.
שאלות נפוצות
בקטע הזה מפורטות תשובות לשאלות נפוצות בנושא העברת עומסי עבודה של Memorystore for Memcached אל Memorystore for Valkey.
למה כדאי לעבור ל-Memorystore for Valkey?
Valkey הוא פרויקט קוד פתוח עם ביצועים גבוהים, שהוא פיצול של בסיס הקוד של Redis. Memorystore for Valkey הוא שירות מנוהל שתואם לפרוטוקול Redis. כך אפשר לוודא שכל ספריות הלקוח והפקודות הקיימות של Redis פועלות בצורה חלקה. המעבר ל-Memorystore for Valkey שווה ערך מבחינת הפונקציונליות למעבר לשרת רגיל שתואם ל-Redis.
האם צריך להגדיר מחדש את הכללים לחומת האש ברשת?
בדרך כלל, מכונות Memorystore for Memcached משתמשות ביציאה 11211, ומכונות Memorystore for Valkey משתמשות ביציאה 6379. צריך לוודא שכללי חומת האש בענן הווירטואלי הפרטי (VPC) מאפשרים תעבורת נתונים יוצאת מהאפליקציות למופעי Memorystore for Valkey ביציאה הנכונה.
איך Valkey מטפל בסריאליזציה של אובייקטים מורכבים?
מכיוון ש-Memcached לא יודע את המבנה של אובייקטים מורכבים, כמו אובייקטים של Python או אובייקטים של Java, הוא מתייחס לכל האובייקטים כאל blobs אטומים.
כתוצאה מכך, לפני שנתונים מגיעים לרשת, סריאליזציה מתבצעת באופן מלא בצד של אפליקציות הלקוח. השרת רואה רק מערכי בייטים. לדוגמה, כדי לקרוא מאפיין יחיד כמו כתובת אימייל של משתמש, צריך לאחזר את האובייקט המאורגן כולו, לבטל את הארגון שלו באפליקציות ואז לקרוא את השדה שמשויך למאפיין.
Valkey יכול לאחסן בלובים ולהבין את המבנה של האובייקטים המורכבים. אפשר גם להשתמש ב-Valkey כדי להרחיב את השדות של אובייקט לטבלת hash של Valkey. אפשר להשתמש בטבלה הזו כדי לאחזר ערכים מוטמעים ישירות.
בדוגמה הבאה נעשה שימוש בטבלת hash של Valkey כדי לאחזר את כתובת האימייל של משתמש:
# valkey-py
client.hset("user:101", mapping={
"name": "username",
"email": "username@example.com",
"login_count": 10
})
client.hget("user:101", "email") # -> b"username@example.com"
מה ההבדלים בין פרוטוקולי התקשורת של Memcached ו-Valkey?
Memcached משתמש בפרוטוקול ASCII ובפרוטוקול בינארי אופציונלי. Valkey משתמש בפרוטוקול הסריאליזציה של Redis (RESP).
למרות שמדובר בפרוטוקולים שונים, ספריות לקוח מודרניות של אפליקציות Valkey מטפלות בפרוטוקול RESP באופן אוטומטי. כך ההבדל בין הפרוטוקולים שקוף לקוד האפליקציה.
אחרי שמעבירים ל-Memorystore for Valkey, איך ממפים את השדה flags?
Memorystore for Memcached תומך בשדה flags. השדה הזה מכיל מספר שלם לא מסומן בן 32 ביט, שספריות של אפליקציות לקוח משתמשות בו כדי לאחסן מטא-נתונים על ערכים מאוחסנים.
Memorystore for Valkey לא תומך בשדה הזה. כדי למפות את השדה flags ל-Memorystore for Valkey, צריך לבצע את השלבים הבאים:
- מבצעים סריאליזציה של הדגלים לשם המפתח של אובייקט מחרוזת.
- מבצעים סריאליזציה של הדגלים לערך של אובייקט מחרוזת.
- משתמשים באובייקט hash עם שדה ייעודי לדגלים.
האם Memorystore for Valkey מציע ביצועים טובים יותר?
ברוב התרחישים, הביצועים טובים יותר ב-Memorystore for Valkey. הסיבה לכך היא מבני הנתונים המתקדמים של Valkey, החיבורים המתמשכים, התמיכה בצינורות (pipelining) והיעילות המשופרת של פעולות עם כמה מפתחות. עם זאת, אתם צריכים לשנות את ספריות הלקוח ואת הפקודות בצורה נכונה.
אם במופעים של Memorystore for Memcached נעשה שימוש בכמה צמתים, מה עושים ב-Memorystore for Valkey?
כשפורסים את ההעברה ומאמתים אותה, יוצרים מופעים של Cluster Mode Enabled ב-Memorystore for Valkey. המופעים האלה מטפלים ב-sharding ובזמינות גבוהה באופן פנימי, ומופיעים כנקודות קצה יחידות באפליקציות שלכם. כך אפשר לפשט את הלוגיקה בצד הלקוח של האפליקציות.
אם מופעי Memorystore for Memcached שלכם משתמשים בכמה צמתים, איזה סוג צומת מומלץ למופעי Memorystore for Valkey?
כדי לקבוע את גודל הצומת של כל אחד ממופעי Memorystore for Memcached, בודקים את הערך שמשויך למאפיין Memory per node. לאחר מכן, כדי לקבוע את סוג הצומת של מופעי Memorystore for Valkey התואמים, משתמשים בטבלה הבאה:
| גודל הצומת של Memorystore for Memcached | סוג הצומת של Memorystore for Valkey | הקיבולת הכוללת של הצומת | מספר ה-vCPU |
|---|---|---|---|
| פחות מ-1GB | shared-core-nano | 1.4GB | 0.5 (משותף) |
| 1GB – 5GB | standard-small | 6.5GB | 2 |
| 6GB עד 12GB | highmem-medium | 13.0GB | 2 |
| 13GB עד 50GB | highmem-xlarge | 58.0GB | 8 |
סוג הצומת shared-core-nano מיועד לעומסי עבודה קטנים. סוג הצומת הזה מספק ביצועים משתנים ואין לו הסכם רמת שירות (SLA), ולכן הוא לא מתאים לעומסי עבודה של ייצור.
ככל שתבחרו יותר מעבדים וירטואליים (vCPU) למופע של Memorystore for Valkey, כך הביצועים יהיו טובים יותר. אם המופע מריץ עומסי עבודה שדורשים הרבה משאבים, כדאי לבחור סוג צומת עם יותר ליבות וירטואליות (לדוגמה, highmem-xlarge). אם המופע מבצע משימות פחות תובעניות, כדאי לבחור סוג צומת עם פחות ליבות וירטואליות (לדוגמה, highmem-medium).