spinny:~/writing $ less platform-engineering-internal-developer-platform.md
12با پیچیدهتر شدن سیستمهای نرمافزاری - میکروسرویسها، Kubernetes، چند ابری، خطوط لوله CI/CD، پشتههای مشاهدهپذیری - توسعهدهندگان زمان بیشتری را صرف زیرساخت و زمان کمتری را صرف ساخت محصولات میکنند. **Platform Engineering** این مشکل را با ایجاد یک پلتفرم داخلی حل میکند که پیچیدگی را انتزاعی میکند و ابزارهای سلفسرویس برای تحویل سریعتر در اختیار توسعهدهندگان قرار میدهد.34Gartner پیشبینی میکند که تا سال ۲۰۲۷، **۸۰ درصد سازمانهای مهندسی نرمافزار** تیمهای پلتفرم ایجاد خواهند کرد. در این راهنما، بررسی خواهیم کرد که Platform Engineering چیست، چرا اهمیت دارد و چگونه یک Internal Developer Platform از صفر بسازیم.56## Platform Engineering چیست؟78Platform Engineering رشتهای است برای طراحی و ساخت زنجیره ابزارها و جریانهای کاری که قابلیتهای سلفسرویس را برای سازمانهای مهندسی نرمافزار فعال میکنند. خروجی آن یک **Internal Developer Platform (IDP)** است - لایهای که بین توسعهدهندگان و زیرساخت قرار میگیرد.910```mermaid11graph TD12 subgraph "Developers"13 D1[Frontend Team]14 D2[Backend Team]15 D3[Data Team]16 end1718 subgraph "Internal Developer Platform"19 Portal[Developer Portal]20 Templates[Service Templates]21 CICD[CI/CD Pipelines]22 Infra[Infrastructure Abstraction]23 end2425 subgraph "Infrastructure"26 K8s[Kubernetes]27 Cloud[Cloud Services]28 DB[Databases]29 Monitor[Monitoring]30 end3132 D1 --> Portal33 D2 --> Portal34 D3 --> Portal35 Portal --> Templates36 Portal --> CICD37 Portal --> Infra38 Infra --> K8s39 Infra --> Cloud40 Infra --> DB41 CICD --> Monitor42```4344### Platform Engineering در مقابل DevOps4546Platform Engineering جایگزین DevOps نیست - تکامل بعدی است. DevOps گفت «تو میسازی، تو اجرا میکنی.» Platform Engineering میگوید «ما ساخت و اجرا را بیزحمت میکنیم.»4748| جنبه | DevOps | Platform Engineering |49|------|--------|---------------------|50| **تمرکز** | فرهنگ و شیوهها | محصولات و سلفسرویس |51| **رویکرد** | هر تیم زیرساخت را مدیریت میکند | تیم پلتفرم زیرساخت را انتزاعی میکند |52| **بار شناختی** | بالا (هر تیم همه چیز را یاد میگیرد) | پایین (مسیرهای طلایی ارائه شده) |53| **خروجی** | خطوط لوله CI/CD، اسکریپتهای IaC | Internal Developer Platform |54| **کاربران** | تمام مهندسی | تیم پلتفرم به مهندسی خدمت میکند |5556## چرا Platform Engineering اهمیت دارد5758### مشکل بار شناختی5960در یک سازمان مدرن معمولی، یک توسعهدهنده باید درک کند:6162- جریانهای کاری Git و استراتژیهای شاخهبندی63- پیکربندی خطوط لوله CI/CD64- ساخت کانتینر و مدیریت رجیستری65- مانیفستهای Kubernetes و Helm Charts66- خدمات ارائهدهنده ابر (AWS/GCP/Azure)67- شبکه، DNS، گواهینامههای TLS68- تنظیم مانیتورینگ، لاگینگ، هشداردهی69- تهیه و مهاجرت پایگاه داده70- سیاستهای امنیتی و تطبیق7172این بار شناختی عظیمی است که توجه را از محصول واقعی منحرف میکند.7374### مسیر طلایی7576Platform Engineering مفهوم **مسیرهای طلایی** را معرفی میکند - مسیرهای دارای نظر، به خوبی پشتیبانی شده و مستند شده برای وظایف رایج. مسیر طلایی اجباری نیست؛ توسعهدهندگان *میتوانند* منحرف شوند، اما پلتفرم کار درست را کار آسان میکند.7778```mermaid79flowchart LR80 Dev[Developer] -- "Create new service" --> Portal[Portal]81 Portal -- "Select template" --> Template[Service Template]82 Template -- "Auto-provision" --> Repo[Git Repository]83 Template --> Pipeline[CI/CD Pipeline]84 Template --> Infra[Kubernetes Namespace]85 Template --> Monitor[Dashboards + Alerts]86 Repo --> Ready[Ready to Code!]87```8889**نمونه مسیر طلایی برای ایجاد میکروسرویس جدید:**901. توسعهدهنده «سرویس Backend جدید» را در پورتال انتخاب میکند912. زبان/فریمورک را انتخاب میکند (Node.js، Go، Python)923. پلتفرم به صورت خودکار ایجاد میکند: مخزن Git، خط لوله CI/CD، فضای نام Kubernetes، داشبوردهای مانیتورینگ و قوانین هشدار934. توسعهدهنده مخزن را کلون میکند و بلافاصله شروع به کدنویسی میکند9495## ساخت Internal Developer Platform9697### لایه ۱: Developer Portal9899پورتال نقطه ورود واحد برای توسعهدهندگان است. محبوبترین گزینه اوپن سورس **Backstage** است (ساخته شده توسط Spotify، اکنون یک پروژه CNCF).100101ویژگیهای کلیدی:102- **کاتالوگ سرویس**: هر سرویس، مالکش، مستندات و وابستگیها103- **قالبهای نرمافزار**: داربستبندی برای سرویسهای جدید با بهترین شیوههای داخلی104- **مستندات فنی**: مستندات به عنوان کد، رندر شده و قابل جستجو105- **اکوسیستم پلاگین**: قابل توسعه با قابلیت سفارشی106107```yaml108# backstage/catalog-info.yaml109apiVersion: backstage.io/v1alpha1110kind: Component111metadata:112 name: user-service113 description: Manages user accounts and authentication114 annotations:115 github.com/project-slug: myorg/user-service116 backstage.io/techdocs-ref: dir:.117spec:118 type: service119 lifecycle: production120 owner: team-auth121 system: identity-platform122 dependsOn:123 - resource:postgresql-main124 providesApis:125 - user-api126```127128### لایه ۲: انتزاع زیرساخت129130توسعهدهندگان نباید مستقیماً Terraform یا Kubernetes YAML بنویسند. پلتفرم باید انتزاعها ارائه دهد.131132**ابزارها:**133- **Crossplane**: تهیه زیرساخت بومی Kubernetes134- **Terraform با ماژولها**: ماژولهای زیرساخت از پیش ساخته شده و آزمایش شده135- **Pulumi**: زیرساخت به عنوان کد واقعی (TypeScript، Python، Go)136137```yaml138# Example: Crossplane composition for a database139apiVersion: database.example.com/v1140kind: PostgreSQLInstance141metadata:142 name: user-db143spec:144 size: small # Abstraction: small = 2 vCPU, 4GB RAM145 version: "16"146 backup: daily147 team: auth-team148```149150به جای پیکربندی پارامترهای RDS، سابنتهای VPC، گروههای امنیتی و سیاستهای پشتیبانگیری، توسعهدهنده فقط `size: small` و `backup: daily` را مشخص میکند. پلتفرم بقیه را مدیریت میکند.151152### لایه ۳: استانداردسازی CI/CD153154CI/CD را استاندارد کنید تا تیمها هر کدام خط لوله خودشان را نسازند.155156```yaml157# .github/workflows/platform-ci.yml158# Teams just include the shared workflow159name: Build and Deploy160on:161 push:162 branches: [main]163164jobs:165 pipeline:166 uses: myorg/platform-workflows/.github/workflows/standard-pipeline.yml@v2167 with:168 language: node169 deploy-target: production170 secrets: inherit171```172173**شیوههای کلیدی:**174- قالبهای CI/CD مشترک که تیمها شامل میکنند (کپی نمیکنند)175- اسکن امنیتی خودکار (SAST، بررسی وابستگی)176- استراتژیهای استقرار استاندارد (canary، blue/green)177- بازگشت خودکار در صورت شکست بررسیهای سلامت178179### لایه ۴: مشاهدهپذیری180181مانیتورینگ از پیش پیکربندی شده تا توسعهدهندگان داشبوردها و هشدارها را آماده دریافت کنند.182183- **متریکها**: Prometheus + Grafana با داشبوردهای استاندارد به ازای هر سرویس184- **لاگینگ**: لاگینگ ساختاریافته با جمعآوری متمرکز (Loki، ELK)185- **ردیابی**: ردیابی توزیعشده با OpenTelemetry186- **هشداردهی**: یکپارچهسازی PagerDuty/Opsgenie با پیشفرضهای منطقی187188```mermaid189graph LR190 Service[Your Service] -- "OpenTelemetry SDK" --> Collector[OTel Collector]191 Collector --> Prometheus[Prometheus]192 Collector --> Loki[Loki]193 Collector --> Tempo[Tempo]194 Prometheus --> Grafana[Grafana Dashboards]195 Loki --> Grafana196 Tempo --> Grafana197 Grafana --> PagerDuty[PagerDuty Alerts]198```199200## اندازهگیری موفقیت201202چگونه بدانید پلتفرمتان کار میکند؟ این متریکها را پیگیری کنید:203204### متریکهای DORA205- **فرکانس استقرار**: کد چقدر به تولید میرسد206- **زمان تحویل تغییرات**: زمان از commit تا تولید207- **نرخ شکست تغییرات**: درصد استقرارهایی که باعث خرابی میشوند208- **میانگین زمان بازیابی**: زمان بازگرداندن سرویس پس از حادثه209210### متریکهای خاص پلتفرم211- **زمان تا اولین استقرار**: چقدر طول میکشد از «سرویس جدید» تا اولین استقرار تولید212- **رضایت توسعهدهنده (NPS)**: به طور منظم از کاربرانتان نظرسنجی کنید213- **نسبت سلفسرویس**: درصد درخواستهای زیرساخت بدون تیکت214- **پذیرش مسیر طلایی**: درصد سرویسهایی که مسیر پیشنهادی را دنبال میکنند215216## اشتباهات رایج217218### ۱. ساختن بیش از حد، زودتر از موقع219از بزرگترین نقطه درد شروع کنید، نه یک چشمانداز بزرگ. اگر استقرارها دردناک هستند، از آنجا شروع کنید. اگر تهیه هفتهها طول میکشد، از آنجا شروع کنید.220221### ۲. رفتار نکردن با پلتفرم به عنوان محصول222تیم پلتفرم به مدیر محصول، تحقیقات کاربر و حلقههای بازخورد نیاز دارد. توسعهدهندگان مشتریان شما هستند - نیازهایشان را درک کنید.223224### ۳. اجباری کردن به جای جذب225بهترین پلتفرمها داوطلبانه پذیرفته میشوند چون زندگی توسعهدهندگان را آسانتر میکنند. اگر مجبور به اجباری کردن استفاده هستید، پلتفرمتان به اندازه کافی خوب نیست.226227### ۴. نادیده گرفتن تجربه توسعهدهنده228پلتفرمی با UX وحشتناک استفاده نخواهد شد. در مستندات واضح، پیامهای خطای مفید و حلقههای بازخورد سریع سرمایهگذاری کنید.229230## چگونه شروع کنیم231232نقشه راه عملی برای ساخت اولین IDP شما:233234```mermaid235flowchart TD236 A[Month 1-2: Discovery] --> B[Month 3-4: MVP]237 B --> C[Month 5-6: Iterate]238 C --> D[Month 7+: Scale]239240 A --> A1[Interview developers]241 A --> A2[Map pain points]242 A --> A3[Choose first golden path]243244 B --> B1[Deploy Backstage]245 B --> B2[First service template]246 B --> B3[Standardized CI/CD]247248 C --> C1[Gather feedback]249 C --> C2[Add infrastructure abstraction]250 C --> C3[Improve docs and onboarding]251252 D --> D1[More templates and golden paths]253 D --> D2[Self-service infrastructure]254 D --> D3[Advanced observability]255```256257### حداقل پلتفرم قابل دوام2582591. **کاتالوگ سرویس** (Backstage) - بدانید چه چیزی وجود دارد و چه کسی مالک آن است2602. **یک قالب سرویس** - مسیر طلایی برای رایجترین نوع سرویس شما2613. **CI/CD استاندارد** - خط لوله مشترکی که تیمها شامل میکنند2624. **مستندات پایه** - چگونه از پلتفرم استفاده کنیم، کجا کمک بگیریم263264میتوانید این MVP را در ۲-۳ ماه با تیمی از ۲-۳ مهندس بسازید.265266## نتیجهگیری267268Platform Engineering درباره ساختن پلتفرم کامل از روز اول نیست. درباره کاهش تدریجی بار شناختی توسعهدهندگان است تا بتوانند روی ساخت محصولات تمرکز کنند. کوچک شروع کنید، تأثیر را اندازهگیری کنید و بر اساس بازخورد توسعهدهندگان تکرار کنید.269270سازمانهایی که در Platform Engineering سرمایهگذاری میکنند مزیت رقابتی قابل توجهی خواهند داشت: تحویل سریعتر، توسعهدهندگان شادتر و سیستمهای قابل اعتمادتر.271272**منابع:**273- [Team Topologies](https://teamtopologies.com/) - کتابی که تیمهای پلتفرم را محبوب کرد274- [Backstage](https://backstage.io/) - پورتال توسعهدهنده اوپن سورس Spotify275- [CNCF Platforms White Paper](https://tag-app-delivery.cncf.io/whitepapers/platforms/) - تعریف جامعه و بهترین شیوهها276- [platformengineering.org](https://platformengineering.org/) - جامعه، رویدادها و منابع277
:Platform Engineering: چگونه یک Internal Developer Platform بسازیمlines 1-277 (END) — press q to close