آشنایی با Redis
دیتابیس Redis در واقع از نوع Non-Relational است و در آن از جدول و ردیف خبری نیست. این دیتابیس انواع مختلف اطلاعات را به صورت Key/Value دخیره می کند و در نوع خود سریعترین به شمار می رود.
دیتابیس های SQL در دیسک ذخیره می شوند و رفت و برگشت اطلاعات به آنها طول می کشد. در مقابل Redis از حافظه رم استفاده می کند که فوق العاده سریع است. اطلاعاتی که زیاد مورد استفاده قرار می گیرد درون آن کش میشود و دیگر رفت و برگشت به دیتابیس وجود ندارد. به همین دلیل سرعت پردازش اطلاعات با استفاده از Redis بیشتر میشود.
سایت هایی که ترافیک زیادی دارند معمولا از Redis برای کش کردن اطلاعات استفاده می کنند. می توان از آن به عنوان یک دیتابیس NoSQL هم استفاده کرد و اطلاعاتش را در دیسک ذخیره کرد.
این دیتابیس به زبان C و برای سیستم عامل لینوکس طراحی شده است اما امکان نصب آن روی ویندوز وجود دارد. در ASP Core به راحتی می توانید با استفاده از یک Nuget Package از آن استفاده کنید.
دیتابیس Redis در واقع از نوع Non-Relational است و در آن از جدول و ردیف خبری نیست. این دیتابیس انواع مختلف اطلاعات را به صورت Key/Value دخیره می کند و در نوع خود سریعترین به شمار می رود.
دیتابیس های SQL در دیسک ذخیره می شوند و رفت و برگشت اطلاعات به آنها طول می کشد. در مقابل Redis از حافظه رم استفاده می کند که فوق العاده سریع است. اطلاعاتی که زیاد مورد استفاده قرار می گیرد درون آن کش میشود و دیگر رفت و برگشت به دیتابیس وجود ندارد. به همین دلیل سرعت پردازش اطلاعات با استفاده از Redis بیشتر میشود.
سایت هایی که ترافیک زیادی دارند معمولا از Redis برای کش کردن اطلاعات استفاده می کنند. می توان از آن به عنوان یک دیتابیس NoSQL هم استفاده کرد و اطلاعاتش را در دیسک ذخیره کرد.
این دیتابیس به زبان C و برای سیستم عامل لینوکس طراحی شده است اما امکان نصب آن روی ویندوز وجود دارد. در ASP Core به راحتی می توانید با استفاده از یک Nuget Package از آن استفاده کنید.
انواع هویت سنجی در ASP Core Identity
ابزار Identity در ASP Core مسئولیت تشخیص هویت و کنترلر دسترسی را به عهده دارد. این ابزار در نسخه های قبل هم وجود داشت اما مانند سایر قسمتها باز نویسی شده است. در اینجا به سه روش اصلی کنترل دسترسی در Idenity Core می پردازیم.
روش Role-Based
در این روش کاربر بر اساس سمتی که دارد به بخش هایی از سایت دسترسی پیدا می کند. مثلا دسترسی به بخش مدیریت سایت فقط برای کاربرهایی با سمت Admin میسر است. در اینجا ما یک جدول برای نگه داری سمت ها داریم و یک جدول هم برای نگه داری رابطه ی بین کاربران با هر سمت. یک کاربر می تواند چندین سمت داشته باشد.
روش Claims-Based
نسخه ی جدید ASP Core تاکید زیادی به استفاده از این روش دارد. در این روش یک کاربر می تواند چند هویت داشته باشد. هر هویت مشخصه های خودش را دارد. دسترسی های یک کاربر بر اساس مشخصه های هر هویت فرق می کند. مثلا شما برای گرفتن وام به بانک مراجعه می کنید و برای شناسایی کارت ملی ارائه می کنید. مشخصات کارت ملی بخشی از مشخصات شما شامل نام و تاریخ تولد را نشان می دهد و یکی از هویت های شما محسوب میشود. حالا اگر بخواهید وام دانشجویی بگیرید باید ثابت کنید دانشجو هستید. در این مرحله کارت دانشجویی ارائه می کنید که شامل نام دانشگاه و شماره ی دانشجویی است. در سیستم Claims-Based انواع مشخصات شما در یک جدول key/value دخیره می شود و بعدا می توانید دسترسی به اکشن ها و کنترلر ها را بر اساس آن محدود کنید.
روش Policy-Based
این شیوه ترکیبی از روشهای قبل است. می توانید برای اجرای هر کدام از اکشنها یک سیاست یا Policy تعریف کنید که می تواند شامل مجموعه از سمت ها و مشخصه های هویتی (Claims) باشد.
علاوه بر اینها چند روش دیگر هم وجود دارد و باید گفت نسخه ی جدید از هر نظر کامل است. به طور کلی پیاده کردن سیستم امنیتی پیچیده است و بهتر است همیشه از Identity استفاده کنید. این سیستم بسیاری از نکات مهم مانند رمز نگاری را به خوبی رعایت کرده است و سطح امنیت سایت را به میزان قابل توجهی بالا می برد.
ابزار Identity در ASP Core مسئولیت تشخیص هویت و کنترلر دسترسی را به عهده دارد. این ابزار در نسخه های قبل هم وجود داشت اما مانند سایر قسمتها باز نویسی شده است. در اینجا به سه روش اصلی کنترل دسترسی در Idenity Core می پردازیم.
روش Role-Based
در این روش کاربر بر اساس سمتی که دارد به بخش هایی از سایت دسترسی پیدا می کند. مثلا دسترسی به بخش مدیریت سایت فقط برای کاربرهایی با سمت Admin میسر است. در اینجا ما یک جدول برای نگه داری سمت ها داریم و یک جدول هم برای نگه داری رابطه ی بین کاربران با هر سمت. یک کاربر می تواند چندین سمت داشته باشد.
روش Claims-Based
نسخه ی جدید ASP Core تاکید زیادی به استفاده از این روش دارد. در این روش یک کاربر می تواند چند هویت داشته باشد. هر هویت مشخصه های خودش را دارد. دسترسی های یک کاربر بر اساس مشخصه های هر هویت فرق می کند. مثلا شما برای گرفتن وام به بانک مراجعه می کنید و برای شناسایی کارت ملی ارائه می کنید. مشخصات کارت ملی بخشی از مشخصات شما شامل نام و تاریخ تولد را نشان می دهد و یکی از هویت های شما محسوب میشود. حالا اگر بخواهید وام دانشجویی بگیرید باید ثابت کنید دانشجو هستید. در این مرحله کارت دانشجویی ارائه می کنید که شامل نام دانشگاه و شماره ی دانشجویی است. در سیستم Claims-Based انواع مشخصات شما در یک جدول key/value دخیره می شود و بعدا می توانید دسترسی به اکشن ها و کنترلر ها را بر اساس آن محدود کنید.
روش Policy-Based
این شیوه ترکیبی از روشهای قبل است. می توانید برای اجرای هر کدام از اکشنها یک سیاست یا Policy تعریف کنید که می تواند شامل مجموعه از سمت ها و مشخصه های هویتی (Claims) باشد.
علاوه بر اینها چند روش دیگر هم وجود دارد و باید گفت نسخه ی جدید از هر نظر کامل است. به طور کلی پیاده کردن سیستم امنیتی پیچیده است و بهتر است همیشه از Identity استفاده کنید. این سیستم بسیاری از نکات مهم مانند رمز نگاری را به خوبی رعایت کرده است و سطح امنیت سایت را به میزان قابل توجهی بالا می برد.
چرا Docker طرفدار دارد ؟
در گذشته اگر می خواستید یک برنامه ی ASP با دیتابیس MSSQL در سرور لینوکس اجرا کنید باید یک ماشین مجازی می ساختید و روی آن ویندوز نصب می کردید و بعد تازه دات نت و SQL Server نصب می کردید. تازه می توانستید سایت را روی IIS اجرا کنید.
وقتی از Docker استفاده می کنید نیاز به ماشین مجازی ندارید. علاوه بر این نیاز به نصب نرم افزارهای جانبی مانند SQL Server هم ندارید. می توانید کل سایت و دیتابیس و حتی کل SQL Server را درون یک فایل که اصطلاحا Container خوانده میشود قرار دهید و آن را در لینکوس با یک خط فرمان اجرا کنید. با داکر یک برنامه همه جا یکسان کار میکند. در واقع با داکر عبارت معروف " روی سیستم من که اجرا میشه " دیگر از بین میرود.
هر چند ASP Core خودش در لینکوس و macOS قابل اجرا است اما استفاده از Docker عملیات انتشار سایت را بسیار ساده می کند. مخصوصا وقتی که برنامه ی شما قرار است روی چند سرور اجرا شود یا قصد جابجایی آن را به یک سرور جدید داشته باشید فقط باید یک فایل را کپی کنید.
خیلی از نرم افزارها نسخه ی Docker دارند که مانند Nuget از Docker Hub قابل دانلود و نصب است. مثلا SQL Server 2017 را می توانید با حجم 2 گیگ روی هر سیستمی اجرا کنید بدون اینکه نیاز به طی کردن مراحل طولانی نصب داشته باشد. IIS و Node و MySQL و Redis و حتی سیستم عامل Ubuntu هم از طریق Docker قابل نصب است.
برای نصب داکر باید تحریم ها را دور بزنید و آن را دانلود کنید. همچنین فقط از سیستم عامل های x64 پشتیبانی می کند. بعد از نصب به یک محیط Console دسترسی پیدا میکنید که دستورات داکر را اجرا می کند.
در حال حاضر Docker سر و صدای زیادی به پا کرده و مقالات و کتابهای زیادی در مورد آن منتشر می شود. بسیاری از شرکتها تمامی کارهای سرور را با Docker انجام می دهند و تخصص در این زمینه می تواند فرصت های شغلی زیادی ایجاد کند.
در گذشته اگر می خواستید یک برنامه ی ASP با دیتابیس MSSQL در سرور لینوکس اجرا کنید باید یک ماشین مجازی می ساختید و روی آن ویندوز نصب می کردید و بعد تازه دات نت و SQL Server نصب می کردید. تازه می توانستید سایت را روی IIS اجرا کنید.
وقتی از Docker استفاده می کنید نیاز به ماشین مجازی ندارید. علاوه بر این نیاز به نصب نرم افزارهای جانبی مانند SQL Server هم ندارید. می توانید کل سایت و دیتابیس و حتی کل SQL Server را درون یک فایل که اصطلاحا Container خوانده میشود قرار دهید و آن را در لینکوس با یک خط فرمان اجرا کنید. با داکر یک برنامه همه جا یکسان کار میکند. در واقع با داکر عبارت معروف " روی سیستم من که اجرا میشه " دیگر از بین میرود.
هر چند ASP Core خودش در لینکوس و macOS قابل اجرا است اما استفاده از Docker عملیات انتشار سایت را بسیار ساده می کند. مخصوصا وقتی که برنامه ی شما قرار است روی چند سرور اجرا شود یا قصد جابجایی آن را به یک سرور جدید داشته باشید فقط باید یک فایل را کپی کنید.
خیلی از نرم افزارها نسخه ی Docker دارند که مانند Nuget از Docker Hub قابل دانلود و نصب است. مثلا SQL Server 2017 را می توانید با حجم 2 گیگ روی هر سیستمی اجرا کنید بدون اینکه نیاز به طی کردن مراحل طولانی نصب داشته باشد. IIS و Node و MySQL و Redis و حتی سیستم عامل Ubuntu هم از طریق Docker قابل نصب است.
برای نصب داکر باید تحریم ها را دور بزنید و آن را دانلود کنید. همچنین فقط از سیستم عامل های x64 پشتیبانی می کند. بعد از نصب به یک محیط Console دسترسی پیدا میکنید که دستورات داکر را اجرا می کند.
در حال حاضر Docker سر و صدای زیادی به پا کرده و مقالات و کتابهای زیادی در مورد آن منتشر می شود. بسیاری از شرکتها تمامی کارهای سرور را با Docker انجام می دهند و تخصص در این زمینه می تواند فرصت های شغلی زیادی ایجاد کند.
کجا باید از RavenDB استفاده کنیم ؟
دیتابیس های Document نوع خاصی از دیتابیس های غیر SQL است که تمرکزش روی ذخیره ی اطلاعات به شکل سند است. هر سند دارای خصوصیات مدل است و "نشانی "دارد که مشخص می کند نوع اطلاعات ذخیره شده در سند چیست.
وقتی از دیتابیس های اسنادی استفاده می کنید لازم نیست سند شما همیشه یک قالب داشته باشد. در هر لحظه می تواند فیلد جدیدی به سند اضافه کنید بدون آنکه لازم باشد برگردید و اطلاعات گذشته را تغییر دهید. اضافه کردن انواع جدید سند به سادگی اجرای دستور ذخیره ی سند است. لازم نیست ساختار گذشته ی دیتابیس را تغییر دهید.
یکی از بهترین جاهایی که این نوع دیتابیس خودش را نشان میدهد سایتهای فروشگاهی مانند دیجی کالا است. تعداد زیادی محصول داریم که هر کدام خصوصیات خودش را دارد. اگر بخواهیم از SQL استفاده کنیم باید برای هر محصول یک جدول جدا درست کنیم یا مشخصات همه ی محصولات را در یک جدول به صورت کلید و مقدار ذخیره کنیم. هیچکدام از اینها گزینه ی خوبی نیست.
اما در RavenDB یا دیتابیس های مشابه مانند MongoDB و CouchDB کافی است یک کلاس برای محصول جدید ایجاد کنیم و اطلاعات را ذخیره کنیم. دیتابیس خودش با ترفندهایی که دارد اطلاعات مشابه را به Collection تبدیل می کند .
استفاده از RavenDb برای همه ی کارها مناسب نیست همانطور که SQL همیشه بهترین راه حل نیست. بهتر است برای هر کاری ابزار خودش را بشناسیم. ضمن اینکه تجربه ی کار با یک نوع متفاوت دیتابیس می تواند افق های جدیدی برای شما باز کند.
دیتابیس های Document نوع خاصی از دیتابیس های غیر SQL است که تمرکزش روی ذخیره ی اطلاعات به شکل سند است. هر سند دارای خصوصیات مدل است و "نشانی "دارد که مشخص می کند نوع اطلاعات ذخیره شده در سند چیست.
وقتی از دیتابیس های اسنادی استفاده می کنید لازم نیست سند شما همیشه یک قالب داشته باشد. در هر لحظه می تواند فیلد جدیدی به سند اضافه کنید بدون آنکه لازم باشد برگردید و اطلاعات گذشته را تغییر دهید. اضافه کردن انواع جدید سند به سادگی اجرای دستور ذخیره ی سند است. لازم نیست ساختار گذشته ی دیتابیس را تغییر دهید.
یکی از بهترین جاهایی که این نوع دیتابیس خودش را نشان میدهد سایتهای فروشگاهی مانند دیجی کالا است. تعداد زیادی محصول داریم که هر کدام خصوصیات خودش را دارد. اگر بخواهیم از SQL استفاده کنیم باید برای هر محصول یک جدول جدا درست کنیم یا مشخصات همه ی محصولات را در یک جدول به صورت کلید و مقدار ذخیره کنیم. هیچکدام از اینها گزینه ی خوبی نیست.
اما در RavenDB یا دیتابیس های مشابه مانند MongoDB و CouchDB کافی است یک کلاس برای محصول جدید ایجاد کنیم و اطلاعات را ذخیره کنیم. دیتابیس خودش با ترفندهایی که دارد اطلاعات مشابه را به Collection تبدیل می کند .
استفاده از RavenDb برای همه ی کارها مناسب نیست همانطور که SQL همیشه بهترین راه حل نیست. بهتر است برای هر کاری ابزار خودش را بشناسیم. ضمن اینکه تجربه ی کار با یک نوع متفاوت دیتابیس می تواند افق های جدیدی برای شما باز کند.
چرا Vue.js را دوست داریم ؟
1- یکی از بهترین داکیومنت ها را دارد و یاد گیری آن ساده است.
2- لازم نیست برای شروع کار با آن مراسم بپا کنید و چند جور نرم افزار نصب کنید.
3- نیازی به Node یا NPM ندارد. می توانید مانند jQuery فایل آن را به هر صفحه ی وب اضافه کنید.
4- شما را مجبور به استفاده از سبک خاصی نمی کند. می توانید هر قسمت از آن را که نمی پسندید با فریم ورک دیگر عوض کنید.
5- یک فریم ورک پیشرونده است و بر اساس نیازهای شما امکانات بیشتری در اختیارتان قرار میدهد.
6- هم امکانات Angular و React را دارد هم می تواند مانند Knockout شما را سریع به هدف برساند.
7- کار خودش را میکند و تصمیمات آن تحت تاثیر رقابت های کاذب بین غول های نرم افزاری نیست.
1- یکی از بهترین داکیومنت ها را دارد و یاد گیری آن ساده است.
2- لازم نیست برای شروع کار با آن مراسم بپا کنید و چند جور نرم افزار نصب کنید.
3- نیازی به Node یا NPM ندارد. می توانید مانند jQuery فایل آن را به هر صفحه ی وب اضافه کنید.
4- شما را مجبور به استفاده از سبک خاصی نمی کند. می توانید هر قسمت از آن را که نمی پسندید با فریم ورک دیگر عوض کنید.
5- یک فریم ورک پیشرونده است و بر اساس نیازهای شما امکانات بیشتری در اختیارتان قرار میدهد.
6- هم امکانات Angular و React را دارد هم می تواند مانند Knockout شما را سریع به هدف برساند.
7- کار خودش را میکند و تصمیمات آن تحت تاثیر رقابت های کاذب بین غول های نرم افزاری نیست.
پروژه ی دمو - پیاده سازی CRUD با RavenDB
در این پروژه با استفاده از دیتابیس RavenDB و فریم ورک ASP Core MVC 2.0 یک برنامه ی ساده ی مدیریت باگ پیاده می کنیم. برای ذخیره و بازیابی اطلاعات از Client API در RavenDB استفاده شده است.
نکته ی مهم در مورد RavenDB این است که ID ها را بر اساس الگوریتم hi/lo میسازد و در آنها از کاراکتر "/" استفاده می شود. این مسئله در Routing محیط ASP Core کمی دردسر ساز بود. اما با تغییر پیش فرضهای RavenDB حل شد.
سورس پروژه را می توانید از آدرس زیر دانلود کنید :
https://github.com/codehaks/BugRaven
در این پروژه با استفاده از دیتابیس RavenDB و فریم ورک ASP Core MVC 2.0 یک برنامه ی ساده ی مدیریت باگ پیاده می کنیم. برای ذخیره و بازیابی اطلاعات از Client API در RavenDB استفاده شده است.
نکته ی مهم در مورد RavenDB این است که ID ها را بر اساس الگوریتم hi/lo میسازد و در آنها از کاراکتر "/" استفاده می شود. این مسئله در Routing محیط ASP Core کمی دردسر ساز بود. اما با تغییر پیش فرضهای RavenDB حل شد.
سورس پروژه را می توانید از آدرس زیر دانلود کنید :
https://github.com/codehaks/BugRaven
GitHub
codehaks/BugRaven
BugRaven - A sample project using ASP Core 2.0 MVC and RavenDb - CRUD Operations