سجاد ایوبی | برنامه نویسی، بلاک چین و دفاع از آزادی بیان

Menu

ماه: جولای 2016

معرفی سرویس جستجوی Aloglia

جستجو هوشمند و سریع با  Aloglia

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

روش کار Algolia:

روش کارکرد Algolia به این صورت هست که شما باید اطلاعاتی رو که مایل هستید در اون جستجو بشه باید  با استفاده از  RESTful JSON API به اکانت Algolia خودتون ارسال کنید. بعد از ارسال اطلاعات کافیه در سایت یا اپ خودتون با api ها اطلاعات رو با سرعتی بسیار عالی جستجو کنید.

یکی از علت های سریع بودن Algolia در استفاده از CDN های مختلفی هست که در مکان های مختلف دنیا قرار داده است.

مزیت Algolia به نسبت Elastic Search:

در وبلاگ Algolia  می‌تونید مقایسه این دو سیستم جستجو رو بخونید، من چند تا از نتیجه های تست رو برای شما قرار دادم .

algolia-performance

 

برای چه زبان‌هایی API Client داره:

algolia-apis

 

و البته ناگفته نمونه که  پلاگین‌هایی هم برای ورد پرس، مجنتو داره!

سایت مستندات Algolia

استفاده Algolia در لاراول:

کافیه که شما پکیج رسمی رو با composer نصب کنید

بعد از نصب به service provider اضافه ش کنید:

و بعد دستور زیر رو با php artisan اجرا کنید که فایل های این پکیج کپی بشه در کانفیگ‌هامون:

حالا config/algolia.php رو باز کنید و تنظیمات api key رو انجام بدید.

 

تا اینجا پکیج لاراول Algolia نصب شده و آماده به کار هست کافیه که Algolia رو در مدلی که می خواهید اطلاعات اون مدل قابل جستجو باشه استفاده کنید. توی مثال زیر مدل Contact رو برای جستجوی Algolia آماده کردیم

 

تمامی کاری که باید انجام بدید همین دو خط اضافه کردن به مدلتون هست، حالا شما هر رکورد جدید به مدل اضافه کنید، به  Algolia  اضافه میشه، طبعا برای حذف، حذف میشه و برای ویرایش هم به روز میشه.

این پکیج بطور خودکار اسم مدل رو به عنوان اندیس یا index در نظر می گیره و در اکانت شما، اطلاعات مدل رو ارسال میکنه.

algolia-index-recds

خب تا اینجا اطلاعات ذخیره شد ولی برای جستجو در اطلاعات می تونید از کتابخونه جاوا اسکریپتی رسمی هم استفاده کنید که کلی آموزش داره و هر کسی می تونه استفاده کنه.

عملکرد algolia در ۲۴ ساعت گذشته (سرویس Starter )و زمان های پاسخ :

algolia-data-reports

در این پست من سعی کردم یک آشنایی جزیی با  Algolia  داشته باشیم و خیلی مطالب بیشتری میشه گفت، چیزی که بیشتر از هر چیزی من رو مجذوب خودش کرده بود api خیلی عالی  Algolia  بود. حتما برای جنبه فان هم شده با این سرویس کار کنید.

استثنا در middleware لاراول

استثنا در middleware لاراول:

این هفته در حال توسعه یک پکیج جدید لاراول بودم، به مشکلی برخوردم که هر چند راه حل خیلی ساده داشت ولی خب همین راه حل ساده چند ساعتی ذهنم رو مشغول کرده بود. برای همین تصمیم گرفتم توی یک پست کوتاه مشکل و راه حل رو بنویسم.

کاری که قرار بود انجام بشه این بود که، یک بخش از سایت رو برای کاربران مهمان نمایش باز باشه و نیازی به لاگین بشه، به زبان ساده تر، من باید کاری کنم که وقتی متد ‘showToGuest’ اجرا شد بتونه middleware auth رو دور بزنه و مجوز عبور داشته باشه.

برای ایجاد این چنین استثناهایی کافیه شما در کنترلرتون از روش زیر، در construct استفاده کنید:

در این مثال ما توی تابع construct مشخص می کنیم که یک استثنا در این کنترلر داریم متد middleware دو تا ورودی گرفته، که اولین ورودی مربوط به نام middleware هست که قرار ما از اون عبور کنیم و ورودی دوم متدهایی هست که مجوز عبور دارند، که می تونه بیش از یک متد باشه، توجه داشته باشید که باید نام متد وارد بشه نه URL [ کاری که من در ابتدا کرده بودم 😐 ].

