Cái tay kiến trúc sư phần mềm ấy làm việc gì?

Nhà kiến trúc là ai?

Trong nghành phần mềm, từ “kiến trúc” thường gợi nên cái gì đó huyền hoặc và mạnh mẽ. Nó kiến chúng ta liên tưởng đến những quyết định trọng đại và những kỹ thuật đỉnh cao. Và người kiến trúc sư phần mềm thường đường tưởng tượng đến như những người đứng tại đỉnh cao công nghệ.

Nhưng cuối cùng, thì cái tay kiến trúc sư ấy làm việc gì?

Đầu tiên thì, hắn ta là một lập trình viên và sẽ tiếp tục là một lập trình viên. Đừng có bao giờ tin rằng kỹ sư kiến trúc nghĩa là đứng đằng sau chuyện viết code hay tập trung vào những vấn đề cấp cao gì. Họ không! Họ, trước đơn thuần là những lập trình viên giỏi nhất, và họ sẽ tiếp tục nhận task, trong khi vẫn hướng dẫn phần còn lại của nhóm phát triển hướng đến thiết kế có hiệu suất cao nhất.

Họ có thể không viết quá nhiều code như những người khác, nhưng họ vẫn dính líu thôi. Họ đơn giản là không thể nào làm tốt được công việc (thiết kế) của mình nếu không kinh qua những vấn đề mà chính mình tạo ra cho những lập trình viên khác.

Kiến trúc là gì?

Kiến trúc của phần mềm là một loạt các đường kẻ được vạch ra trên hệ thống phần mềm. Các đường kẻ đó chia tách hệ thống thành các component, sắp xếp vị trí của chúng, và định hình nên cách các component đó giao tiếp với nhau.

Mục tiêu của việc kẻ các đường biên đó là để điều phối các hoạt động phát triển, deploy, vận hành, và bảo trì hệ thống phần mềm được bao bởi các đường biên đó, làm sao cho giữ được càng nhiều càng tốt các tùy chọn có thể được quyết định được sau này càng tốt.

Điều đáng ngạc nhiên ở đây là việc kiến trúc lại không phải là nhằm vào mục tiêu giúp cho hệ thống hoạt động tốt. Dĩ nhiên ưu tiên quan trọng nhất của phần mềm là nó phải hoạt động tốt, nhưng sự thật là kiến trúc của phần mềm can dự rất ít vào đó. Vẫn có những phần mềm với kiến trúc rất tệ hại nhưng hoạt động ổn. Thay vào đó các vấn đề có xu hướng xảy ra quanh hoạt động deploy, vận hành, bảo trì hay phát triển của phần mềm.

Kiến trúc vẫn hỗ trợ cho sự hoạt động đúng đắn của phần mềm, nhưng theo một cách thụ động và tô điểm thêm. Kiến trúc không đóng vai trò cốt lõi ở khía cạnh đấy. Trên thực tế, kiến trúc hỗ trợ rất ít trong việc hỗ trợ cho các quyết định về mặt hành vi được uyển chuyển. Thay vào đó, kiến trúc nhắm vào hỗ trợ cho vòng đời lâu dài của phần mềm, làm sao cho hệ thống dễ hiểu, dễ phát triển, dễ bảo trì, dễ deploy, thông quá đó giảm tối thiểu chi phí phát triển và tối đa hóa hiệu suất của các lập trình viên.

Dễ deploy

Để có thể được sử dụng, phần mềm cần được deploy. Chi phí bỏ ra cho deploy càng lớn thì phần mềm càng kém hữu dụng. Nhà kiến trúc, theo đó, sẽ đặt mục tiêu sao cho hệ thống có thể được dễ dàng delpoy chỉ với một thao tác duy nhất.

Điều không may là các chiến thuật deploy thường ít được suy tính đến vào những giai đoạn đầu tiên của dự án phần mềm. Nhà kiến trúc có xu hướng dẫn hệ thống tới trạng thái “dễ phát triển, nhưng rất khó de loy”.

Chẳng hạn, nhà thiết kế bay bổng nào cũng thích ý tưởng về cả một đám mây các micro service bay vòng quanh trong đầu. Cách tiếp cận đó có thể giúp cho việc phát triển trở nên dễ dàng về mặt nào đó –  bởi đường biên kiến trúc giữa các component rất dày, và giao diện tương tác khá ổn định. Nhưng một kiến trúc như thế cũng sẽ kéo theo rất nhiều chi phí xoay quanh việc cấu hình, kết nối, xử lý lỗi… Đó sẽ là một cực hình cho những ai đảm nhiệm thao tác deloy.

Vậy nên, nhà kiến trúc phải cân nhắc sớm các vấn đề của deployment. Cụ thể, họ nên ra quyết định làm sao cho hệ thống ít service hơn, và nhiều component tích hợp hơn, như một phép lai giữa service và component nội tiến trình.

Hoạt động của hệ thống

Ảnh hưởng của kiến trúc lên hiệu năng vận hành không lớn như ảnh hưởng của nó tới khả năng phát triển, bảo trì hay deploy. Gần như bất kỳ vấn đề nào liên quan đến khả năng vận hành cũng đều có thể giải quyết được bằng cách tăng cấu hình phần cứng mà không phải chịu ảnh hưởng nghiêm trọng nào từ kiến trúc cả.

Điều đó xảy ra liên tục. Kiến trúc kém về mặt hiệu năng có thể được bù đắp một cách đơn giản bởi bộ xử lý mạnh hơn, nhiều bộ nhớ hơn, nhiều máy chủ hơn. Phần cứng rẻ, còn con người thì đắt đỏ. Vậy nên nỗ lực cho kiến trúc không có giá bằng nỗ lực dành ra cho khâu phát triển, vận hành và bảo trì.

Không có nghĩa rằng tinh chỉnh kiến trúc để cải thiện hiệu năng là việc làm vô ích. Điều đó vẫn có giá trị. Chẳng qua là chi phí sẽ được phân bổ cho các khía cạnh khác nhiều hơn mà thôi.

Một cách phát biểu tốt hơn đó là kiến trúc giúp cho các hoạt động của hệ thống trở nên rõ ràng trong mắt các nhà phát triển. Nó tiết lộ sự hoạt động. Kiến trúc đẩy các ca sử dụng cùng các tính năng và hành vi của hệ thống hiển hiện trên các thực thể lớp đầu – những điểm mốc dễ dàng được nhìn thấy trong mắt nhà phát triển. Điều này giúp đơn giản hóa hiểu biết về hệ thống và do đó rất có ích trong phát triển và bảo trì.

Bảo trì

Trong tất cả các khía cạnh của một hệ thống phần mềm, bảo trì là hoạt động tốn kém nhất. Trong đó, chi phí chủ yếu rơi vào hoạt động thăm khám để tiên lượng và ra quyết định, cũng như chi phí trả cho các rủi ro phát sinh.

Kiến trúc được xây dựng cẩn trọng giảm thiểu những chi phí đó. Nó chia tách hệ thống thành các component, cô lập những component đó qua những giao diện ổn định, hiển hiện các hoạt động, mở cửa với lộ trình thay đổi trong tương lai, và giảm nguy cơ gặp lỗi khó lường.

Giữ khả năng lựa chọn

<<còn tiếp>>

 21 total views,  1 views today

Leave a Reply

Your email address will not be published. Required fields are marked *