عملکرد specialized service functionality را به صورت یک پروکسی gateway بارگیری کنید. این الگو میتواند توسعه برنامه را با انتقال shared service functionality، مانند استفاده از گواهیهای SSL، از سایر بخشهای برنامه به درون gateway ساده کند.
طرح صورت مسئله:
برخی از ویژگیها معمولاً در چندین سرویس استفاده میشوند و این ویژگیها نیاز به پیکربندی، مدیریت و نگهداری دارند. یک سرویس توزیع شده(distributed) به صورت shared یا specialized با هر deploy شدن مجدد برنامه administrative overhead و خطای deployment ا را افزایش می دهد .. هرگونه بهروزرسانی برای یک ویژگی shared باید در همه سرویسهایی که آن ویژگی را به اشتراک میگذارند، اجرا شود.
مدیریت صحیح مسائل امنیتی (تأیید اعتبار رمز، رمزگذاری، مدیریت گواهینامه SSL) و سایر task پیچیده می تواند به اعضای تیمی نیازمند شود که مهارت های بسیار تخصصی داشته باشند. به عنوان مثال، گواهی مورد نیاز یک برنامه کاربردی باید پیکربندی و در تمام نمونه های برنامه مستقر شود. با هر استقرار جدید، گواهی باید مدیریت شود تا از منقضی نشدن آن اطمینان حاصل شود. هر گواهی متداول که به زودی منقضی می شود باید در هر استقرار برنامه به روز، آزمایش و تأیید شود.
سایر سرویسهای رایج مانند authentication, authorization, logging, monitoring یا throttling ممکن است برای پیادهسازی و مدیریت در تعداد زیادی از deploymentها دشوار باشد. شاید بهتر باشد که این نوع عملکرد را یکپارچه کنید تا سربار و احتمال خطا کاهش یابد.
راه حل:
برخی از ویژگی ها را در یک gateway بارگذاری کنید، به ویژه نگرانی هایی مانند مدیریت گواهی، احراز هویت، خاتمه SSL، نظارت، ترجمه پروتکل یا throttling.
نمودار زیر gateway ای را نشان می دهد که اتصالات SSL ورودی را خاتمه می دهد. دادهها را از طرف درخواستکننده اصلی از هر سرور HTTP بالادست gateway درخواست میکند.
مزایای این الگو عبارتند از:
از این الگو زمانی استفاده کنید که:
این الگو در حالت coupling across services م مناسب نیست.
با استفاده از Nginx به عنوان ابزار offload SSL، پیکربندی زیر یک اتصال SSL ورودی را خاتمه می دهد و اتصال را به یکی از سه سرور HTTP بالادستی توزیع می کند.
upstream iis {
server 10.3.0.10 max_fails=3 fail_timeout=15s;
server 10.3.0.20 max_fails=3 fail_timeout=15s;
server 10.3.0.30 max_fails=3 fail_timeout=15s;
}
server {
listen 443;
ssl on;
ssl_certificate /etc/nginx/ssl/domain.cer;
ssl_certificate_key /etc/nginx/ssl/domain.key;
location / {
set $targ iis;
proxy_pass http://$targ;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
}
}
در Azure، با تنظیم setting up SSL termination on Application Gateway می توان به این امر دست یافت.
منابع مرتبط:
Backends for Frontends pattern
Gateway Aggregation pattern
Gateway Routing pattern