PYHINTS Telegram 676
#تجربه

از طرف یک شرکت اومدن، کار استارتاپی داشتند حالا مشتری بین‌المللی پیدا شده براشون می‌خوان uptime, high availability, ... رو بالا ببرند.
چرا ؟
چون توی قرارداد، باید بگن که چه مقدار uptime دارند (معروف‌ترین میزان 99.99% هست که یعنی سالانه ۱ ساعت می‌تونند سرور رو down داشته باشند)
این شامل همه‌ی موارد میشه، آپگرید، جابجایی سرور و ...

این بین که داشتم با نیروها صحبت می‌کردم و مشاوره و همفکری داشتیم، متوجه شدم migration ها یکی از معضلات خواهد بود.

فرض کنید، شما سیستم رو به بهترین شکل چیدید. Load balancer, k8s , ... و برای دپلوی هم rolling update رو گذاشتید.
حالا فرض کنید، قراره برای یک فیچر جدید، یک ستون به جدول user اضافه کنید که به محض لاگین یا اولین استفاده کاربر باید پر بشه ؟

توی rolling update، شما وضعیتی خواهید داشت که هم نسخه قدیمی و هم نسخه جدید همزمان بالا هستند و دارن به کاربر پاسخ می‌دهند :
اگر نسخه قدیمی اجرا باشه models, database با هم نمی‌خونه تازه اگر این ستون not null هم باشه که باید پر بشه ولی منطق این کد توی ورژن قبلی کدها نیست و خطا .‌‌...

اگر نسخه جدید هم اجرا بشه که نیاز به تغییرات دیتابیس داره.

یک راهکار اینه که کلاً نسخه قدیمی رو خاموش کنید (همزمان همش رو) و نسخه جدید رو جایگزین کنید که خب ازون ۱ ساعت downtime با ارزش میزان زیادی رو از دست می‌دید.

یک راهکار multistep migration هست، که مثلاً توی مثال بالا یک ستون nullable تعریف کنید، ولی توی منطق کد مطمئن بشید که هیچوقت null نمونه بعد که ورژن قدیمی کامل از بین رفت، یک migration دیگه بنویسید که دیگه ستون nullable نباشه و مجدد دپلوی کنید.

دیدم بچه‌های این شرکت با این موضوع آشنایی نداشتند گفتم بگم، صرف اینکه HA, K8s, Replica, ... تعریف می‌کنید مشکل downtime شما حل نمی‌شه، فقط بهتر می‌شه.

اضافه کنم، مشکل شما وقتی حادتر می‌شه که ci/cd هم دارید و پروژه توی قدم‌های اولش هست، کلی فیچر و تغییرات هم قراره اضافه بشه


پ.ن:
این موضوع توی مصاحبه‌ها جزو سوالات مهم هست.
👍68108🤷‍♀1👏1



tgoop.com/pyHints/676
Create:
Last Update:

#تجربه

از طرف یک شرکت اومدن، کار استارتاپی داشتند حالا مشتری بین‌المللی پیدا شده براشون می‌خوان uptime, high availability, ... رو بالا ببرند.
چرا ؟
چون توی قرارداد، باید بگن که چه مقدار uptime دارند (معروف‌ترین میزان 99.99% هست که یعنی سالانه ۱ ساعت می‌تونند سرور رو down داشته باشند)
این شامل همه‌ی موارد میشه، آپگرید، جابجایی سرور و ...

این بین که داشتم با نیروها صحبت می‌کردم و مشاوره و همفکری داشتیم، متوجه شدم migration ها یکی از معضلات خواهد بود.

فرض کنید، شما سیستم رو به بهترین شکل چیدید. Load balancer, k8s , ... و برای دپلوی هم rolling update رو گذاشتید.
حالا فرض کنید، قراره برای یک فیچر جدید، یک ستون به جدول user اضافه کنید که به محض لاگین یا اولین استفاده کاربر باید پر بشه ؟

توی rolling update، شما وضعیتی خواهید داشت که هم نسخه قدیمی و هم نسخه جدید همزمان بالا هستند و دارن به کاربر پاسخ می‌دهند :
اگر نسخه قدیمی اجرا باشه models, database با هم نمی‌خونه تازه اگر این ستون not null هم باشه که باید پر بشه ولی منطق این کد توی ورژن قبلی کدها نیست و خطا .‌‌...

اگر نسخه جدید هم اجرا بشه که نیاز به تغییرات دیتابیس داره.

یک راهکار اینه که کلاً نسخه قدیمی رو خاموش کنید (همزمان همش رو) و نسخه جدید رو جایگزین کنید که خب ازون ۱ ساعت downtime با ارزش میزان زیادی رو از دست می‌دید.

یک راهکار multistep migration هست، که مثلاً توی مثال بالا یک ستون nullable تعریف کنید، ولی توی منطق کد مطمئن بشید که هیچوقت null نمونه بعد که ورژن قدیمی کامل از بین رفت، یک migration دیگه بنویسید که دیگه ستون nullable نباشه و مجدد دپلوی کنید.

دیدم بچه‌های این شرکت با این موضوع آشنایی نداشتند گفتم بگم، صرف اینکه HA, K8s, Replica, ... تعریف می‌کنید مشکل downtime شما حل نمی‌شه، فقط بهتر می‌شه.

اضافه کنم، مشکل شما وقتی حادتر می‌شه که ci/cd هم دارید و پروژه توی قدم‌های اولش هست، کلی فیچر و تغییرات هم قراره اضافه بشه


پ.ن:
این موضوع توی مصاحبه‌ها جزو سوالات مهم هست.

BY Python Hints


Share with your friend now:
tgoop.com/pyHints/676

View MORE
Open in Telegram


Telegram News

Date: |

In handing down the sentence yesterday, deputy judge Peter Hui Shiu-keung of the district court said that even if Ng did not post the messages, he cannot shirk responsibility as the owner and administrator of such a big group for allowing these messages that incite illegal behaviors to exist. The court said the defendant had also incited people to commit public nuisance, with messages calling on them to take part in rallies and demonstrations including at Hong Kong International Airport, to block roads and to paralyse the public transportation system. Various forms of protest promoted on the messaging platform included general strikes, lunchtime protests and silent sit-ins. How to Create a Private or Public Channel on Telegram? Click “Save” ; 2How to set up a Telegram channel? (A step-by-step tutorial)
from us


Telegram Python Hints
FROM American