Table of Contents
Giới thiệu
Các dịch vụ vi mô đã trở thành một mẫu thống trị để xây dựng các nguyên tắc thử nghiệm, độc lập và kiên cường. Tuy nhiên, sự thay đổi từ các ứng dụng khối đá để phân phối dịch vụ mới. Các dịch vụ phức tạp giới hạn giữa các dịch vụ, ranh giới không rõ ràng, khó khăn trong việc thử nghiệm và triển khai. Áp dụng các nguyên tắc SOLID cho các dịch vụ thiết kế vi mô nhằm mục đích. Những hướng dẫn thiết kế đối tượng, khi thích nghi với các biên giới dịch vụ và giao tiếp liên kết, sản xuất các dịch vụ dễ dàng hơn để duy trì, quy mô và tiến hóa. Bài này tìm hiểu mỗi nguyên tắc, ứng dụng thực tế, trong dịch vụ vi mô tả, và các tổ chức có thể đạt được lợi ích cụ thể.
Nguyên tắc SOLID là gì?
SOLID là một từ viết tắt do Robert C. Martin (bà Bob) đại diện cho năm nguyên tắc thiết kế khuyến khích mã thiết kế duy trì và mở rộng đối tượng. Trong một ngữ cảnh vi dịch vụ, các nguyên tắc này dịch ra để phân hủy dịch vụ, tập trung và các hợp đồng rõ ràng giữa chúng.
Nguyên tắc trách nhiệm đơn (SP)
Một lớp hay mô- đun nên có một, và chỉ một lý do để thay đổi. Trong dịch vụ vi mô, điều này có nghĩa là mỗi dịch vụ nên sở hữu một khả năng kinh doanh hay phụ. Ví dụ, dịch vụ quản lý thứ tự nên xử lý chỉ các sự kiện lặp lại cuộc sống, không phải xử lý xử lý thanh toán hoặc kiểm tra kho. Việc này giảm bán kính vụ phát nổ của các thay đổi và làm cho dịch vụ tự triển.
Nguyên tắc mở/Closed (CP)
Các thực thể phần mềm nên được mở rộng để mở rộng nhưng đóng lại để sửa đổi. Dịch vụ ứng dụng với dịch vụ vi mô, dịch vụ nên hiển thị giao diện ổn định (các giao diện hay hợp đồng sự kiện) mà có thể mở rộng với tính năng mới mà không cần sửa đổi mã đã có. Thường thì nó được thực hiện thông qua phiên bản ADIs, sự kiện giản đồ hóa, hoặc cấu trúc bổ sung.
Nguyên tắc con của Liskov (LP)
Đối tượng trong tầng siêu đẳng nên được thay thế bằng các đối tượng thuộc tầng lớp phụ mà không ảnh hưởng đến độ chính xác của chương trình. Đối với dịch vụ vi mô, LP đảm bảo rằng giao diện dịch vụ khác nhau (v. d., một cổng thanh công có thể chuyển từ D đạo lên PayPal) đều đặn và có thể trao đổi mà không làm hỏng người tiêu dùng.
Hệ thống
Trong các dịch vụ vi mô, dịch vụ này chuyển sang các giao diện riêng lẻ, tập trung vào các hệ thống ATIs hoặc các định nghĩa sự kiện phù hợp với nhu cầu của mỗi người tiêu dùng. Ví dụ, dịch vụ khách hàng có thể vạch ra điểm kết thúc riêng biệt cho việc thu hồi hồ sơ, quản lý địa chỉ, và trạng thái trung thành thay vì một “đường đi của người chủ.
Nguyên tắc đảo ngược quan hệ phụ thuộc (DIP)
Tùy thuộc vào trừu tượng, chứ không phải sự kết nối. Trong dịch vụ vi mô, dịch vụ nên phụ thuộc vào giao diện trừu tượng như môi trường thông điệp, cổng vào API, hoặc dịch vụ mạng thay vì mã hoá tham chiếu cho các dịch vụ khác. Điều này cho phép việc trao đổi thực hiện, giới thiệu các công tắc mạch, hoặc thêm các lớp đệm đệm mà không thay đổi logic kinh doanh.
Tại sao các nguyên tắc SOLID là quan trọng trong các dịch vụ vi mô
Các dịch vụ vi mô vốn đòi hỏi những ranh giới rõ ràng, sự kết nối lỏng lẻo và sự kết hợp chặt chẽ. Các nguyên tắc SOLID cung cấp một khuôn khổ đã được chứng minh để đạt được những phẩm chất này. không có chúng, các đội thường rơi vào những nhóm chống chống lại ngành giáo dục như “những khối đá vôi, nơi dịch vụ được kết hợp chặt chẽ qua cơ sở dữ liệu chia sẻ hoặc tán gẫu.
Hơn nữa, khi số dịch vụ tăng, chi phí thay đổi tăng theo cấp số nhân nếu phụ thuộc không được quản lý. Nguyên tắc SOLID giữ cho phụ thuộc được rõ ràng và không thể đảo ngược, cho phép các nhóm phát triển dịch vụ độc lập. Tính năng này tương ứng trực tiếp với mục tiêu của các dịch vụ vi mô: khả năng triển độc lập, tăng trưởng và phục hồi sức khỏe.
Lợi ích của việc áp dụng nguyên tắc SOLID trong các dịch vụ vi mô
Giữ vững bền hơn
Khi mỗi dịch vụ có một trách nhiệm riêng lẻ, thay đổi một dịch vụ hiếm khi tác động đến người khác. Chẳng hạn, thêm một bước thẩm tra người dùng mới vào dịch vụ xác thực không cần thiết thay đổi đến dịch vụ hồ sơ người dùng. Sự cô lập này giảm đáng kể phạm vi thử nghiệm và triển khai các rủi ro. Các nhóm có thể phát hành cập nhật các dịch vụ cá nhân với chu kỳ phát triển nhanh chóng.
Khả năng cấu hình được cải tiến
Dịch vụ được thiết kế bởi SRP và IP tự nhiên nhiều hạt hơn. Tính chất hạt này cho phép các tổ chức chỉ tăng cường các thành phần có nhu cầu cao hơn. Ví dụ, một nền tảng truyền video có thể tự phụ hóa dịch vụ chuyển tiếp của nó độc lập khỏi dịch vụ tra cứu siêu dữ liệu. Vì phụ thuộc bị đảo (DIP), tăng cường dịch vụ không cần nâng cấp dòng lên hay kết nối xuôi dòng.
Khả năng dễ uốn nắn và khả năng phục hồi cao hơn
Việc phân tách giao diện đảm bảo rằng dịch vụ chỉ phơi bày những gì người tiêu dùng cần. Điều này giảm thiểu sự kết nối và làm cho các giao diện có thể tái sử dụng trên nhiều người tiêu dùng. Ví dụ, một dịch vụ thông báo với giao diện riêng cho email, tin nhắn và thông báo đẩy có thể được sử dụng lại theo thứ tự, hóa đơn và dịch vụ tài khoản mà không cần thay đổi. Nguyên tắc mở/ Đóng tiếp cho phép thêm các kênh thông báo mới (v. d., mạngS.S. mà không thay đổi giao diện đã có.
Khả năng kiểm tra tốt hơn
Dịch vụ đã tách ra với giao diện xác định thì dễ dàng hơn nhiều. Đơn vị thử nghiệm một dịch vụ phụ thuộc vào trừu tượng (DIP) thay vì dịch vụ cụ thể cho phép các nhà phát triển sử dụng chế nhạo hoặc xếp gạch. Thử nghiệm hợp nhất trở nên đơn giản hơn vì mỗi dịch vụ có thể được chạy trong cô lập với bộ gắn kết thử nghiệm. Việc kiểm tra cao hơn dẫn đến ít sự kiện sản xuất và vòng phản hồi nhanh hơn.
Nếu có lòng khoan dung và kiên trì
Bằng cách bám chặt vào DIP, dịch vụ phụ thuộc vào các kênh liên lạc trừu tượng như hàng đợi thông điệp hoặc dịch vụ mạng. Những hình ảnh trừu tượng này có thể thực hiện lại các việc khác, thời hạn, công tắc mạch và ắc quy không thay đổi logic dịch vụ. Chẳng hạn, một dịch vụ thứ tự gửi các sự kiện thanh toán qua một nhà môi giới thông điệp (DIP) sẽ tiếp tục hoạt động ngay cả khi dịch vụ thanh toán tạm thời không có, như các sự kiện được sắp xếp cho các phiên dịch vụ xử lý sau này.
Dễ dàng lên tàu và đội tự động
Khi dịch vụ theo sau SRP và IP, trách nhiệm của họ rất rõ ràng và hạn chế, các nhà phát triển mới có thể hiểu nhanh mục đích của dịch vụ, và các đội có thể sở hữu một tập hợp các dịch vụ liên quan mà không cần đến sự hiểu biết sâu sắc về người khác.
Ứng dụng thực tế của SOLID trong các dịch vụ vi mô
Giao diện dịch vụ bảo mật với SRP
Bắt đầu bằng cách phân chia miền của bạn thành ngữ cảnh bị ràng buộc, mỗi ngữ cảnh trở thành dịch vụ. Ví dụ, trong hệ thống e-commerce, tạo dịch vụ riêng cho mục lục, xe đẩy, đơn đặt hàng, hóa đơn, lô hàng và duyệt lại. Mỗi dịch vụ có dữ liệu và quy tắc kinh doanh. Tránh tạo “dịch vụ cơ quan bất lực để tạo ra các trách nhiệm phối hợp với nhau.
Giao diện thiết kế được với OCP và IP
Tạo các định nghĩa giao diện (contracts) dùng protbif, OpenAPI, hoặc AsyncAPI. Bảo đảm rằng các giao diện này được phiên bản và mở rộng. Chẳng hạn, một “sự kiện tạo ra các trường hợp cho phép bạn chắc chắn, nhưng cho phép các trường tương lai thông qua tùy chọn. Tránh phá vỡ các thay đổi bằng cách thêm điểm kết thúc mới hoặc thông điệp thay vì thay vì sửa đổi các điểm đã có.
Khả năng sinh tồn được dùng LP
Khi nhiều dịch vụ thực hiện cùng một giao diện (v. d., nhiều cổng thanh công cụ điều chỉnh), chuẩn hoá giao kèo. Viết các thử nghiệm tích hợp xác minh bất kỳ thực hiện nào theo hành vi mong đợi (v. d., chấp nhận trả tiền một thành công hoặc thất bại với các mã lỗi nhất định). Điều này làm cho việc trao đổi cổng an toàn.
Liên quan đến tin nhắn và dịch vụ
Thay vì dịch vụ A thực hiện cuộc gọi HTTP cho dịch vụ B, hãy cho dịch vụ A xuất bản một sự kiện cho một nhà môi giới thông điệp (Kafka, RabbitMQ) hoặc sử dụng một mạng lưới dịch vụ (Istio, Linkerd). Bộ dịch vụ có thể xử lý tái sử dụng, thời gian, và các chính sách ngắt mạch. Tính logic kinh doanh bên trong dịch vụ A vẫn còn là khả năng tiên đoán cho mạng nội bộ.
Những thử thách và sự quan tâm
Áp dụng các nguyên tắc SOLID trong dịch vụ vi mô không phải là dễ dàng. Việc sử dụng quá nhiều (IP) có thể dẫn đến giao diện chaty và quá nhiều dịch vụ, tăng chi phí hoạt động. Tương tự, các đội mật vụ SRP có thể tạo ra các dịch vụ vi mô cho mỗi đơn vị nhỏ, kết quả là “không phục vụ.
Một thách thức khác là phiên bản và tương thích ngược. Sau đây OCP đòi hỏi chính sách phân hủy cẩn thận. Công cụ như bộ đăng ký bản quyền (bản thảo đầy đủ, Apicurio) có thể giúp quản lý cấp độ tương thích.
Cuối cùng, văn hóa nhóm và tổ chức liên kết vấn đề. mà không có quyền sở hữu và giao tiếp rõ ràng, ngay cả dịch vụ SOLID xác định rõ ràng có thể được kết hợp chặt chẽ thông qua các thói quen tổ chức (v. d., chia sẻ cơ sở dữ liệu hoặc thư viện chia sẻ). Thực hành tích hợp liên tục và DevOps phải hỗ trợ độc lập triển khai.
Kết luận
Việc áp dụng các nguyên tắc SOLID trong kiến trúc vi dịch vụ không phải là một viên đạn bạc, nhưng là một hướng dẫn mạnh mẽ cho việc xây dựng hệ thống có khả năng bảo trì, có khả năng sinh tồn và bền vững. Bằng cách tập trung vào những trách nhiệm rõ ràng, hợp đồng ổn định, thay thế, giao diện nhẹ, và thay thế các phụ thuộc vào phụ thuộc, các nhóm có thể tránh nhiều cạm bẫy thông thường của hệ thống phân phối. Việc đầu tư trước tiên có thể trả tiền khi hệ thống phát triển và tiến hóa. Để đọc thêm, hãy tìm hiểu những mẫu [FT: 0] của Martin (FT: 0] trên vi mô hình [FL: 1], bản gốc [L], [L], bản nguyên tắc [L] và các nguyên tắc: [T] như: T], bản thiết kế [T] và] như sau:].