#

آموزش شبیه‌سازی با نرم‌افزار کلودسیم

با رشد روزافزون رایانش ابری و پیچیدگی‌های مرتبط با مدیریت منابع، زمان‌بندی وظایف و بهینه‌سازی عملکرد، نیاز به ابزارهایی برای ارزیابی سیستم‌ها قبل از استقرار واقعی بیش از پیش احساس می‌شود. محیط‌های ابری پویا و مقیاس‌پذیر هستند و آزمایش مستقیم بر روی زیرساخت‌های فیزیکی می‌تواند پرهزینه، زمان‌بر و حتی مخاطره‌آمیز باشد. اینجاست که شبیه‌سازی به عنوان یک راه‌حل قدرتمند وارد عمل می‌شود. نرم‌افزار کلودسیم (CloudSim) به عنوان یک چارچوب (framework) جامع و متن‌باز، امکان مدل‌سازی و شبیه‌سازی زیرساخت‌ها و خدمات ابری را فراهم می‌آورد و به محققان و توسعه‌دهندگان اجازه می‌دهد تا الگوریتم‌ها و استراتژی‌های جدید را در یک محیط کنترل‌شده و تکرارپذیر ارزیابی کنند. این مقاله به معرفی، آموزش گام به گام و بررسی عمیق قابلیت‌های کلودسیم می‌پردازد تا شما را در مسیر پروژه‌های شبیه‌سازی رایانش ابری یاری رساند.

چالش‌های رایانش ابری و نقش شبیه‌سازی

محیط‌های رایانش ابری با چالش‌های متعددی از جمله مدیریت بهینه منابع سخت‌افزاری و نرم‌افزاری، زمان‌بندی کارآمد وظایف (Task Scheduling)، کاهش مصرف انرژی، تضمین کیفیت سرویس (QoS) و اطمینان از امنیت و پایداری سیستم مواجه هستند. پیاده‌سازی و آزمایش راهکارهای جدید در این حوزه‌ها بر روی زیرساخت‌های ابری واقعی، نه تنها بسیار گران است، بلکه ممکن است باعث اختلال در سرویس‌دهی و افزایش ریسک شود. این محدودیت‌ها، نیاز به یک ابزار قدرتمند شبیه‌سازی را برجسته می‌سازد تا بتوان ایده‌ها را در یک محیط مجازی، با هزینه و زمان کمتر، ارزیابی و بهینه‌سازی کرد.

شبیه‌سازی با نرم‌افزار کلودسیم این امکان را فراهم می‌آورد که سناریوهای مختلف را مدل‌سازی کرده و رفتار سیستم را تحت شرایط متفاوت پیش‌بینی کنیم. این رویکرد به محققان و مهندسان کمک می‌کند تا قبل از استقرار واقعی، نقاط ضعف و قوت راهکارهای پیشنهادی خود را شناسایی کرده و بهینه‌سازی‌های لازم را اعمال کنند. این فرآیند، نه تنها باعث صرفه‌جویی در منابع می‌شود، بلکه به نوآوری و توسعه پایدار در حوزه رایانش ابری نیز کمک شایانی می‌کند. با مطالعه مقالات تخصصی در بلاگ ما می‌توانید اطلاعات بیشتری در این زمینه کسب کنید.

کلودسیم (CloudSim) چیست و چرا از آن استفاده می‌کنیم؟

کلودسیم یک کتابخانه (Library) مبتنی بر زبان برنامه‌نویسی جاوا است که برای مدل‌سازی و شبیه‌سازی زیرساخت‌های ابری، پلتفرم‌ها و برنامه‌ها طراحی شده است. این چارچوب توسط آزمایشگاه GRIDS در دانشگاه ملبورن استرالیا توسعه یافته و به دلیل انعطاف‌پذیری و قابلیت‌های گسترده، به ابزاری محبوب در جامعه تحقیقاتی رایانش ابری تبدیل شده است.

