<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های سهند حبیبی</title>
        <link>https://virgool.io/feed/@sahand_habibi</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-16 18:20:10</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/855173/avatar/IBe6zN.jpeg?height=120&amp;width=120</url>
            <title>سهند حبیبی</title>
            <link>https://virgool.io/@sahand_habibi</link>
        </image>

                    <item>
                <title>حل مشکل تحریم سرویس ها برای کاربران ایرانی</title>
                <link>https://virgool.io/@sahand_habibi/%D8%AD%D9%84-%D9%85%D8%B4%DA%A9%D9%84-%D8%AA%D8%AD%D8%B1%DB%8C%D9%85-%D8%B3%D8%B1%D9%88%DB%8C%D8%B3-%D9%87%D8%A7-%D8%A8%D8%B1%D8%A7%DB%8C-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%A7%D9%86-%D8%A7%DB%8C%D8%B1%D8%A7%D9%86%DB%8C-n72bkhhqcsux</link>
                <description>یکی از مواردی که معمولا باعث ایجاد مشکل در زیرساخت میشود ، بحث تحریم برخی از سرویس ها علیه کاربران ایرانی است . برای رفع این مشکل می توان از سرویس هایی مثل HTTP Proxy ، VPN و سرویس های مشابه استفاده کرد که علاوه بر تحریم ها بحث فیلترینگ رو را دور میزنند .  اما راه دیگری که وجود داره راه اندازی سرویس Reverse Proxy است .به این صورت که درخواست های شما به سرویس Reverse Proxy که در خارج از ایران قرار دارد زده می شود و ترافیک شما به سمت مقصد مورد نظر با IP سرور خارجی برقرار می شود ( در اصل عملیات  Proxy Pass صورت میگیرد ) .  این سرویس را میتوان با وب سرور ها مانند Nginx پیاده سازی کرد اما برای راه اندازی سرویس Nginx نیاز است شما یک VPS یا Iaas داشته باشید .پیشنهاد من استفاده از Worker های CloudFlare است . این سرویس به شما اجازه میدهد کدهای Javascript خود را در صدها سرور Cloudflare اجرا کنین . پلن رایگان این سرویس به شما اجازه دریافت ۱۰۰.۰۰۰ درخواست روزانه را میدهد . اطلاعات بیشتر این سرویس را در https://workers.cloudflare.com مشاهده کنید .همچنین در این صفحه https://developers.cloudflare.com/workers/examples میتوانید یکسری نمونه کد Javascript که قابل اجرا بر Worker ها هستن را مشاهده کنید . با استفاده از این کد Javascript یک سرویس Proxy راه اندازی میشود : async function handleRequest(request) {