حالا هربار showToGuest فراخوانی بشه بدون هیچ مشکلی از middleware عبور می کنه.

 

you_shall_not_pass_by_entroz-d5gjs4j

ارسال ایمیل انبوه با استفاده از صف در لاراول

یکی از کارهای این هفته من نوشتن ماژول ارسال ایمیل به ۳۰۰۰ تا ۵۰۰۰ کاربر می‌شد، برای همین تصمیم گرفتم که مراحل این کار ساده رو بصورت یک پست در وبلاگم قرار بدم.

برای حل مساله از queue لاراول استفاده کردم، حالا اگه سوال براتون پیش اومده صف چی هست با یک مثال براتون می گم:

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

Queue هم همین طور کار می کنه که شما یکسری وظایف بهش می دید و صف تک تک کارها رو انجام می ده.

برای تنظیم صفی که می خواهید استفاده کنید باید در فایل env در مقابل متغیر QUEUE_DRIVER یا در فایل config/queue.php مشخص کنید.
بطور پیش فرض لاراول از sync استفاده میکنه که یعنی بصورت همزمان کارها انجام می شه و صفی نیست و بیشتر برای سیستم های لوکال کاربرد داره و در حالت واقعی باید یکی از سیستم های زیر رو استفاده کنید.

 

پکیج مورد نیاز

نام صف

استفاده از دیتابیس بعنوان صف

DataBase

aws/aws-sdk-php 3.0

Amazon SQS

pda/pheanstalk ~3.0

Beanstalkd

iron-io/iron_mq ~2.0|~4.0

IronMQ

predis/predis 1.0

Redis

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

در این بخش من فرض می‌کنم که لیست ایمیلی از کاربران به طول ۳۰۰۰ ایمیل آدرس از دیتابیس دریافت کردید و برای کم کردن خطاها و مشکلات باید این لیست به لیست های کوچکتر ۱۰۰ تایی تقسیم کرد تا به خطای time out بر نخوریم.

در فایل route.php برای تست کدهامون، آدرس زیر رو وارد می کنیم:

فایل کنترلر

در خط‌های ۱۵ تا ۱۸ آرایه خودمون رو ۱۰۰ تایی تقسیم کردیم هر چند راه های زیادی برای تقسیم آرایه هست که می تونید به stackoverflow مراجعه کنید و راه‌های پیشنهادی دیگه رو ببینید.
در خط ۲۳ متد queue رو استفاده کردیم، در ورودی اول فایل view رو مشخص میکنیم که در اینجا emails.template رو وارد کردیم و یک متغیر به نام text که در فایل view میتونیم به text$ از اون استفاده کنیم، در مرحله بعد باید فرستنده و گیرنده ایمیل مشخص بشه که در یک تابع closure قرار می‌دیم.
برای مشخص کردن فرستنده ایمیل از متد message->from$ استفاده کردیم و همون طور که مشخصه subject برای عنوان ایمیل و در نهایت من از bcc استفاده کردم جهت احترام به مشتری ها!

خب حالا وارد آدرس http://example.com/email/sendemail بشید با این کار ایمیل ها وارد صف می شن، ولی خب باید به لاراول دستور اجرای صف رو بدیم، یعنی تا اینجا ما سفارش پیتزا رو دادیم و نیاز داریم که دستور پخت پیتزا رو به آشپز بدیم، برای اجرای دستور شروع پخت چند کار میشه کرد.

راه ساده استفاده از دستور

این دستور یکبار همه کارهای صف رو انجام می ده.
برای گوش دادن همیشگی به صف می تونید از دستور زیر استفاده کنید:

خب این دو دستور رو هر بار توی ترمینال بزنید، که کار دلچسبی نیست پس بهتره روش بهتری استفاده کنید و می تونید از kernel و cronjob استفاده کنید، همه کارها بصورت اتوماتیک انجام بگیره.

در فایل app/Console/Kernel.php کد زیر رو وارد کنید

این دستور هر روز ساعت ۹:۴۵ دستور queue:listen رو اجرا می کنه.شما می‌تونید از cronjob هم استفاده کنید به این صورت که

Cron یک سرویس زمانبندی است که وظیفه اجرای روتین‌های خاصی را در زمان مشخص بر عهده دارد.

درباره cronjob بیشتر بدونید

برای راحتی کار می تونید از سرویس‌های ایمیلی مثل mailgun یا ‌mail chimp استفاده کنید که هر دو سرویس‌های رایگان در اختیار شما قرار میده و می‌تونید آمار خوبی از ایمیل‌هاتون داشته باشید که هر دو این سرویس‌ها توسط لاراول پشتیبانی میشه.