ویژگی‌های کلیدی کلودسیم:

  • مدل‌سازی انعطاف‌پذیر: امکان مدل‌سازی مراکز داده (Datacenter)، میزبان‌ها (Host)، ماشین‌های مجازی (VM)، برنامه‌ها (Application) و کاربران (User) را فراهم می‌کند.
  • پشتیبانی از مجازی‌سازی: به طور کامل از مفهوم مجازی‌سازی پشتیبانی می‌کند و امکان ایجاد و مدیریت ماشین‌های مجازی متعدد بر روی یک میزبان فیزیکی را فراهم می‌سازد.
  • مدل‌سازی شبکه: قابلیت شبیه‌سازی تأخیر (latency) و پهنای باند (bandwidth) شبکه را برای سناریوهای پیچیده‌تر داراست.
  • قابلیت توسعه: معماری ماژولار آن به کاربران اجازه می‌دهد تا اجزای سفارشی خود را برای مدل‌سازی رفتارهای خاص یا الگوریتم‌های جدید اضافه کنند.
  • مدل‌سازی مصرف انرژی: امکان بررسی تأثیر سیاست‌های مختلف بر مصرف انرژی در مراکز داده را فراهم می‌کند.

چرا از کلودسیم استفاده کنیم؟

  • کاهش هزینه و زمان: بدون نیاز به سخت‌افزار واقعی، الگوریتم‌ها را تست کنید.
  • تکرارپذیری: شبیه‌سازی‌ها را می‌توان بارها با شرایط یکسان تکرار کرد و نتایج قابل اعتمادی به دست آورد.
  • ارزیابی کارایی: معیارهایی مانند زمان تکمیل وظیفه، مصرف انرژی، استفاده از منابع و تأخیر را اندازه‌گیری و مقایسه کنید.
  • پشتیبانی از تحقیقات: ابزاری ایده‌آل برای محققانی که در زمینه زمان‌بندی، تخصیص منابع، تعادل بار (Load Balancing) و بهینه‌سازی انرژی در محیط‌های ابری فعالیت می‌کنند.

مفاهیم کلیدی در معماری کلودسیم

برای درک نحوه کار با کلودسیم، آشنایی با اجزای اصلی آن ضروری است. این اجزا، بلوک‌های سازنده هر سناریوی شبیه‌سازی ابری هستند.

1. Datacenter (مرکز داده)

یک مرکز داده نشان‌دهنده زیرساخت فیزیکی فراهم‌کننده خدمات ابری است. این شامل مجموعه‌ای از میزبان‌ها، سوئیچ‌های شبکه و سیستم‌های ذخیره‌سازی می‌شود. در کلودسیم، شما ویژگی‌هایی مانند معماری پردازنده، سیستم عامل و سیاست‌های مدیریت منابع را برای مراکز داده خود تعریف می‌کنید.

2. Host (میزبان)

هر میزبان نشان‌دهنده یک سرور فیزیکی در مرکز داده است. این سرور دارای منابع سخت‌افزاری مانند تعداد پردازنده‌ها (PEs)، ظرفیت حافظه (RAM) و فضای ذخیره‌سازی (Storage) است. میزبان‌ها مسئول میزبانی و مدیریت ماشین‌های مجازی هستند.

3. VM (ماشین مجازی)

ماشین‌های مجازی (Virtual Machines) نمونه‌های مجازی‌شده سرورها هستند که بر روی میزبان‌های فیزیکی اجرا می‌شوند. هر VM دارای منابع اختصاصی خود از جمله تعداد پردازنده، RAM و پهنای باند است. کلودسیم به شما اجازه می‌دهد تا VMها را با مشخصات مختلف ایجاد کرده و آن‌ها را به میزبان‌ها تخصیص دهید.

4. Cloudlet (وظیفه ابری)

کلودلت‌ها نشان‌دهنده وظایف یا برنامه‌های کاربردی هستند که باید در محیط ابری اجرا شوند. هر کلودلت دارای ویژگی‌هایی مانند طول وظیفه (میزان دستورالعمل‌ها به میلیون دستور، MI)، اندازه فایل ورودی و خروجی است. این وظایف توسط کاربران به ماشین‌های مجازی ارسال می‌شوند.

5. Datacenter Broker (کارگزار مرکز داده)

کارگزار مرکز داده نقش واسطه بین کاربران و مراکز داده را ایفا می‌کند. این نهاد مسئول تصمیم‌گیری در مورد نحوه تخصیص ماشین‌های مجازی به مراکز داده و نحوه زمان‌بندی کلودلت‌ها بر روی ماشین‌های مجازی است. الگوریتم‌های زمان‌بندی و تخصیص منابع در این بخش پیاده‌سازی می‌شوند.

گام به گام: راه‌اندازی محیط و ساخت اولین شبیه‌سازی با کلودسیم

