وردپرس یک سیستم مدیریت محتوا (CMS) قدرتمند است که می تواند پایه ای برای انواع مختلف سایت ها و برنامه ها باشد. این سیستم از یک "معماری یکپارچه" معمولی استفاده می کند اما با رشد سایت، احتمالا بهترین گزینه نباشد. اینجا است که «معماری میکروسرویس» می تواند مفید واقع شود. در این مقاله، نحوه ساخت وب اپلیکیشن وردپرس با استفاده از معماری میکروسرویس بررسی خواهد شد. همچنین افزونه Create Block Theme معرفی و در مورد چگونگی استفاده از آن در توسعه برنامه نیز بحث می شود.
معماری میکروسرویس چیست؟
پیش از ساخت هر برنامه وب، باید درک کنید که میکروسرویس چیست و چه تفاوتی با معماریهای یکپارچه دارد.
در معماری یکپارچه، وابستگی شدیدی بین تمام اجزای یک برنامه وجود دارد. این معماری اساسا به صورت یک سرویس واحد اجرا میشود. معماری یکپارچه روش سادهای برای توسعه یک برنامه است، اگرچه با افزایش پیچیدگی، نگهداری و گسترش آن میتواند به یک چالش تبدیل شود. در مقابل، معماری میکروسرویس به شما کمک میکند تا برنامه را به مجموعهای از سرویسهای کوچکتر تقسیم کنید. هر سرویس از نظر توسعه، استقرار و عملکرد، مستقل از دیگری است.
تصویر(1)
هر سرویس وظیفه خاصی را انجام می دهد و از طریق یک رابط برنامهنویسی کاربردی (API) با سایر سرویسها ارتباط برقرار میکند. برای مثال، یک سایت تجارت الکترونیک معمولی را با سبد خرید، تسویه حساب، پردازش سفارش، صفحه محصول و موارد دیگر در نظر بگیرید. در یک معماری یکپارچه، همه این ویژگی ها بخشی از یک برنامه بزرگ و واحد خواهند بود. وردپرس یک سیستم یکپارچه است و استفاده از افزونه ووکامرس به عنوان پلتفرم تجارت الکترونیک مثالی عالی از این موضوع می باشد.
با این حال، پیاده سازی یک معماری میکروسرویس به شما امکان می دهد از فناوری مناسب در هر کاری بهره ببرید. برای نمونه، می توانید از سیستم مدیریت محتوای وردپرس جهت بازاریابی محتوای خود، Adobe Commerce به عنوان سیستم مدیریت محصولات و یک سیستم تسویه مانند درگاه پرداخت Bolt استفاده نمایید. با میکروسرویسها اتصال این موارد به هم، امکانپذیر است. در بخش بعدی، با جزئیات بیشتر در مورد اینکه چرا میکروسرویسها باید به طور جدی برای پروژه بعدی شما در نظر گرفته شوند، صحبت خواهد شد.
چرا میکروسرویسها از معماریهای یکپارچه متمایز هستند؟
به عنوان یک تعریف مختصر و مفید، میکروسرویسها به نحوه ترکیب فناوریها و ابزارهای مختلف برای ایجاد یک وب اپلیکیشن وردپرسی می پردازند. با این حال، ویژگیهای دیگری نیز وجود دارند که در ادامه معرفی می شوند:
- عدم وابستگی (Decoupling): هر سرویس استقلال خود را حفظ میکند. این بدان معنا است که میتوانید به جای کنار آمدن با فریمورکهای نامناسب، از بهترین فناوری برای هر کار استفاده کنید.
- استقلال (Autonomy): خدماتی که ادغام میکنید برای اجرای با عملکرد بالا نیازی به تکیه بر یکدیگر ندارند.
- تخصصی بودن (Specialization): بدیهی است، هر سرویس روی کار خود تمرکز خواهد کرد که باز هم بر عملکرد تأثیر میگذارد.
- مقاومت (Resilience): به این معنی است که خرابی یک سرویس کل سایت شما را از کار نمیاندازد.
علاوه بر این جنبهها، مزایای بیشتری هنگام استفاده از میکروسرویسها وجود دارد:
- قابلیت ارتقاء: میتوانید سرویسهای جداگانه را بر اساس نیازهای فردی بدون تأثیر بر سایر بخشهای برنامه خود ارتقا دهید.
- انعطافپذیری: پیش از این به طور خلاصه توضیح داده شد که چگونه سرویسهای شما میتوانند از بهترین فناوری برای کار خود استفاده کنند. این موضوع حتی به زبانهای برنامهنویسی که برای ایجاد آنها استفاده میکنید نیز گسترش مییابد.
- توسعه سریعتر: شما میتوانید سرویسهای کوچک و متمرکز را سریعتر توسعه دهید، عملکرد سرویس خود را بهتر درک کرده و سیستم را با سهولت بیشتری نگهداری کنید.
- جداسازی بهتر خطا: با راهاندازی «ماژولار»، میتوانید در صورت خرابی یک سرویس آن را جدا کنید بدون اینکه بر سایر سرویسهایتان تأثیر بگذارد.
از سوی دیگر، معماری میکروسرویس میتواند پیچیدگیهایی را برای ارتباط، انسجام دادهها و مدیریت سیستمهای توزیعشده ایجاد کند. بنابراین، باید الزامات برنامه خود را به دقت ارزیابی کنید. به طور خلاصه، قبل از تصمیمگیری برای به کارگیری میکروسرویسها، هم مزایا و هم معایب را در نظر بگیرید.
اجزای تشکیل دهنده یک معماری میکروسرویس
همانطور که انتظار می رود، معماری میکروسرویس ها از اجزای مختلفی تشکیل شده است. این اجزا مانند چرخدندههای یک ساعت با هم کار میکنند تا برنامه ای مقیاسپذیر با امکان نگهداری و توسعه آسان را ارائه دهند. در این راستا، برخی از اجزا برای پیادهسازی معماری میکروسرویس ها نقش کلیدی دارند:
- API Gateway: نقطه ورود برای هر درخواست مشتری است. API، درخواست ها را به میکروسرویس های مناسب هدایت می کند. همچنین می تواند وظایفی مانند محدودیت نرخ (rate limiting) و احراز هویت را مدیریت نماید.
- کشف سرویس (Service Discovery): شما نیاز به استفاده از یک روش پویا برای کشف و برقراری ارتباط میکروسرویس ها با یکدیگر دارید. ابزارهایی مانند Consul یا Eureka می توانند در این زمینه کمک کنند.
- Containerization: بسته بندی و استقرار میکروسرویس ها به عنوان کانتینرها با استفاده از ابزارهایی مانند Docker رایج است. این مورد روشی می باشد که می توانید برای هر سرویس ایزولاسیون (جداسازی) فراهم می کنید.
- Orchestration: با افزودن میکروسرویس ها به برنامه خود، مدیریت آنها پیچیده تر می شود. ابزاری مانند Kubernetes می تواند به خودکارسازی این مدیریت سرویس کمک کند.
- کشینگ (Caching): مکانیزم های کشینگ مانند Redis یا Memcached اغلب عملکرد را بهبود می بخشند. این مورد با توجه به فشار بیشتری که روی سرویس های بک اند و پایگاه داده شما ایجاد می شود، می تواند حیاتی باشد.
- Messaging: سرویسهای شما نیز باید با هم ارتباط برقرار کنند. این کار را راهحلهای پیامرسانی غیرهمزمان (asynchronous) مانند RabbitMQ یا Apache Kafka بر عهده دارند.
با این حال، ابزارها تنها بخشی از پیاده سازی شما هستند. ملاحظات دیگری نیز وجود دارد، مانند اینکه چگونه هر میکروسرویس را در کل معماری طراحی کنید.
الگوهای طراحی برای معماری میکروسرویس
الگوهای طراحی شما برای میکروسرویسها به اندازه سایر بخشهای گردش کار توسعه اهمیت دارند. با توجه به پیچیدگی احتمالی در سراسر برنامه، مهم است که در نظر بگیرید کدام الگوها بیشترین تأثیر را خواهند داشت. در ادامه به سه مورد از آنها اشاره می شود:
- یک پایگاه داده برای هر سرویس (Database-per-service): هر میکروسرویس از پایگاه داده اختصاصی خود استفاده کرده و به جداسازی و استقلال داده کمک می کند.
- ترکیب API یا API composition: شما می توانید میکروسرویس ها را برای ایجاد سرویس ها یا API های سطح بالاتر، ترکیب کنید. این انعطاف پذیری و قابلیت استفاده مجدد، از مزایای برتر معماری میکروسرویس است.
- معماری رویداد محور (Event-driven architecture): در این معماری، سرویس ها از طریق رویدادها با هم ارتباط برقرار می کنند. این امر اتصال ضعیفتر و پردازش غیرهمزمان را تسهیل میکند.
همچنین در نظر گرفتن الگوهای طراحی خاص برای ابزارهایی که جهت ساختن معماری خود استفاده میکنید، حیاتی است. برای مثال، Docker و Kubernetes هر دو الگوهای معمولی دارند که در کنار طراحی کلی معماری خود، در نظر خواهید گرفت. با این حال، توجه داشته باشید که نیازی نیست همه اجزا یک میکروسرویس باشند. ایده درست این است که با سرویسهای کلیدی شروع کنید و معماری را در طول زمان توسعه دهید. در ادامه مقاله درباره این موضوع جزئیات بیشتری ارائه می شود. ابتدا باید بررسی کنید چگونه بخش فرانت اند را توسعه دهید.
معرفی افزونه Create Block Theme
با توجه به اینکه وردپرس در بسیاری از جنبه ها عالی است، به احتمال زیاد در جایی از معماری شما قرار خواهد گرفت. یکی از این موارد، سهولت استفاده در فرانتاند (بخش قابل مشاهده کاربر) است. قالبها بخشی اساسی از این پلتفرم هستند و ایجاد قالبهای دلخواه با وجود افزونههایی مانند Create Block Theme بسیار آسانتر شده است.
تصویر(2)
با استفاده از تمام قدرت ویرایشگر و گزینه های سفارشی سازی، می توانید به سرعت یک تم پایه ایجاد کنید. این افزونه به عنوان یک پلاگین معمولی وردپرس کار می کند، با امکان اینکه بعدا آن را به عنوان یک تم مستقل استفاده کنید. پلاگین Create Block Theme همراه با یک معماری میکروسرویس می تواند تمامی بخش ها را به هم متصل نماید.
برای مثال، می توانید از الگوهای بلوک (Block Patterns) و بلوک هایی با قابلیت استفاده مجدد در تمام سایت های مختلف وردپرسی بهره ببرید. در حالی که این کار باعث استفاده مجدد از کد و ثبات می شود، می تواند یک نمای متحد برای تمام سرویس های جداگانه ای که به کار گرفته اید ایجاد نماید. در ادامه وردپرس Headless و اینکه چگونه میکروسرویس ها می توانند بر آن تأثیر بگذارند، توضیح داده می شود.
وردپرس Headless و معماری میکروسرویس ها
اگر تمایل دارید بخش های فرانت-اند و بک-اند وردپرس را از هم جدا کنید، میکروسرویس ها می توانند یک ایده عالی باشند. در یک وردپرس Headless معمولی، این پلتفرم تنها برای مدیریت محتوا کاربرد دارد و می توان از آن به عنوان یک API استفاده کرد. ترکیب وردپرس Headless با یک معماری میکروسرویس، امکانات زیر را فراهم می نماید:
- وردپرس یک REST API داخلی ارائه می کند که امکان میدهد به طور برنامهریزی شده محتوای وبسایت خود را بازیابی و مدیریت کنید. با استفاده از این رابط، میتوانید به سادگی میکروسرویسهای خود را با وردپرس ادغام کرده و امکانات جدیدی به وبسایت خود اضافه نمایید.
- قابلیت ارتقای مستقل فرانت-اند و بک-اند خود را خواهید داشت. با داشتن دو بخش مستقل در سایت خود، می توانید هر دو را ارتقا دهید و به عملکرد بهتری برسید. با وجود پیچیدگی ها، در واقع انعطاف پذیری بیشتری به دست می آورید.
در ادامه، به طور دقیقتر رابط برنامهنویسی REST یا REST API بررسی می گردد. این رابط، روش اصلی تعامل با میکروسرویسها بوده و از این رو، عنصر کلیدی در زنجیره فرآیند محسوب میشود.
معماری میکروسرویس و REST API وردپرس
REST API وردپرس نقش مهمی در فعال کردن یکپارچه سازی بین سایت شما و میکروسرویس ها ایفا می کند. نقاط انتهایی (endpoints) آن به شما امکان می دهد تا نوشته ها، صفحات، کاربران، دسته بندی ها و موارد دیگر وردپرس را با استفاده از خروجی JSON بازیابی و دستکاری کنید.
بدین ترتیب، REST API مانند هاب برای سایر سرویسها در معماری عمل میکند. به عبارت دیگر، لازم است تعیین کنید که کدام سرویسهای جاری سایت به عنوان میکروسرویس اجرا شوند. به طور خلاصه، نکته کلیدی شناسایی عملکردها و مسئولیت های مجزا در وب اپلیکیشن شما است. سپس می توانید آنها را به میکروسرویس های مستقل، متمرکز و قابل استقرار تقسیم کنید.
ساخت یک وب اپلیکیشن با Create Block Theme و معماری میکروسرویس
در ادامه اصول اولیه میکروسرویس ها و وردپرس Headless توضیح داده می شود. به طور کلی می بایست موارد زیادی را بررسی نمایید زیرا فرآیند واقعی بر اساس نیازهای شما خواهد بود. اولین قدم راه اندازی محیط توسعه است.
1. راه اندازی محیط توسعه
هر برنامه ای با فضایی برای ایجاد آن شروع می شود. بنابراین، شما به یک محیط توسعه نیاز دارید. دو مکان برای فضای توسعه شما وجود دارد:
- رایانه محلی
- سرور
تصویر(3)
۲. راه اندازی پلاگین Create Block Theme
بعد از اینکه محیط توسعه را راه اندازی کردید، می توانید با پلاگین Create Block Theme برای ایجاد تم سفارشی مبتنی بر بلاک خود شروع به کار کنید. همچنین به موارد زیر نیاز خواهید داشت:
- یک وب سایت وردپرسی
- ویرایشگر کد
- پلاگین Create Block Theme
می توانید پلاگین را به روش معمول وردپرس، نصب کنید. سپس به "نمایش > Create Block Theme" در وردپرس مراجعه نمایید:
تصویر(4)
در صفحه Create Block Theme فهرستی از گزینهها را برای ساخت تم جدید مشاهده خواهید کرد. در این مقاله تک تک گزینه ها بررسی نمی شوند اما تم Twenty Twenty-Four کلون (ایجاد یک کپی از تم) خواهد شد. انتخاب این گزینه (مطابق تصویر 5) مجموعهای از فیلدها را به نمایش در خواهد آورد.
تصویر(5)
اگر دقت کنید، این موارد به فیلدهای شناسایی تم در فایل style.css تبدیل خواهند شد. آنها ساده هستند و شامل انتخاب نام، اسکرین شات، URL و برخی تگ ها برای پوشه Theme وردپرس می شوند. پس از اینکه روی generate کلیک کردید، مجدد به صفحه "نمایش > پوسته" مراجعه و تم جدید خود را مشاهده نمایید که آماده برای فعال شدن است. در برخی موارد، یک فایل زیپ از تم خود دریافت خواهید کرد، که باید آن را در وردپرس آپلود و نصب کنید.
نکاتی برای راه اندازی و استفاده از Create Block Theme
در این مقاله به طور کامل سفارشی سازی Create Block Theme توضیح داده نمی شود، با این حال، در ادامه چند نکته برای استفاده از Create Block Theme آورده شده است:
- تغییرات شما می تواند در دو مکان رخ دهد. می توانید از گزینه Global Styles در Full Site Editor استفاده کنید یا با سفارشی سازی فایل theme.json تغییرات را انجام دهید.
- ایده خوبی است که یک "بلوک" برای میکروسرویس انتخابی خود ایجاد کنید. در ادامه بیشتر در این مورد توضیح داده می شود.
- Create Block Theme به شما امکان می دهد یک child theme بر اساس تم فعال فعلی ایجاد کنید.
اگر قصد ساخت و توزیع تم را دارید، بهتر است درون تم اصلی (parent theme) کار کنید اما برای استفاده شخصی، امکان شخصیسازی صرفا تم فرزند (child theme) وجود دارد.
۳. استخراج میکروسرویس های انتخابی شما
حالا که تم بلوک شما آماده اجرا است، زمان آن رسیده که میکروسرویس های خود را با دقت بیشتری بررسی کنید. یک تصمیم کلیدی این است که کدام سرویس ها را باید به "میکرو" تبدیل نمایید.
این مورد می تواند یک سوال پیچیده باشد که نیازهای شما به آن پاسخ خواهد داد. با این حال، به چند نکته باید توجه کنید:
- قابلیت های سایت شما: قابلیت های متمایز وب سایت خود را بررسی کنید و جداسازی آن به یک میکروسرویس مستقل، مانند عملکرد پرداخت را در نظر بگیرید.
- قابلیت ارتقای مستقل: یک سرویس موجود که امکان مستقل شدن دارد، گزینه خوبی برای میکروسرویس ها خواهد بود. کش (Caching) می تواند مثال خوبی باشد.
- تنوع تکنولوژی: اگر نیاز به دور شدن از معماری PHP وردپرس دارید، این گزینه مورد دیگری است که می تواند کاندیدای میکروسرویس باشد.
- جداسازی داده ها: سرویس هایی که به ذخیره سازی داده های سفارشی نیاز دارند و نیازی به اشتراک گذاری داده با سایر سرویس ها نداشته باشند، گزینه مناسبی برای میکروسرویس خواهند بود.
ایجاد میکروسرویس هایی که عملکرد API خاصی را ارائه می دهند، ایده خوبی است. برای مثال جستجو، پردازش پرداخت یا احراز هویت می توانند میکروسرویس باشند. اگر این سرویس ها بتوانند با سایر API های شخص اول و شخص ثالث ارتباط برقرار نمایند، انعطاف پذیر و ارزشمندتر می شوند.
توسعه و استقرار معماری میکروسرویس
برای کار کردن و در نهایت استقرار میکروسرویس های خود، به ابزارهای دیگری نیاز خواهید داشت. در لیست زیر برخی از ملاحظات کلیدی و ابزارهایی که می توانید استفاده کنید، آورده شده است:
- می توانید از Docker برای containerize میکروسرویس های خود استفاده می کنید. این ابزار، با ادغام میکروسرویس و وابستگی های آن، استقرار و مقیاس بندی را آسان می کند.
- برای هر میکروسرویس نیز به یک Dockerfile نیاز خواهید داشت. این فایل باید وابستگیهای لازم، پیکربندیها و محیط اجرای (runtime environment) مورد نیاز را مشخص کند.
- از Kubernetes برای ارکستراسیون و مدیریت کانتینرها استفاده کنید.
- مسیرهای یکپارچهسازی مداوم و تحویل پیوسته (CI/CD) روشی برای خودکارسازی فرایندهای ساخت، تست و استقرار نرمافزار هستند. ابزارهایی مانند GitLab و Travis CI میتوانند به سادهسازی فرآیندهای CI/CD شما کمک کنند.
- توابع بدون سرور به یک سرور کامل نیاز ندارند، بنابراین برای میکروسرویس ها عالی هستند. پلتفرم هایی مانند AWS Lambda، Google Cloud Functions یا Azure Functions به شما امکان می دهند کد را بدون تهیه یا مدیریت سرور اجرا کنید.
- API gateway ها یک نقطه ورود واحد برای میکروسرویس ها فراهم می کنند. ابزارهایی مانند Kong یا Amazon API Gateway به شما در مدیریت و ایمن سازی API ها کمک می نمایند. همچنین، آنها می توانند وظایفی مانند احراز هویت و مسیریابی درخواست را انجام دهند.
در این مرحله، شما یک وب سایت وردپرسی و یک میکروسرویس خواهید داشت که از یکدیگر مستقل هستند. مرحله نهایی، ادغام آنها با یکدیگر است.
۴. ادغام میکروسرویس ها با وردپرس
پس از توسعه و استقرار میکروسرویس های خود، باید آنها را با وردپرس ادغام کنید. بدین منظور لازم است تا اتصال درخواست های API را از وردپرس به نقاط انتهایی (endpoints) که توسط میکروسرویس شما در معرض دید قرار می گیرند، برقرار نمایید. بنابراین باید REST API را به طور کامل بشناسید.
روش معمول انجام این کار در وردپرس با استفاده از توابع wp_remote_get یا wp_remote_post است. این کار به شما امکان می دهد درخواست های HTTP ارسال و پاسخ ها را مدیریت کنید. نمونه ای از کد که نشان می دهد چگونه همه این موارد با هم ادغام می شوند به صورت زیر است:
میکروسرویس ها اغلب از دریافت غیرهمزمان داده برای جلوگیری از مسدود شدن رشته اصلی بهره مند می شوند. وردپرس می تواند با ترکیب دو عنصر این کار را انجام دهد. می توانید از پکیج API Fetch همراه با پشتیبانی از async و defer که در وردپرس 6.3 معرفی شده است، استفاده کنید. کد شما ممکن است شبیه به نمونه های زیر باشد:
همچنین ممکن است برای انجام بروز رسانی های رابط کاربری (UI) پویا، از AJAX استفاده کنید.
البته احراز هویت مناسب و اقدامات امنیتی نیز بسیار مهم هستند. REST API وردپرس شامل چندین روش برای احراز هویت سشن ها مانند استفاده از کوکی ها، توکن های وب JSON (JWT) یا رمزهای عبور برنامه است. وابستگی به راه حل های خارجی، باعث می شود ایمن نگه داشتن میکروسرویس ها و سایت از اهمیت بالایی برخوردار باشد.
با افزودن میکروسرویس به یک بلوک می توانید آن را در هر جایی از سایت خود بگنجانید. حتی این امکان وجود دارد که قابلیت موردنظر را در یک افزونه قرار دهید. این فرآیند دارای سه مؤلفه ثبت بلوک، رندر محتوا و پردازش داده ها است. زبان مورد نظر در اینجا جاوا اسکریپت خواهد بود و تابع registerBlockType وظیفه ثبت و رندر را بر عهده خواهد داشت.
این یک نمونه بسیار ابتدایی از ایجاد Block است. با این حال، همانطور که مشاهده می کنید، ترکیب پلاگین Create Block Theme، میکروسرویس ها و وردپرس، ساده می باشد.
نتیجه گیری
وردپرس یک سیستم مدیریت محتوای یکپارچه است اما این موضوع مانع از ادغام آن با میکروسرویس ها نمی شود. استفاده از معماری میکروسرویس مزایای زیادی مانند مقیاس پذیری بهتر، انعطاف پذیری بیشتر و توسعه سریعتر به همراه دارد.
پلاگین Create Block Theme به شما امکان می دهد یک کد پایه تمیز و امن برای پروژه خود ایجاد کنید. میکروسرویس ها می توانند پیچیدگی هایی را به سایت اضافه کنند. استفاده از یک تم بلوک سفارشی به این معنی است که می توانید سرویس ها را به بهترین نحو برای نیازهای خود پیاده سازی نمایید.