Modern software development practices value quick and continuous updates, following processes that minimize the impact of software failures. As important as identifying bugs early, finding out if changes are improving business value are equally important. These practices can only work when a monitoring solution is in place. This article explores options for adding observability to .NET Core apps. They have been collected based on interactions with customers using .NET Core in different environments. We will be looking into OpenTelemetry and Application Insights SDKs to add observability to a sample distributed application.
زمانیکه به صفحهی دریافت نگارشهای مختلف NET Core. مراجعه میکنیم، بستههای مختلفی از یک نگارش قابل مشاهده هستند و در بدو امر واضح نیست که کدامیک را باید دریافت کرد. در این مطلب تفاوتهای بین این بستهها را مرور خواهیم کرد.
کدام نگارشهای NET Core. بر روی سیستم شما نصب هستند؟
پیش از انجام هرکاری نیاز است بررسی کنیم کدامیک از بستههای ارائه شده، بر روی سیستم جاری نصب هستند. برای انجام اینکار دستور زیر را در خط فرمان صادر کنید:
اگر این دستور کار نکرد و خطایی را دریافت کردید، یعنی NET Core. اصلا بر روی سیستم شما نصب نیست. برنامه dotnet.exe جزئی از runtime نصب شدهاست و به صورت خودکار به path سیستم اضافه میشود. به همین جهت است که در صورت نصب آن، فرمان dotnet در هر مسیری قابل اجرا است.
Runtime تنها ویژگیهای اساسی جهت اجرای برنامههای از پیش کامپایل شدهی NET Core. را با اجرای فرمانی مانند dotnet mydll.dll و یا اجرای دستور dotnet --info برای دریافت اطلاعاتی از جزئیات این ویژگیها، به همراه دارد. اما برای کار با سورس کدها، build، publish و هر کار دیگری با آنها، حتما باید SDK نیز نصب شود.
خروجی فرمان فوق بر روی سیستم من چنین چیزی است:
اولین شماره نگارش نمایش داده شدهی در این لیست (2.1.301)، شماره نگارش SDK فعال است. سپس شماره نگارش 2.1.1 به معنای شماره نگارش Runtime فعال بر روی سیستم است که هاست dotnet.exe به شمار میرود. سپس لیست SDKها و Runtimeهای نصب شدهی بر روی سیستم را نمایش میدهد.
باید دقت داشت که بر روی یک سیستم میتوان چندین SDK و چندین Runtime مختلف را نصب کرد و هر پروژه از شماره نگارش خاصی استفاده کند. شماره نگارش runtime استفاده شدهی در پروژهها در فایل csproj، توسط مدخل زیر مشخص میشود:
در مورد SDK اینطور نیست و همواره از آخرین SDK نصب شده (همان شماره نگارش SDK فعال فوق) استفاده میشود، مگر اینکه فایل ویژهای به نام global.json را در ریشهی اصلی solution قرار دهید؛ با این محتوای فرضی:
در این حالت پروژهی جاری را وادار میکنید بجای استفادهی از آخرین SDK نصب شدهی بر روی سیستم، از نگارش SDK خاصی استفاده کند.
البته در اکثر موارد نیازی به انجام این کار نیست؛ چون SDK، با تمام نگارشهای قبلی سازگار است و همواره استفادهی از آخرین SDK نصب شده توصیه میشود. به همین جهت فایل global.json را پس از ایجاد یک solution جدید مشاهده نمیکنید؛ مگر اینکه خودتان به دلایل خاصی آنرا اضافه و مقید نمائید.
تفاوت بستههای مختلف قابل دریافت NET Core. در چیست؟
زمانیکه برای دریافت آخرین نگارش NET Core. به سایت آن مراجعه میکنیم، به ازای هر نگارش، یک چنین لیستی قابل مشاهده است:
و اکنون سؤالی که مطرح میشود این است: کدامیک را باید دریافت کرد؟
Visual Studio
اگر کاربر ویندوز هستید، با نصب آخرین نگارش Visual Studio، میتوانید به همراه آن، آخرین نگارش SDK ،runtime و اجزای هاست برنامههای ASP.NET Core بر روی IIS را نیز بر روی سیستم خود نصب کنید.
NET Core SDK.
هدف از ارائهی بستهی SDK، انجام فرآیندهای build، اجرا و مدیریت امور مرتبط با NET Core.، بدون استفاده از Visual Studio و بر روی تمام سیستم عاملهای پشتیبانی شدهاست. زمانیکه یک بستهی SDK را نصب میکنید، به همراه آن این موارد نیز نصب میشوند:
به همین جهت حجم آن از بستهی تکی runtime بیشتر است و با نصب آن دیگر نیازی به دریافت مجزای بستههای runtime نیست.
بنابراین دلیل نصب آن میتواند شامل یکی از موارد زیر باشد:
- بر روی سیستمی که در حال توسعهی برنامههای مبتنی بر NET Core. هستید. این تمام چیزی است که به آن نیاز دارید.
- بر روی سروری که نیاز است دستور dotnet را برای انجام فرآیندهای build/publish اجرا کند.
NET Core Runtime.
بستههای Runtimes، کوچکترین بستهی ممکن در این لیست هستند و هدف از آنها صرفا اجرای برنامههای کامپایل شدهی NET Core. در سکوهای کاری مختلف پشتیبانی شدهی توسط آن است.
باید دقت داشت که اگر برنامهی شما از «ASP.NET Core meta package» استفاده میکند، این بسته در runtime لحاظ نشدهاست و در یک چنین حالتی باید بستهی ASP.NET Core را به صورت جداگانه دریافت و نصب کنید. هرچند اگر از این متاپکیجها استفاده نکنید و بستههای مورد نیاز را به صورت مستقیم به برنامهی خود اضافه کنید، این بستهها جزئی از فایلهای publish نهایی بوده و در این حالت برنامه توسط بستهی runtime نیز قابل اجرا است.
در این حالت برنامهی dotnet بجز اجرای برنامهها و ارائهی اطلاعاتی در مورد خود آن، کارهای دیگری را مانند build و یا publish، نمیتواند انجام دهد و برنامه در این حالت باید کاملا از پیش کامپایل شده باشد.
بنابراین دلیل نصب آن میتواند شامل یکی از موارد زیر باشد:
- برای اجرای برنامههای از پیش کامپایل شدهای که به همراه تمام وابستگیهای مورد نیاز هم هستند.
- برای اجرای برنامههای وبی که از ASP.NET Meta packages استفاده نمیکنند
ASP.NET Core Installer
همانطور که در توضیحات بستهی runtime عنوان شد، این بسته، متاپکیجهای ASP.NET Core را به همراه ندارد. اگر به آنها نیاز دارید، باید آنها را به صورت جداگانه توسط ASP.NET Core installer نصب کنید که شامل این موارد است:
NET Core Windows Hosting Pack.
نصب این بسته برای هاست برنامههای ASP.NET Core در ویندوز و بر روی IIS ضروری است و شامل این اجزا میشود:
بنابراین این بسته شامل تمام موارد یاد شدهاست منهای قابلیتهای SDK برای build و publish برنامهها.
بنابراین به صورت خلاصه
برای سرورها این موارد را نصب کنید:
- در ویندوز: Windows Server Hosting Bundle
- برای Mac و لینوکس: .NET Core Runtime + ASP.NET Core Runtimes
برای سیستم توسعهی شخصی این موارد را نصب کنید:
- SDK
- اگر از ویندوز استفاده میکنید: Visual Studio هم به همراه SDK نصب میشود.
برای اجرای برنامههای از پیش کامپایل شده که به همراه تمام وابستگیهای مورد نیاز هم هستند:
- تنها Runtime را نصب کنید.
اگر این برنامهی از پیش کامپایل شده از ASP.NET Runtime Meta packages استفاده میکند:
- ASP.NET Runtimes را نیز نصب کنید.
کدام نگارشهای NET Core. بر روی سیستم شما نصب هستند؟
پیش از انجام هرکاری نیاز است بررسی کنیم کدامیک از بستههای ارائه شده، بر روی سیستم جاری نصب هستند. برای انجام اینکار دستور زیر را در خط فرمان صادر کنید:
dotnet --info
Runtime تنها ویژگیهای اساسی جهت اجرای برنامههای از پیش کامپایل شدهی NET Core. را با اجرای فرمانی مانند dotnet mydll.dll و یا اجرای دستور dotnet --info برای دریافت اطلاعاتی از جزئیات این ویژگیها، به همراه دارد. اما برای کار با سورس کدها، build، publish و هر کار دیگری با آنها، حتما باید SDK نیز نصب شود.
خروجی فرمان فوق بر روی سیستم من چنین چیزی است:
C:\Users\Vahid>dotnet --info .NET Core SDK (reflecting any global.json): Version: 2.1.301 Commit: 59524873d6 Runtime Environment: OS Name: Windows OS Version: 10.0.17134 OS Platform: Windows RID: win10-x64 Base Path: C:\Program Files\dotnet\sdk\2.1.301\ Host (useful for support): Version: 2.1.1 Commit: 6985b9f684 .NET Core SDKs installed: 2.1.300 [C:\Program Files\dotnet\sdk] 2.1.301 [C:\Program Files\dotnet\sdk] .NET Core runtimes installed: Microsoft.NETCore.App 2.1.0 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App] Microsoft.NETCore.App 2.1.1 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App] To install additional .NET Core runtimes or SDKs: https://aka.ms/dotnet-download
باید دقت داشت که بر روی یک سیستم میتوان چندین SDK و چندین Runtime مختلف را نصب کرد و هر پروژه از شماره نگارش خاصی استفاده کند. شماره نگارش runtime استفاده شدهی در پروژهها در فایل csproj، توسط مدخل زیر مشخص میشود:
<TargetFramework>netcoreapp2.1</TargetFramework>
{ "sdk": { "version": "2.1.300-rc.31211" } }
البته در اکثر موارد نیازی به انجام این کار نیست؛ چون SDK، با تمام نگارشهای قبلی سازگار است و همواره استفادهی از آخرین SDK نصب شده توصیه میشود. به همین جهت فایل global.json را پس از ایجاد یک solution جدید مشاهده نمیکنید؛ مگر اینکه خودتان به دلایل خاصی آنرا اضافه و مقید نمائید.
تفاوت بستههای مختلف قابل دریافت NET Core. در چیست؟
زمانیکه برای دریافت آخرین نگارش NET Core. به سایت آن مراجعه میکنیم، به ازای هر نگارش، یک چنین لیستی قابل مشاهده است:
• .NET Core Runtime • .NET Core SDK • .NET Core Hosting Bundle • Visual Studio • ASP.NET Core Installer
Visual Studio
اگر کاربر ویندوز هستید، با نصب آخرین نگارش Visual Studio، میتوانید به همراه آن، آخرین نگارش SDK ،runtime و اجزای هاست برنامههای ASP.NET Core بر روی IIS را نیز بر روی سیستم خود نصب کنید.
NET Core SDK.
هدف از ارائهی بستهی SDK، انجام فرآیندهای build، اجرا و مدیریت امور مرتبط با NET Core.، بدون استفاده از Visual Studio و بر روی تمام سیستم عاملهای پشتیبانی شدهاست. زمانیکه یک بستهی SDK را نصب میکنید، به همراه آن این موارد نیز نصب میشوند:
• .NET Core SDK • .NET Core Runtime • ASP.NET Core Runtime
بنابراین دلیل نصب آن میتواند شامل یکی از موارد زیر باشد:
- بر روی سیستمی که در حال توسعهی برنامههای مبتنی بر NET Core. هستید. این تمام چیزی است که به آن نیاز دارید.
- بر روی سروری که نیاز است دستور dotnet را برای انجام فرآیندهای build/publish اجرا کند.
NET Core Runtime.
بستههای Runtimes، کوچکترین بستهی ممکن در این لیست هستند و هدف از آنها صرفا اجرای برنامههای کامپایل شدهی NET Core. در سکوهای کاری مختلف پشتیبانی شدهی توسط آن است.
باید دقت داشت که اگر برنامهی شما از «ASP.NET Core meta package» استفاده میکند، این بسته در runtime لحاظ نشدهاست و در یک چنین حالتی باید بستهی ASP.NET Core را به صورت جداگانه دریافت و نصب کنید. هرچند اگر از این متاپکیجها استفاده نکنید و بستههای مورد نیاز را به صورت مستقیم به برنامهی خود اضافه کنید، این بستهها جزئی از فایلهای publish نهایی بوده و در این حالت برنامه توسط بستهی runtime نیز قابل اجرا است.
در این حالت برنامهی dotnet بجز اجرای برنامهها و ارائهی اطلاعاتی در مورد خود آن، کارهای دیگری را مانند build و یا publish، نمیتواند انجام دهد و برنامه در این حالت باید کاملا از پیش کامپایل شده باشد.
بنابراین دلیل نصب آن میتواند شامل یکی از موارد زیر باشد:
- برای اجرای برنامههای از پیش کامپایل شدهای که به همراه تمام وابستگیهای مورد نیاز هم هستند.
- برای اجرای برنامههای وبی که از ASP.NET Meta packages استفاده نمیکنند
ASP.NET Core Installer
همانطور که در توضیحات بستهی runtime عنوان شد، این بسته، متاپکیجهای ASP.NET Core را به همراه ندارد. اگر به آنها نیاز دارید، باید آنها را به صورت جداگانه توسط ASP.NET Core installer نصب کنید که شامل این موارد است:
- The ASP.NET Runtime Meta Packages - Microsoft.AspNetCore.App - Microsoft.AspNetCore.All
نصب این بسته برای هاست برنامههای ASP.NET Core در ویندوز و بر روی IIS ضروری است و شامل این اجزا میشود:
- 32 bit and 64 .NET Core Runtimes - ASP.NET Runtime Packages (Microsoft.AspNetCode.App/All) - IIS Hosting Components
بنابراین به صورت خلاصه
برای سرورها این موارد را نصب کنید:
- در ویندوز: Windows Server Hosting Bundle
- برای Mac و لینوکس: .NET Core Runtime + ASP.NET Core Runtimes
برای سیستم توسعهی شخصی این موارد را نصب کنید:
- SDK
- اگر از ویندوز استفاده میکنید: Visual Studio هم به همراه SDK نصب میشود.
برای اجرای برنامههای از پیش کامپایل شده که به همراه تمام وابستگیهای مورد نیاز هم هستند:
- تنها Runtime را نصب کنید.
اگر این برنامهی از پیش کامپایل شده از ASP.NET Runtime Meta packages استفاده میکند:
- ASP.NET Runtimes را نیز نصب کنید.
به قسمت کامنت شدهی آن دقت کنید (مربوط به EF 6x):
نظرات مطالب
BulkInsert در EF CodeFirst
یک نمونه سورس باز دیگر (با مجوز MIT و پشتیبانی از EF Core و EF 6.x): EntityFramework-Plus
نظرات مطالب
رویه های ذخیره شده خوب یا بد؟!
نکته دیگر آنکه بدلیل Pre-Compiled بودن SPها و همچنین کَش شدن Execution Plan آنها، اندکی با سرعت بالاتری اجرا میشوند.
در SQL Server این مورد برای کوئریهای پارامتری هم صدق میکند (مانند کوئریهای حاصل از ORMها که با sp_executesql هم همراه هستند) و منحصر به SPها نیست. همچنین در بدترین حالت میشه کوئریهای غیرپارامتری رو هم پارامتری پردازش کرد: بهبود کارآیی برنامههای قدیمی که از SQL Server استفاده میکنند
نظرات اشتراکها
آموزش گام به گام طراحی و پیاده سازی یک فروشگاه اینترنتی مبتنی بر مدل توسعه ی سه لایه در ASP.NET
اگر علاقمند هستید که از ADO.NET استفاده کنید، این لایههای DAL غیرعمومی را با یک Micro ORM جایگزین کنید. با Micro ORMها هنوز هم SQL مینویسید، ولی جنریک هستند و ضمنا خیلی از best practices را هم به صورت توکار دارند.
یک نمونه از این Micro ORMs که توسط Stack overflow طراحی شده: Dapper
یک نمونه از این Micro ORMs که توسط Stack overflow طراحی شده: Dapper
اشتراکها