برای شروع کار با کلودسیم، ابتدا باید محیط توسعه را آماده کرده و سپس مراحل ساخت یک شبیه‌سازی ساده را دنبال کنید.

1. پیش‌نیازها و راه‌اندازی محیط توسعه

  • جاوا (Java JDK): اطمینان حاصل کنید که Java Development Kit (JDK) نسخه 8 یا بالاتر روی سیستم شما نصب است.
  • محیط توسعه یکپارچه (IDE): از یک IDE مانند Eclipse، IntelliJ IDEA یا NetBeans برای توسعه پروژه‌های جاوا استفاده کنید. Eclipse یک انتخاب محبوب برای پروژه‌های کلودسیم است.
  • دانلود CloudSim: جدیدترین نسخه CloudSim را از وب‌سایت رسمی یا مخازن GitHub دانلود کنید. معمولاً به صورت یک فایل JAR ارائه می‌شود.

2. افزودن CloudSim به پروژه جاوا

پس از ایجاد یک پروژه جاوا جدید در IDE خود، فایل JAR مربوط به کلودسیم و کتابخانه‌های وابسته (مانند commons-math3.jar) را به Build Path پروژه خود اضافه کنید. این کار معمولاً از طریق تنظیمات پروژه (Project Properties -> Java Build Path -> Libraries -> Add External JARs) انجام می‌شود.

3. مراحل کدنویسی یک شبیه‌سازی ساده

در این بخش، به طور خلاصه مراحل اصلی را که برای ساخت یک شبیه‌سازی پایه نیاز دارید، توضیح می‌دهیم:

الف) راه‌اندازی CloudSim

اولین گام، راه‌اندازی چارچوب شبیه‌سازی کلودسیم است. این کار با فراخوانی متد `CloudSim.init()` انجام می‌شود که تعداد موجودیت‌های (entities) همزمان و سایر پارامترهای اولیه را تعیین می‌کند.

ب) ایجاد مراکز داده (Datacenters)

یک یا چند مرکز داده با مشخصات خاص خود (مانند تعداد میزبان‌ها، مشخصات پردازنده‌ها، سیاست‌های تخصیص VM) ایجاد کنید.

ج) ایجاد کارگزار مرکز داده (Datacenter Broker)

کارگزار مسئول مدیریت ارتباط بین کاربران و مراکز داده است. الگوریتم‌های شما برای انتخاب بهترین VM برای هر وظیفه در این بخش پیاده‌سازی می‌شوند.

د) ایجاد ماشین‌های مجازی (VMs)

ماشین‌های مجازی با ظرفیت‌های مختلف (مثلاً تعداد هسته پردازشی، میزان رم) را تعریف کرده و آن‌ها را به کارگزار ارسال کنید تا به مراکز داده تخصیص داده شوند.

ه) ایجاد کلودلت‌ها (Cloudlets)

وظایف محاسباتی (کلودلت‌ها) را با مشخصات دلخواه (مانند طول پردازش) ایجاد کرده و آن‌ها را نیز به کارگزار ارسال کنید.

و) شروع شبیه‌سازی و مشاهده نتایج

با فراخوانی `CloudSim.startSimulation()`، شبیه‌سازی آغاز می‌شود. پس از اتمام، می‌توانید نتایج را از کارگزار دریافت کرده و معیارهایی مانند زمان اجرای کلودلت‌ها، مصرف منابع و سایر آمارهای مرتبط را تجزیه و تحلیل کنید.

نمای کلی جریان شبیه‌سازی در کلودسیم (اینفوگرافیک توصیفی)

برای درک بهتر جریان کاری در کلودسیم، یک نمایش بصری (اینفوگرافیک) می‌تواند بسیار مفید باشد. تصور کنید اینفوگرافیک شامل بلوک‌هایی با رنگ‌های ملایم و اتصالاتی واضح است که مراحل زیر را نشان می‌دهد:

اینفوگرافیک: چرخه شبیه‌سازی در کلودسیم

(طراحی بصری: یک نمودار جریان (Flowchart) زیبا با بلوک‌های رنگی ملایم (آبی آسمانی، سبز روشن، خاکستری روشن) و فلش‌های ارتباطی مشخص.)

  • [شروع] -> “راه‌اندازی CloudSim” (بلوک آبی)
  • “تعریف Datacenter(ها)” (بلوک سبز روشن)
  • “تعریف Host(ها) و VM(ها)” (بلوک سبز روشن)
  • “ایجاد Datacenter Broker” (بلوک خاکستری)
  • “تعریف Cloudlet(ها)” (بلوک خاکستری)
  • “ارسال VMها و Cloudletها به Broker” (بلوک آبی)
  • “شروع شبیه‌سازی” (بلوک آبی)
  • “پردازش و تجزیه و تحلیل نتایج” (بلوک سبز روشن)
  • [پایان]