const host = request.headers.get(&#039;x-host&#039;)
if(!host)return fetch(&amp;quothttps://http.cat/400&amp;quot);
const url = new URL(request.url)
url.hostname = host;
return fetch(url.toString(), request)
}
addEventListener(&amp;quotfetch&amp;quot, event =&gt; {
event.respondWith(handleRequest(event.request))
})تست درخواست به سرویس :
 curl &#039;https://proxy-01.sahand-habibi1990.workers.dev/contact.html&#039; --header &#039;x-host: www.zarinpal.com&#039;بعد از راه اندازی هر worker به شما url شبیه proxy-01.sahand-habibi1990.workers.dev داده میشود . میتوانید این url را در قسمت add route با domain خودتان custom کنید که نیاز است یک رکورد CNAME تعریف کنید و domain مورد نظر را به worker اختصاص دهید .</description>
                <category>سهند حبیبی</category>
                <author>سهند حبیبی</author>
                <pubDate>Mon, 20 Sep 2021 23:01:52 +0430</pubDate>
            </item>
                    <item>
                <title>معرفی سرویس Prometheus Anomaly Detector</title>
                <link>https://virgool.io/@sahand_habibi/%D9%85%D8%B9%D8%B1%D9%81%DB%8C-%D8%B3%D8%B1%D9%88%DB%8C%D8%B3-prometheus-anomaly-detector-nq3208qiejvk</link>
                <description>یکی از جذاب و مفید ترین سرویس هایی که میشود در جهت تکمیل ابزار های مانیتورینگ استفاده کرد، قطعا سرویس Prometheus Anomaly Detector است . ماهیت این سرویس تشخیص موارد ناهنجاری ( Anomaly ) بر اساس دیتا Prometheus است شاید به این موضوع فکر کنین که استفاده از این سرویس چه مزیت خواهد داشت، در جواب این موضوع می توان گفت این سرویس به تیم NOC - DevOps کمک میکند که به صورت هوشمند ناهنجاری های در سیستم مانیتورینگ تشخیص داده شود و بر اساس این دیتا میشود هشدار هوشمندی دریافت کرد ( Smart Alerting ) قطعا بررسی کردن تمامی گراف ها و دیتا سیستم مانیتورینگ امری دشوار است و این موضوع به صورت مداوم در تمام لحظات نخواهد بود . در حالی که این سرویس در تمامی مواقع رفتار سیستم مانیتورینگ را بررسی و پایش میکند . همچنین ست کردن آلارم های با Threshold فیکس برای خیلی از سرویس های ممکن نیست و نیازمند این است که رفتار های سرویس ها تشخیص داده شود و بر اساس اون به صورت منعطف بازه تشخیص ناهنجاری تنظیم گردد. این ناهنجاری های می تواند شامل افزایش غیر معمول درخواست به سرویس ها، مصرف غیر عادی منابع و افزایش یا کاهش شدید ترافیک در شبکه و … باشد .معمولا تشخیص و اطلاع به موقع از حوادث یا ناهنجاری ها در سیستم مانیتورینگ میتواند مدت زمان حل مشکل را تا حد زیادی کاهش دهد و باعث بهبود عملکرد تیم فنی در مواقع حوادث باشد .سورس پروژه رو میتونین از ادرس https://github.com/AICoE/prometheus-anomaly-detector دریافت کنید. ما برای اجرای اون Docker-Compose فایل تهیه کردیم که بشود راحت تر پروژه را اجرا و مدیریت کرد.version: &amp;quot3.1&amp;quot
services:
pad:
image: quay.io/aicoe/prometheus-anomaly-detector:latest
ports:
- 8080:8080
environment:
FLT_PROM_URL: &amp;quothttp://prometheus&amp;quot
FLT_RETRAINING_INTERVAL_MINUTES: 1
FLT_METRICS_LIST: &#039;example promql query&#039;
APP_FILE: &amp;quotapp.py&amp;quot
FLT_DATA_START_TIME: &amp;quot3d&amp;quot
FLT_ROLLING_TRAINING_WINDOW_SIZE: &amp;quot15d&amp;quotتمامی Environment Variable ها در پروژه Github این سرویس توضیح داده شده است . همچین در این پروژه Github توضیحات کامل از مدل پردازش دیتا ارائه داده شده .چند نکته در رابطه با نصب و راه اندازی این سرویس :‌ این سرویس برای اجرا و پردازش از CPU به شدت استفاده می کند و استفاده از منابع این نرم افزار اصلا بهینه نیست . با یک سری تغییرات روی کد توانستیم کمی بهتر کنیم این موضوع که هر موقع تکمیل شود قطعا روی سورس اصلی Commit خواهیم داشت .برای Train دیتا نیاز شما Query Promql به این سرویس بدهید . Query هایی که نسبتا سنگین هستن بهتر ابتدا با Recording Rule به یک time series جدید تبدیل بشن سپس در این سرویس از آنها استفاده کنینgroups:
- name: example
rules:
- record: job:http_inprogress_requests:sum
expr: sum by (job) (http_inprogress_requests) شما میتوانید بر اساس اینکه سیستم Anomaly تشخیص داده یا اینکه نسبت yhat_uper - yhat_lower به دیتای اصلی شما چند درصد رشد یا کاهش داشته آلارم ست کنید . این آلارم های هوشمند شما رو از ناهنجاری های در حال وقوع مطلع میکنه .- alert: transaction-anomaly
expr: avg(transactions:rate5m) / avg(transactions:rate5m_prophet{value_type=&amp;quotyhat&amp;quot}) * 100 - 100 &gt; 10 or transactions:rate5m_prophet{value_type=&amp;quotanomaly&amp;quot} == 1
for: 10s
labels:
severity: page
annotations:
summary: &amp;quot an anomaly detected on database transactions &amp;quot
message: &amp;quot transaction on the database is {{$value}}% upper than normal value &amp;quot برای ساخت داشبورد بهتر است مجموع از دیتا اصلی خود و دیتا مربوط به سرویس Anomaly Detection نمایش داده شود به این دلیل که بتوان بررسی کرد که مقدار های Predict شده تا چه حد قابل اطمینان و درست هستن و رفتار فعلی سیستم تا چه در بازه نرمال پیش بینی شده قرار دارد .قطعا همکاران گرامی و متخصصان حوزه AI میتونن این مبحث تکمیل کنند همونجور که بسیاری از سازمان ها دستاورد های خوبی در این زمینه داشتند و محصولات مشابه خوبی توسعه داده اند . مفهوم Anomaly Detection و استفاده از AI در ابزار های Devops مخصوصا Monitoring بسیار گسترده است و خیلی ویژگی دیگر دارد که این سرویس همگی آنها را پوشش نمی دهد .ممنون از توجه شمالینک های تکمیلی :‌ https://prometheus.io/blog/2015/06/18/practical-anomaly-detection&amp;amp;lt;br/&amp;amp;gt;https://events19.linuxfoundation.org/wp-content/uploads/2017/12/AIOps-Anomaly-Detection-with-Prometheus-Marcel-Hild-Red-Hat.pdf&amp;amp;lt;br/&amp;amp;gt;&amp;amp;lt;br/&amp;amp;gt;</description>
                <category>سهند حبیبی</category>
                <author>سهند حبیبی</author>
                <pubDate>Thu, 10 Jun 2021 01:55:10 +0430</pubDate>
            </item>
                    <item>
                <title>تجربه راه اندازی و استفاده از سرویس Minio</title>
                <link>https://virgool.io/CodeLovers/%D8%AA%D8%AC%D8%B1%D8%A8%D9%87-%D8%B1%D8%A7%D9%87-%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C-%D9%88-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D8%B3%D8%B1%D9%88%DB%8C%D8%B3-minio-zyhxsvotpyo1</link>
                <description>Minio سرویس Object Storage متن بازی است که سهولت در راه اندازی و استفاده از آن و   Stability این سرویس باعث شده انتخاب شرکت هایی مثل Paypal , Bloomberg و … باشد . البته در این متن اصلا قصد مقایسه مزایا یا تبلیغ آن را ندارم. قطعا در مقالات معتبری مزایا و معایب این سرویس به خوبی بیان شده است .در این متن تجربه راه اندازی و استفاده از این سرویس را بیان خواهم کرد .در مرحله اول این سرویس با توجه به داکیومنت اصلی خود سرویس نصب کردیم . https://docs.min.io/minio/baremetal/tutorials/minio-installation.htmlسرویس را ما به صورت Distributed پیاده سازی کردیم. Minio با استفاده از الگوریتم Erasure Code دیتا را Shard میکند و با ساخت parity blocks این اطمینان به وجود می اورد که با ضریب خطایی مشخص دیتا همیشه در دسترس خواهد بود و از بین نمیرود .  یک موضوعی که تو بحث Performance و حجم دیتا تاثیر دارد موضوع  storage classes هست . با انتخاب حالت بهینه تر (‌ باید حساسیت دیتا در نظر گرفته شود )‌ می توانیم کلاستر بهینه تر داشته باشیم . حتما این موضوع بررسی کنید که آیا حالت اولیه که Standard Class هست مناسب دیتا و کلاستر شما هست یا خیر . موضوع بعد انتخاب دیسک های سخت افزار هست . اگر شما Best Practice های این سرویس بررسی کنید قطعا باید این سرویس بدون Raid ایجاد بشه و حتما مدل و سرعت دیسک های سخت افزاری شما در کیفیت کلاستر تاثیر داره . پیشنهاد من استفاده از دیسک های SSD یا SAS 15k - 10k هست . حتما در محاسبات اولیه به موضوع IOps سرویس Minio توجه کنین که به مشکلاتی مثل IOwait در ترافیک بالا برخورد نکنید . دیسک ها باید سایز یکسانی داشته باشن که بالانس حجمی در تمامی دیسک ها رعایت شده باشد . من راهکاری ندیدم که بتوان از دیسک هایی با حجم های متفاوت استفاده کرد و خود کلاستر این موضوع مدیریت کند . شاید در نسخه جدید اینجور قابلیت باشد . چون دیتا روی تمام دیسک ها به طور مرتب در حال نوشته شدن هست قطعا کند بودن حتی یک دیسک سخت افزاری روی Performance کل کلاستر تاثیر خواهد گذاشت .این مقاله https://min.io/resources/docs/MinIO-Throughput-Benchmarks-on-HDD-24-Node.pdfبه خوبی موارد پیشنهادی برای Performance Optimization سرویس بیان کرده . مواردی چون Sysctl , بحث سایز و کیفیت دیسک ها و … در آخر هم میتونین با ابزار هایی مثل https://github.com/wasabi-tech/s3-benchmark کیفیت و توان کلاستر خودتون تست کنین .یک موضوع دیگه باید بهش اشاره کنم بحث Scale Up کردن کلاستر هست . تا جایی که من بررسی کردم نمیشه به کلاستر دیسک جدید اضافه کرد . اما میشه به حالت Federate کلاستر جدیدی را اضافه کنین  . (‌ این موضوع در داکیومنت جدید Deprecated شده )در هر صورت بهتر با توجه به این موضوع از ابتدا تعداد Node ( حداقل ۴ Node ) و تعداد دیسک ( با سایز مناسب ) انتخاب کنید.برای مانیتورینگ من از Integration مربوط به Prometheus استفاده کردم که به خوبی حجم کلاستر و دیتا مربوط به ارتباطات کلاستر را Expose میکنه و با داشبورد مناسب میشه به طور کامل کلاستر و کیفیت سرویس Object Storage را بررسی کرد .بهتر یک وب سرور Nginx به عنوان Reverse Proxy سر راه کلاستر قرار بگیره که درخواست ها را Load Balance کنه بین Node های Minio و بحث Fail Over بین Node ها را برقرار کند . https://docs.min.io/docs/setup-nginx-proxy-with-minio.html در مجموع اگر نیاز به یک سرویس Object Storage دارین Minio میتونه گزینه خوبی باشه . قطعا ممکن شما تجربه یا چالش بزرگتری در راه اندازی و استفاده از این سرویس داشتید و ممنون میشم که این تجربه رو با ما به اشتراک بگذارید .</description>
                <category>سهند حبیبی</category>
                <author>سهند حبیبی</author>
                <pubDate>Sat, 29 May 2021 02:20:48 +0430</pubDate>
            </item>
            </channel>
</rss>