طراحی سطح بالا High Level Design یک مرحله مهم در فرایند طراحی و توسعه سیستم می باشد که در آن ساختار کلی یک سیستم مشخص می شود. به زبان ساده تر در این مرحله یک roadmap برای پیاده سازی سیستم در مراحل بعدی ایجاد می شود. هدف از HLD ساخت یک راهنما کلی برای سیستم می باشد که در آن ساختار, اجزا اصلی و نحوه ارتباطات مشخص می شود. باید تا جایی که امکان دارد از اصطلاحات غیرفنی یا نیمه فنی استفاده کنیم تا برای همه افراد پروژه قابل درک باشد.
در HLD معماری کلی یک سیستم را مشخص می کنیم که در آن بخش های اصلی مانند سرویس های مهم, دیتابیس ها, نحوه ارتباطات, امنیت و... مشخص باشد. برای مثال یک صرافی دیجیتال را در نظر بگیرید که بخش های اصلی آن می تواند شامل API Gateway, WalletService, MatchingEngine, OrderService و... باشد. در اینجا مشخص می شود که هر کدام از این کامپوننت ها دقیقا چه کاری انجام می دهند و نحوه ارتباط آن ها با یکدیگر به چه شکل می باشد.
همچنین ما یک Architecture Diagram که عنصر اصلی HLD می باشد را داریم که در آن مشخص می باشد اجزای سیستم به چه شکل باهم تعامل دارند و ارتباط آن ها به چه شکل می باشد. در آن می توانیم پروتکل های ارتباطی, دیتابیس ها, تکنولوژی ها و... را مشخص کنیم. برای مثال برای یک صرافی دیجیتال می توانیم مشخص کنیم WalletService با توجه نوع داده ها از یک دیتابیس NoSQL استفاده می کند یا API Gateway با Order Service از طریق پروتکل HTTP ارتباط دارد.
مراحل به طور کلی می تواند به شکل زیر باشد:
تقسیم بندی سیستم به کامپوننت ها مختلف (Components): ابتدا سیستم را به اجزای اصلی مانند سرویس ها, دیتابیس ها و لایه های مختلف دیگر تقسیم می کنیم که هرکدام از آن ها یک وظیفه مشخص دارند. برای مثال در یک صرافی دیجیتال WalletService وظیفه مدیریت کیف های پول دیجیتال برای ارزهای مختلف را دارد.
نحوه ارتباط بین کامپوننت ها (Component Interactions): در این مرحله نحوه ارتباط بین کامپوننت های مختلف سیستم مشخص می شود. این ارتباط می تواند از طریق API ها, پیام رسان ها مثل کافکا یا حتی ارتباط مستقیم در معماری Monolithic و... باشد. برای مثال در صرافی دیجیتال API Gateway وظیفه مدیریت درخواست ها, مسیریابی و ... را دارد.
طراحی دیتابیس (Database Design): در این مرحله با توجه به نیازهای سیستم تصمیم گرفته می شود که از چه دیتابیسی استفاده شود. همچنین درمورد مدیریت داده ها مثل Backup, Replication, Sharding و... تصمیم گیری می شود.
انتخاب تکنولوژی ها (Technology): درمورد استفاده از تکنولوژی های مختلف تصمیم گیری می شود.
معماری سیستم (System Architecture): معماری سیستم را که یکی از بخش های مهم می باشد انتخاب می کنیم. تصمیم گیری درمورد استفاده از معماری درست مانند Microservices, Monolithic و... می تواند تاثیر زیادی بر روی توسعه, مقیاس پذیری و... بگذارد.
امنیت (Security): مکانیزم های امنیتی مانند Authentication, Authorization, Data Encryption و... را مشخص می کنیم.
مدیریت خطا و پایداری (Fault Tolerance): درمورد راه حل های مناسب برای شرایط بحرانی مانند استفاده از Backup, Failover و... تصمیم گیری می شود.
در پایان, باید بدانیم که HLD فقط برای تیم فنی نیست بلکه یک پل ارتباطی بین افراد مربوط به پروژه چه فنی و چه غیر فنی می باشد که باعث هماهنگی و همکاری بهتر بین تیم ها می شود. هرچه طراحی دقیق تر و شفاف تر باشد مشکلات و دوباره کاری ها نیز کمتر می شود.