این نمودار جریان، مراحل منطقی یک سناریو شبیه‌سازی پایه را در کلودسیم نشان می‌دهد.

پارامترهای کلیدی در شبیه‌سازی کلودسیم

در جدول زیر، برخی از پارامترهای مهمی که در هنگام تعریف اجزای کلودسیم باید در نظر بگیرید، آورده شده است. تنظیم صحیح این پارامترها برای رسیدن به نتایج دقیق و معنادار حیاتی است.

مفهوم کلودسیم پارامترهای کلیدی (مثال)
Host (میزبان) Number of PEs (پردازنده‌ها), MIPS per PE (ظرفیت پردازش), RAM (حافظه), Storage (ذخیره‌سازی), Bandwidth (پهنای باند)
VM (ماشین مجازی) Number of PEs, MIPS per PE, RAM, Storage, Bandwidth, VMM (مدیریت ماشین مجازی)
Cloudlet (وظیفه ابری) Length (MI), Number of PEs, File Size (Input/Output), ID
Datacenter (مرکز داده) تعداد Hosts، نوع OS، VMM، سیاست تخصیص VM (VmAllocationPolicy), زمان‌بندی PE (PeProvisioningPolicy)

کاربردهای پیشرفته و توسعه در کلودسیم

کلودسیم فراتر از شبیه‌سازی‌های پایه، قابلیت‌های پیشرفته‌ای را برای سناریوهای پیچیده‌تر ارائه می‌دهد:

  • شبیه‌سازی شبکه‌های ابری: با افزودن ماژول‌های شبکه، می‌توانید تأخیر و پهنای باند را در ارتباطات بین مراکز داده و ماشین‌های مجازی مدل‌سازی کنید.
  • شبیه‌سازی انرژی: با استفاده از کلاس‌های مربوط به مدیریت انرژی، می‌توانید تأثیر الگوریتم‌های زمان‌بندی و تخصیص منابع را بر مصرف انرژی مراکز داده و میزبان‌ها تحلیل کنید.
  • پشتیبانی از ابر فدرال (Federated Cloud): کلودسیم امکان مدل‌سازی محیط‌های ابری متشکل از چندین مرکز داده جغرافیایی را فراهم می‌آورد.
  • ادغام با ابزارهای دیگر: کلودسیم به عنوان یک هسته، می‌تواند با ابزارهای دیگر مانند CloudAnalyst (برای تجزیه و تحلیل عملکرد سرویس‌ها) یا WorkflowSim (برای شبیه‌سازی ورک‌فلوها) ترکیب شود تا قابلیت‌های آن گسترش یابد.

نکات مهم و بهترین شیوه‌ها در استفاده از کلودسیم

  • تعریف اهداف واضح: قبل از شروع شبیه‌سازی، دقیقاً مشخص کنید که چه چیزی را می‌خواهید اندازه‌گیری یا ارزیابی کنید.
  • اعتبارسنجی مدل: نتایج شبیه‌سازی را با داده‌های واقعی (در صورت امکان) یا با نتایج مطالعات مشابه اعتبارسنجی کنید.
  • استفاده از نسخه‌های پایدار: همیشه از نسخه‌های پایدار و به‌روز کلودسیم برای جلوگیری از مشکلات احتمالی استفاده کنید.
  • مستندسازی کد: کد خود را به خوبی مستندسازی کنید تا فهم و نگهداری آن آسان‌تر باشد.
  • آزمایش‌های تکراری: شبیه‌سازی‌ها را چندین بار اجرا کنید و میانگین نتایج را برای افزایش قابلیت اطمینان گزارش دهید.

سوالات متداول (FAQ) در مورد کلودسیم

1. آیا کلودسیم تنها ابزار شبیه‌سازی برای رایانش ابری است؟

خیر، کلودسیم یکی از محبوب‌ترین و پرکاربردترین ابزارها است، اما ابزارهای دیگری مانند iCanCloud، GreenCloud و CloudAnalyst نیز وجود دارند که هر کدام ویژگی‌ها و تمرکزهای خاص خود را دارند. کلودسیم به دلیل انعطاف‌پذیری و جامعه کاربری بزرگتر، اغلب به عنوان نقطه شروع انتخاب می‌شود.

