chương 1 tập trung vào việc tìm hiểu các đặc điểm và phương pháp phát triển āng dụng theo hướng microservices. Bên c¿nh đó, các ph¿m trù kiến thāc cơ bản liên quan đến kiến trúc nguyên khái, kiến trúc SOA cũng sẽ được đề cập và giải thích mát cách cụ thể. Mßt sß h°áng ki¿n trúc phÁn mÁm truyÁn thßng Trước khi tìm hiểu về kiến trúc microservices, luận văn tập trung tóm lược l¿i sự phát triển cÿa mát sá kiến trúc phần mềm phổ biến được sử dụng trong các āng dụng doanh nghiệp. Ki¿n trúc nguyên khßi Trong công nghệ phần mềm, thuật ngữ monolithic được sử dụng để mô tả cho mát lo¿i hình kiến trúc mà á đó các thành phần cÿa hệ tháng được xây dựng và nằm trong mát khái duy nhất không thể chia tách.
Vì đặc điểm này, kiến trúc monolithic còn được gái là kiến trúc nguyên khái hay kiến trúc mát khái. Thông thưßng, mát āng dụng theo mô hình kiến trúc mát khái sẽ được phân tách thành các tầng hoặc lớp sau: phần giao diện ngưßi dùng (client), phần dßch vụ phía máy chÿ (service) và phần cơ sá dữ liệu (database). Cả ba thành phần này được xây dựng, đóng gói và triển khai trong mát khái duy nhất. Ví dụ trong hình 1.1 mô tả mát cách tổng quát mô hình kiến trúc nguyên khái cho mát āng dụng web truyền tháng.
Theo sơ đồ này, āng dụng được chia tách thành ba tầng chính gồm tầng giao diện ngưßi dùng (Web UI), tầng nghiệp vụ (Business Logic) và tầng truy cập dữ liệu (Data Access Object). Tầng giao diện chßu trách nhiệm tiếp nhận các dữ liệu từ phía ngưßi dùng thông qua các biểu mẫu trên trang web, tầng nghiệp vụ thực hiện việc đóng gói các quy tắc nghiệp vụ cÿa bài toán và tương tác với tầng truy cập dữ liệu để thực hiện các giao tác như truy vấn hoặc lưu trữ dữ liệu. Có thể thấy trong mô hình āng dụng nguyên khái các thành phần liên kết và phụ thuác khá chặt với nhau, luồng xử lý dữ liệu sẽ đi từ tầng trên cùng và được xử lý lần lượt qua các thành phần tiếp theo. Chính sự gắn kết chặt chẽ này sẽ mang l¿i mát sá h¿n chế nhất đßnh cÿa hướng kiến trúc mà chúng ta sẽ trao đổi cụ thể trong mục <Nhược điểm của kiến trúc nguyên khối= bên dưới.
Kiến trúc nguyên khối cho ứng dụng web Kiến trúc nguyên khái được sử dụng phổ biến cho hầu hết các āng dụng á māc vừa và nhß. Đây được xem là mát giải pháp truyền tháng từ trước tới nay để xây dựng āng dụng bái lẽ kiến trúc này đem l¿i mát sá ưu điểm nhất đßnh như mô tả bên dưới. ¯u điÃm cÿa ki¿n trúc nguyên khßi Dễ dàng phát triển: về mặt cấu trúc, chương trình được chia tách thành các gói dßch vụ riêng biệt hay còn gái là các module. Các module này sẽ được tổ chāc thành mát khái duy nhất trong cùng mát cấu trúc mã nguồn.
Về mặt kỹ thuật, kiến trúc nguyên khái cho phép sử dụng tháng nhất các công nghệ á các tầng. Vì thế, việc phát triển āng dụng theo cách này được xem là đơn giản, dễ dàng và tán ít thßi gian. Dễ dàng triển khai và vận hành: các module cÿa chương trình được đóng gói và cài đặt thành mát khái duy nhất, vì vậy việc triển khai và vận hành āng dụng sẽ đơn giản. Bên c¿nh các ưu điểm trên, kiến trúc nguyên khái cũng bác lá khá nhiều h¿n chế như sau: Nh°ÿc điÃm cÿa ki¿n trúc nguyên khßi Khó đáp ứng khả năng thay đổi: trong kiến trúc nguyên khái, các thành phần gắn kết với nhau mát cách chặt chẽ và được tổ chāc thành mát khái duy nhất, không thể tách rßi.
Chính điều này sẽ gây khó khăn cho việc thay đổi (thêm hoặc bớt) các tính năng về nghiệp vụ, cũng như sự nâng cấp các yêu cầu về mặt công nghệ. 5 Khả năng chịu lỗi thấp: vì các thành phần liên kết chặt chẽ với nhau, nên mßi khi có sự thay đổi á mát module này sẽ kéo theo sự thay đổi á mát module khác. Chính điều này làm giảm đi khả năng chßu lßi cÿa hệ tháng. Khó khăn trong việc bảo trì: theo thßi gian, kích cỡ chương trình gia tăng để áp āng các yêu cầu thay đổi về nghiệp vụ.
Việc bảo trì, tìm và sửa lßi trong mát khái mã nguồn lớn sẽ là mát thách thāc không nhß cho các nhà phát triển. Giới hạn về mặt công nghệ: āng dụng theo hướng nguyên khái gây khó khăn cho việc cập nhật, nâng cấp các công nghệ. Ki¿n trúc h°áng dßch vā Kiến trúc hướng dßch vụ (SOA) đã và đang được āng dụng ráng rãi trong các hệ tháng phần mềm doanh nghiệp. Theo đßnh nghĩa cÿa The Open Group, <Kiến trúc SOA là một hướng kiến trúc hỗ trợ theo hướng dịch vụ= [1].
Khái niệm <dịch vụ= á đây được hiểu là mát tập hợp các thành phần (các chương trình con) hay các module được phát triển để giải quyết mát bài toán nghiệp vụ. Các dßch vụ này được phát triển và triển khai trên các máy tính khác nhau, chúng ho¿t đáng và triệu gái lẫn nhau trên môi trưßng m¿ng. à góc đá kỹ thuật, SOA là mát cách thāc tiếp cận cho phép các nhà phát triển xây dựng các thành phần phần mềm theo hướng các dßch vụ. Các gói dßch vụ này có thể tái sử dụng, và được truy cập thông qua các giao diện lập trình āng dụng (API).
Để xây dựng hệ tháng SOA nhằm đảm bảo cho các thành phần có thể ho¿t đáng, truy cập và trao đổi dữ liệu với nhau mát cách dễ dàng, chúng ta cần mát đßnh d¿ng chuẩn về mặt dữ liệu và mát bá giao thāc tháng nhất. Hai chuẩn phổ biến ban đầu được sử dụng ráng rãi nhằm xây dựng āng dụng SOA là SOAP và XML. Hai chuẩn này được coi là thành phần cát lõi để đảm bảo việc truyền/gửi và nhận dữ liệu giữa các đái tượng trong mô hình SOA. Mô hình cơ bản cÿa mát hệ tháng SOA bao gồm ba thành phần [2]: Thành phÁn sā dāng dßch vā (service consumer): thành phần này có thể là mát chương trình āng dụng hoặc là mát dßch vụ khác có yêu cầu sử dụng dßch vụ.
Nó sẽ thực hiện việc xác đßnh các dßch vụ trong kho đăng ký dßch vụ và thực thi nhiệm vụ bằng cách gửi mát yêu cầu tới phía cung cấp dßch vụ. Thành phÁn cung c¿p dßch vā (service provider): nhiệm vụ chính cÿa nó là chấp nhận và thực thi các yêu cầu được gửi tới từ phía sử dụng dßch vụ. Các dßch vụ do phía cung cấp dßch vụ xuất bản sẽ được đăng ký t¿i kho lưu trữ dßch vụ để cho phía sử dụng dßch vụ có thể truy cập được. Thành phÁn đng ký dßch vā (service registry): đây là nơi lưu trữ các dßch vụ để phục vụ cho bên sử dụng dßch vụ.2 mô tả sự tương tác ho¿t đáng giữa ba thành phần trên trong hệ tháng SOA.
Mô hình hoạt động của một hệ thống SOA Trong mô hình ho¿t đáng á trên, việc triệu gái và trao đổi dữ liệu giữa ba bên (cung cấp dßch vụ, sử dụng dßch vụ, đăng kí dßch vụ) được thực hiện thông qua mát chuẩn về giao thāc (SOAP) và mát quy ước về chuẩn dữ liệu (XML). Quá trình này được thực hiện theo các bước sau: • Bước 1: bên cung cấp dßch vụ xuất bản các gói dßch vụ và đăng ký vào kho đăng ký dßch vụ. • Bước 2: bên sử dụng dßch vụ muán dùng dßch vụ nào sẽ gửi mát yêu cầu tìm kiếm dßch vụ. • Bước 3: phía cung cấp dßch vụ gửi trả l¿i dữ liệu cho phía sử dụng.
Bên c¿nh SOAP/XML, hiện nay các chuẩn về REST và JSON được sử dụng phổ biến hơn nhß các tính ưu việt cÿa nó như sự đơn giản trong cấu trúc cũng như việc bóc tách dữ liệu dễ dàng. ¯u điÃm cÿa ki¿n trúc SOA Sử dụng SOA trong các bài toán doanh nghiệp đem l¿i những lợi ích cát lõi sau: Tăng tính tái sử dụng: Việc thiết kế hệ tháng theo SOA được thực hiện theo hai nguyên tắc cơ bản là module hóa và đóng gói dữ liệu. Bài toán được tổ chāc và đóng gói thành các gói dßch vụ riêng rẽ. Các thành phần này liên kết mát cách lßng lẻo với nhau, và chúng có thể dễ dàng được sử dụng l¿i cho nhiều chương trình khác.
Dễ dàng trong việc bảo trì: Do tính module hóa cao cÿa kiến trúc nên việc bảo trì hệ tháng sẽ dễ dàng hơn so với kiến trúc nguyên khái. Độ tin cậy và khả năng mở rộng cao: Việc phát triển, kiểm thử các dßch vụ cũng như má ráng hệ tháng theo hướng SOA sẽ dễ dàng hơn rất nhiều so với việc triển khai các công đo¿n này trong các āng dụng theo hướng nguyên khái. Chính điều này mang l¿i sự tin cậy và ổn đßnh cho các sản phẩm phần mềm sử dụng SOA. 7 Dễ dàng trao đổi, cộng tác giữa các hệ thống: Nhß sự tháng nhất về mặt giao thāc và chuẩn dữ liệu, cho nên các hệ tháng phần mềm khác nhau, ch¿y trên nhiều nền tảng công nghệ khác nhau (Java, .Net hay PHP) hoàn toàn có thể cáng tác trao đổi với nhau miễn là tuân thÿ các chuẩn chung được quy đßnh trong hướng kiến trúc này.
Nh°ÿc điÃm cÿa ki¿n trúc SOA Bên c¿nh các lợi thế nêu trên, kiến trúc SOA cũng tồn t¿i nhiều h¿n chế: Phức tạp trong việc quản lý các dịch vụ: Hệ tháng SOA bao gồm nhiều dßch vụ ho¿t đáng trao đổi và tương tác với nhau bằng cách gửi và nhận các thông điệp. Khi sá lượng các dßch vụ tăng lên đi kèm với mát lượng lớn các thông điệp được trao đổi thì việc đảm bảo sự ho¿t đáng thông suát cÿa hệ tháng là mát thử thách không nhß. Chi phí cao cho quá trình phát triển: Bản thân kiến trúc SOA đã bao gồm sự phāc t¿p trong việc tổ chāc các thành phần, các tầng/lớp trong kiến trúc. Chính vì thế, việc phát triển và triển khai hệ tháng SOA sẽ đòi hßi mát chi phí cao hơn nhiều cho nguồn lực cũng như công nghệ (phần mềm, phần cāng) so với việc phát triển các hệ tháng thông thưßng.
Có thể nói từ lúc xuất hiện tới nay, SOA được xem là mát phương pháp thiết kế và phát triển phần mềm được sử dụng ráng rãi và phổ biến nhß những tính ưu việt cÿa nó so với nhiều phương pháp truyền tháng. SOA thực sự phù hợp cho các hệ tháng phần mềm doanh nghiệp đòi hßi đá phāc t¿p cao về mặt nghiệp vụ cũng như cách tổ chāc (ví dụ các hệ tháng phần mềm trong ngân hàng, hệ tháng ERP). ESB và vißc tích hÿp āng dāng SOA Các hệ tháng phần mềm theo hướng SOA gồm nhiều dßch vụ được triển khai phân tán.