Hỏi đáp

Microservices là gì?

Chào các bạn, sau một thời gian dài bận bịu với các dự án sử dụng các công nghệ cũ, hoặc các công nghệ do khách hàng lựa chọn từ trước, mình bỗng nhiên ngỡ ngàng khi nghe phong phanh dự án mới sẽ làm theo kiến trúc Microservices. Dù cũng có tương đối kinh nghiệm thực hiện việc nhưng thời điểm đó mình cũng chưa hình dung ra Microservices là cái quái gì?, mọi người cần phải xây dựng ứng dụng như thế nào?, … Bắt tay vào tìm hiểu, và điều đầu tiên mình nhận ra rằng -> làm mãi với những công nghệ đến từ thập kỉ trước chưa thể thực hiện bản thân tiến bộ đã được (Note: dự án mình thực hiện gần đây nhất sử dụng các công nghệ java từ những năm 2004 @@), công nghệ đã , và đang thay đổi hàng ngày, nếu cứ bảo thủ , và chưa chịu cập nhật thì chúng ta chỉ bước những bước lùi mà thôi.

Lan man quá, quay lại chủ đề chính nhé

Microservice là gì

Vậy Microservices chính là gì nhỉ?

Bạn đang đọc: Microservices là gì?

Thực tế có nhiều định nghĩa khác nhau đối với Microservices nhưng hiểu theo cách đơn giản thì, microservice chính là một kiếu kiến trúc phần mềm. Các module trong phần mềm này đã được chia thành các service rất nhiều nhỏ (microservice). Mỗi service sẽ đã được đặt ở trên một server riêng -> dễ dàng để nâng cấp , và scale ứng dụng.

Monolith Application chính là gì?

Bạn đã bao giờ từng thực hiện việc trong những dự án có đặc điểm như sau chưa?

Release vài tháng 1 lầnCó các đặc điểm và chức năng bao phủ phạm vi rộngTeam size lớnViệc debug trở thành thử thách lớnKhó khăn để ứng dụng các công nghệ mới

Tìm hiểu thêm: 3d 5s là gì vậy? Bài học dành cho người cầm cờ doanh nghiệp

Đó là những đặc điểm của Monolith Application

Các ứng dụng Monolith thường rất nhiều lớn – thường sẽ có size hơn 100.000 dòng code. Trong một số trường hợp thậm chí có hơn một triệu dòng code.

Ngành Công nghệ tài chính – Fintech

Khi xây dựng phần mềm theo kiến trúc monolith (một khối). Toàn bộ các module (view, business, database, report) đều được gom chung vào một project lớn. Khi deploy, mọi người cũng sẽ quăng khối code này lên server , và config để nó chạy.

Kiến trúc này hoạt động khá ngon vì nó đơn giản, dễ code. Tuy nhiên, khi phần mềm trở nên lớn , và phức tạp thì nó lại dần bộc lộ nhược điểm. Do các module đóng với nhau thành một bánh, khi muốn nâng cấp một module, ta phải deploy lại toàn bộ code (người dùng cuối cũng sẽ không sử dụng được toàn bộ các chức năng của hệ thống khi deploy); khi muốn phục vụ nhiều người dùng, ta phải nâng cấp server…

Các thử thách đối với Monolith Application

ScalabilityỨng dụng các công nghệ mớiỨng dụng automation testÁp dụng quá trình làm việc – Agile?Thích ứng với thực tiễn phát triển hiện đại…

Kiến trúc Microservices

Khác biệt với kiến trúc Monolith, hay là vì gom tất cả module thành một khối (monolith), ta tách các module thành những service siêu nhỏ. Mỗi service cũng sẽ đã được đặt trên một server riêng (Có thể dùng server cloud như AWS hoặc Azure), giao tiếp với nhau thông qua mạng (Gửi nhận message qua giao thức HTTP hoặc sử dụng MessageQueue)…

