Lưới dịch vụ là gì?
Lưới dịch vụ là một lớp phần mềm xử lý tất cả các giao tiếp giữa các dịch vụ trong ứng dụng. Lớp này bao gồm các vi dịch vụ có trong bộ chứa. Khi các ứng dụng điều chỉnh quy mô và số lượng vi dịch vụ tăng lên, việc theo dõi hiệu năng của các dịch vụ trở nên khó khăn. Để quản lý kết nối giữa các dịch vụ, lưới dịch vụ cung cấp các tính năng mới như giám sát, tạo bản ghi, truy dấu và kiểm soát lưu lượng truy cập. Lưới dịch vụ độc lập với mã của mỗi dịch vụ, cho phép hoạt động trên các ranh giới mạng và với nhiều hệ thống quản lý dịch vụ.
Tại sao bạn cần một lưới dịch vụ?
Trong kiến trúc ứng dụng hiện đại, bạn có thể xây dựng các ứng dụng dưới dạng một tập hợp các vi dịch vụ nhỏ, có thể triển khai độc lập. Các đội ngũ khác nhau có thể xây dựng các vi dịch vụ riêng lẻ và chọn ngôn ngữ và công cụ mã hóa của họ. Tuy nhiên, các vi dịch vụ phải giao tiếp để mã ứng dụng hoạt động chính xác.
Hiệu năng ứng dụng phụ thuộc vào tốc độ và khả năng phục hồi của quá trình giao tiếp giữa các dịch vụ. Các nhà phát triển phải giám sát và tối ưu hóa ứng dụng trên các dịch vụ, nhưng do tính chất phân tán của hệ thống, rất khó để đạt được khả năng hiển thị. Khi các ứng dụng điều chỉnh quy mô, việc quản lý giao tiếp thậm chí còn trở nên phức tạp hơn.
Tiếp theo, chúng tôi sẽ trình bày chi tiết hai yếu tố thúc đẩy đối với áp dụng lưới dịch vụ.
Khả năng quan sát cấp dịch vụ
Khi có nhiều khối lượng công việc và dịch vụ được triển khai hơn, các nhà phát triển cảm thấy khó khăn để hiểu cách mọi thứ hoạt động cùng nhau. Ví dụ: đội ngũ dịch vụ muốn biết các thành phần phụ thuộc hạ nguồn và thượng nguồn của mình là gì. Họ muốn hiển thị rõ hơn cách các dịch vụ và khối lượng công việc giao tiếp ở lớp ứng dụng.
Kiểm soát cấp dịch vụ
Các quản trị viên muốn kiểm soát những dịch vụ nào giao tiếp với nhau và những hành động mà chúng thực hiện. Họ muốn kiểm soát và quản trị hành vi, chính sách và tương tác của các dịch vụ trong kiến trúc vi dịch vụ một cách chi tiết. Thực thi các chính sách bảo mật là điều cần thiết để tuân thủ quy định.
Lợi ích của lưới dịch vụ là gì?
Lưới dịch vụ cung cấp một lớp cơ sở hạ tầng tập trung, chuyên dụng để xử lý sự phức tạp của việc giao tiếp giữa các dịch vụ trong một ứng dụng phân tán. Tiếp theo, chúng tôi nêu ra một số lợi ích của lưới dịch vụ.
Khám phá dịch vụ
Lưới dịch vụ mang đến khả năng khám phá dịch vụ tự động, giúp giảm tải hoạt động của việc quản lý các điểm cuối dịch vụ. Chúng sử dụng sổ đăng ký dịch vụ để khám phá và theo dõi tất cả các dịch vụ trong lưới một cách linh hoạt. Các dịch vụ có thể tìm và giao tiếp với nhau một cách liền mạch, bất kể vị trí hoặc cơ sở hạ tầng cơ bản của chúng. Bạn có thể nhanh chóng điều chỉnh quy mô bằng cách triển khai các dịch vụ mới theo yêu cầu.
Cân bằng tải
Lưới dịch vụ sử dụng nhiều thuật toán khác nhau – chẳng hạn như cân bằng tải round-robin (luân chuyển vòng), least connections (kết nối tối thiểu), hoặc weighted (theo trọng số) – để phân phối các yêu cầu trên nhiều phiên bản dịch vụ một cách thông minh. Thuật toán cân bằng tải cải thiện việc sử dụng tài nguyên và đảm bảo độ sẵn sàng cao và khả năng điều chỉnh quy mô linh hoạt. Bạn có thể tối ưu hóa hiệu năng và ngăn ngừa tình trạng tắc nghẽn giao tiếp mạng.
Quản lý lưu lượng truy cập
Lưới dịch vụ cung cấp các tính năng quản lý lưu lượng truy cập nâng cao, cung cấp khả năng kiểm soát chi tiết đối với việc định tuyến yêu cầu và hành vi lưu lượng truy cập. Dưới đây là một vài ví dụ.
Phân chia lưu lượng truy cập
Bạn có thể phân chia lưu lượng truy cập đến giữa các phiên bản hoặc cấu hình dịch vụ khác nhau. Lưới dịch vụ sẽ hướng một ít lưu lượng truy cập đến phiên bản đã cập nhật, cho phép việc triển khai các thay đổi được diễn ra dần dần và có kiểm soát. Việc này mang lại một quá trình chuyển đổi suôn sẻ và giảm thiểu tác động của các thay đổi.
Sao chép yêu cầu
Bạn có thể sao chép lưu lượng truy cập đến dịch vụ kiểm tra hoặc giám sát để phân tích mà không ảnh hưởng đến luồng yêu cầu chính. Khi bạn sao chép các yêu cầu, bạn có được thông tin chi tiết về cách các dịch vụ xử lý các yêu cầu cụ thể mà không ảnh hưởng đến lưu lượng truy cập sản xuất.
Triển khai Canary
Bạn có thể hướng một tập hợp nhỏ người dùng hoặc lưu lượng truy cập đến phiên bản dịch vụ mới và để hầu hết những người dùng còn lại tiếp tục sử dụng phiên bản ổn định hiện có. Với mức độ tiếp xúc hạn chế, bạn có thể thử nghiệm hành vi và hiệu suất của phiên bản mới trong môi trường thực tế.
Bảo mật
Lưới dịch vụ cung cấp các tính năng giao tiếp bảo mật như mã hóa TLS lẫn nhau (mTLS), xác thực và cấp quyền. Phương thức TLS lẫn nhau cho phép xác minh danh tính trong giao tiếp giữa các dịch vụ. Nó giúp đảm bảo tính bảo mật và tính toàn vẹn của dữ liệu bằng cách mã hóa lưu lượng truy cập. Bạn cũng có thể thực thi các chính sách cấp quyền để kiểm soát dịch vụ nào truy cập vào các điểm cuối cụ thể hoặc thực hiện các hành động cụ thể.
Giám sát
Lưới dịch vụ cung cấp các tính năng giám sát và quan sát toàn diện để có được thông tin chuyên sâu về sức khỏe, hiệu suất và hành vi của dịch vụ. Tính năng giám sát cũng hỗ trợ khắc phục sự cố và tối ưu hóa hiệu suất. Dưới đây là ví dụ về các tính năng giám sát bạn có thể sử dụng:
- Thu thập các số liệu như độ trễ, tỷ lệ lỗi và mức sử dụng tài nguyên để phân tích hiệu suất hệ thống tổng thể
- Thực hiện truy dấu phân tán để xem thời gian và đường dẫn đầy đủ của yêu cầu trên nhiều dịch vụ
- Ghi lại các sự kiện dịch vụ trong bản ghi để phục vụ cho mục đích kiểm tra, gỡ lỗi và tuân thủ
Lưới dịch vụ hoạt động như thế nào?
Lưới dịch vụ loại bỏ logic có chức năng quản lý giao tiếp giữa các dịch vụ khỏi các dịch vụ riêng lẻ, đồng thời giản lược giao tiếp với lớp cơ sở hạ tầng của riêng nó. Lưới dịch vụ sử dụng một số proxy mạng để định tuyến và theo dõi giao tiếp giữa các dịch vụ.
Proxy hoạt động như một cổng trung gian giữa mạng của tổ chức và vi dịch vụ. Tất cả lưu lượng truy cập đến và đi từ dịch vụ được định tuyến qua máy chủ proxy. Các proxy riêng lẻ đôi khi còn được gọi là sidecar, bởi vì chúng chạy riêng biệt nhưng có logic bên cạnh mỗi dịch vụ. Các proxy kết hợp với nhau tạo thành lớp lưới dịch vụ.
Có hai thành phần chính trong kiến trúc lưới dịch vụ — mặt phẳng điều khiển và mặt phẳng dữ liệu.
Mặt phẳng dữ liệu
Mặt phẳng dữ liệu là thành phần xử lý dữ liệu của lưới dịch vụ. Mặt phẳng dữ liệu bao gồm tất cả các proxy sidecar và chức năng của chúng. Khi một dịch vụ muốn giao tiếp với một dịch vụ khác, proxy sidecar sẽ thực hiện các hành động sau:
- Sidecar chặn yêu cầu
- Sidecar đóng gói yêu cầu trong một kết nối mạng riêng biệt
- Sidecar thiết lập một kênh bảo mật và được mã hóa giữa proxy nguồn và đích
Các proxy sidecar xử lý truyền thông điệp cấp thấp giữa các dịch vụ. Chúng cũng triển khai các tính năng như ngắt mạch và thử lại yêu cầu, để tăng cường khả năng phục hồi và ngăn chặn tình trạng suy giảm dịch vụ. Chức năng lưới dịch vụ — như cân bằng tải, khám phá dịch vụ và định tuyến lưu lượng truy cập — được triển khai trong mặt phẳng dữ liệu.
Mặt phẳng điều khiển
Mặt phẳng điều khiển hoạt động như lớp quản lý và cấu hình trung tâm của lưới dịch vụ.
Với mặt phẳng điều khiển, quản trị viên có thể xác định và cấu hình các dịch vụ trong lưới. Ví dụ: họ có thể chỉ định các tham số như điểm cuối dịch vụ, quy tắc định tuyến, chính sách cân bằng tải và cài đặt bảo mật. Khi cấu hình được xác định, mặt phẳng điều khiển sẽ phân phối thông tin cần thiết đến mặt phẳng dữ liệu của lưới dịch vụ.
Các proxy sử dụng thông tin cấu hình để quyết định cách xử lý các yêu cầu đến. Các proxy này cũng có thể nhận được các thay đổi cấu hình và điều chỉnh hành vi một cách linh hoạt. Bạn có thể thực hiện các thay đổi theo thời gian thực đối với cấu hình lưới dịch vụ mà không cần khởi động lại hoặc làm gián đoạn dịch vụ.
Quy trình triển khai lưới dịch vụ thường bao gồm các khả năng sau trong mặt phẳng điều khiển:
- Đăng ký dịch vụ, cho phép theo dõi tất cả các dịch vụ trong lưới
- Tự động khám phá các dịch vụ mới và loại bỏ các dịch vụ không hoạt động
- Thu thập và tổng hợp dữ liệu đo từ xa như chỉ số, bản ghi và thông tin truy dấu phân tán
Istio là gì?
Istio là một dự án lưới dịch vụ nguồn mở được thiết kế để hoạt động chủ yếu với Kubernetes. Kubernetes là một nền tảng điều phối bộ chứa nguồn mở được sử dụng để triển khai và quản lý các ứng dụng có trong bộ chứa trên quy mô lớn.
Các thành phần mặt phẳng điều khiển của Istio chạy dưới dạng khối lượng công việc Kubernetes. Istio sử dụng Kubernetes Pod — một tập hợp bộ chứa được liên kết phụ thuộc, dùng chung một địa chỉ IP — làm cơ sở cho thiết kế proxy sidecar.
Proxy lớp 7 của Istio chạy dưới dạng một bộ chứa khác trong cùng bối cảnh mạng với dịch vụ chính. Từ vị trí đó, nó có thể chặn, kiểm tra và điều chỉnh tất cả lưu lượng truy cập mạng đi qua Pod. Tuy nhiên, bộ chứa chính không cần thay đổi hay thậm chí không cần biết rằng điều này đang xảy ra.
Triển khai lưới dịch vụ nguồn mở có những thách thức nào?
Dưới đây là một số thách thức phổ biến của lưới dịch vụ liên quan đến các nền tảng nguồn mở như Istio, Linkerd và Consul.
Độ phức tạp
Lưới dịch vụ đưa vào các thành phần cơ sở hạ tầng, yêu cầu cấu hình và cân nhắc triển khai bổ sung. Lưới dịch vụ sẽ khó học, đòi hỏi các nhà phát triển và người vận hành phải có chuyên môn trong việc ứng dụng triển khai lưới dịch vụ cụ thể. Việc đào tạo các đội ngũ tiêu tốn thời gian và nguồn lực. Một tổ chức phải đảm bảo các đội ngũ có kiến thức cần thiết để hiểu được sự phức tạp của kiến trúc lưới dịch vụ và cấu hình lưới dịch vụ một cách hiệu quả.
Chi phí vận hành
Lưới dịch vụ phát sinh chi phí bổ sung để triển khai, quản lý và giám sát các proxy mặt phẳng dữ liệu và các thành phần của mặt phẳng điều khiển. Ví dụ: bạn phải thực hiện những việc sau:
- Đảm bảo độ sẵn sàng cao và khả năng điều chỉnh quy mô linh hoạt của cơ sở hạ tầng lưới dịch vụ
- Theo dõi tình trạng và hiệu năng của các proxy
- Xử lý việc nâng cấp và các vấn đề về tương thích
Bạn cần phải thiết kế và cấu hình lưới dịch vụ một cách cẩn thận nhằm giảm thiểu mọi tác động về hiệu năng lên hệ thống tổng thể.
Thách thức về tích hợp
Lưới dịch vụ phải tích hợp liền mạch với cơ sở hạ tầng hiện có để thực hiện các chức năng cần thiết. Điều này bao gồm các nền tảng điều phối bộ chứa, giải pháp kết nối mạng và các công cụ khác trong ngăn xếp công nghệ.
Việc đảm bảo khả năng tương thích và tích hợp trơn tru với các thành phần khác trong các môi trường phức tạp và đa dạng có thể là một thách thức. Bạn cần thực hiện lập kế hoạch và kiểm thử liên tục để thay đổi API, định dạng cấu hình và các thành phần phụ thuộc. Bạn cũng phải thực hiện việc tương tự nếu cần nâng cấp lên các phiên bản mới tại bất kỳ vị trí nào trong ngăn xếp.
AWS có thể hỗ trợ các yêu cầu của bạn về lưới dịch vụ như thế nào?
AWS App Mesh là một lưới dịch vụ được quản lý toàn phần và có độ sẵn sàng cao do Amazon Web Service (AWS) cung cấp. App Mesh giúp bạn dễ dàng theo dõi, kiểm soát và gỡ lỗi giao tiếp giữa các dịch vụ.
App Mesh sử dụng Envoy, một proxy lưới dịch vụ nguồn mở được triển khai cùng với các bộ chứa vi dịch vụ của bạn. Bạn có thể sử dụng App Mesh với các bộ chứa vi dịch vụ mà Dịch vụ bộ chứa linh hoạt của Amazon (Amazon ECS), Dịch vụ Kubernetes linh hoạt Amazon (Amazon EKS), AWS Fargate và Kubernetes trên AWS quản lý. Bạn cũng có thể sử dụng App Mesh với các dịch vụ trên Đám mây điện toán linh hoạt của Amazon (Amazon EC2).
Bắt đầu với lưới dịch vụ trên AWS bằng cách tạo tài khoản ngay hôm nay.