در این پست نکات و ترفند های پیشرفته مدل های جنگو رو بررسی خواهیم کرد.🥸
از جمله: ...indexing, custom managers, inheritance
ارث بری مدل ها به شما امکان می دهد یک مدل پایه با اطلاعات رایج ایجاد کنید و آن را در مدل های دیگر گسترش دهید. جنگو از سه نوع model inheritance پشتیبانی می کند:
abstract base classes, multi-table inheritance, and proxy models
Using Abstract Models:
روشی فوقالعاده برای جمعبندی اطلاعات و رفتار مشترک هستند. برای یک abstract model هیچ جدولی در دیتابیس نشان داده نمی شود. در عوض، فیلدها و متدهای آن توسط زیر کلاسها به ارث میرسند.
Example:
در اینجا BaseProfile مانند یک الگو عمل میکند.StudentProfile, TeacherProfile هر دو دارای فیلد های bio , avatar خواهند بود اما هر کدام در جدول های پایگاه داده خودشان ذخیره میشوند.
Custom Managers :
در جنگو Custom Managers به شما این امکان را می دهند که عملکردهای سطح جدول را به مدل های جنگو خود اضافه کنید. آنها را می توان برای کپسوله کردن و عملیات های crud پیچیده و ارائه یک API تمیزتر برای مدل استفاده کرد.
Example:
این custom manager تمامی query های شمارو بر اساس "deleted" فیلتر میکند.
Models Migrations:
مدیریت Migrations مدلها
در جنگو migrations به شما امکان میدهند تا طی زمان، طرح پایگاه داده خود را تکامل دهید. مدیریت مناسب migrations ها برای حفظ یک پروژه سالم بسیار حیاتی است.
توصیهها:
برنامهریزی migrations خود: سعی کنید هنگام امکانپذیر بودن، مهاجرتها را ترکیب کنید و آنها را به کنترل نسخه منتقل کنید.
تست migrations: همیشه migrations را به صورت محلی و در محیط استیجینگ تست کنید، قبل از اعمال آنها در محیط تولید.
استفاده از دستور makemigrations برای تولید فایلهای migrations
استفاده از دستور migrate برای اعمال migrations ها
استفاده از دستور sqlmigrate برای پیشنمایش دستور sql
Proxy Models:
مدلهای پروکسی برای تغییر رفتار یک مدل، مانند defualt ordering یا custom manager بدون ایجاد جدول پایگاه داده جدید استفاده میشوند.
Example:
این پروکسی مدل تمامی profile هارا بر اساس نام نشان میدهد.
Multi-table Inheritance:
این نوع وراثت زمانی استفاده می شود که هر مدل در سلسله مراتب به تنهایی یک موجودیت کامل در نظر گرفته شود که به طور بالقوه به جدول پایگاه داده دیگری مرتبط است.به زبان ساده هر مدل به تنهایی میتواند در یک جدول جداگانه در پایگاه داده نمایش داده شود، به جای اینکه همه اطلاعات در یک جدول واحد ذخیره شود.
مدل Restaurant از مدل Place ارثبری میکند. این بدان معنی است که همه فیلدهای Place به صورت اتوماتیک به Restaurant ارث میبرده شده و Restaurant از همه ویژگیهای Place استفاده میکند.
این الگو به شما امکان میدهد که یک مدل (در اینجا Restaurant) را برای ارثبری از ویژگیها و رفتارهای یک مدل دیگر (در اینجا Place) استفاده کنید، در حالی که همچنان میتوانید به آن فیلدها و ویژگیهای جدیدی را اضافه کنید.
ادامه مطالب در پست بعد
#python
@code_crafters
از جمله: ...indexing, custom managers, inheritance
ارث بری مدل ها به شما امکان می دهد یک مدل پایه با اطلاعات رایج ایجاد کنید و آن را در مدل های دیگر گسترش دهید. جنگو از سه نوع model inheritance پشتیبانی می کند:
abstract base classes, multi-table inheritance, and proxy models
Using Abstract Models:
روشی فوقالعاده برای جمعبندی اطلاعات و رفتار مشترک هستند. برای یک abstract model هیچ جدولی در دیتابیس نشان داده نمی شود. در عوض، فیلدها و متدهای آن توسط زیر کلاسها به ارث میرسند.
Example:
class BaseProfile(models.Model):
bio = models.TextField()
avatar = models.ImageField(upload_to='avatars/')
class Meta:
abstract = True
class StudentProfile(BaseProfile):
graduation_year = models.IntegerField()
class TeacherProfile(BaseProfile):
office = models.CharField(max_length=100)
در اینجا BaseProfile مانند یک الگو عمل میکند.StudentProfile, TeacherProfile هر دو دارای فیلد های bio , avatar خواهند بود اما هر کدام در جدول های پایگاه داده خودشان ذخیره میشوند.
Custom Managers :
در جنگو Custom Managers به شما این امکان را می دهند که عملکردهای سطح جدول را به مدل های جنگو خود اضافه کنید. آنها را می توان برای کپسوله کردن و عملیات های crud پیچیده و ارائه یک API تمیزتر برای مدل استفاده کرد.
Example:
class ActiveProfileManager(models.Manager):
def get_queryset(self):
return super().get_queryset().filter(deleted=False)
class Profile(models.Model):
name = models.CharField(max_length=100)
deleted = models.BooleanField(default=False)
objects = models.Manager() # The default manager.
active_objects = ActiveProfileManager() # Our custom manager.
# Usage:
active_profiles = Profile.active_objects.all()
این custom manager تمامی query های شمارو بر اساس "deleted" فیلتر میکند.
Models Migrations:
مدیریت Migrations مدلها
در جنگو migrations به شما امکان میدهند تا طی زمان، طرح پایگاه داده خود را تکامل دهید. مدیریت مناسب migrations ها برای حفظ یک پروژه سالم بسیار حیاتی است.
توصیهها:
برنامهریزی migrations خود: سعی کنید هنگام امکانپذیر بودن، مهاجرتها را ترکیب کنید و آنها را به کنترل نسخه منتقل کنید.
تست migrations: همیشه migrations را به صورت محلی و در محیط استیجینگ تست کنید، قبل از اعمال آنها در محیط تولید.
استفاده از دستور makemigrations برای تولید فایلهای migrations
استفاده از دستور migrate برای اعمال migrations ها
استفاده از دستور sqlmigrate برای پیشنمایش دستور sql
Proxy Models:
مدلهای پروکسی برای تغییر رفتار یک مدل، مانند defualt ordering یا custom manager بدون ایجاد جدول پایگاه داده جدید استفاده میشوند.
Example:
class OrderedProfile(Profile):
class Meta:
proxy = True
ordering = ['name']
# Usage:
ordered_profiles = OrderedProfile.objects.all()
این پروکسی مدل تمامی profile هارا بر اساس نام نشان میدهد.
Multi-table Inheritance:
این نوع وراثت زمانی استفاده می شود که هر مدل در سلسله مراتب به تنهایی یک موجودیت کامل در نظر گرفته شود که به طور بالقوه به جدول پایگاه داده دیگری مرتبط است.به زبان ساده هر مدل به تنهایی میتواند در یک جدول جداگانه در پایگاه داده نمایش داده شود، به جای اینکه همه اطلاعات در یک جدول واحد ذخیره شود.
class Place(models.Model):
name = models.CharField(max_length=50)
class Restaurant(Place):
serves_pizza = models.BooleanField(default=False)
مدل Restaurant از مدل Place ارثبری میکند. این بدان معنی است که همه فیلدهای Place به صورت اتوماتیک به Restaurant ارث میبرده شده و Restaurant از همه ویژگیهای Place استفاده میکند.
این الگو به شما امکان میدهد که یک مدل (در اینجا Restaurant) را برای ارثبری از ویژگیها و رفتارهای یک مدل دیگر (در اینجا Place) استفاده کنید، در حالی که همچنان میتوانید به آن فیلدها و ویژگیهای جدیدی را اضافه کنید.
ادامه مطالب در پست بعد
#python
@code_crafters
👍9❤2
CodeCrafters
در این پست نکات و ترفند های پیشرفته مدل های جنگو رو بررسی خواهیم کرد.🥸 از جمله: ...indexing, custom managers, inheritance ارث بری مدل ها به شما امکان می دهد یک مدل پایه با اطلاعات رایج ایجاد کنید و آن را در مدل های دیگر گسترش دهید. جنگو از سه نوع model…
در ادامه پست قبلی:
Indexing:
ایندکس ها برای بهبود عملکرد عملیات پایگاه داده، به ویژه برای مجموعه داده های بزرگ، ضروری هستند.
به عنوان مثال، فرض کنید شما یک جدول کاربران دارید و میخواهید بر اساس نام آنها جستجو کنید. بدون ایندکس، پایگاه داده باید هر رکورد را از ابتدا تا انتها بررسی کند تا نام مورد نظر را پیدا کند. اما با ایجاد یک ایندکس بر روی فیلد نام، پایگاه داده میتواند به سرعت به رکوردهای مرتبط با نام مورد نظر دسترسی پیدا کند.
Example:
Overriding Model Methods:
وقتی در Django یک مدل ایجاد میکنید، میتوانید رفتارهای خاصی را برای عملیاتهای مختلف مدل، مانند ذخیرهسازی یا حذف، سفارشیسازی کنید. این کار به شما این امکان را میدهد که قبل یا بعد از انجام یک عملیات، کارهای خاصی انجام دهید. شما میتوانید عملیات save , delete ,.... رو بازنویسی کنید.
Example:
در این مثال، هر زمان که یک نمونه از MyModel ذخیره میشود، مقدار فیلد name به حروف بزرگ تبدیل میشود قبل از ذخیرهسازی و سپس عملیات ذخیرهسازی انجام میشود.
Soft Deletion:
استفاده از Soft Deletion به شما این امکان را میدهد که آیتمها را به عنوان حذف شده علامتگذاری کنید، اما در واقع آنها را از پایگاه داده حذف نکنید. به این تکنیک "حذف نرم" یا "حذف موقت" نیز گفته میشود. این روش برای نگهداری تاریخچه دادهها، امکان بازگردانی آیتمهای حذف شده و همچنین حفظ ارتباطات بین آیتمهای مختلف مفید است.
Example:
هر یک از این تکنیک ها مجموعه ای از مزایای خاص خود را ارائه می دهد و می تواند به طور قابل توجهی بر کارایی و عملکرد پروژه های شما تأثیر بگذارد. با اجرای این استراتژیها، میتوانید از قابلیتهای قدرتمند مدلسازی جنگو برای ساخت برنامههای کاربردی وب قویتر و مقیاسپذیرتر بهره ببرید.
منبع
#python
@code_crafters
Indexing:
ایندکس ها برای بهبود عملکرد عملیات پایگاه داده، به ویژه برای مجموعه داده های بزرگ، ضروری هستند.
به عنوان مثال، فرض کنید شما یک جدول کاربران دارید و میخواهید بر اساس نام آنها جستجو کنید. بدون ایندکس، پایگاه داده باید هر رکورد را از ابتدا تا انتها بررسی کند تا نام مورد نظر را پیدا کند. اما با ایجاد یک ایندکس بر روی فیلد نام، پایگاه داده میتواند به سرعت به رکوردهای مرتبط با نام مورد نظر دسترسی پیدا کند.
Example:
class User(models.Model):
username = models.CharField(max_length=100, db_index=True)
email = models.CharField(max_length=100)
class Meta:
indexes = [
models.Index(fields=['username'], name='username_idx'),
models.Index(fields=['email'], name='email_idx')
]
Overriding Model Methods:
وقتی در Django یک مدل ایجاد میکنید، میتوانید رفتارهای خاصی را برای عملیاتهای مختلف مدل، مانند ذخیرهسازی یا حذف، سفارشیسازی کنید. این کار به شما این امکان را میدهد که قبل یا بعد از انجام یک عملیات، کارهای خاصی انجام دهید. شما میتوانید عملیات save , delete ,.... رو بازنویسی کنید.
Example:
class MyModel(models.Model):
name = models.CharField(max_length=100)
def save(self, *args, **kwargs):
self.name = self.name.upper()
super().save(*args, **kwargs)
در این مثال، هر زمان که یک نمونه از MyModel ذخیره میشود، مقدار فیلد name به حروف بزرگ تبدیل میشود قبل از ذخیرهسازی و سپس عملیات ذخیرهسازی انجام میشود.
Soft Deletion:
استفاده از Soft Deletion به شما این امکان را میدهد که آیتمها را به عنوان حذف شده علامتگذاری کنید، اما در واقع آنها را از پایگاه داده حذف نکنید. به این تکنیک "حذف نرم" یا "حذف موقت" نیز گفته میشود. این روش برای نگهداری تاریخچه دادهها، امکان بازگردانی آیتمهای حذف شده و همچنین حفظ ارتباطات بین آیتمهای مختلف مفید است.
Example:
class SoftDeleteModel(models.Model):
is_deleted = models.BooleanField(default=False)
def delete(self, *args, **kwargs):
self.is_deleted = True
self.save()
هر یک از این تکنیک ها مجموعه ای از مزایای خاص خود را ارائه می دهد و می تواند به طور قابل توجهی بر کارایی و عملکرد پروژه های شما تأثیر بگذارد. با اجرای این استراتژیها، میتوانید از قابلیتهای قدرتمند مدلسازی جنگو برای ساخت برنامههای کاربردی وب قویتر و مقیاسپذیرتر بهره ببرید.
منبع
#python
@code_crafters
🌟Code with MrCoder7️⃣0️⃣1️⃣
Advanced Django Models Tips and Tricks #django - 🌟Code with MrCoder7️⃣0️⃣1️⃣
Elevate your Django skills with these advanced tips and tricks for optimizing models. Learn about inheritance, indexing, custom managers, and other techniques to improve your application's performance and scalability.
❤11
کلاس دیاگرام اولیه پروژهی فعلی
تو شرکتها کسانی هستند که بهشون طراح و معمار سیستم میگیم کارشونdesign systemهستش،چکاری میکنند؟
میان پروژه ورودی شرکت رو تحلیل میکنن و بیزنس مدلهای اون رو در میارن و معماری مناسب روجهت پیاده سازی شدن پروژه بر اساس بیزنس مدلها مشخص میکنن،دیاگرام روطراحی میکنن و میفرستن سمت توسعه دهندگان جهت پیاده سازی پروژه بر اساس اون معماری و بیزنس مدلهای مشخص میشه،اینکار رو معمولا در پروژههای بزرگ که نیاز هست بر اساس میکروسرویس وDDDپیاده سازی بشه انجام میدن،این پیاده سازی بر اساس اصول سازمانی هر شرکت مخصوص خودش صورت میگیره این مسئله کمک میکنه تا تیم و یا تیمهای فنی از چهارچوب سازمان خارج نشده و دید یکسانی از پروژه داشته باشن،آماده کردن اون بر اساس میزان بزرگی پروژه زمان بر هست،طراح سیستم بایدآینده نگری نسبت به پروژه داشته باشه تاهزینههای شرکت رو بشدت کاهش بده ونقش حیاتی درمشخص کردن هسته بیزنس ایفا میکنه،اشتباه در طراحی این دیاگرام در مرحله اول اون موجب آسیب رسیدن به دیتابیس و دادههای اون خواهد شد و در مرحله بعدی به کوئریها و پرفورمنس پروژه میرسه
#microservice
#daily
@code_crafters
تو شرکتها کسانی هستند که بهشون طراح و معمار سیستم میگیم کارشونdesign systemهستش،چکاری میکنند؟
میان پروژه ورودی شرکت رو تحلیل میکنن و بیزنس مدلهای اون رو در میارن و معماری مناسب روجهت پیاده سازی شدن پروژه بر اساس بیزنس مدلها مشخص میکنن،دیاگرام روطراحی میکنن و میفرستن سمت توسعه دهندگان جهت پیاده سازی پروژه بر اساس اون معماری و بیزنس مدلهای مشخص میشه،اینکار رو معمولا در پروژههای بزرگ که نیاز هست بر اساس میکروسرویس وDDDپیاده سازی بشه انجام میدن،این پیاده سازی بر اساس اصول سازمانی هر شرکت مخصوص خودش صورت میگیره این مسئله کمک میکنه تا تیم و یا تیمهای فنی از چهارچوب سازمان خارج نشده و دید یکسانی از پروژه داشته باشن،آماده کردن اون بر اساس میزان بزرگی پروژه زمان بر هست،طراح سیستم بایدآینده نگری نسبت به پروژه داشته باشه تاهزینههای شرکت رو بشدت کاهش بده ونقش حیاتی درمشخص کردن هسته بیزنس ایفا میکنه،اشتباه در طراحی این دیاگرام در مرحله اول اون موجب آسیب رسیدن به دیتابیس و دادههای اون خواهد شد و در مرحله بعدی به کوئریها و پرفورمنس پروژه میرسه
#microservice
#daily
@code_crafters
👍9
در ادامه کار بعد از کلاس دیاگرام(در واقع کلاس دیاگرام لایههای دیتا data layers رو برامون مشخص میکنه) میرسیم به پیدا کردن بیزنسهای تجاری پروژه، طبق ساختاری که از دیتا لایرها هستش، کاری که صورت میگیره این هست که دنبال الگوهایی میگردیم، که طبق اون بتونیم دومینهامون رو شناسایی کنیم و بر اساس خروجی اون بتونیم سرویسهامون رو تشخیص و تفکیک بدیم، هر دومین ممکنه طبق دیدگاه و برآورد شما به یک یا چند سرویس تقسیم بشه
مهمترین دومین در پروژه رو طبق الگوی سرویس مشخص میکنیم، الگوی سرویس همون هسته بیزنس پروژه هستش (قلب تپنده هر سیستمی)، بیشترین بخش کد و توسعه رو شامل میشه، خبره ترین توسعه دهندگان تیم بر روی این بخش متمرکز میشن تا سرویسها رو به بهترین شکل ممکن بالا بیارن پر هزینه ترین دومین برای هر سیستمی هستش و شکست در اون جبران ناپذیر خواهد بود، دومین دیگر مربوط به الگوی کاربران هستش که از اسمش مشخص هستش، دومین بعدی ما بخش مربوط به الگوی درآمدزایی خواهد بود، دیدگاه و تفکر شما در پیدا کردن دومینها و تبدیل اون به سرویسهای مجزا بسیار حائز اهمیت هستش
#microservice
#daily
@code_crafters
مهمترین دومین در پروژه رو طبق الگوی سرویس مشخص میکنیم، الگوی سرویس همون هسته بیزنس پروژه هستش (قلب تپنده هر سیستمی)، بیشترین بخش کد و توسعه رو شامل میشه، خبره ترین توسعه دهندگان تیم بر روی این بخش متمرکز میشن تا سرویسها رو به بهترین شکل ممکن بالا بیارن پر هزینه ترین دومین برای هر سیستمی هستش و شکست در اون جبران ناپذیر خواهد بود، دومین دیگر مربوط به الگوی کاربران هستش که از اسمش مشخص هستش، دومین بعدی ما بخش مربوط به الگوی درآمدزایی خواهد بود، دیدگاه و تفکر شما در پیدا کردن دومینها و تبدیل اون به سرویسهای مجزا بسیار حائز اهمیت هستش
#microservice
#daily
@code_crafters
🔥3👍2👎1
باینری ها در PostgreSQL: ذخیره سازی اطلاعات خام
تصور کنید میخواهید عکسی از گربهتان را در PostgreSQL ذخیره کنید. چطور میتوانید این کار را انجام دهید؟
پایگاه داده PostgreSQL نوع دادهای به نام
تفاوت باینری و رشتههای کاراکتری:
* رشتههای باینری مانند "بایتهای خام" هستند و میتوانند هر نوع دادهای را ذخیره کنند، از جمله صفر و کاراکترهای غیرقابل چاپ.
* رشتههای کاراکتری برای ذخیره متن مناسب هستند و محدودیتهایی در مورد کاراکترهای مجاز دارند.
فرمتهای ذخیره سازی:
هگزادسیمال: هر بایت به عنوان دو رقم شانزدهگانی نمایش داده میشود (مثلاً "00" برای بایت صفر). این فرمت خوانایی بیشتری دارد.
نوع Escape: برخی از بایتها با کاراکترهای خاص علامتگذاری میشوند. این فرمت قدیمیتر است و کاربرد کمتری دارد.
کاربردها:
۱.ذخیره تصاویر، فایلهای صوتی و ویدئوها
۲.ذخیره دادههای باینری مانند کدهای برنامه
۳.ذخیره اطلاعات رمزنگاری شده
مثال:
فرض کنید میخواهید تصویر گربهتان را با نام
نکات:
پایگاه داده PostgreSQL از نوع داده
میتوانید از توابع و عملگرهای مختلفی برای کار با دادههای
نتیجه:
نوع داده
#PostgreSQL
@Code_Crafters
تصور کنید میخواهید عکسی از گربهتان را در PostgreSQL ذخیره کنید. چطور میتوانید این کار را انجام دهید؟
پایگاه داده PostgreSQL نوع دادهای به نام
bytea
را ارائه میدهد که برای ذخیره اطلاعات باینری مانند تصاویر، فایلهای صوتی و ویدئوها ایدهآل است.تفاوت باینری و رشتههای کاراکتری:
* رشتههای باینری مانند "بایتهای خام" هستند و میتوانند هر نوع دادهای را ذخیره کنند، از جمله صفر و کاراکترهای غیرقابل چاپ.
* رشتههای کاراکتری برای ذخیره متن مناسب هستند و محدودیتهایی در مورد کاراکترهای مجاز دارند.
فرمتهای ذخیره سازی:
هگزادسیمال: هر بایت به عنوان دو رقم شانزدهگانی نمایش داده میشود (مثلاً "00" برای بایت صفر). این فرمت خوانایی بیشتری دارد.
نوع Escape: برخی از بایتها با کاراکترهای خاص علامتگذاری میشوند. این فرمت قدیمیتر است و کاربرد کمتری دارد.
کاربردها:
۱.ذخیره تصاویر، فایلهای صوتی و ویدئوها
۲.ذخیره دادههای باینری مانند کدهای برنامه
۳.ذخیره اطلاعات رمزنگاری شده
مثال:
فرض کنید میخواهید تصویر گربهتان را با نام
cat.jpg
در پایگاه داده ذخیره کنید:INSERT INTO photos (name, data)
VALUES ('cat.jpg', BYTEA('\xFF\xD8\xFF\xE0'));
نکات:
پایگاه داده PostgreSQL از نوع داده
BLOB
(Binary Large Object) نیز برای ذخیره دادههای باینری پشتیبانی میکند. فرمت ورودی BLOB
با bytea
متفاوت است، اما توابع و عملگرهای مشابهی دارند.میتوانید از توابع و عملگرهای مختلفی برای کار با دادههای
bytea
استفاده کنید، مانند LENGTH()
, SUBSTRING()
و COMPARE()
.نتیجه:
نوع داده
bytea
یک ابزار قدرتمند برای ذخیره و مدیریت دادههای باینری در PostgreSQL است. با استفاده از این نوع داده، میتوانید انواع مختلف اطلاعات را به طور کارآمد و ایمن ذخیره کنید.#PostgreSQL
@Code_Crafters
❤5👍2🔥2
ذخیره سازی اطلاعات خام ولی در حجم بالا با Blob در PostgreSQL
در پایگاه داده PostgreSQL نوع دادهای به نام bytea را ارائه میدهد که برای ذخیره اطلاعات باینری مانند تصاویر، فایلهای صوتی و ویدئوها ایدهآل است. اما گاهی اوقات با دادههای باینری خیلی بزرگتر از حد معمول سروکار داریم. در اینجاست که مفهوم BLOB یا "Binary Large Object" به کمک ما میآید.
تعریف BLOB چیست؟
در واقع BLOB یک نوع داده در PostgreSQL است که برای ذخیره دادههای باینری بسیار بزرگ مانند:
۱. فایلهای چند گیگابایتی
۲. مجموعه دادههای علمی
۳. تصاویر با وضوح بالا
۴. فایلهای ویدئویی با کیفیت بالا
استفاده میشود.
مزایای استفاده از BLOB:
* ذخیره سازی دادههای حجیم: BLOB ها میتوانند دادههایی با حجم تا 1 ترابایت را ذخیره کنند.
* کارایی: BLOB ها برای ذخیره سازی دادههای باینری بهینه شدهاند و میتوانند عملکرد بهتری نسبت به ذخیره سازی دادههای باینری در قالب رشتههای متنی ارائه دهند.
* انعطاف پذیری: BLOB ها میتوانند برای ذخیره هر نوع داده باینری، صرف نظر از نوع و فرمت آن، استفاده شوند.
نحوه استفاده از BLOB:
برای استفاده از BLOB در PostgreSQL، باید مراحل زیر را انجام دهید:
1. نوع داده BLOB را در جدول خود تعریف کنید:
2. با استفاده از دستور INSERT، دادههای BLOB را در جدول ذخیره کنید:
3. با استفاده از دستور SELECT، دادههای BLOB را از جدول بازیابی کنید:
نکات مهم:
برای ذخیره و بازیابی BLOB ها، باید از توابع lo_import و lo_export استفاده کنید.
پایگاه داده PostgreSQL ابزارهای مختلفی برای مدیریت BLOB ها ارائه میدهد، مانند توابع و عملگرهای خاص.
برای اطلاعات بیشتر در مورد BLOB ها، میتوانید به مستندات PostgreSQL مراجعه کنید.
مثال:
فرض کنید میخواهید یک ویدیو با حجم 2 گیگابایت را در PostgreSQL ذخیره کنید. میتوانید مراحل زیر را انجام دهید:
1. نوع داده BLOB را در جدول خود تعریف کنید:
2. با استفاده از دستور INSERT، ویدیو را در جدول ذخیره کنید:
3. با استفاده از دستور SELECT، ویدیو را از جدول بازیابی کنید:
با استفاده از BLOB ها، میتوانید هر نوع داده باینری را در PostgreSQL ذخیره کنید و به آنها دسترسی داشته باشید. این امر PostgreSQL را به یک راه حل قدرتمند برای ذخیره سازی و مدیریت دادههای باینری تبدیل میکند.
در ادامه، چند نمونه دیگر از کاربردهای BLOB در PostgreSQL آورده شده است:
۱. ذخیره سازی اسناد و مدارک
۲. ذخیره سازی تصاویر و ویدیوها
۳. ذخیره سازی فایلهای صوتی
۴. ذخیره سازی پایگاه دادههای NoSQL
۵. ذخیره سازی دادههای رمزنگاری شده
جمع بندی:
در واقع BLOB ها یک ابزار قدرتمند برای ذخیره سازی دادههای باینری در PostgreSQL هستند. با استفاده از BLOB ها، میتوانید دادههای حجیم را به طور کارآمد و ایمن ذخیره کنید.
#PostgreSQL
@Code_Crafters
در پایگاه داده PostgreSQL نوع دادهای به نام bytea را ارائه میدهد که برای ذخیره اطلاعات باینری مانند تصاویر، فایلهای صوتی و ویدئوها ایدهآل است. اما گاهی اوقات با دادههای باینری خیلی بزرگتر از حد معمول سروکار داریم. در اینجاست که مفهوم BLOB یا "Binary Large Object" به کمک ما میآید.
تعریف BLOB چیست؟
در واقع BLOB یک نوع داده در PostgreSQL است که برای ذخیره دادههای باینری بسیار بزرگ مانند:
۱. فایلهای چند گیگابایتی
۲. مجموعه دادههای علمی
۳. تصاویر با وضوح بالا
۴. فایلهای ویدئویی با کیفیت بالا
استفاده میشود.
مزایای استفاده از BLOB:
* ذخیره سازی دادههای حجیم: BLOB ها میتوانند دادههایی با حجم تا 1 ترابایت را ذخیره کنند.
* کارایی: BLOB ها برای ذخیره سازی دادههای باینری بهینه شدهاند و میتوانند عملکرد بهتری نسبت به ذخیره سازی دادههای باینری در قالب رشتههای متنی ارائه دهند.
* انعطاف پذیری: BLOB ها میتوانند برای ذخیره هر نوع داده باینری، صرف نظر از نوع و فرمت آن، استفاده شوند.
نحوه استفاده از BLOB:
برای استفاده از BLOB در PostgreSQL، باید مراحل زیر را انجام دهید:
1. نوع داده BLOB را در جدول خود تعریف کنید:
CREATE TABLE my_table (
id INT PRIMARY KEY,
data BYTEA
);
2. با استفاده از دستور INSERT، دادههای BLOB را در جدول ذخیره کنید:
INSERT INTO my_table (id, data)
VALUES (1, lo_import('image.jpg'));
3. با استفاده از دستور SELECT، دادههای BLOB را از جدول بازیابی کنید:
SELECT data FROM my_table WHERE id = 1;
نکات مهم:
برای ذخیره و بازیابی BLOB ها، باید از توابع lo_import و lo_export استفاده کنید.
پایگاه داده PostgreSQL ابزارهای مختلفی برای مدیریت BLOB ها ارائه میدهد، مانند توابع و عملگرهای خاص.
برای اطلاعات بیشتر در مورد BLOB ها، میتوانید به مستندات PostgreSQL مراجعه کنید.
مثال:
فرض کنید میخواهید یک ویدیو با حجم 2 گیگابایت را در PostgreSQL ذخیره کنید. میتوانید مراحل زیر را انجام دهید:
1. نوع داده BLOB را در جدول خود تعریف کنید:
CREATE TABLE videos (
id INT PRIMARY KEY,
title VARCHAR(255),
data BYTEA
);
2. با استفاده از دستور INSERT، ویدیو را در جدول ذخیره کنید:
INSERT INTO videos (id, title, data)
VALUES (1, 'My Video', lo_import('video.mp4'));
3. با استفاده از دستور SELECT، ویدیو را از جدول بازیابی کنید:
SELECT data FROM videos WHERE id = 1;
با استفاده از BLOB ها، میتوانید هر نوع داده باینری را در PostgreSQL ذخیره کنید و به آنها دسترسی داشته باشید. این امر PostgreSQL را به یک راه حل قدرتمند برای ذخیره سازی و مدیریت دادههای باینری تبدیل میکند.
در ادامه، چند نمونه دیگر از کاربردهای BLOB در PostgreSQL آورده شده است:
۱. ذخیره سازی اسناد و مدارک
۲. ذخیره سازی تصاویر و ویدیوها
۳. ذخیره سازی فایلهای صوتی
۴. ذخیره سازی پایگاه دادههای NoSQL
۵. ذخیره سازی دادههای رمزنگاری شده
جمع بندی:
در واقع BLOB ها یک ابزار قدرتمند برای ذخیره سازی دادههای باینری در PostgreSQL هستند. با استفاده از BLOB ها، میتوانید دادههای حجیم را به طور کارآمد و ایمن ذخیره کنید.
#PostgreSQL
@Code_Crafters
🔥6❤2
در ادامه مباحث مربوط به طراحی سیستم و معماری آن میریم به سراغ مشخص کردن محدوده و لبههای بخشهای مختلف سرویس، ابتدا دیتا لایه رو مشخص کردیم و سپس دومینهای تجاری رو پیدا کردیم و اکنون بر روی یک طرح مشخص میکنیم هر سرویس با چه سرویسهای دیگه ارتباط داره و اشتراکاتشون کجاست(شکل هندسی آن با توجه به هر سیستم متفاوت میگردد) هر سرویس رو با دیتا لایر خودش مشخص میکنیم(در تصویر بلوکهای زرد رنگ)، یک سیستم میتواند چند دومین تجاری داشته باشد و هر دومین نیز یک یا چند سرویس مجزا بر اساس این طرح بندی در تصویر اولویتهای ما کامل مشخص خواهد شد و تیم یا تیمهای توسعه راحت میتوانند تصمیم بگیرند کدام سرویسها پایه و اولویت بالاتری دارن و کدام وابستگیهای بیشتری ایجاد میکنند و این در پیش برد صحیح و اجرای اولیه بسیار به سازمان کمک میکند، علاوه بر ان میتوان قسمت mvp (نمونه اولیه را نیز مشخص کرد، کادر سبز رنگ)
#microservice
#daily
@code_crafters
#microservice
#daily
@code_crafters
👍4👎3
رویه ذخیره شده Stored Procedure ناجی برنامه های تحت فشار:
در دنیای برنامهنویسی(منظور ما سمت Back-End است نه Front-End 🥸)، بهینهسازی و عملکرد روان برنامهها از اهمیت بالایی برخوردار است. در این میان، پایگاههای داده نقش حیاتی در ذخیرهسازی و بازیابی اطلاعات ایفا میکنند.
رویه ذخیرهشده یا Stored Procedure چیست ؟
به صورت خلاصه Stored Procedure یک مجموعه از دستورات SQL است که کار خاصی را انجام میدهد و ما برای آن یک نام مرتبط میگذاریم و در هر جایی که نیاز داشته باشیم آن را فراخوانی میکنیم (اگر پارامتر خاصی نیاز داشته باشد هم میتوانیم به آن پاس بدهیم )
به صورت معمول برنامه نویس ها از ORM هایی مخصوص زبان برنامه نویسی که با آن کار میکنند برای ایجاد کوئری بر روی دیتابیس استفاده میکنند ولی ORM (منظورم هر ORM است حتی اگر معجزه برنامه نویسی قرن باشد!!!) چندین ایراد مهم و اساسی دارند که در ادامه به آن ها اشاره میشود:
۱. شما باید هزینه تبدیل کد هایتان را به SQL پرداخت کنید(با کاهش قدرت برنامه) در نهایت پایگاه داده شما با SQL کار میکند نه زبان برنامه نویسی شما !!!
۲.وقتی از ORM ها استفاده میکنید اگر نیاز به کوئری پیچیده و یا خیلی خاصی داشته باشید قدرت زیادی برای مدیریت این چالش با استفاده از ORM نخواهید داشت.
۳. معمولا برای فراخوانی یک مقدار از پایگاه داده به چندین روش مختلف میتوان این کار را انجام داد که یه سری از این روش ها دارای پرفومنس خوب و بعضی از روش ها دارای پرفومنس وحشتناک هستند
(این مورد مربوط به افزایش پرفومنس در SQL است که توضیح طولانی دارد که در اینجا جای نمیگیرد ولی برای آشنایی بیشتر ساده ترین مورد را اشاره میکنم :
تصور کنید جدولی به نام کارکنان و با ۱۵ ردیف داریم و میخواهید مقدار نام از جدول کارکنان خود را بخوانید با استفاده از ORM خود در نهایت به این کوئری خواهید رسید :
در حالی که شما فقط به نام کارکنان در این جدول نیاز دارید و این جدول دارای ۱۵ ردیف است که فراخوانی ۱۴ ردیف دیگر بیهوده و هزینه برخواهد بود
و این کوئری نیاز شما را برطرف میکرد :
که دارای پرفومنس بهتری خواهد بود
{شاید بتوانید جلوی استفاده از * بگیرید و ORM را مجبور به فراخوانی تنها name کنید ولی در موارد دیگر چنین ساده نخواهد بود })
وقتی از ORM خود استفاده میکنید شما کنترل زیادی برای اینکه از چه روشی استفاده کند نخواهید داشت و صرفا کد های ORM خود را خواهید دید
۴. گاها پیش میآید که شما برای فراخوانی مقدار در پایگاه داده با استفاده از ORM کوئری میسازید ولی ORM کوئری عجیبی تولید میکند که فشار فوق العاده ای بر روی برنامه شما وارد میکند.(برای جلوگیری این مورد اگر اصرار به استفاده از ORM دارید باید به موارد پیشرفته ORM خود مراجعه کنید که نیاز به تمرین و زمان است)
از معایب استفاده از Stored Procedure میتوان به این موارد اشاره کرد:
۱. نیاز به دانش خوبی از SQL دارد
۲. در صورت تغییر پایگاه داده نیاز به بازنویسی خواهند داشت
۳.نوشتن برنامه با سرعت خیلی پایین تری پیش خواهد رفت.
مقایسه Stored Procedure با ORM:
در واقع ORMها (Object-Relational Mapping) ابزاری برای نگاشت اشیاء برنامه به ساختارهای پایگاه داده هستند. ORMها به طور خودکار وظایف مربوط به ترجمه کوئریها از زبان برنامهنویسی به زبان SQL را انجام میدهند.
در حالی که ORMها مزایایی از جمله سادگی و سهولت استفاده را ارائه میدهند، اما در مقایسه با Stored Procedureها، معایبی نیز دارند. ORMها میتوانند به دلیل ترجمههای اضافی، باعث افت عملکرد شوند. همچنین، ORMها در مدیریت کوئریهای پیچیده و خاص، انعطافپذیری Stored Procedureها را ندارند.
در نتیجه :اگر برنامه شما دارای فشار زیادی بر روی پایگاه داده است و همین طور برنامه شما دارای بار زیادی است میتوانید برای مدیریت آن از Stored Procedure ها در پایگاه داده تان استفاده کنید
یا اینکه میتوانید استفاده نکنید و به زیبایی کد های خود با استفاده از ORM به خود افتخار کنید و بگذارید پایگاه داده تحت فشار کد های SQL عجیب شما تبدیل به نفت شود
این مورد کاملا بستگی به برنامه و نیاز شما بستگی دارد.
#Database #General
@Code_Crafters
در دنیای برنامهنویسی(منظور ما سمت Back-End است نه Front-End 🥸)، بهینهسازی و عملکرد روان برنامهها از اهمیت بالایی برخوردار است. در این میان، پایگاههای داده نقش حیاتی در ذخیرهسازی و بازیابی اطلاعات ایفا میکنند.
رویه ذخیرهشده یا Stored Procedure چیست ؟
به صورت خلاصه Stored Procedure یک مجموعه از دستورات SQL است که کار خاصی را انجام میدهد و ما برای آن یک نام مرتبط میگذاریم و در هر جایی که نیاز داشته باشیم آن را فراخوانی میکنیم (اگر پارامتر خاصی نیاز داشته باشد هم میتوانیم به آن پاس بدهیم )
به صورت معمول برنامه نویس ها از ORM هایی مخصوص زبان برنامه نویسی که با آن کار میکنند برای ایجاد کوئری بر روی دیتابیس استفاده میکنند ولی ORM (منظورم هر ORM است حتی اگر معجزه برنامه نویسی قرن باشد!!!) چندین ایراد مهم و اساسی دارند که در ادامه به آن ها اشاره میشود:
۱. شما باید هزینه تبدیل کد هایتان را به SQL پرداخت کنید(با کاهش قدرت برنامه) در نهایت پایگاه داده شما با SQL کار میکند نه زبان برنامه نویسی شما !!!
۲.وقتی از ORM ها استفاده میکنید اگر نیاز به کوئری پیچیده و یا خیلی خاصی داشته باشید قدرت زیادی برای مدیریت این چالش با استفاده از ORM نخواهید داشت.
۳. معمولا برای فراخوانی یک مقدار از پایگاه داده به چندین روش مختلف میتوان این کار را انجام داد که یه سری از این روش ها دارای پرفومنس خوب و بعضی از روش ها دارای پرفومنس وحشتناک هستند
(این مورد مربوط به افزایش پرفومنس در SQL است که توضیح طولانی دارد که در اینجا جای نمیگیرد ولی برای آشنایی بیشتر ساده ترین مورد را اشاره میکنم :
تصور کنید جدولی به نام کارکنان و با ۱۵ ردیف داریم و میخواهید مقدار نام از جدول کارکنان خود را بخوانید با استفاده از ORM خود در نهایت به این کوئری خواهید رسید :
select * from employee;
در حالی که شما فقط به نام کارکنان در این جدول نیاز دارید و این جدول دارای ۱۵ ردیف است که فراخوانی ۱۴ ردیف دیگر بیهوده و هزینه برخواهد بود
و این کوئری نیاز شما را برطرف میکرد :
select name from employee;
که دارای پرفومنس بهتری خواهد بود
{شاید بتوانید جلوی استفاده از * بگیرید و ORM را مجبور به فراخوانی تنها name کنید ولی در موارد دیگر چنین ساده نخواهد بود })
وقتی از ORM خود استفاده میکنید شما کنترل زیادی برای اینکه از چه روشی استفاده کند نخواهید داشت و صرفا کد های ORM خود را خواهید دید
۴. گاها پیش میآید که شما برای فراخوانی مقدار در پایگاه داده با استفاده از ORM کوئری میسازید ولی ORM کوئری عجیبی تولید میکند که فشار فوق العاده ای بر روی برنامه شما وارد میکند.(برای جلوگیری این مورد اگر اصرار به استفاده از ORM دارید باید به موارد پیشرفته ORM خود مراجعه کنید که نیاز به تمرین و زمان است)
از معایب استفاده از Stored Procedure میتوان به این موارد اشاره کرد:
۱. نیاز به دانش خوبی از SQL دارد
۲. در صورت تغییر پایگاه داده نیاز به بازنویسی خواهند داشت
۳.نوشتن برنامه با سرعت خیلی پایین تری پیش خواهد رفت.
مقایسه Stored Procedure با ORM:
در واقع ORMها (Object-Relational Mapping) ابزاری برای نگاشت اشیاء برنامه به ساختارهای پایگاه داده هستند. ORMها به طور خودکار وظایف مربوط به ترجمه کوئریها از زبان برنامهنویسی به زبان SQL را انجام میدهند.
در حالی که ORMها مزایایی از جمله سادگی و سهولت استفاده را ارائه میدهند، اما در مقایسه با Stored Procedureها، معایبی نیز دارند. ORMها میتوانند به دلیل ترجمههای اضافی، باعث افت عملکرد شوند. همچنین، ORMها در مدیریت کوئریهای پیچیده و خاص، انعطافپذیری Stored Procedureها را ندارند.
در نتیجه :اگر برنامه شما دارای فشار زیادی بر روی پایگاه داده است و همین طور برنامه شما دارای بار زیادی است میتوانید برای مدیریت آن از Stored Procedure ها در پایگاه داده تان استفاده کنید
یا اینکه میتوانید استفاده نکنید و به زیبایی کد های خود با استفاده از ORM به خود افتخار کنید و بگذارید پایگاه داده تحت فشار کد های SQL عجیب شما تبدیل به نفت شود
این مورد کاملا بستگی به برنامه و نیاز شما بستگی دارد.
#Database #General
@Code_Crafters
👍3🔥2😁1
در ادامه مباحث مربوط به میکروسرویس و soa بارها به سیاست و اصول سازمانی اشاره کردیم (در کتاب طراحی میکروسرویس با جنگو یک بخش مهم از کتاب که نظر خود من رو بشدت جلب کرده بود بارها و بارها به این موضوع اشاره کرده بود) و گفتیم بخش مهمی از طراحی به سبک این معماریهای نوین بشدت وابسته به این مسئله میباشد
در این پست پستهای با تگ soa# راجب این موضوع حرف میزنیم و مثالهایی برای اون خواهیم گفت تا دیدگاهمون نسبت بهش بازتر بشه و شناخت دقیقتری ازش داشته باشیم
مسئله بر سر حاکمیت soa در سازمان هست
حاکمیت SOA به مجموعه ای از اصول و روشها میگیم که این اطمینان رو حاصل کنه برامون که معماری سرویس گرا (SOA) به طور موثر و کارآمد و مطابق با نیازهای سازمان اداره و بکار گرفته میشود، که شامل تعیین فرآیندها،روابط،کنترل مکانیسمها و اعمال سیاستها میشود
مبحث سیاستها توسط ذینفعان سازمان مشخص میشه و بر کل امور سازمانی اجبار بر اجرای اون خواهد شد و توسعه دهندگان اجازه خروج ازین چهارچوب رو ندارن این سیاستها برای همگان چه توسعه دهندگان و چه مدیران و ادمینها و تحلیل گران کاملا قابل فهم و درک هستش
علاوه بر قابلیت فهم و شفافیت یکی از مسائل قابل اهمیت در دسترس بودن سندنگاره این سیاستها برای همگان هستش، بسته به بزرگی سازمان شما میتواند یک داکیومنت شیر شده روی سیستمها باشد یا یک صفحه وب درون سازمانی و یا یک صفحه ویکیپدیا مخصوص شما و در صورت لزوم هم میتوانید از یک ابزار تجاری استفاده کنید
سیاستهای سازمانی برای حاکمیت soa به چند بخش مختلف تقسیم میشود که برای هر کدام چند مثال جهت درک بیشتر خواهیم گفت، سیاستها رو میتوان در دو بخش پایه و دسته بندی شده بررسی کنیم
1-سیاستهای پایه
1-1 سیاست پایه زمان طراحی (design-time policies):
1-2 سیاستهای پایه زمان اجرا (runtime policies):
ما سیاستهای پایه خودمون رو مشخص کردیم حال به سراغ سیاستهای دستهبندی میریم و اونهارو بررسی میکنیم
#microservoce
#soa
@code_crafters
در این پست پستهای با تگ soa# راجب این موضوع حرف میزنیم و مثالهایی برای اون خواهیم گفت تا دیدگاهمون نسبت بهش بازتر بشه و شناخت دقیقتری ازش داشته باشیم
مسئله بر سر حاکمیت soa در سازمان هست
حاکمیت SOA به مجموعه ای از اصول و روشها میگیم که این اطمینان رو حاصل کنه برامون که معماری سرویس گرا (SOA) به طور موثر و کارآمد و مطابق با نیازهای سازمان اداره و بکار گرفته میشود، که شامل تعیین فرآیندها،روابط،کنترل مکانیسمها و اعمال سیاستها میشود
مبحث سیاستها توسط ذینفعان سازمان مشخص میشه و بر کل امور سازمانی اجبار بر اجرای اون خواهد شد و توسعه دهندگان اجازه خروج ازین چهارچوب رو ندارن این سیاستها برای همگان چه توسعه دهندگان و چه مدیران و ادمینها و تحلیل گران کاملا قابل فهم و درک هستش
علاوه بر قابلیت فهم و شفافیت یکی از مسائل قابل اهمیت در دسترس بودن سندنگاره این سیاستها برای همگان هستش، بسته به بزرگی سازمان شما میتواند یک داکیومنت شیر شده روی سیستمها باشد یا یک صفحه وب درون سازمانی و یا یک صفحه ویکیپدیا مخصوص شما و در صورت لزوم هم میتوانید از یک ابزار تجاری استفاده کنید
سیاستهای سازمانی برای حاکمیت soa به چند بخش مختلف تقسیم میشود که برای هر کدام چند مثال جهت درک بیشتر خواهیم گفت، سیاستها رو میتوان در دو بخش پایه و دسته بندی شده بررسی کنیم
1-سیاستهای پایه
1-1 سیاست پایه زمان طراحی (design-time policies):
۱-سرویسهای بدون تکرار:
در یک بخش، بسیاری از عملکردها بین خدمات تکراری است. رسمی کردن این مورد در یک خطمشی و بررسی این خطمشی قبل از شروع کار بر روی یک سرویس جدید، میتواند باعث صرفهجویی در کارهای تکراری شود
۲-استانداردسازی فناوری:
این سیاست چیزی شبیه به این است که: "همه خدمات ارائه شده به عموم مردم، به عنوان مثال، از طریق اینترنت، باید از الگوی REST پیروی کنند.خدماتی که منحصراً برای اهداف B2B ارائه می شوند باید از معماری WS-* استفاده کنند." این یک سیاست اساسی است، اما سیاستی است که مانع از آن میشود که طراحان پروژهها آنچه را که فکر میکنند بهترین است بدون نگاه کردن به شمای بزرگتر انجام دهند.
۳-تایید محتوای پیام:
این سیاست می تواند به شما در ایجاد یک چشم اندازی یکسان از سرویس کمک کند. وقتی عمیقتر به این خطمشی نگاه میکنیم، احتمالاً باید نوع اعتبارسنجی مورد نیاز را نیز تعریف کنیم، به عنوان مثال، این می تواند به این معنی باشد که تمام قالب های پیام این سرویس باید XML همراه با یک شماتیک باشد. یا اینکه تمام پیام های JSON ارسال شده می توانند با استفاده از شماتیک JSON تأیید شوند.
1-2 سیاستهای پایه زمان اجرا (runtime policies):
۱-سرویس باید در یک بازه زمانی مشخص پاسخ دهد(برای مثال کمتر از ۲ ثانیه):
با ایزارهای مشخص و معینی میتوانید این مورد رو مورد بررسی قرار دهید، این یک سیاست ساده در این بخش خواهد بود، شما میتوانید یک داکیومنت بسازید که در آن مشخص شده چه زمانهایی سرویس شما در دسترس بوده یا نبوده، این سند میتواند مورد استفاده تحلیلگران سیستم در سازمان قرار گیرد که سیستم رو مورد بررسی قرار دهند
۲-صداکردن (تماس) سرویسها باید در یک کانال امن صورت گیرد:
یکی دیگر از سیاستهای اساسی برای شروع میتواند این مورد باشد، اگر قرار است ارتباط سرویسها در یک بستر امن صورت گیرد این میتواند یک مورد مناسب باشد، برای مثال جهت اجرای این سیاست ارتباطات میتوانند توسط Apache اجرا کنید
۳-سرویس باید خود توصیفگر باشد:
هنگام استقرار یک سرویس باید خود توصیفگر باشد، شما نباید برای تعامل با یک سرویس و نحوه ارتباط با آن نیاز به یک کتاب بزرگ راهنمایی جهت خوندن اون باشید
ما سیاستهای پایه خودمون رو مشخص کردیم حال به سراغ سیاستهای دستهبندی میریم و اونهارو بررسی میکنیم
#microservoce
#soa
@code_crafters
👍4
2-سیاستهای دسته بندی شده
2-1سیاست های طراحی و مستندسازی
2-2 سیاستهای امنیتی
2-3موارد تست و کارایی
در سازمان خود اگر برای بخشهایی از سیاستها ابزار خاصی مدنظر دارید در داخل سند ارائه شده مطرح کنید برای مثال:
فراموش نکنید هرچقدر سند نگاره سیاستهای سازمانی شما جامعتر و قابل درکتر باشد موجب میشود تا هزینههای سازمان بشدت کاهش یافته، روند توسعه سریعتر گردد، به شما در هندل کردن پیچیدگی SOA کمک کند و مهارتهای مورد نیاز سازمان کامل مشخص گردد
#microservice
#soa
@code_crafters
2-1سیاست های طراحی و مستندسازی
۱- مستندسازی سرویسهای خود را ایجاد کنید:
تمام سرویسها باید مستندسازی شوند. شما باید بتوانید بدون نیاز به بررسی دفترچه راهنما از یک سرویس استفاده کنید
۲-استفاده مجدد از استانداردهای تبادل داده (پیام) موجود:
اگر یک مدل استاندارد یا واقعی وجود دارد که در سازمان یا دامنه تجاری شما استفاده می شود، باید از آن مدل در سرویس خود استفاده کنید.(برای مثال استفاده از REST برای کاربران نهایی و WS-* برای تجارت بین سازمانی، شماتیک json مشخص در خروجی)
۳-طراحی برای قابلیت استفاده مجدد
قبل از شروع کار بر روی یک سرویس جدید، باید مطمئن شوید که در حال حاضر سرویسی وجود ندارد که همان عملکرد را ارائه دهد یا به راحتی قابل توسعه (داخل متن مرجوعی از کلمه تغییر بجای توسعه استفاده کرده و با توجه به اصول solid در این خصوص من از کلمه توسعه استفاده کردم تا ذهنیت توسعه دهندگان در خصوص اصول باقی بماند) باشد تا عملکرد مورد نیاز را ارائه دهد.
۴-پشتیبانی از چندین نسخه از سرویس:
پشتیبانی از چندین نسخه از یک سرویس در کنار یکدیگر باید امکان پذیر باشد.تغییرات در نسخه ها باید تا حد امکان بر مصرف کننده تأثیر بگذارد.
2-2 سیاستهای امنیتی
۱-رمزنگاری کانال ارتباطی برای دادههای حساس:
تمامی ارتباطات با سرویس شما باید در یک کانال امن صورت بگیرد
۲- تایید یکپارچگی و عدم انکار پیام:
باید مطمئن شوید که میتوانید یکپارچگی و منشأ دادههای پیام را تضمین کنید.(برای مثال ارسال مشخص امضا شده دو طرفه، استفاده از گواهینامههای اعتبارسنجی، در برخی از پروتکلها مانند ws-secureconversion این امکان بصورت فیچر وجود دارد)
۳-سرویس احرازهویت مرکزی:
هنگامی که یک مصرف کننده نیاز به احراز هویت برای خدمات شما دارد، باید فقط یک بار احراز هویت کند، نه به طور جداگانه برای هر سرویس.
۴-استفاده از یک سیستم هویت متمرکز برای مجوزها:
مجوز مورد استفاده همه سرویسها می باشد.برای جلوگیری از اجرای این مورد برای هر سرویس به طور جداگانه، باید از یک سیستم هویت و مجوز متمرکز استفاده کنید.
2-3موارد تست و کارایی
۱-پردازش پیام در ۱۰ ثانیه:
یک سرویس همیشه باید در کمترین زمان ممکن پاسخ دهد
۲-مانیتور سرویس بموقع(real time):
اگر می خواهید خدمات خود را به طور موثر نظارت کنید، باید بتوانید عملکرد را در زمان واقعی اندازه گیری کنید.
۳-یک ویوی منعطف برای نحوه استفاده از سرویس ارائه دهید:
بسته به نیازهای تحلیلگران، باید بتوانید دیدگاه های متفاوتی از نحوه استفاده از سرویس خود نشان دهید.
۴-اجرای سرویسها در فضای ابری:
تمام سرویس هایی که توسعه می یابند باید به صورت افقی مقیاس پذیر باشند تا از صرف سرمایه زیاد در سخت افزار جلوگیری شود و امکان رشد خطی فراهم گردد
۵-کیفیت کد و پوشش تست را اعمال کنید:
تمامی سرویسهای شما باید با درصد خاصی از پوشش کد مطابقت داشته باشد و حداقل سطح کیفیت از پیش تعریف شده داشته باشد.
در سازمان خود اگر برای بخشهایی از سیاستها ابزار خاصی مدنظر دارید در داخل سند ارائه شده مطرح کنید برای مثال:
در بخش مانیتورینگ از graphana telegraf یا Prometheus یا BAM استفاده میشود
در بخش کیفیت سنجی و تحلیل کد از sonarqube با sage استفاده میگردد
در بخش تست کدها از end2end یا integration استفاده میگردد
برای بررسی لاگها ELK استفاده میگردد
برای container orchestrations از k8s استفاده میگردد
فراموش نکنید هرچقدر سند نگاره سیاستهای سازمانی شما جامعتر و قابل درکتر باشد موجب میشود تا هزینههای سازمان بشدت کاهش یافته، روند توسعه سریعتر گردد، به شما در هندل کردن پیچیدگی SOA کمک کند و مهارتهای مورد نیاز سازمان کامل مشخص گردد
#microservice
#soa
@code_crafters
👍4
تصور واقعی ما از کسانی که تو رزومه میزنن مسلط به چند زبان (در ظاهر خودشون و بقیه شیر اما از دیدگاه مدیران فنی و ...)
#fun
@code_crafters
#fun
@code_crafters
😁12👍2
CodeCrafters
https://telegra.ph/Stacks-and-queues-09-30 #algorithm @code_crafters
Queue¹
صف²
یک صف شبیه به یک استک³ است، اما روش متفاوتی را برای افزودن و حذف عناصر تعریف میکند.
عناصر از یک انتها اضافه میشوند که به آن rear⁴ میگویند و از انتهای دیگر به نام front⁵ حذف میشوند.
به این رفتار FIFO⁶ (First in First Out) گفته میشود.
برای تجسم عملکرد آن می توانید یک صف از افراد را در نظر بگیرید. افراد به ترتیب وارد صف می شوند. به مرور طول صف افزایش مییابد. سپس افراد به ترتیبی که وارد صف شده اند، از صف خارج میشوند. در این صورت اولین نفری که وارد صف شده، اولین نفری است که از صف خارج خواهد شد.
اصطلاح شناسی
فرآیند افزودن عناصر جدید به صف را enqueue⁷ میگویند.
فرآیند حذف یک عنصر از صف را dequeue⁸ میگویند.
برنامههای کاربردی
از صفها هر زمان که نیاز به مدیریت اشیاء⁹ داشته باشیم به منظور شروع با اولین مورد وارد شده استفاده میشود.
سناریوها شامل چاپ اسناد¹⁰ بر روی چاپگر، سیستمهای مرکز تماس پاسخگویی به افراد در انتظار و غیره است.
📌 لیست¹¹های پایتون سادهترین راه برای پیادهسازی عملکرد یک صف هستند.
پانوشت:
1. به فارسی: صف
2. به انگلیسی: Queue
3. Stack (به فارسی: پُشته)
4. انتها، پشت
5. جلو
6. First in First Out
یا به اختصار FIFO یعنی خروج به ترتیب ورود، یکی از روشهای سازماندهی کنترل داده با توجه به زمان و اولویتبندی است.
7. enqueue
کردن، عنصری را به انتهای Queue (صف) اضافه میکند.
8. dequeue
کردن، اولین عنصر یا همان عنصر جلوی صف را از Queue خارج و حذف خواهد کرد.
9. Object
10. Document
11. List
#data_structures
#algorithm
@code_crafters
صف²
یک صف شبیه به یک استک³ است، اما روش متفاوتی را برای افزودن و حذف عناصر تعریف میکند.
عناصر از یک انتها اضافه میشوند که به آن rear⁴ میگویند و از انتهای دیگر به نام front⁵ حذف میشوند.
به این رفتار FIFO⁶ (First in First Out) گفته میشود.
برای تجسم عملکرد آن می توانید یک صف از افراد را در نظر بگیرید. افراد به ترتیب وارد صف می شوند. به مرور طول صف افزایش مییابد. سپس افراد به ترتیبی که وارد صف شده اند، از صف خارج میشوند. در این صورت اولین نفری که وارد صف شده، اولین نفری است که از صف خارج خواهد شد.
اصطلاح شناسی
فرآیند افزودن عناصر جدید به صف را enqueue⁷ میگویند.
فرآیند حذف یک عنصر از صف را dequeue⁸ میگویند.
برنامههای کاربردی
از صفها هر زمان که نیاز به مدیریت اشیاء⁹ داشته باشیم به منظور شروع با اولین مورد وارد شده استفاده میشود.
سناریوها شامل چاپ اسناد¹⁰ بر روی چاپگر، سیستمهای مرکز تماس پاسخگویی به افراد در انتظار و غیره است.
📌 لیست¹¹های پایتون سادهترین راه برای پیادهسازی عملکرد یک صف هستند.
پانوشت:
1. به فارسی: صف
2. به انگلیسی: Queue
3. Stack (به فارسی: پُشته)
4. انتها، پشت
5. جلو
6. First in First Out
یا به اختصار FIFO یعنی خروج به ترتیب ورود، یکی از روشهای سازماندهی کنترل داده با توجه به زمان و اولویتبندی است.
7. enqueue
کردن، عنصری را به انتهای Queue (صف) اضافه میکند.
8. dequeue
کردن، اولین عنصر یا همان عنصر جلوی صف را از Queue خارج و حذف خواهد کرد.
9. Object
10. Document
11. List
#data_structures
#algorithm
@code_crafters
👍4🔥3
CodeCrafters
Queue¹ صف² یک صف شبیه به یک استک³ است، اما روش متفاوتی را برای افزودن و حذف عناصر تعریف میکند. عناصر از یک انتها اضافه میشوند که به آن rear⁴ میگویند و از انتهای دیگر به نام front⁵ حذف میشوند. به این رفتار FIFO⁶ (First in First Out) گفته میشود. برای تجسم…
صف در پایتون
بیایید کلاس Queue را با متُدهای enqueue، dequeue، is_empty و print مربوطه پیاده سازی کنیم.
ما از یک لیست برای ذخیره عناصر استفاده خواهیم کرد.
متُد enqueue یک عنصر را در ابتدای لیست اضافه میکند، در حالی که متُد dequeue آخرین عنصر را حذف میکند.
ℹ️ با کد بازی کنید و صف را در عمل ببینید!
#data_structures
#algorithm
@code_crafters
بیایید کلاس Queue را با متُدهای enqueue، dequeue، is_empty و print مربوطه پیاده سازی کنیم.
ما از یک لیست برای ذخیره عناصر استفاده خواهیم کرد.
class Queue:
def __init__(self):
self.items = []
def is_empty(self):
return self.items == []
def enqueue(self, item):
self.items.insert(0, item)
def dequeue(self):
return self.items.pop()
def print_queue(self):
print(self.items)
q = Queue()
q.enqueue('a')
q.enqueue('b')
q.enqueue('42')
q.print_queue()
q.dequeue()
q.print_queue()
متُد enqueue یک عنصر را در ابتدای لیست اضافه میکند، در حالی که متُد dequeue آخرین عنصر را حذف میکند.
ℹ️ با کد بازی کنید و صف را در عمل ببینید!
#data_structures
#algorithm
@code_crafters
🔥4👍3👌1
Linked List¹
یک لینکدلیست² مجموعهای از گره³ها است که در آن هر گره داده⁴های خود و پیوند⁵ی به گره بعدی را ذخیره میکند.
یک گره به گره دیگری پیوند دارد و آنچه را که میتوان به عنوان یک زنجیره پیوندی⁶ در نظر گرفت، تشکیل میدهد:
اولین گره سَر⁷ نامیده میشود و به عنوان نقطه شروع برای هر تکرار⁸ در لیست استفاده میشود. آخرین گره باید پیوند آن به None⁹ اشاره داشته باشد، تا انتهای لیست تعیین شود.
برخلاف استکها¹⁰ و صفها¹¹، میتوانید گرهها را در هر جایگاهی از لینکدلیست (شبیه به یک لیست استاندارد) اضافه و حذف کنید.
برنامههای کاربردی
لینکدلیستها زمانی مفید هستند که دادههای شما پیوند داده شده است. به عنوان مثال، زمانی که به عملکرد بازگردانی-بازانجام¹² نیاز دارید، گرهها میتوانند وضعیت را با پیوندهایی به حالتهای قبلی و بعدی نشان دهند. مثال دیگر میتواند یک پلیلیست¹³ موسیقی باشد که در آن هر بُرش¹⁴ با بُرش بعدی مرتبط است.
📌 لینکدلیستها همچنین میتوانند برای ایجاد سایر ساختارهای داده¹⁵ مانند استکها، صفها و گرافها¹⁶ استفاده شوند.
پانوشت:
1. به فارسی: لیست پیوندی (فهرست پیوندی)
2. Linked List
3. Node
یا نود یک نقطه اتصال در شبکه است. این نقطه اتصال میتواند یکی از نقاط توزیع مجدد داده یا نقاط ارتباطی باشد که اطلاعات را ارسال و دریافت میکنند. اما این همه آنچه که در خصوص node یا گره در شبکه نیست.
4. Data
5. Link
6. Linked Chain
7. Head
8. Iteration
9. از None برای نشان دادن عدم وجود یک مقدار استفاده میشود. این در زبانهای دیگر برنامهنویسی مشابه است. مانند دیگر مقادیر خالی مانند 0، [] و رشته خالی، زمانی که به یک متغیر بولی تبدیل میشود false خواهد بود.
10. Stacks (پشتهها)
11. Queues
12. Undo/ Redo
13. Playlist
14. Clip
15. Data Structures
16. Graphs
دیتا استراکچر یا ساختمان دادهای است که به منظور مدلسازی مجموعهای از اشیاء و ارتباطات مابین آنها مورد استفاده قرار میگیرد.
#data_structures
#algorithm
@code_crafters
یک لینکدلیست² مجموعهای از گره³ها است که در آن هر گره داده⁴های خود و پیوند⁵ی به گره بعدی را ذخیره میکند.
یک گره به گره دیگری پیوند دارد و آنچه را که میتوان به عنوان یک زنجیره پیوندی⁶ در نظر گرفت، تشکیل میدهد:
اولین گره سَر⁷ نامیده میشود و به عنوان نقطه شروع برای هر تکرار⁸ در لیست استفاده میشود. آخرین گره باید پیوند آن به None⁹ اشاره داشته باشد، تا انتهای لیست تعیین شود.
برخلاف استکها¹⁰ و صفها¹¹، میتوانید گرهها را در هر جایگاهی از لینکدلیست (شبیه به یک لیست استاندارد) اضافه و حذف کنید.
برنامههای کاربردی
لینکدلیستها زمانی مفید هستند که دادههای شما پیوند داده شده است. به عنوان مثال، زمانی که به عملکرد بازگردانی-بازانجام¹² نیاز دارید، گرهها میتوانند وضعیت را با پیوندهایی به حالتهای قبلی و بعدی نشان دهند. مثال دیگر میتواند یک پلیلیست¹³ موسیقی باشد که در آن هر بُرش¹⁴ با بُرش بعدی مرتبط است.
📌 لینکدلیستها همچنین میتوانند برای ایجاد سایر ساختارهای داده¹⁵ مانند استکها، صفها و گرافها¹⁶ استفاده شوند.
پانوشت:
1. به فارسی: لیست پیوندی (فهرست پیوندی)
2. Linked List
3. Node
یا نود یک نقطه اتصال در شبکه است. این نقطه اتصال میتواند یکی از نقاط توزیع مجدد داده یا نقاط ارتباطی باشد که اطلاعات را ارسال و دریافت میکنند. اما این همه آنچه که در خصوص node یا گره در شبکه نیست.
4. Data
5. Link
6. Linked Chain
7. Head
8. Iteration
9. از None برای نشان دادن عدم وجود یک مقدار استفاده میشود. این در زبانهای دیگر برنامهنویسی مشابه است. مانند دیگر مقادیر خالی مانند 0، [] و رشته خالی، زمانی که به یک متغیر بولی تبدیل میشود false خواهد بود.
10. Stacks (پشتهها)
11. Queues
12. Undo/ Redo
13. Playlist
14. Clip
15. Data Structures
16. Graphs
دیتا استراکچر یا ساختمان دادهای است که به منظور مدلسازی مجموعهای از اشیاء و ارتباطات مابین آنها مورد استفاده قرار میگیرد.
#data_structures
#algorithm
@code_crafters
🔥4👍1
CodeCrafters
Linked List¹ یک لینکدلیست² مجموعهای از گره³ها است که در آن هر گره داده⁴های خود و پیوند⁵ی به گره بعدی را ذخیره میکند. یک گره به گره دیگری پیوند دارد و آنچه را که میتوان به عنوان یک زنجیره پیوندی⁶ در نظر گرفت، تشکیل میدهد: اولین گره سَر⁷ نامیده میشود…
لینکدلیست در پایتون
هر گره شامل داده و پیوند به گره بعدی خواهد بود.
بیایید با ایجاد کلاس Node¹ شروع کنیم:
اکنون میتوانیم کلاس LinkedList را با متُدهای مربوطه ایجاد کنیم:
متُد ()add_at_front یک Node جدید را به عنوان سَر لیست اضافه می کند و سَر قبلی را به آن پیوند میدهد.
متُد ()add_at_end با استفاده از یک حلقه² while تا انتهای لیست تکرار میشود و گره جدید را به عنوان پیوندِ آخرین گره اضافه میکند.
ℹ️ کد را اجرا کنید و ببینید چگونه کار میکند!
پانوشت:
1. نام کلاس "گره" (نود/ Node)
2. حلقه در برنامه نویسی یکی از عنصرهای برنامهنویسی به حساب میآید که به وسیله آن میتوان بخشی از کدها را به تعداد دفعات مشخص تا زمانی تکرار کرد که فرایند و پروسه مورد نظر به پایان برسد.
#data_structures
#algorithm
@code_crafters
هر گره شامل داده و پیوند به گره بعدی خواهد بود.
بیایید با ایجاد کلاس Node¹ شروع کنیم:
class Node:
def __init__(self, data, next):
self.data = data
self.next = next
اکنون میتوانیم کلاس LinkedList را با متُدهای مربوطه ایجاد کنیم:
class Node:
def __init__(self, data, next):
self.data = data
self.next = next
class LinkedList:
def __init__(self):
self.head = None
def add_at_front(self, data):
self.head = Node(data, self.head)
def add_at_end(self, data):
if not self.head:
self.head = Node(data, None)
return
curr = self.head
while curr.next:
curr = curr.next
curr.next = Node(data, None)
def get_last_node(self):
n = self.head
while(n.next != None):
n = n.next
return n.data
def is_empty(self):
return self.head == None
def print_list(self):
n = self.head
while n != None:
print(n.data, end = " => ")
n = n.next
print()
s = LinkedList()
s.add_at_front(5)
s.add_at_end(8)
s.add_at_front(9)
s.print_list()
print(s.get_last_node())
متُد ()add_at_front یک Node جدید را به عنوان سَر لیست اضافه می کند و سَر قبلی را به آن پیوند میدهد.
متُد ()add_at_end با استفاده از یک حلقه² while تا انتهای لیست تکرار میشود و گره جدید را به عنوان پیوندِ آخرین گره اضافه میکند.
ℹ️ کد را اجرا کنید و ببینید چگونه کار میکند!
پانوشت:
1. نام کلاس "گره" (نود/ Node)
2. حلقه در برنامه نویسی یکی از عنصرهای برنامهنویسی به حساب میآید که به وسیله آن میتوان بخشی از کدها را به تعداد دفعات مشخص تا زمانی تکرار کرد که فرایند و پروسه مورد نظر به پایان برسد.
#data_structures
#algorithm
@code_crafters
👍4🔥4👌1
سیستم SSO (single sign-on) چیست؟
در واقع sso یک سیستم احراز هویت هستش، تکنولوژی که صفحات مختلف ورود برنامههای مختلف رو در یک صفحه ترکیب میکنه، با sso کاربر تنها یکبار اعتبارنامه خودش (نام کاربری و رمزعبور) رو در یک صفحه وارد میکنه و به همه برنامههای SaaS مورد نیاز خود دسترسی پیدا میکنه
در واقع sso توسط زمینه تجاری مورد استفاده قرار میگیرد، زمانیکه تمام برنامههای کاربردی کاربر توسط یک تیم متخصص IT ارائه و مدیریت میگردد
یک سازمان رو در نظر بگیرید که چندین برنامه کاربردی مختلف دارد و کاربر برای هر برنامه باید بصورت جداگانه هویت خود رو احراز کند، این موجب میشه تا در نهایت کاربران نهایی از انجام آن خسته و یا بخواهند آنرا به هر طریقی شده دور بزنند، sso در اینجا این امکان رو فراهم میکنه تا کاربر تنها با یکبار مشخص کردن هویت خود به تمامی سرویسهای کاربردی دسترسی پیدا کند، sso یک جنبه مهم از تمام راه حلهای مدیریت هویت و دسترسی یا کنترل دسترسی (IAM) و تایید هویت کاربر برای دانستن مجوزهای که هرکاربر باید داشته باشد است
مزایای استفاده از sso
علاوه بر سادگی استفاده از آن برای کاربران، امنیت آن نیز بسیار است، اما چگونه ممکن است استفاده از یک نام کاربری و پسورد برای استفاده از چندین سرویس امنتر از استفاده از چندین نام کاربری و پسورد باشد، دلایل زیر میتواند توضیح قانع کنندهای باشد:
۱-پسورد سخت:
کاربران تنها از یک پسورد استفاده میکنند و sso امکان ساخت و به یاد داشتن پسورد سخت رو فراهم میکنه چون کاربران تنها از یک پسورد استفاده میکنند و پسورد سخت از حملات (brute force attack) جلوگیری میکند، حدس زدن یک پسورد سخت کار رو غیر ممکن میکند
۲-عدم تکرار پسورد:
وقتی کاربران برای هر سرویس نیاز به پسورد داشته باشند معمولا از یک پسورد تکراری در تمامی سرویسها استفاده میکنند(یک رمز یکسان برای تمامی سرویسها) اگر دادههای دیتابیس یک سرویس لو بره با همون پسورد کاربر میتوانن به همه سرویسهای دیگه دسترسی پیدا کنند، sso با حذف چندین صفحه ورود به یک صفحه این مورد رو رفع میکند
۳-اعمال و اجرا کردن سیاستهای رمز عبور:
با استفاده از سیستم sso متخصصان IT میتوانند به راحتی سیاستهای رمز عبور خود را اعمال کنند برای مثال: بجای بازنشانی رمز عبور دورهای در سرویسهای مختلف با استفاده از sso کاربر تنها در یک سرویس بطور دورهای رمز عبور خود را بازنشانی میکند
۴-احراز هویتهای چندعامله(multi-factore authentication):
یا به اختصار MFA رجوع میکنه به بیش از یک عامل هویت سنجی، برای مثال علاوه بر نام کاربری و رمز عبور کاربر ممکن است مجبور به استفاده از احرازهویت سخت افزاری هم گردد، این قطعه سخت افزاری در شناسایی کاربر بسیار مهم است، MFA بسیار امنتر از اتکا به رمز عبور میباشد، sso امکان استفاده از MFA رو در یک نقطه واحد بجای استفاده از آن در چندین نقطه که ممکن است غیرقابل پیاده سازی باشد فراهم میکند
۵-یک نقطه برای ورود رمز عبور:
ناظران سیستم میتوانند پس از مدت مشخصی اعتبارنامه را مجدد وارد کنند تا اطمینان حاصل کنند که همان کاربر همچنان در دستگاهی که به سیستم وارد شده فعال است، با sso انها یک مکان مرکزی برای انجام اینکار رو برای همه برنامههای داخلی دارند، به جای اینکه اینکار رو در چندین برنامه مختلف اعمال کنند که ممکن است برخی از آنها این مورد رو پشتیبانی نکنند
۶-مدیریت اعتبار داخلی بجای حافظه خارجی:
معمولا رمزعبور کاربران بصورت مدیریت نشده توسط برنامهها و سرویسهای که ممکن است از بهترین شیوههای امنیتی پیروی کنند یا نکنند ذخیره میشوند، با sso آنها بصورت داخلی در محیطی ذخیره میشوند که تیم IT کنترل بیشتری روی آن دارد
۷-اتلاف زمان کمتر جهت بازیابی رمز عبور:
علاوه بر مزایای ذکر شده ،sso زمان تلف شده رو برای تیمهای داخلی کاهش میدهد، تیم IT زمان کمتری رو برای کمک به بازیابی رمز عبور کاربران میکند و کاربران زمان کمتری رو صرف ورود به برنامههای مختلف برای انجام کارهای خود میکندد،این پتانسیل موجب افزایش بهره وری کسب و کار میشود
#microservice
#sso
@code_crafters
در واقع sso یک سیستم احراز هویت هستش، تکنولوژی که صفحات مختلف ورود برنامههای مختلف رو در یک صفحه ترکیب میکنه، با sso کاربر تنها یکبار اعتبارنامه خودش (نام کاربری و رمزعبور) رو در یک صفحه وارد میکنه و به همه برنامههای SaaS مورد نیاز خود دسترسی پیدا میکنه
در واقع sso توسط زمینه تجاری مورد استفاده قرار میگیرد، زمانیکه تمام برنامههای کاربردی کاربر توسط یک تیم متخصص IT ارائه و مدیریت میگردد
یک سازمان رو در نظر بگیرید که چندین برنامه کاربردی مختلف دارد و کاربر برای هر برنامه باید بصورت جداگانه هویت خود رو احراز کند، این موجب میشه تا در نهایت کاربران نهایی از انجام آن خسته و یا بخواهند آنرا به هر طریقی شده دور بزنند، sso در اینجا این امکان رو فراهم میکنه تا کاربر تنها با یکبار مشخص کردن هویت خود به تمامی سرویسهای کاربردی دسترسی پیدا کند، sso یک جنبه مهم از تمام راه حلهای مدیریت هویت و دسترسی یا کنترل دسترسی (IAM) و تایید هویت کاربر برای دانستن مجوزهای که هرکاربر باید داشته باشد است
مزایای استفاده از sso
علاوه بر سادگی استفاده از آن برای کاربران، امنیت آن نیز بسیار است، اما چگونه ممکن است استفاده از یک نام کاربری و پسورد برای استفاده از چندین سرویس امنتر از استفاده از چندین نام کاربری و پسورد باشد، دلایل زیر میتواند توضیح قانع کنندهای باشد:
۱-پسورد سخت:
کاربران تنها از یک پسورد استفاده میکنند و sso امکان ساخت و به یاد داشتن پسورد سخت رو فراهم میکنه چون کاربران تنها از یک پسورد استفاده میکنند و پسورد سخت از حملات (brute force attack) جلوگیری میکند، حدس زدن یک پسورد سخت کار رو غیر ممکن میکند
۲-عدم تکرار پسورد:
وقتی کاربران برای هر سرویس نیاز به پسورد داشته باشند معمولا از یک پسورد تکراری در تمامی سرویسها استفاده میکنند(یک رمز یکسان برای تمامی سرویسها) اگر دادههای دیتابیس یک سرویس لو بره با همون پسورد کاربر میتوانن به همه سرویسهای دیگه دسترسی پیدا کنند، sso با حذف چندین صفحه ورود به یک صفحه این مورد رو رفع میکند
۳-اعمال و اجرا کردن سیاستهای رمز عبور:
با استفاده از سیستم sso متخصصان IT میتوانند به راحتی سیاستهای رمز عبور خود را اعمال کنند برای مثال: بجای بازنشانی رمز عبور دورهای در سرویسهای مختلف با استفاده از sso کاربر تنها در یک سرویس بطور دورهای رمز عبور خود را بازنشانی میکند
۴-احراز هویتهای چندعامله(multi-factore authentication):
یا به اختصار MFA رجوع میکنه به بیش از یک عامل هویت سنجی، برای مثال علاوه بر نام کاربری و رمز عبور کاربر ممکن است مجبور به استفاده از احرازهویت سخت افزاری هم گردد، این قطعه سخت افزاری در شناسایی کاربر بسیار مهم است، MFA بسیار امنتر از اتکا به رمز عبور میباشد، sso امکان استفاده از MFA رو در یک نقطه واحد بجای استفاده از آن در چندین نقطه که ممکن است غیرقابل پیاده سازی باشد فراهم میکند
۵-یک نقطه برای ورود رمز عبور:
ناظران سیستم میتوانند پس از مدت مشخصی اعتبارنامه را مجدد وارد کنند تا اطمینان حاصل کنند که همان کاربر همچنان در دستگاهی که به سیستم وارد شده فعال است، با sso انها یک مکان مرکزی برای انجام اینکار رو برای همه برنامههای داخلی دارند، به جای اینکه اینکار رو در چندین برنامه مختلف اعمال کنند که ممکن است برخی از آنها این مورد رو پشتیبانی نکنند
۶-مدیریت اعتبار داخلی بجای حافظه خارجی:
معمولا رمزعبور کاربران بصورت مدیریت نشده توسط برنامهها و سرویسهای که ممکن است از بهترین شیوههای امنیتی پیروی کنند یا نکنند ذخیره میشوند، با sso آنها بصورت داخلی در محیطی ذخیره میشوند که تیم IT کنترل بیشتری روی آن دارد
۷-اتلاف زمان کمتر جهت بازیابی رمز عبور:
علاوه بر مزایای ذکر شده ،sso زمان تلف شده رو برای تیمهای داخلی کاهش میدهد، تیم IT زمان کمتری رو برای کمک به بازیابی رمز عبور کاربران میکند و کاربران زمان کمتری رو صرف ورود به برنامههای مختلف برای انجام کارهای خود میکندد،این پتانسیل موجب افزایش بهره وری کسب و کار میشود
#microservice
#sso
@code_crafters
👍5
توکنهای احرازهویت SSO چگونه کار میکندد؟
توانایی ارسال توکن احراز هویت به برنامهها و سرویسهای خارجی در فرآیند SSO بسیار مهم است. این همان چیزی است که سیستم تأیید هویت را قادر می سازد جدا از سایر سرویس های ابری انجام شود و SSO را ممکن می کند.
یک رویداد اجتماعی را تصور کنید که تنها یکعده خاص از مردم میتوانند در آن شرکت کنند، یک راه برای بررسی آن این است در قسمت ورودی نگهبانانی بگذاریم که ورود افراد رو چک کنه و مهر تایید بر اجازه ورود صادر بشود، شبیه هر مهر که یکسری پارامترهای تاییدی دارد توکن احرازهویت نیز پارامترهایی دارد که صحت آنرا نشان میدهد،این استاندارد توکن احراز هویت رو با نام SAML (Security Assertion Markup Language) میشناسیم
چگونه SSO در یک استراتژی مدیریت دسترسی قرار می گیرد؟
در واقع sso تنها یک جنبه مدیریت دسترسی هستش، این باید ترکیبی باشد از کنترل دسترسی، کنترل سطح دسترسی، لاگ فعالیتها و سایر اقدامات جهت رهگیری و کنترل رفتار کاربر درون برنامههای سازمانی، با این حال، SSO یک عنصر حیاتی در مدیریت دسترسی است. اگر سیستمی نداند کاربر کیست، هیچ راهی برای اجازه یا محدود کردن اعمال آن کاربر وجود ندارد.
سیستم sso یک سرویس حیاتی در مبحث میکروسرویس هستش که سعی میکنیم این سرویس رو با جنگو و یک پلتفرم مخصوص و معروف آن پیاده سازی کنیم
#microservice
#sso
@code_crafters
توانایی ارسال توکن احراز هویت به برنامهها و سرویسهای خارجی در فرآیند SSO بسیار مهم است. این همان چیزی است که سیستم تأیید هویت را قادر می سازد جدا از سایر سرویس های ابری انجام شود و SSO را ممکن می کند.
یک رویداد اجتماعی را تصور کنید که تنها یکعده خاص از مردم میتوانند در آن شرکت کنند، یک راه برای بررسی آن این است در قسمت ورودی نگهبانانی بگذاریم که ورود افراد رو چک کنه و مهر تایید بر اجازه ورود صادر بشود، شبیه هر مهر که یکسری پارامترهای تاییدی دارد توکن احرازهویت نیز پارامترهایی دارد که صحت آنرا نشان میدهد،این استاندارد توکن احراز هویت رو با نام SAML (Security Assertion Markup Language) میشناسیم
چگونه SSO در یک استراتژی مدیریت دسترسی قرار می گیرد؟
در واقع sso تنها یک جنبه مدیریت دسترسی هستش، این باید ترکیبی باشد از کنترل دسترسی، کنترل سطح دسترسی، لاگ فعالیتها و سایر اقدامات جهت رهگیری و کنترل رفتار کاربر درون برنامههای سازمانی، با این حال، SSO یک عنصر حیاتی در مدیریت دسترسی است. اگر سیستمی نداند کاربر کیست، هیچ راهی برای اجازه یا محدود کردن اعمال آن کاربر وجود ندارد.
سیستم sso یک سرویس حیاتی در مبحث میکروسرویس هستش که سعی میکنیم این سرویس رو با جنگو و یک پلتفرم مخصوص و معروف آن پیاده سازی کنیم
#microservice
#sso
@code_crafters
👍4
در ادامه مبحث میکروسرویس رسیدیم به sso و اکنون با یک پلتفرم جامع بابتش آشنا خواهیم شد
در پست قبل گفتیم تمامی سرویسها و برنامههای ما نیاز به احراز هویت دارن و با استفاده از sso تمام صفحات ورود رو در یک صفحه جا میدیم، برای اینکار یک پلتفرم رایگان و پر استفاده وجود دارد از شرکت readhat با نام keycloak
در واقع keycloak یک ابزار رایگان شناسایی هویت و مدیریت دسترسی میباشد(IAM) identity and access management ، فرآیند احراز هویت رو برای سرویسهای IT ساده میکند
هدف از ابزار IAM اطمینان حاصل کردن از این مورد است که مردم به منابع درستی دسترسی دارن، که معمولاً اجرای SSO, فدراسیون هویت (identity federation) و احراز هویت قوی (authentication strong) رو امکان پذیر می کند
همه شما استفاده از مدیریت هویت و دسترسی (IAM) را می دانید.کاربرد اصلی راه حل IAM این است که به عنوان یک Identity Provider (IdP) عمل می کند، به این معنی که هویت های دیجیتالی کاربر و همچنین فاکتورهای احراز هویت آنها را ایجاد، نگهداری و مدیریت می کند
اما این سوالات پیش میاد
نخست keycloak چیست؟؟
یک ابزار برای IAM هستش که مجوز Apache رو داره و توسط شرکت redhat برای sso طراحی شده است
با keycloak شما میتونید در تایم کوتاهی سرویس خودتون رو امن و احرازهویت رو به برنامه خود اضافه کنید
با استفاده از کنسول ادمین keycloak ،کمپانیها میتونن با شبکههای اجتماعی سریعا وارد بشن، اینجا کد یا برنامهای تغییر نمیکنه، تمامی این موارد نیازمند انتخاب شبکه اجتماعی میباشد، ادمینها میتونن تمام جنبههای keycloak رو به سادگی مدیریت کنند، برای مثال فعال و غیرفعال کردن ویژگیهای آن
ویژگیهای keycloak
در واقع keycloak از سه نوع پروتکل oidc, oauth2, saml پشتیبانی میکند
این ابزار بصورت کامل از SSO که مخفف single-sign on و single-sign out میباشد پشتیبانی میکند
کنسول ادمین
یک رابط کاربری گرافیکی مبتنی بر وب توسط Keycloak ارائه شده است، که در آن میتوانید تمام تنظیمات مورد نیاز خود را با «کلیک کنید» آنطور که میخواهید کار کند تنظیم کنید
دسترسی و هویت شناسی کاربر
ما میتونیم بگیم که keycloak یک ابزار مستقل برای مدیریت هویت و دسترسی کاربران است، که به ما اجازه داشتن یک دیتابیس از کاربران، نقشها و گروهها رو میده، ما میتونیم از این اطلاعات بیشتر برای احراز هویت کاربران در برنامههامون استفاده کنیم و بخشهایی از آن را بر اساس نقشهای از پیش تعریفشده ایمن کنیم
میتواند نقش یک پروکسی رو بین کاربران و ارائه دهندگان هویت سنجی خارجی رو ایفا کنه
مهمترین ویژگی آن اجازه دادن به ارائه دهندگان احراز هویت خارجی می باشد و شما میتوانید موارد رو در کنسول ادمین آن کنترل کنید
مزایای keycloak
#microservice
#sso #keycloak
@code_crafters
در پست قبل گفتیم تمامی سرویسها و برنامههای ما نیاز به احراز هویت دارن و با استفاده از sso تمام صفحات ورود رو در یک صفحه جا میدیم، برای اینکار یک پلتفرم رایگان و پر استفاده وجود دارد از شرکت readhat با نام keycloak
در واقع keycloak یک ابزار رایگان شناسایی هویت و مدیریت دسترسی میباشد(IAM) identity and access management ، فرآیند احراز هویت رو برای سرویسهای IT ساده میکند
هدف از ابزار IAM اطمینان حاصل کردن از این مورد است که مردم به منابع درستی دسترسی دارن، که معمولاً اجرای SSO, فدراسیون هویت (identity federation) و احراز هویت قوی (authentication strong) رو امکان پذیر می کند
همه شما استفاده از مدیریت هویت و دسترسی (IAM) را می دانید.کاربرد اصلی راه حل IAM این است که به عنوان یک Identity Provider (IdP) عمل می کند، به این معنی که هویت های دیجیتالی کاربر و همچنین فاکتورهای احراز هویت آنها را ایجاد، نگهداری و مدیریت می کند
اما این سوالات پیش میاد
خود keycloak چیست؟؟
ویژگی و سودمندی آن چیست؟؟
چگونه تاثیر گذاره؟؟
ما به این سوالات پاسخ میدیم
نخست keycloak چیست؟؟
یک ابزار برای IAM هستش که مجوز Apache رو داره و توسط شرکت redhat برای sso طراحی شده است
با keycloak شما میتونید در تایم کوتاهی سرویس خودتون رو امن و احرازهویت رو به برنامه خود اضافه کنید
با استفاده از کنسول ادمین keycloak ،کمپانیها میتونن با شبکههای اجتماعی سریعا وارد بشن، اینجا کد یا برنامهای تغییر نمیکنه، تمامی این موارد نیازمند انتخاب شبکه اجتماعی میباشد، ادمینها میتونن تمام جنبههای keycloak رو به سادگی مدیریت کنند، برای مثال فعال و غیرفعال کردن ویژگیهای آن
ویژگیهای keycloak
در واقع keycloak از سه نوع پروتکل oidc, oauth2, saml پشتیبانی میکند
این ابزار بصورت کامل از SSO که مخفف single-sign on و single-sign out میباشد پشتیبانی میکند
کنسول ادمین
یک رابط کاربری گرافیکی مبتنی بر وب توسط Keycloak ارائه شده است، که در آن میتوانید تمام تنظیمات مورد نیاز خود را با «کلیک کنید» آنطور که میخواهید کار کند تنظیم کنید
دسترسی و هویت شناسی کاربر
ما میتونیم بگیم که keycloak یک ابزار مستقل برای مدیریت هویت و دسترسی کاربران است، که به ما اجازه داشتن یک دیتابیس از کاربران، نقشها و گروهها رو میده، ما میتونیم از این اطلاعات بیشتر برای احراز هویت کاربران در برنامههامون استفاده کنیم و بخشهایی از آن را بر اساس نقشهای از پیش تعریفشده ایمن کنیم
میتواند نقش یک پروکسی رو بین کاربران و ارائه دهندگان هویت سنجی خارجی رو ایفا کنه
مهمترین ویژگی آن اجازه دادن به ارائه دهندگان احراز هویت خارجی می باشد و شما میتوانید موارد رو در کنسول ادمین آن کنترل کنید
مزایای keycloak
۱-سریع و منعطف:
جامعه ان نشان داده که بسیار سریع با تغییرات دنیای مهندسی خودش رو وفق میده و در کل طراحی keycloak خودش رو برای رویکرد agile آماده و مناسب کرده
۲-نرم افزار منبع باز:
شما میتوانید به تمامی کدهای برنامه بصورت رایگان دسترسی داشته باشید و از آن استفاده نمایید
۳-پشتیبانی و ثابت شده:
جامعه عظیم و پشتیبانی بزرگی از آن حمایت میکند که سریع میتوانند به شما بازخورد دهند
۴-احراز هویت و مجوز دسترسی:
با حداقل ترین تلاش و سریع احراز هویت و افزایش امنیت را به سازمان و برنامههای خود میتوانید اضافه کنید
۵-مدیریت سیستم:
حساب های کاربران را به طور یکپارچه مدیریت و داده ها و همچنین جلسات را حفظ می کند
۶-ماژول و مستقل:
می توان از آن به عنوان یک عنصر زیرساخت IT یا به عنوان یک راه حل مستقل استفاده کرد
#microservice
#sso #keycloak
@code_crafters
👍4🔥4
ایندکسها در پایگاه دادهها
یکی از مهمترین روشها برای افزایش سرعت دسترسی به دادهها در پایگاه دادهها، استفاده از ایندکسها است. ایندکسها به پایگاه دادهها کمک میکنند تا سریعتر دادهها را جستجو و بازیابی کنند. هرچند که انواع مختلفی از ایندکسها وجود دارد، اما در اینجا به دو نوع اصلی و پرکاربرد ایندکسها، یعنی ایندکسهای خوشهای و غیرخوشهای، میپردازیم.
چگونه پایگاه دادهها با ایندکسها کار میکنند؟
هنگامی که شما یک ایندکس را روی یک ستون در جدول پایگاه داده اعمال میکنید، پایگاه داده از روی آن ستون یک کپی میگیرد و آن را در پشت صحنه بر اساس الگوریتم خاص خود (مثلاً B-Tree) مرتب میکند. این فرآیند مرتبسازی به پایگاه داده اجازه میدهد تا زمانی که مقداری را از این ستون جستجو میکنید، بتواند سریعتر به مقدار مورد نظر دست یابد.
مزایای استفاده از ایندکسها:
- افزایش سرعت جستجو: ایندکسها به طور قابل توجهی سرعت جستجوها را افزایش میدهند، به خصوص در جداول بزرگ.
- بهبود عملکرد کوئریها: ایندکسها میتوانند به بهبود عملکرد کوئریهای پیچیده کمک کنند، به خصوص کوئریهایی که شامل عملیات JOIN و WHERE هستند.
معایب استفاده از ایندکسها:
- افزایش فضای ذخیرهسازی: هر ایندکس نیاز به فضای ذخیرهسازی اضافی دارد که میتواند حجم پایگاه داده را افزایش دهد.
- کاهش سرعت نوشتن: اضافه کردن، بهروزرسانی و حذف دادهها ممکن است زمان بیشتری ببرد، زیرا ایندکسها باید بهروزرسانی شوند.
انواع ایندکسها
نکته : تعداد ایندکس ها بیشتر از این دو مورد است ولی این دو مورد از مهم ترین و کاربردی ترین نوع ایندکس هستند.
1. ایندکسهای خوشهای (Clustered Index):
- ایندکسهای خوشهای نوعی ایندکس هستند که دادههای جدول را بر اساس مقادیر ستون ایندکس مرتب میکنند. هر جدول تنها میتواند یک ایندکس خوشهای داشته باشد زیرا ترتیب فیزیکی ردیفها در جدول را مشخص میکند.
- این نوع ایندکس برای ستونهایی مناسب است که دادههای آنها معمولاً مرتب شدهاند، مانند شناسه کاربری یا تاریخ.
- مزیت اصلی این نوع ایندکس این است که دسترسی به دادهها بسیار سریع است، زیرا دادهها به صورت فیزیکی مرتب شدهاند.
2. ایندکسهای غیرخوشهای (Non-Clustered Index):
- ایندکسهای غیرخوشهای، ایندکسهایی هستند که ترتیب فیزیکی ردیفهای جدول را تغییر نمیدهند. به جای آن، یک ساختار جداگانه برای ذخیره مقادیر ایندکس و اشارهگرهایی به مکانهای داده اصلی در جدول ایجاد میکنند.
- این نوع ایندکسها برای ستونهایی مناسب است که دادههای آنها معمولاً نامرتب هستند، مانند ایمیل، نام یا شماره تلفن.
- مزیت اصلی این نوع ایندکس این است که میتواند بر روی چندین ستون اعمال شود و انعطاف بیشتری در جستجوهای مختلف فراهم کند.
نتیجهگیری
استفاده از ایندکسها یک ابزار قدرتمند برای بهبود عملکرد پایگاه دادهها است. با این حال، انتخاب نوع مناسب ایندکس و استفاده هوشمندانه از آنها بسیار مهم است. در حالی که ایندکسها میتوانند به طور قابل توجهی سرعت دسترسی به دادهها را افزایش دهند، اما باید به تعادل بین مزایا و معایب آنها توجه کرد. انتخاب صحیح بین ایندکسهای خوشهای و غیرخوشهای بر اساس نیازهای خاص سیستم و نوع دادهها میتواند تأثیر زیادی بر عملکرد کلی پایگاه داده داشته باشد.
#Database
@Code_Crafters
یکی از مهمترین روشها برای افزایش سرعت دسترسی به دادهها در پایگاه دادهها، استفاده از ایندکسها است. ایندکسها به پایگاه دادهها کمک میکنند تا سریعتر دادهها را جستجو و بازیابی کنند. هرچند که انواع مختلفی از ایندکسها وجود دارد، اما در اینجا به دو نوع اصلی و پرکاربرد ایندکسها، یعنی ایندکسهای خوشهای و غیرخوشهای، میپردازیم.
چگونه پایگاه دادهها با ایندکسها کار میکنند؟
هنگامی که شما یک ایندکس را روی یک ستون در جدول پایگاه داده اعمال میکنید، پایگاه داده از روی آن ستون یک کپی میگیرد و آن را در پشت صحنه بر اساس الگوریتم خاص خود (مثلاً B-Tree) مرتب میکند. این فرآیند مرتبسازی به پایگاه داده اجازه میدهد تا زمانی که مقداری را از این ستون جستجو میکنید، بتواند سریعتر به مقدار مورد نظر دست یابد.
مزایای استفاده از ایندکسها:
- افزایش سرعت جستجو: ایندکسها به طور قابل توجهی سرعت جستجوها را افزایش میدهند، به خصوص در جداول بزرگ.
- بهبود عملکرد کوئریها: ایندکسها میتوانند به بهبود عملکرد کوئریهای پیچیده کمک کنند، به خصوص کوئریهایی که شامل عملیات JOIN و WHERE هستند.
معایب استفاده از ایندکسها:
- افزایش فضای ذخیرهسازی: هر ایندکس نیاز به فضای ذخیرهسازی اضافی دارد که میتواند حجم پایگاه داده را افزایش دهد.
- کاهش سرعت نوشتن: اضافه کردن، بهروزرسانی و حذف دادهها ممکن است زمان بیشتری ببرد، زیرا ایندکسها باید بهروزرسانی شوند.
انواع ایندکسها
نکته : تعداد ایندکس ها بیشتر از این دو مورد است ولی این دو مورد از مهم ترین و کاربردی ترین نوع ایندکس هستند.
1. ایندکسهای خوشهای (Clustered Index):
- ایندکسهای خوشهای نوعی ایندکس هستند که دادههای جدول را بر اساس مقادیر ستون ایندکس مرتب میکنند. هر جدول تنها میتواند یک ایندکس خوشهای داشته باشد زیرا ترتیب فیزیکی ردیفها در جدول را مشخص میکند.
- این نوع ایندکس برای ستونهایی مناسب است که دادههای آنها معمولاً مرتب شدهاند، مانند شناسه کاربری یا تاریخ.
- مزیت اصلی این نوع ایندکس این است که دسترسی به دادهها بسیار سریع است، زیرا دادهها به صورت فیزیکی مرتب شدهاند.
2. ایندکسهای غیرخوشهای (Non-Clustered Index):
- ایندکسهای غیرخوشهای، ایندکسهایی هستند که ترتیب فیزیکی ردیفهای جدول را تغییر نمیدهند. به جای آن، یک ساختار جداگانه برای ذخیره مقادیر ایندکس و اشارهگرهایی به مکانهای داده اصلی در جدول ایجاد میکنند.
- این نوع ایندکسها برای ستونهایی مناسب است که دادههای آنها معمولاً نامرتب هستند، مانند ایمیل، نام یا شماره تلفن.
- مزیت اصلی این نوع ایندکس این است که میتواند بر روی چندین ستون اعمال شود و انعطاف بیشتری در جستجوهای مختلف فراهم کند.
نتیجهگیری
استفاده از ایندکسها یک ابزار قدرتمند برای بهبود عملکرد پایگاه دادهها است. با این حال، انتخاب نوع مناسب ایندکس و استفاده هوشمندانه از آنها بسیار مهم است. در حالی که ایندکسها میتوانند به طور قابل توجهی سرعت دسترسی به دادهها را افزایش دهند، اما باید به تعادل بین مزایا و معایب آنها توجه کرد. انتخاب صحیح بین ایندکسهای خوشهای و غیرخوشهای بر اساس نیازهای خاص سیستم و نوع دادهها میتواند تأثیر زیادی بر عملکرد کلی پایگاه داده داشته باشد.
#Database
@Code_Crafters
👍3👎3
کارفرما: پروژه سربسته هستش
مدیر فنی:برنامه نویس قبلی کجاست
کارفرما:نمیدونم، از سایتهای مرجع استخدام فریلنسری بود
#fun
@code_crafters
مدیر فنی:برنامه نویس قبلی کجاست
کارفرما:نمیدونم، از سایتهای مرجع استخدام فریلنسری بود
#fun
@code_crafters
😁7
در ادامه مباحث میکروسرویس رسیدیم به sso و پلتفرم keycloak
با محیط خود keycloak بیشتر آشنا بشیم
ابتدا با دستور زیر پلتفرم رو در داکر بالا میاریم
پلتفرم رو بر روی پورت 8080 بالا میاریم و با نام کاربری و پسورد admin وارد کنسول ادمین ان میشویم (در بروزر خود نام هاست خود یا ip رو همراه با پورت وارد کرده (localhost:8080) و به صفحه لاگین وارد میشویم)
بعد ورود به کنسول در سمت چپ نوباری میبینیم که هرکدوم رو بصورت جداگانه بررسی میکنیم
در قسمت بالایی آن یک لیست کشویی میبینیم که مربوط به realm میباشد، realm بعنوان یک یک فضای جداگانه برای مدیریت مجموعهای از کاربران و نقشها و برنامهها و تنظیمات امنیتی تعریف میشود، هر realm بطور جداگانه و مستقل از بقیه عمل میکند و میتواند تنظیمات امنیتی و مدیریتی مخصوص به خود را دارد با کلیک کردن بر روی create realm.و دادن یک نام یکتا به آن میتوان یک realm ساخت (ما با نام test14 یک realm میسازیم) و با رجوع به آدرس (localhost:8080/admin/test14/console) میتوان به محیط کنسول یوزر خود وارد شد و با دادن نامکاربری و پسورد داخل شد(چون تا کنون یوزری نساختهایم نمیتوان به ان ورود کرد)
پس بریم سراغ قسمت User و با زدن add user شروع به ساخت کنیم، فرم ان کامل مشخص است فیلد username رو وارد میکنیم و create رو میزنیم و بعد ریدایرکت میشیم به داخل محیط تنظمیات این یوزر که ساختیم در قسمت credentials برای این یوزر پسورد میگذاریم و در قسمت assign role به این یوزر نقشهایی رو میدیم و با استفاده از filter و جستجو این قسمت میتوانیم دنبال role مد نظر خود بگردیم در قسمت میتونیم دسترسی یوزر رو محدود کنیم
بعد از اتمام با یوزرنیم و پسورد این کاربر میتوانیم به لینک بالا که مربوط به کنسول realm با نام test14 میباشد دسترسی پیدا کرد(در قسمت رولهای یوزر میتوان دسترسی یوزر رو با realm آن مرتبط و محدود کرد) در قسمت یوزر هم میتوان تمام یوزرهارو دید و هنگام اتصال به پروژه یوزرهامون رو در این قسمت ایجاد میکنیم
اکنون نیاز به یک کلاینت داریم
کلاینت به یک برنامه یا سرویس اشاره دارد که برای احراز هویت و مجوز دسترسی (authentication, authorization) به منابع محافظت شده با keycloak ارتباط برقرار میکند، کلاینتها میتوانند انواع مختلفی از برنامهها باشند، مانند برنامههای وب، موبایل و سرویسها بکاند باشند
در قسمت client بر روی create client کلیککنید یک نام یکتا به ان دهید نوع بر روی oidc بماند، تیک client authentication رو فعال کنید و گزینه service accounts roles رو اضافه کنید برای کارکرد بهتر مقدار redirects uris رو یک ستاره بزارید و کلاینت رو ذخیره کنید
وارد کلاینتی که ساختید بشی
در تنظمیات کلاینت تمامی موارد رو میبینید و در تب credentials مقدار سکرت رو میبینید و در تب service accounts roles بر روی assign role کلیک کنید و رولهای مدنظر خودتون رو بهش اضافه کنید دو رول views , manage users دو رول حیاتی هستند که بعدا در کتابخانههامون جهت کار با keycloak لازم داریم
خبر اینکه این پلتفرم اندپوینت داره و با طراحی rest api میباشد که داکیومنتش رو در لینک زیر میتونید بخونید(دوستانی که سابقه کاری بالایی دارند اهمیت این موضوع رو بهتر میدونن)
https://www.keycloak.org/docs-api/22.0.1/rest-api/index.html
برای تست و کار کردن با اندپوینتها پنل رو بالا بیارید و موارد ذکر شده در بالا رو پیش ببرید(در قسمت رولها با توجه به اینکه میخواهیم اندپوینتهارو تست کنیم تمامی رولهارو اعمال کنید)
یک پست من بالا بیارید و یک درخواست با متد post به لینک
reelms/test14/protocol/openid_connect/token
با مقادیر زیر در body ارسال کنید
تا توکن دسترسی بهتون برگردونه و با استفاده از این توکن در قسمت authorization که از نوع bearer token هستش به اندپوینتها دسترسی پیدا میکنید
پنل رو بالا بیارید با محیط ان آشنا بشید تا بتونیم اندکی بیشتر به سمت پیاده سازی sso خودمون پیش بریم
#microservice
#sso #kecloak
@code_crafters
با محیط خود keycloak بیشتر آشنا بشیم
ابتدا با دستور زیر پلتفرم رو در داکر بالا میاریم
docker run -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin -e KEYCLOAK_LOGL_EVEL=debug quay.io/keycloak/keycloak:24.0.3 start-dev
پلتفرم رو بر روی پورت 8080 بالا میاریم و با نام کاربری و پسورد admin وارد کنسول ادمین ان میشویم (در بروزر خود نام هاست خود یا ip رو همراه با پورت وارد کرده (localhost:8080) و به صفحه لاگین وارد میشویم)
بعد ورود به کنسول در سمت چپ نوباری میبینیم که هرکدوم رو بصورت جداگانه بررسی میکنیم
در قسمت بالایی آن یک لیست کشویی میبینیم که مربوط به realm میباشد، realm بعنوان یک یک فضای جداگانه برای مدیریت مجموعهای از کاربران و نقشها و برنامهها و تنظیمات امنیتی تعریف میشود، هر realm بطور جداگانه و مستقل از بقیه عمل میکند و میتواند تنظیمات امنیتی و مدیریتی مخصوص به خود را دارد با کلیک کردن بر روی create realm.و دادن یک نام یکتا به آن میتوان یک realm ساخت (ما با نام test14 یک realm میسازیم) و با رجوع به آدرس (localhost:8080/admin/test14/console) میتوان به محیط کنسول یوزر خود وارد شد و با دادن نامکاربری و پسورد داخل شد(چون تا کنون یوزری نساختهایم نمیتوان به ان ورود کرد)
پس بریم سراغ قسمت User و با زدن add user شروع به ساخت کنیم، فرم ان کامل مشخص است فیلد username رو وارد میکنیم و create رو میزنیم و بعد ریدایرکت میشیم به داخل محیط تنظمیات این یوزر که ساختیم در قسمت credentials برای این یوزر پسورد میگذاریم و در قسمت assign role به این یوزر نقشهایی رو میدیم و با استفاده از filter و جستجو این قسمت میتوانیم دنبال role مد نظر خود بگردیم در قسمت میتونیم دسترسی یوزر رو محدود کنیم
برای دسترسی پیدا کردن به کنسول ادمین در لینک بالا که گفتیم حتما باید رول role_admin رو از زیر مجموعه realm_management رو اضافه کنیم
بعد از اتمام با یوزرنیم و پسورد این کاربر میتوانیم به لینک بالا که مربوط به کنسول realm با نام test14 میباشد دسترسی پیدا کرد(در قسمت رولهای یوزر میتوان دسترسی یوزر رو با realm آن مرتبط و محدود کرد) در قسمت یوزر هم میتوان تمام یوزرهارو دید و هنگام اتصال به پروژه یوزرهامون رو در این قسمت ایجاد میکنیم
اکنون نیاز به یک کلاینت داریم
کلاینت به یک برنامه یا سرویس اشاره دارد که برای احراز هویت و مجوز دسترسی (authentication, authorization) به منابع محافظت شده با keycloak ارتباط برقرار میکند، کلاینتها میتوانند انواع مختلفی از برنامهها باشند، مانند برنامههای وب، موبایل و سرویسها بکاند باشند
در قسمت client بر روی create client کلیککنید یک نام یکتا به ان دهید نوع بر روی oidc بماند، تیک client authentication رو فعال کنید و گزینه service accounts roles رو اضافه کنید برای کارکرد بهتر مقدار redirects uris رو یک ستاره بزارید و کلاینت رو ذخیره کنید
وارد کلاینتی که ساختید بشی
در تنظمیات کلاینت تمامی موارد رو میبینید و در تب credentials مقدار سکرت رو میبینید و در تب service accounts roles بر روی assign role کلیک کنید و رولهای مدنظر خودتون رو بهش اضافه کنید دو رول views , manage users دو رول حیاتی هستند که بعدا در کتابخانههامون جهت کار با keycloak لازم داریم
خبر اینکه این پلتفرم اندپوینت داره و با طراحی rest api میباشد که داکیومنتش رو در لینک زیر میتونید بخونید(دوستانی که سابقه کاری بالایی دارند اهمیت این موضوع رو بهتر میدونن)
https://www.keycloak.org/docs-api/22.0.1/rest-api/index.html
برای تست و کار کردن با اندپوینتها پنل رو بالا بیارید و موارد ذکر شده در بالا رو پیش ببرید(در قسمت رولها با توجه به اینکه میخواهیم اندپوینتهارو تست کنیم تمامی رولهارو اعمال کنید)
یک پست من بالا بیارید و یک درخواست با متد post به لینک
reelms/test14/protocol/openid_connect/token
با مقادیر زیر در body ارسال کنید
client_id test14
client_secret در پنل و از کلاینتتون بردارید
grant_type client_credentials
تا توکن دسترسی بهتون برگردونه و با استفاده از این توکن در قسمت authorization که از نوع bearer token هستش به اندپوینتها دسترسی پیدا میکنید
پنل رو بالا بیارید با محیط ان آشنا بشید تا بتونیم اندکی بیشتر به سمت پیاده سازی sso خودمون پیش بریم
#microservice
#sso #kecloak
@code_crafters
👍4