Phát triển nhanh hơn với Microservices: Từ Monolithic đến Cloud-Native
Quang Thieu Tran
CCO
Mục lục
Định nghĩa Microservices
Để định nghĩa microservices, hãy tách cụm từ này ra thành “Micro + Services”. Micro có nghĩa là nhỏ. Không có nghĩa chỉ nhỏ ở kích thước của code. Mà còn ở phạm vi dịch vụ và quy mô của nhóm làm việc trên dịch vụ đó. “Services” liên quan tới API cung cấp một giao thức xác định, các hợp đồng xác định và Service Level Agreements (SLAs) xác định. Là sử dụng dịch vụ, bạn có thể dựa vào các giao thức đó vì đã có hợp đồng với dịch vụ.
Vậy “Microservices” là dịch vụ self-contained một mục đích. Với các giao thức xác định và SLA được xuất bản. Chúng được thiết kế để được xây dựng và vận hành bởi các nhóm tự chủ nhỏ. Trong bài này, chúng ta sẽ đề cập đến những lợi ích và hạn chế của microservice trong bối cảnh điện toán đám mây.
Tại sao chuyển sang Microservices?
Microservices không chỉ là xu hướng thiết kế ứng dụng. Mà nó còn đưa ra các lợi ích sau:
-
Microservices tăng tốc sự phát triển
Trong các ứng dụng một khối truyền thống (monolithic apps), đặc biệt tại doanh nghiệp lớn, thường có đội ngũ kỹ thuật viên lớn làm việc trên một ứng dụng khổng lồ. Điều đó tạo ra rất nhiều ma sát và chi phí hoạt động. Ngược lại, khi làm việc trên các kiến trúc dựa trên microservices, bạn có thể chia nhóm của mình thành các nhóm tự chủ nhỏ hơn. Các nhóm có thể làm việc song song và tăng tốc sự phát triển chung tổ chức của bạn.
-
Microservices cải thiện các hoạt động
Microservice có thể cải thiện hoạt động của bạn. Bằng cách cô lập các vấn đề với từng dịch vụ microservices. Có thể giảm tải thời gian cần thiết để sửa chữa bất kỳ workload cụ thể nào.
-
Microservices cho phép scaling rộng lớn
Kiến trúc microservice cũng cho phép mở rộng quy mô lớn. Thực hiện điều đó bằng cách cho phép mỗi dịch vụ được scale độc lập. Để đáp ứng nhu cầu cho tính năng ứng dụng mà nó hỗ trợ.
-
Microservices cho bạn lựa chọn công nghệ tốt nhất
Tận dụng microservices không bị giới hạn trong việc “one size fits all”. Thay vào đó, ta có quyền tự do lựa chọn công cụ tốt nhất cho mọi công việc.
-
Cải thiện khả năng phục hồi và bảo mật
Trong kiến trúc một khối, nếu một thành phần bị lỗi có thể khiến toàn bộ ứng dụng bị lỗi. Với microservices, các ứng dụng xử lý toàn bộ lỗi dịch vụ bằng cách làm giảm chức năng. Và không làm hỏng toàn bộ ứng dụng. Khi chuyển sang kiến trúc microservices, bạn tăng khả năng chống lại thất bại của ứng dụng.
Tại sao AWS sử dụng microservices?
AWS là một trong những best pratices về một công ty thực sự thực hành những gì họ giảng. Microservices được sử dụng trong nội bộ. AWS đã chia sẻ tám trình điều khiển chính để áp dụng microservices nội bộ của riêng họ:
- Lựa chọn công cụ phù hợp cho công việc
- Cải thiện khả năng phục hồi và bảo mật
- Giảm chi phí với khả năng scaling lớn
- Tối ưu hiệu suất làm việc của nhóm
- Sáng tác dễ dàng
- Thử nghiệm sai sót an toàn
- Tích hợp công nghệ mới nhanh hơn
- Triển khai các tính năng an toàn và nhanh chóng
Cân nhắc các đánh đổi
Việc sử dụng kiến trúc microservices sẽ tạo ra một số sự đánh đổi. Bạn cần hiểu và cân nhắc những điều này. Có 3 điều cần quan tâm là:
-
Cognitive load cao hơn
Các ứng dụng một khối mang nhiều sự phức tạp vào một hệ thống duy nhất. Mặc dù khó để scale nhưng chúng khá dễ hiểu. Vì bạn không phải lo lắng về một ứng dụng được kết hợp với nhiều hệ thống khác nhau.
Ngược lại, với kiến trúc microservices, nếu thực sự muốn hiểu hệ thống tổng thể, bạn phải hiểu các dịch vụ và sự liên quan giữa chúng. Đây là một hệ sinh thái phức tạp với nhiều phần chuyển động và nhiều yếu tố cần xem xét – do đó cognitive load cao hơn.
-
Phức tạp để sửa lỗi (debug)
Nếu có ứng dụng một khối, không cần phải vượt khỏi ranh giới của ứng dụng để gỡ lỗi. Nhưng với kiến trúc microservices, giờ đây bạn đã có một hệ thống phân tán. Các hệ thống phân tán có những cách thức và phương pháp khác nhau cho thiết bị, truy vết và gỡ lỗi. Điều đó có nghĩa là bạn phải áp dụng các công cụ hiện đại và thiết bị hiện đại như nền tảng theo dõi (observability platforms) và theo dõi phân tán (distributed tracing).
Tuy nhiên, theo quan điểm của chúng tôi, sự đánh đổi này thực sự là một lợi ích. Bởi vì để tận dụng tối đa lợi thế của đám mây công cộng, bạn thực sự cần phải phát triển các công cụ của mình trong dưới sự giám sát. Mặc dù có thể ít thuận tiện hơn trong ngắn hạn. Nhưng về lâu dài, sẽ giúp các nhóm làm việc hiệu quả hơn.
-
Độ trễ mạng Inter-service
Sự đánh đổi cuối cùng này là do giới hạn của vật lý – tốc độ ánh sáng. Chúng ta không thể vượt qua tốc độ ánh sáng. Trong một ứng dụng một khối, tất cả các yêu cầu của bạn được xử lý và xử lý trong một hệ thống duy nhất và thường chúng thậm chí không phải rời khỏi ranh giới của ứng dụng đó.
Ngược lại, với microservices, một yêu cầu từ khách hàng có thể chạm vào hàng tá hệ thống kết nối khác nhau ở đằng sau. Khi bạn phân tách ứng dụng của mình, phải hiểu rằng bạn không thể giải quyết các dịch vụ từ xa như dịch vụ địa phương. Điều này có nghĩa là hạn chế các cuộc gọi bị ràng buộc qua mạng thông qua hàng loạt yêu cầu, bộ nhớ đệm. Cũng như xử lý chậm trễ một cách mượt mà thông qua điều chỉnh, ngắt mạch, đệm, hàng đợi, v.v.
Bây giờ bạn đã tìm hiểu thêm về microservices là gì và lợi ích và sự đánh đổi chính của chúng. Trong bài viết tiếp theo, chúng tôi sẽ đề cập đến cách xây dựng microservices trên AWS.