2. آیا برای کار با کلودسیم نیاز به دانش عمیق در زمینه رایانش ابری دارم؟

داشتن درک پایه از مفاهیم رایانش ابری مانند مجازی‌سازی، مراکز داده، ماشین‌های مجازی و زمان‌بندی منابع بسیار مفید است. علاوه بر این، تسلط بر زبان برنامه‌نویسی جاوا ضروری است، زیرا کلودسیم بر پایه جاوا توسعه یافته است.

3. چگونه می‌توانم نتایج شبیه‌سازی را بهبود بخشم یا سفارشی‌سازی کنم؟

شما می‌توانید با تغییر پارامترهای مراکز داده، میزبان‌ها، ماشین‌های مجازی و کلودلت‌ها، نتایج را سفارشی‌سازی کنید. علاوه بر این، می‌توانید الگوریتم‌های زمان‌بندی و تخصیص منابع خود را با پیاده‌سازی کلاس‌های سفارشی برای `VmAllocationPolicy` یا `CloudletScheduler` توسعه دهید. این مهمترین راه برای ارزیابی ایده‌های نوین است.

4. آیا کلودسیم برای شبیه‌سازی برنامه‌های کاربردی واقعی مناسب است؟

کلودسیم بیشتر برای مدل‌سازی رفتاری و ارزیابی عملکرد الگوریتم‌ها در سطح انتزاعی بالا طراحی شده است. در حالی که می‌توانید مشخصات وظایف را تعریف کنید، شبیه‌سازی جزئیات دقیق اجرای یک برنامه واقعی با تمام پیچیدگی‌های کد آن، در حوزه کاری کلودسیم نیست. هدف اصلی آن، سنجش الگوریتم‌های زمان‌بندی و مدیریت منابع است.

5. آیا کلودسیم از مدل‌های قیمت‌گذاری ابری پشتیبانی می‌کند؟

بله، کلودسیم به شما اجازه می‌دهد تا مدل‌های قیمت‌گذاری مختلف را برای منابع ابری (مانند هزینه هر ساعت استفاده از VM یا هزینه ذخیره‌سازی) تعریف کنید و تأثیر الگوریتم‌های خود را بر هزینه‌ها ارزیابی کنید. این قابلیت برای مطالعات اقتصادی و بهینه‌سازی هزینه‌ها بسیار مفید است.

نتیجه‌گیری

نرم‌افزار کلودسیم ابزاری بی‌نظیر برای محققان، دانشجویان و توسعه‌دهندگان در حوزه رایانش ابری است. این چارچوب قدرتمند، امکان مدل‌سازی و شبیه‌سازی سناریوهای پیچیده ابری را فراهم می‌آورد و به شما اجازه می‌دهد تا الگوریتم‌های نوین را در محیطی کنترل‌شده و با هزینه‌ای مقرون‌به‌صرفه آزمایش کنید. با درک مفاهیم کلیدی و دنبال کردن مراحل آموزش گام به گام، می‌توانید پتانسیل کامل این ابزار را کشف کرده و به توسعه راه‌حل‌های خلاقانه در مدیریت منابع ابری، زمان‌بندی وظایف و بهینه‌سازی سیستم‌ها بپردازید. این دانش، شما را در مسیر حرفه‌ای و تحقیقاتی خود در دنیای رایانش ابری توانمندتر خواهد ساخت.

برای کسب اطلاعات بیشتر و دریافت مشاوره تخصصی در زمینه شبیه‌سازی با کلودسیم یا سایر پروژه‌های مرتبط با رایانش ابری، می‌توانید با ما در ارتباط باشید.


با ما تماس بگیرید و مشاوره رایگان دریافت کنید!

شماره همراه: 09120917261

