برای توسعه و مهندسان به طور یکسان ، وردپرس یک راه حل عالی برای ساختن یک وب سایت گرم و گرم است که با شخصیت نهایی Canily کار ، نگهداری و مدیریت می کند.
در Hostinger ، ما همچنین صفحات خود را می سازیم و با استفاده از وردپرس ، محتوا را مدیریت می کنیم. با این حال ، نگرانی بزرگ ما این بود: آیا وردپرس به اندازه کافی تحقق می یابد تا حداکثر میلیون بازدید کننده را اداره کند؟
معلوم می شود ، با استراتژی مقیاس مناسب ، می توانیم از وردپرس به عنوان پایه ای برای وب سایت مقاوم ، چابک و بسیار در دسترس استفاده کنیم ، حتی در حین سنبله ترافیک. در ادامه بخوانید تا بدانید که چگونه این کار را انجام می دهیم.
رنگ اصلی رنگ
استراتژی مقیاس گذاری ما عمدتاً در حدود دو فناوری فراخوانی می کند که از زیرساخت های ابری استفاده می کنند – اسکله وت کربنبشر
Docker WordPress را به Contineers بسته می کند. در همین حال ، ما از Kubernetes برای “ارکستر” این ظروف استفاده می کنیم ، که به طور خودکار بار و چرخه های عمر آنها را مدیریت می کنند.
بیایید هر یک از این فناوری ها و مزایای آنها را برای بهبود مقیاس پذیری نمونه وردپرس ما بررسی کنیم.
کانتینر با داکر
Docker WordPress خود را در محیط های جدا شده به نام Containeers بسته بندی می کند که هر کدام به طور مستقل از دیگران اجرا می شوند.
دو راه برای ایجاد یک ظرف وردپرس وجود دارد – با نوشتن یک کار با شغلی و بارگیری تصویر رسمی وردپرس Docker.
استفاده از وردپرس رسمی Docker به ساده سازی روند استقرار کمک می کند زیرا شما فقط می توانید آن را در یک ظرف بسازید. اگر از Dockerfile استفاده می کنید ، محتوای اصلی ممکن است به این شکل باشد:
# Start with official Docker image of wordpressFROM wordpress:6.6.1-apache
# FROM wordpress:php8.1-fpm
# if we want to use php-fpm instead
# apt update and then install packages we might need
RUN apt update & \
apt install -y \
wget
# Replace php.ini
COPY php.ini /usr/local/etc/php
در اینجا نقش کانتینر سازی Docker در استراتژی مقیاس گذاری وردپرس آورده شده است:
قابلیت حمل
شما می توانید ظروف را به راحتی بر روی سیستم عامل های مختلف ، از جمله توسعه ، مرحله بندی و تولید محیط زیست مستقر کنید.
از آنجا که هر کانتینر وردپرس را با همان بسته ها ، افزودنیها و پیکربندی ها ارسال می کند ، ما نمی توانیم هنگام استفاده مجدد از آن در دستگاه دیگری ، عملکرد و سازگاری را سازگاری کنیم.
سفارشی سازی
می توانید Dockerfile را اصلاح کنید تا مضامین ، افزونه ها و بسته های متناسب با نیازهای وب سایت خود را اضافه کنید. سپس ، می توانید هنگام ساخت ظرف ، آنها را به صورت خودکار نصب کنید.
بدون Docker ، شما باید پس از استقرار نمونه جدید وردپرس ، این مضامین ، افزونه ها و بسته ها را به صورت جداگانه تنظیم کنید. این مدت زمان طولانی است و بیشتر مستعد خطای انسانی است.
پیکربندی
اهرم وردپرس_* متغیرهای محیطی برای ساده سازی پیکربندی با اصلاح مجدد wp-config.phpبشر این یک پیکربندی مداوم در ظروف را تقویت می کند و باعث می شود سفارشی سازی ایمن تر از شما ایمن تر شود!
قابلیت اطمینان
Docker به شما امکان می دهد چندین نمونه یکسان از وب سایت وردپرس خود ایجاد کنید ، که هسته اصلی استراتژی مقیاس گذاری افقی ما است.
ظروف Hultiple WordPress قابلیت اطمینان را بهبود می بخشد زیرا نمونه ای می تواند هنگامی که یکی از اصلی ترین آنها را به دست می آورد ، عملیات را به عهده بگیرد. تنظیم با چندین ظروف همچنین به شما امکان می دهد تا ترافیک را به طور مساوی تر برای تعادل بار توزیع کنید.
استقرار با Kubernets
نکته اصلی نمونه وردپرس شما بسیار مقیاس پذیر و انعطاف پذیر استفاده از قابلیت های ارکستراسیون کانتینر Kubernetes است.
در Kubernetes ، شما ظروف وردپرس را در آن مستقر می کنید غلاف – واحدهای مستقر در SMALST که می توانند برای پاسخگویی به تغییر خواسته های کاربر ، بالا و پایین باشند.
ما از POD ها برای استقرار و مدیریت چندین نمونه یکسان وردپرس با FILS Core Core ، پیکربندی و پسوندها استفاده می کنیم. همانطور که قبلاً توضیح داده شد ، این اساس مقیاس افقی ما خواهد بود.
Kubernetes Setup ما از موارد زیر:
AutoScaler POD افقی (HPA)
ما HPA را به صورت پویا حساب PODS به ترافیک می کنیم. هنگامی که بسیاری از کاربران به وب سایت ما دسترسی پیدا می کنند ، HPA غلافهای بیشتری را برای توزیع بار به طور مساوی تر و خاموش می کند.
در مجموعه سنتی وردپرس ، فقط یک نمونه واحد تمام ترافیک را انجام می دهد. علیرغم استخر منابع بالاتر ، این امر غیرقابل توصیف است زیرا محدودیت خدمات و تأخیر باعث تنگناها می شود.
HPA با ردیابی معیارهای خاص روی سرور شما کار می کند ، چه کسی می تواند:
- معیارهای داخلی – استفاده از منابع از غلاف ، که می تواند استفاده از پردازنده یا قوام حافظه باشد. شما می توانید آستانه خاصی را تنظیم کنید که هنگام بارگذاری بار آن برای دستگاه شما باشد. به عنوان مثال ، هنگامی که میزان مصرف CPU بیش از ۸۰ ٪ باشد ، HPA غلافهای جدیدی را برای توزیع بار یا خاموش کردن غلاف ها در هنگام استفاده از ۵۰ ٪ اجرا می کند.
- معیارهای سفارشی – HPA همچنین از معیارهای سفارشی مانند داده های سرور Apache (به عنوان مثال ، تعداد اتصالات فعال ، میزان درخواست یا زمان پاسخ) یا PHP FPM به عنوان محرک مقیاس گذاری پشتیبانی می کند. برای ادغام معیارهای سفارشی در Kubernetes ، می توانید از ابزاری مانند سرور Metrics Kubernets یا آداپتورهای معیارهای سفارشی استفاده کنید.
برای یک قانون ردیابی و مقیاس بندی مشخصات بیشتر ، می توانید به ترکیب چندین معیار بپیوندید و تعداد مشخصی از غلاف را برای فعال کردن آنها تنظیم کنید.
HPA نه تنها برای تعیین قوانین برای مقیاس کردن غلافهای شما بلکه برای پیش بینی الگوهای منظم ترافیک نیز مفید است. این بینش Kubernetes را قادر می سازد تا نمونه وردپرس را قبل از زمان برای پیش بینی افزایش بار مقیاس کند.
ورود Kubernetes
Ingress منبعی است که به خوشه های خدمات Kubernetes شما ارتباط دارد. این توابع خدمات را برای مقیاس بندی وردپرس مفید دارد:
- تعادل بار -به طور پیش فرض ، تمام درخواست های کاربر به یک سرویس پشتی تنها هدایت می شوند. این می تواند علت عدم حضور در هنگام افزایش ترافیک در تنها یک دستگیره های انتهایی واحد باشد. Ingress می تواند به عنوان متعادل کننده بار عمل کند که درخواست ها را مستقیماً به سرویس اختصاصی هدایت می کند و باعث می شود که به طور مساوی تر توزیع شود.
- خاتمه SSL/TLS کنترل کننده های Ingress -kuberneters می توانند از رمزگذاری و رمزگشایی SSL/TLS مراقبت کنند ، که می تواند از منابع منبع باشد. این بار کار را از برنامه اصلی وردپرس خاموش می کند تا بتواند روی منطق عملیاتی تمرکز کند.
متغیرها و اسرار محیط
صرفه جویی در اطلاعات حساس مانند اعتبار دسترسی در سرگرمی های مجازی بهترین روش امنیتی است. از آنجا که شما چنین اطلاعاتی را مستقیماً در پرونده های وردپرس خود سخت نمی کنید ، به احتمال زیاد فاش می شود.
در Kubernetes ، همچنین می توانید داده ها را در یک شیء کوچک به نام a ذخیره کنید مخفیانهکه می توانید از طریق یک حجم ، محیط را در غلاف ها عبور دهید. پیکربندی YAML ممکن است به شرح زیر باشد:
spec:containers:
env:
- name: WORDPRESS_DB_USER
valueFrom:
secretKeyRef:
name: db-user
key: db-username
به طور پیش فرض ، ذخیره کردن داده ها در اسرار از استفاده از متغیرهای محیط زیست امن تر است زیرا مستقل از غلاف ها است. این بدان معنی است که اسرار و احتمالاً هنگام مدیریت غلاف در معرض دید قرار می گیرند.
داده ها به صورت پنهانی در آن رمزگذاری می شوند base64 رشته ها و می توانند در حالت استراحت رمزگذاری شوند. شما همچنین می توانید بسازید اسرار تغییر ناپذیر برای جلوگیری از اصلاحات غیرمجاز که می تواند باعث بروز حوادث شود.
چالش ها و راه حل ها
در حالی که Docker and Kubernetes راه حل های عالی برای مقیاس گذاری استقرار وردپرس ما ، ما هنگام استفاده از فناوری ها چندین چالش را تشویق کردیم. در اینجا یک بر روی اختلافات و چگونگی مدیریت ما می توانیم از طریق آنها حرکت کنیم:
با استفاده از معیارهای آپاچی با HPA
هنگامی که معیارهای داخلی مانند استفاده از CPU یا RAM استفاده می شود ، HPA Kuberneneters به خوبی کار می کند. با این حال ، ما این ادغام را داریم که یک پارامتر خارجی مدل (مانند تعداد کارگران شلوغ آپاچی یا معیارهای دقیق PHP-FPM) کاملاً چالش برانگیز است.
استفاده از معیارهای خاص برای ایجاد مقیاس بندی نیاز به تنظیم یک صادرکننده سفارشی و قرار دادن داده ها برای خواندن Kuberinets دارد.
یک راه حل ساده تر برای این مشکل استفاده از یک برنامه شخص ثالث است که ابزاری برای وارد کردن مواد ارائه می دهد. یک مثال نمودار Helm Bitnami است که می تواند ردیابی متریک را در HPA از جعبه خارج کند.
حفظ قوام بین غلاف ها
هنگام استقرار وردپرس در غلافهای Kubernetes ، باید هر نمونه یکسان باشد. هر غلاف باید پرونده های اصلی SAMS ، افزونه ها ، پرونده های رسانه ای و سایر داده ها را انجام دهد.
در تولید ، حفظ قوام در غلاف ها می تواند خسته کننده باشد زیرا نمی توانید در هنگام استقرار از یک داکر استفاده کنید.
برای ساده تر کردن امور ، راه حل ما تنظیم ذخیره سازی سیستم فایل شبکه (NFS) برای افزونه هایی بود که هر غلاف می تواند آن را بخواند و بنویسد. این ذخیره سازی داده هایی را که به مرور زمان به روز می شوند ، مانند /var/www/html/wp-standard/افزونه هابشر
برای ذخیره سازی NFS ، شما باید از یک محلول ابری استفاده کنید که می تواند به چندین غلاف ، مانند AWS EFS یا GCP Filestore.
برای اتصال غلاف به ذخیره NFS خود ، از ادامه دادن درخواست برای مشخص کردن نقطه پایانی داده. اینها ، مجوز RWX (ReadWritemany) را به گروه اختصاص می دهد تا غلافهای شما به داده ها دسترسی پیدا کنند.
پیکربندی مداوم و استقرار غلافهای شما ممکن است به شرح زیر باشد:
apiVersion: v1kind: PersistentVolumeClaim
metadata:
name: plugins
spec:
accessModes:
- ReadWriteMany
storageClassName: nfs-client
resources:
requests:
storage: 20G
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress
spec:
...
volumeMounts:
- name: wordpress-plugins
mountPath: /var/www/html/wp-content/plugins
volumes:
- name: wordpress-plugins
persistentVolumeClaim:
claimName: plugins
با استفاده از یک پایگاه داده قابل اعتماد
همراه با نمونه وردپرس ، برای جلوگیری از تنگناها و از بین رفتن داده ها ، از پایگاه داده خود مهم است. این بانک اطلاعاتی باید همه را حفظ کند تا عملکرد و به روزرسانی خود را در زمان های پر حرکت حفظ کند.
ما می توانیم این استفاده را از یک تنظیم پایگاه داده قوی (مدیریت پیشانی) با ویژگی های ایمنی قابل اعتماد استفاده کنیم. به عنوان مثال ، درخشش عدم موفقیت خودکار و تکثیر داخلی.
این پیکربندی یکپارچگی داده ها و در دسترس بودن خدمات را حتی در هنگام خرابی یا بارهای سنگین تضمین می کند.
پیشرو
با افزایش استقرار وردپرس ما ، نگرانی اصلی ما این است که چگونه آن را برای رسیدگی به میلیون نفر از بازدید کنندگان مقیاس کنیم. ما دریافتیم که با استفاده از Docker و Kubernetes ، می توانیم یک وب سایت مقیاس پذیر ایجاد کنیم که چابک و قابل تحقق باشد ، حتی بار بالایی نیز.
ایده اصلی استقرار چندین کانتینر وردپرس به عنوان غلاف است که ما با استفاده از HPA Kuberinets به صورت پویا مقیاس می کنیم. این به تنظیم ما اجازه می دهد تا به طور خودکار بار را به طور مساوی در غلاف ها توزیع کنیم تا بهینه سازی استفاده از منابع شود.
مانند ما ، می توانید با استفاده از ویژگی های داخلی Kubernetes مانند Ingress و Metrics HPA سفارشی ، استقرار وردپرس خود را حتی بیشتر بهینه کنید. با یک زیرساخت ابری قوی برای بانک اطلاعاتی و ذخیره سازی داده های پویا ، می توانید برای رها کردن پتانسیل کامل وردپرس تنظیم کنید.
منبع: https://www.hostinger.com/blog/scaling-wordpress-with-kubernetes