Và một phần mềm xây dựng theo kiến trúc Microservices trông cũng sẽ như nào?

Hình dưới đây sẽ minh họa cho việc phần mềm đã được xây dựng theo kiến trúc Monolith, một ứng dụng sẽ chứa tất cả các thành phần

Microservices chính là gì?

Biện triệu chứng là gì?

Còn hình dưới cũng sẽ minh họa việc ứng dụng trên khi được xây dựng theo kiến trúc Microservices

Microservices là gì?

Kiến trúc Microservice bao gồm một số thành phần nhỏ, đã được thiết kế tốt và tương tác qua các message.

Microservices là gì?

Các ưu điểm của Kiến trúc Microservices

Hiện nay, các ứng dụng thường rất lớn , và liên tục đã được update ví dụ như facebook, linkin,… . Với kiến trúc monolith, việc gom toàn bộ ứng dụng vào một khối làm việc nâng cấp trở nên khó khăn và mất thời gian. Để giải quyết vấn đề đó, các ứng dụng lớn cần thiết đã được tách ra thành các service nhỏ. Mỗi service quản lý một cơ sở dữ liệu riêng, nằm ở trên một server riêng, tách biệt hoàn toàn với nhau. Những ưu điểm như sau:

Điều quan trọng nhất chính là rất dễ nâng cấp , và scale up, scale down. Giả sử bạn thực hiện một trang web liên quan tới vận tải, kho bãi. Khi số lượng xe hay là hàng hóa tăng lên, chỉ việc nâng cấp server cho service liên quan đến nghiệp vụ kho vận(ngược lại, có thể giảm server nếu cần thiết). Với cloud computing, việc nâng cấp server vô cùng dễ dàng chỉ với vài cú click chuột. Điều này rất nhiều khó thực hiện với monolith.Do tách biệt nên nếu một service bị lỗi, toàn bộ hệ thống vẫn hoạt động bình thường. Với monolith, một module bị lỗi có thể cũng sẽ kéo sập toàn bộ hệ thống.Các service nằm tách biệt nhau, chúng có thể được sử dụng các ngôn ngữ lập trình riêng, database riêng. VD service xử lý ảnh có thể viết bằng C++, service tổng hợp data có thể viết bằng Python.Có thể áp dụng được các quy trình tự động hóa, như build, deploy, monitoring,…Khi chia nhỏ các service, team size sẽ giảm và chúng ta sẽ thực hiện việc hiệu quả hơn…

Tuy nhiên chưa phải là chưa có nhược điểm

Các module giao tiếp qua mạng nên có thể tốc độ chưa cao bằng monolith. Ngoài ra, mỗi module phải tự giải quyết các vấn đề về bảo mật, transaction, lỗi kết nối, quản lý log files.Việc bảo đảm tính đồng số 1 trong dữ liệu cũng sẽ trở nên phức tạp hơnSử dụng nhiều service nên việc theo dõi, quản lý các service này sẽ phức tạp hơnCần một đội ngũ thật ngon để thiết kế , và triển khai bao gồm software architect xịn

Việc xây dựng phần mềm theo kiến trúc nào hoàn toàn phụ thuộc vào phạm vi bài toán mà ứng dụng đó đặt ra, hiện tại thì theo đánh giá của mình Monolith hợp lý với các ứng dụng cỡ vừa và nhỏ, còn Microservices sẽ phù hợp với những ứng dụng lớn => chúng ta cần cân nhắc cẩn thận khi sử dụng để tránh trường hợp mang dao mổ trâu đi thịt gà =)). Qua bài viết hy vọng sẽ chia sẻ đã được phần nào kiến thức tổng hợp mình đã tìm hiểu. Thanks!

Định vị GPS là gì và ứng dụng tiện ích của nó như thế nào?

Tìm hiểu thêm: Đông Lào là gì vậy? Xứ Đông Lào là gì vậy?