/* این بخش استایل‌دهی، برای راهنمایی طراح سایت در نظر گرفته شده است و در خروجی متنی نمایش داده نمی‌شود */
/*
body {
font-family: ‘Vazirmatn’, sans-serif;
direction: rtl;
line-height: 1.6;
color: #34495E;
background-color: #F8F9FA;
padding: 20px;
margin: 0;
}

h1 {
font-size: 2.5em;
font-weight: bold;
color: #2C3E50;
text-align: center;
margin-bottom: 30px;
padding-top: 20px;
position: relative;
}
h1::after {
content: ”;
display: block;
width: 80px;
height: 4px;
background-color: #3498DB;
margin: 15px auto 0;
border-radius: 2px;
}

h2 {
font-size: 1.8em;
font-weight: bold;
color: #2C3E50;
margin-top: 40px;
margin-bottom: 20px;
padding-bottom: 10px;
border-bottom: 2px solid #ECF0F1;
position: relative;
}
h2::before {
content: ‘▪’;
color: #3498DB;
margin-left: 10px;
font-size: 1.2em;
}

h3 {
font-size: 1.4em;
font-weight: bold;
color: #2C3E50;
margin-top: 30px;
margin-bottom: 15px;
border-bottom: 1px dashed #ECF0F1;
padding-bottom: 8px;
}
h3::before {
content: ‘›’;
color: #2ECC71;
margin-left: 8px;
}

h4 {
font-size: 1.2em;
font-weight: bold;
color: #34495E;
margin-top: 20px;
margin-bottom: 10px;
}

p {
font-size: 1.1em;
line-height: 1.8;
color: #34495E;
text-align: justify;
margin-bottom: 20px;
}

ul {
font-size: 1.1em;
line-height: 1.8;
color: #34495E;
list-style-type: disc;
margin-left: 20px;
margin-bottom: 20px;
padding-right: 0;
}
ul li {
margin-bottom: 10px;
}
ul li::marker {
color: #3498DB;
}

strong {
color: #3498DB;
}

a {
color: #3498DB;
text-decoration: none;
transition: color 0.3s ease;
}
a:hover {
color: #2980B9;
text-decoration: underline;
}

table {
width: 100%;
border-collapse: collapse;
background-color: #FFFFFF;
border-radius: 8px;
overflow: hidden;
box-shadow: 0 4px 8px rgba(0,0,0,0.1);
margin-bottom: 30px;
}
th, td {
padding: 15px;
text-align: right;
border-bottom: 1px solid #ECF0F1;
color: #34495E;
}
th {
background-color: #3498DB;
color: white;
font-size: 1.1em;
border-bottom: 2px solid #2980B9;
}
tr:last-child td {
border-bottom: none;
}
tbody tr:hover {
background-color: #F5F5F5;
}

.infographic-description {
background-color: #ECF0F1;
padding: 25px;
border-radius: 12px;
margin-bottom: 30px;
border: 1px solid #BDC3C7;
text-align: center;
}
.infographic-description ul {
list-style-type: none;
padding: 0;
margin: 0;
}
.infographic-description li {
margin-bottom: 15px;
position: relative;
padding-left: 20px;
}
.infographic-description li strong {
color: #3498DB;
font-weight: bold;
}
.infographic-description li::before {
content: ‘▶’;
position: absolute;
right: 0;
color: #2ECC71;
}

.cta-button {
display: inline-block;
padding: 15px 30px;
background-color: #E74C3C;
color: white;
text-decoration: none;
border-radius: 8px;
font-size: 1.2em;
font-weight: bold;
transition: background-color 0.3s ease, transform 0.3s ease;
box-shadow: 0 4px 10px rgba(231, 76, 60, 0.4);
}
.cta-button:hover {
background-color: #C0392B;
transform: scale(1.05);
}

/* Responsive Design Adjustments */
@media (max-width: 768px) {
h1 {
font-size: 2em;
margin-bottom: 20px;
}
h2 {
font-size: 1.5em;
margin-top: 30px;
margin-bottom: 15px;
}
h3 {
font-size: 1.2em;
margin-top: 25px;
margin-bottom: 10px;
}
p, ul, table, .infographic-description {
font-size: 1em;
margin-bottom: 15px;
}
table, .infographic-description {
padding: 15px;
}
th, td {
padding: 10px;
}
.cta-button {
padding: 12px 25px;
font-size: 1.1em;
}
}
@media (max-width: 480px) {
body {
padding: 10px;
}
h1 {
font-size: 1.8em;
}
h1::after {
width: 60px;
margin: 10px auto 0;
}
h2 {
font-size: 1.3em;
}
h3 {
font-size: 1.1em;
}
p, ul, table, .infographic-description {
font-size: 0.95em;
}
ul {
margin-left: 15px;
}
.cta-button {
display: block;
width: calc(100% – 20px);
margin: 30px auto;
font-size: 1em;
}
}
*/

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *