Kiến trúc phần cứng là để tồn tại lâu dài, kiến trúc phần mềm là để thay đổi. Sự thay đổi chính là điều duy nhất tồn tại để giúp cho phần mềm có thể chiến thắng. Đây sẽ là bài viết mở ra một loạt bài mới về kiến trúc phần mềm mà mình có ý định đi trên con đường chông gai này.
Nếu bạn theo dõi các bài viết trên blog của mình thì mình cũng có khá nhiều bài viết về Kiến trúc phần mềm cơ bản rồi. Mình xin phép được tổng hợp lại trước khi bắt đầu bài viết.
-
Sự tiến hóa của kiến trúc phần mềm và sự ra đời của kiến trúc Microservice
-
Service-oriented Architecture (SOA) – Kiến trúc hướng dịch vụ
-
Lột tả bản chất của kiến trúc Microservice so với kiến trúc xây dựng
Được rồi bắt đầu bài viết hôm nay nhé!
Đầu tiên trước khi nghĩ đến trước khi hiểu được kiến trúc sư phần mềm (software architect) là gì thì bạn phải hiểu kiến trúc sư (architect) là gì trước đã. Một kiến trúc sư là một người lên kế hoạch, thiết kế, có cái nhìn tổng quát về kiến trúc, thiết kế của một công trình xây dựng nào đó, họ tạo nên biến những ý tưởng, hình ảnh trong đầu trở thành hiện thực thông qua những bản vẽ thi công. Họ làm việc với một vai trò đặc biệt, có trách nhiệm khá cao và có khả năng giao tiếp với khách hàng, người mà là chủ đầu tư của công trình xây dựng đó. Họ phải diễn đạt thể hiện được ý tưởng hình ảnh trong đầu mình sau khi nhận yêu cầu khái quát của khách hàng sao cho đơn vị thi công, giám sát công trình, công nhân xây dựng có thể hiểu được và biến những phác thảo trên thành hiện thực.
Đối với kiến trúc sư phần mềm cũng vậy, một kiến trúc sư giỏi sẽ biến những hình ảnh trong đầu họ trở thành những phần mềm thực sự thông qua những bản vẽ thiết kế high level hay detail design. Kiến trúc một hệ thống phần mềm là việc biến những cấu trúc, thành phần nhỏ thành những phần mềm có giá trị, không những đáp ứng được yêu cầu của khách hàng mà còn phải thích ứng tốt với sự thay đổi trong tương lai. Một kiến trúc sư phần mềm sẽ phải đưa ra những sự lựa chọn, quyết định, sự đánh giá về mặt chi phí, cách thức thi công của một công nghệ theo một tiêu chuẩn nào đó như tiêu chuẩn về coding, công cụ, nền tảng, cơ sở hạ tầng, khả năng tương thích, khả năng mở rộng, hiệu suất…
Nghe đến đây mình cũng đã thấy con đường đi này vô cũng gian truân rồi.
Có thể có nhiều dự án không cần quá cao việc xây dựng kiến trúc, cũng như thiết kế một căn nhà vậy, có thể yêu cầu không cao nhưng kiến trúc sư vẫn phải đảm bảo những thiết kế của mình giải quyết được nhu cầu của khách hàng và đưa ra những giải pháp giải quyết được những vấn đề mà khách hàng gặp phải.
Nếu so sánh với việc kiến trúc một phần cứng thì sao? Quay trở lại tiêu đề bài viết thì mình cho rằng kiến trúc phần cứng là để tồn tại lâu dài, kiến trúc phần mềm là để thay đổi. Đơn giản là mức độ phát triển của phần cứng sẽ chậm hơn so với phần mềm rất nhiều, và ai khi xây dựng một phần cứng cũng sẽ cố gắng đảm bảo việc sử dụng phần cứng đó một cách lâu nhất có thể, cho chi phí xây dựng, cơ sở hạ tầng đều nhằm một mục tiêu chắc chắn và bền đẹp. Tuy nhiên với phần mềm thì khác, yêu cầu phần mềm thay đổi theo thị trường, theo nhu cầu khách hàng, muốn đáp ứng được sự thay đổi đó thì kiến trúc sư phần mềm phải tổ chức được một cách linh hoạt và có thể tương thích mở rộng không những nhanh mà còn phải đảm bảo việc tái sử dụng đến mức tối đa để giảm thiểu chi phí xây dựng.
Vậy để trở thành một kiến trúc sư phần mềm thì cần những yếu tố nào? Có các mức độ kiến trúc sư như thế nào? Cùng mình tìm hiểu tiếp ở bài viết tới nhé!