Microservices là gì?
Microservices đề cập đến một cách tiếp cận phát triển phần mềm hiện đại liên quan đến việc chia nhỏ một ứng dụng lớn thành các dịch vụ nhỏ hơn, độc lập, được kết hợp lỏng lẻo. Thay vì triển khai các ứng dụng như các hệ thống phần mềm nguyên khối truyền thống, các nhà cung cấp dịch vụ đám mây, bao gồm các công ty nổi tiếng như Amazon, eBay, Netflix và Twitter, đang ngày càng triển khai các ứng dụng của họ dưới dạng microservices thay vì thiết kế nguyên khối truyền thống.
Một số lợi ích của microservices bao gồm:
-
Khả năng mở rộng: Microservices cho phép khả năng mở rộng tốt hơn, vì các dịch vụ riêng lẻ có thể được mở rộng độc lập với nhau. Điều này có nghĩa là các nhà phát triển chỉ có thể tăng hoặc giảm quy mô các dịch vụ cần nó mà không ảnh hưởng đến phần còn lại của ứng dụng.
-
Tính linh hoạt: Microservices giúp thực hiện các thay đổi đối với hệ thống dễ dàng hơn vì các dịch vụ riêng lẻ có thể được cập nhật mà không ảnh hưởng đến toàn bộ ứng dụng. Điều này giúp dễ dàng áp dụng các công nghệ mới, thử nghiệm các ngôn ngữ lập trình khác nhau và thử nghiệm các tính năng mới.
-
Cách ly lỗi: Vì mỗi microservice là một thành phần độc lập, nếu một dịch vụ bị lỗi, nó không ảnh hưởng đến phần còn lại của ứng dụng. Điều này có nghĩa là các nhà phát triển có thể nhanh chóng xác định và khắc phục sự cố mà không ảnh hưởng đến toàn bộ hệ thống.
-
Cải thiện tốc độ phát triển: Microservices cho phép các nhóm phát triển nhỏ hơn, tập trung hơn làm việc độc lập trên các dịch vụ cụ thể. Điều này tăng tốc quá trình phát triển và giúp quản lý các hệ thống lớn, phức tạp dễ dàng hơn.
-
Khả năng chịu lỗi tốt hơn: Với microservice, việc xây dựng các hệ thống chịu lỗi dễ dàng hơn vì mỗi dịch vụ có thể được thiết kế để xử lý lỗi một cách độc lập. Điều này có nghĩa là toàn bộ hệ thống có khả năng phục hồi tốt hơn và ít có khả năng thất bại hơn.
-
Cải thiện thử nghiệm: Vì mỗi microservice là độc lập, nên việc kiểm tra các dịch vụ riêng lẻ sẽ dễ dàng hơn. Điều này có nghĩa là các nhà phát triển có thể kiểm tra các dịch vụ một cách cô lập, giúp tìm và sửa lỗi dễ dàng hơn.
Mặc dù các kiến trúc phần mềm dựa trên microservices mang lại những lợi ích quan trọng, nhưng chúng mang lại chi phí mạng đáng kể, do đó các tham số như độ trễ mạng có ảnh hưởng lớn đến hiệu suất ứng dụng tổng thể và chi phí trung tâm dữ liệu. Bằng cách tận dụng các Đơn vị xử lý cơ sở hạ tầng (IPU) Intel FPGA chạy phần mềm mặt phẳng dữ liệu ảo hóa từ Napatech, các nhà cung cấp dịch vụ có thể tối đa hóa hiệu suất của cơ sở hạ tầng mạng của họ, cho phép một mức hiệu suất không thể đạt được trong khi giảm thiểu CAPEX và OPEX trung tâm dữ liệu tổng thể của họ.
Những thách thức về mạng đối với Microservices
Trong kiến trúc microservices, độ trễ mạng là một thách thức đáng kể khi các dịch vụ ảo hóa được triển khai trong các container hoặc Máy ảo (VM) giao tiếp với nhau qua mạng ảo hóa. Ví dụ: các vi dịch vụ giao tiếp với nhau thường xuyên, điều này có thể dẫn đến một lượng lớn lưu lượng mạng. Lưu lượng mạng tăng lên này có thể dẫn đến tắc nghẽn mạng và tăng độ trễ, có thể tác động tiêu cực đến hiệu suất của hệ thống. Tương tự, trong kiến trúc microservices, các dịch vụ thường cần gọi các dịch vụ khác để hoàn thành một tác vụ và mỗi cuộc gọi mạng sẽ thêm độ trễ cho hệ thống. Khi số lượng dịch vụ và độ phức tạp của hệ thống tăng lên, số lượng cuộc gọi mạng cũng tăng lên, điều này có thể dẫn đến những thách thức về độ trễ đáng kể. Cuối cùng, các vi dịch vụ khác nhau có thể sử dụng các giao thức mạng khác nhau để liên lạc. Ví dụ: một dịch vụ có thể sử dụng REST (REpresentational State Transfer) trong khi một dịch vụ khác có thể sử dụng gRPC (Google Remote Procedure Call). Dịch giữa các giao thức mạng khác nhau có thể làm tăng thêm độ trễ cho hệ thống.
Theo truyền thống, một mặt phẳng dữ liệu ảo hóa được triển khai hoàn toàn trong phần mềm và nhiều chu kỳ tính toán của nó được sử dụng bằng cách chạy một bộ chuyển mạch ảo (vSwitch) định tuyến lưu lượng mạng giữa các máy ảo. Vì mỗi hoạt động vSwitch yêu cầu một số chu kỳ CPU đáng kể, kiến trúc này có thể đưa độ trễ không thể chấp nhận được vào hệ thống và cũng có thể ngăn hệ thống đạt được hiệu suất tổng thể hoặc thông lượng cần thiết. Đồng thời, một CPU được sử dụng nhiều để chạy mặt phẳng dữ liệu ảo sẽ có ít lõi hơn để chạy các ứng dụng và dịch vụ, tăng số lượng máy chủ cần thiết để hỗ trợ khối lượng công việc của trung tâm dữ liệu và tăng cả CAPEX và OPEX. Xem Hình 1.

Tận dụng kiến trúc dựa trên Intel® FPGA IPU
Kiến trúc cấp hệ thống hiệu quả và tiết kiệm chi phí hơn tận dụng Intel FPGA IPU để giảm tải vSwitch khỏi CPU máy chủ, giải phóng CPU máy chủ để chạy các ứng dụng và dịch vụ.
IPU, thay thế Thẻ giao diện mạng (NIC) tiêu chuẩn trong máy chủ trung tâm dữ liệu, triển khai vSwitch trong phần cứng, sử dụng FPGA có thể lập trình (Mảng cổng lập trình trường) để chạy mặt phẳng dữ liệu kết hợp với CPU đa năng chạy mặt phẳng điều khiển. vSwitch trình bày một API (Giao diện lập trình ứng dụng) tiêu chuẩn ngành cho các máy ảo, đảm bảo rằng không có thay đổi nào cần phải thực hiện đối với chính các máy ảo khi tận dụng kiến trúc này. Xem Hình 2.
Kiến trúc dựa trên IPU mang lại ba lợi ích chính cho một trung tâm dữ liệu chạy các ứng dụng dựa trên vi dịch vụ:
-
Độ trễ cực thấp, giảm thiểu lưu lượng chậm trễ giữa các vi dịch vụ;
-
Hiệu suất cao, giúp tối đa hóa thông lượng tổng thể của hệ thống và ứng dụng;
-
Sử dụng CPU máy chủ tối ưu mà không có lõi CPU máy chủ nào được tiêu thụ bởi mặt phẳng dữ liệu vSwitch, giúp giảm thiểu tổng số máy chủ cần thiết cho khối lượng công việc tổng thể, cũng giảm thiểu CAPEX và OPEX của trung tâm dữ liệu.

Phân tích MIT
Để định lượng lợi ích của việc giảm tải vSwitch trong các tình huống thực tế, Viện Công nghệ Massachusetts (MIT) đã phân tích hiệu suất của hai trường hợp sử dụng dựa trên microservices, so sánh kết quả từ việc sử dụng vSwitch dựa trên phần mềm truyền thống với kết quả thu được bằng cách sử dụng Intel IPU chạy phần mềm mặt phẳng dữ liệu ảo hóa từ Napatech, nhà cung cấp hàng đầu các giải pháp SmartNIC và IPU. Hai trường hợp sử dụng này là ứng dụng "pub-sub" đăng ký xuất bản sử dụng truyền thông điệp để truyền dữ liệu qua nhiều tầng và ứng dụng TCP ba tầng bao gồm máy chủ web, bộ nhớ đệm trong bộ nhớ và cơ sở dữ liệu phụ trợ. Kết quả của sáng kiến đo điểm chuẩn này được ghi lại trong bài báo "Điểm chuẩn Microservice trên IPU Intel chạy Phần mềm Napatech" do MIT xuất bản.
Phân tích hiệu suất ứng dụng Pub-Sub
Ứng dụng pub-sub, viết tắt của "publish-subscribe application", là một mẫu nhắn tin thường được sử dụng trong các hệ thống phân tán để tạo điều kiện thuận lợi cho việc giao tiếp và phối hợp giữa các thành phần hoặc dịch vụ khác nhau. Mô hình pub-sub cho phép giao tiếp không đồng bộ và tách rời, trong đó người gửi tin nhắn, được gọi là nhà xuất bản, không cần biết người nhận cụ thể, được gọi là người đăng ký. Ứng dụng Pub-sub được áp dụng cho các trường hợp sử dụng như:
-
Hệ thống đặt chỗ ngồi tạo sơ đồ tầng, chỉ định chỗ ngồi cho nó và sau đó quản lý các sự kiện đặt chỗ ngồi trực tiếp. Khi khách hàng mua vé, hệ thống pub-sub cập nhật sơ đồ tầng ở mọi nơi trong thời gian thực và giữ cho hệ thống bộ nhớ cache phân tán được đồng bộ. Khách hàng không bao giờ yêu cầu một chỗ ngồi chỉ để tìm ra ai đó đã mua nó trong khi họ vẫn đang trong giai đoạn duyệt / mua sắm.
-
Các công cụ giáo dục cho phép sinh viên tham gia vào lớp học thông qua ứng dụng dựa trên web, nơi khách hàng thường gặp phải các sự cố như WiFi không đáng tin cậy hoặc mạng di động không thể đoán trước. Hệ thống pub-sub khôi phục kết nối của họ khi họ tham gia lại mạng và có thể xử lý những thay đổi nhanh chóng về số lượng người tham gia trực tuyến.
-
Các ứng dụng tài chính như phân phối dữ liệu thị trường bao gồm giá cổ phiếu, chỉ số thị trường, dữ liệu thương mại và cập nhật sổ đặt hàng cho người đăng ký trong một tổ chức.
-
Các hệ thống Internet of Things (IoT),nơi pub-sub tạo điều kiện giao tiếp giữa nhiều thiết bị IoT và cho phép phổ biến dữ liệu hiệu quả. Cảm biến xuất bản dữ liệu, sau đó người đăng ký có thể nhận và xử lý dữ liệu đó trong thời gian thực.
Đối với phân tích này, MIT đã đánh giá cấu trúc liên kết chuỗi năm tầng được phát triển với mô hình giao tiếp pub-sub từ Dapr, đây là thời gian chạy di động, theo sự kiện cho phép các nhà phát triển xây dựng các ứng dụng linh hoạt, không trạng thái và trạng thái chạy cả trên đám mây và biên, đồng thời hỗ trợ đa dạng ngôn ngữ và khung nhà phát triển. Mỗi tầng thực hiện tính toán chuyên sâu CPU trong một khoảng thời gian do người dùng chỉ định, trước khi truyền phát đầu ra của nó đến tầng hạ lưu. Xem Hình 3.
Trong ứng dụng pub-sub năm tầng, việc bố trí các dịch vụ trên hai máy chủ hỗ trợ OVS đảm bảo rằng các dịch vụ phụ thuộc đang chạy trên các máy vật lý khác nhau, để tất cả lưu lượng giữa các tầng đều đi qua IPU, khi được bật.

MIT đã phân tích hiệu suất của hệ thống pub-sub cả khi có và không có giảm tải dựa trên IPU, đo độ trễ nhắn tin trên các tải khác nhau được biểu thị dưới dạng hàng nghìn truy vấn mỗi giây (kQPS). Xem Hình 4.

Khi giảm tải bị vô hiệu hóa và xem xét độ trễ đuôi (tức là trường hợp xấu nhất), ứng dụng bắt đầu bão hòa ở 90kQPS, như được biểu thị bằng điểm uốn trong biểu đồ. Ngoài mức tải đó, hệ thống không còn có thể theo kịp các yêu cầu một cách hiệu quả, rất có thể là do sự sụt giảm gói dẫn đến việc truyền lại TCP. Tuy nhiên, khi giảm tải được bật, hệ thống vẫn theo kịp các yêu cầu ở mức tải 140kQPS, tốc độ tối đa được sử dụng trong thử nghiệm này, cho thấy IPU cho phép tăng 50% thông lượng trong khi vẫn duy trì độ trễ đuôi chấp nhận được. Điều này thể hiện sự cải thiện đáng kể về dung lượng hệ thống, giúp tiết kiệm 30-40% trong cả tổng chi phí máy chủ và mức tiêu thụ năng lượng.
Phân tích hiệu suất ứng dụng TCP ba tầng
Ứng dụng TCP (Giao thức điều khiển truyền) ba tầng đề cập đến một thiết kế kiến trúc phần mềm chia ứng dụng thành ba lớp hoặc tầng logic, mỗi lớp chịu trách nhiệm cho các chức năng cụ thể. Các bậc này thường được gọi là bậc thuyết trình, bậc ứng dụng và bậc dữ liệu. Giao thức TCP được sử dụng để giao tiếp giữa các tầng sau:
-
Presentation Tier: Còn được gọi là tầng giao diện người dùng (UI), lớp này có nhiệm vụ trình bày thông tin của ứng dụng cho người dùng và nhận đầu vào của họ. Nó xử lý các thành phần giao diện người dùng đồ họa (GUI), chẳng hạn như các trang web, biểu mẫu hoặc giao diện máy tính để bàn. Bậc thuyết trình giao tiếp với tầng ứng dụng để truy xuất hoặc cập nhật dữ liệu khi cần thiết.
-
Application Tier: Bậc ứng dụng chứa logic nghiệp vụ và logic xử lý của ứng dụng. Nó xử lý chức năng cốt lõi và thực hiện các tác vụ như xác thực dữ liệu, thực thi quy tắc kinh doanh và các hoạt động dành riêng cho ứng dụng. Bậc này xử lý các yêu cầu từ bậc thuyết trình và giao tiếp với bậc dữ liệu để truy xuất hoặc lưu trữ dữ liệu.
-
Bậc dữ liệu: Tầng dữ liệu, còn được gọi là lớp truy cập dữ liệu hoặc tầng cơ sở dữ liệu, chịu trách nhiệm quản lý việc lưu trữ và truy xuất dữ liệu. Nó xử lý các tương tác với các hệ thống cơ sở dữ liệu, chẳng hạn như truy vấn và cập nhật dữ liệu. Bậc dữ liệu nhận yêu cầu từ tầng ứng dụng và trả về dữ liệu được yêu cầu hoặc thực hiện các sửa đổi dữ liệu cần thiết.
Trong ứng dụng TCP ba tầng, giao tiếp giữa các tầng này được tạo điều kiện bằng giao thức TCP. TCP đảm bảo phân phối dữ liệu đáng tin cậy và có trật tự giữa các tầng, cung cấp cơ chế giao tiếp dựa trên kết nối và luồng. Bằng cách tách ứng dụng thành ba tầng này, kiến trúc TCP ba tầng cho phép tính mô-đun, khả năng mở rộng và bảo trì ứng dụng dễ dàng hơn. Mỗi tầng có thể được phát triển và mở rộng một cách độc lập, tạo điều kiện cho tính linh hoạt và khả năng tái sử dụng của các thành phần.
Đối với phân tích này, MIT đã đánh giá một ứng dụng ba tầng với NGINX là máy chủ web front-end, Memcached là tầng bộ nhớ đệm trong bộ nhớ và MongoDB là cơ sở dữ liệu back-end với lưu trữ liên tục. Máy khách tương tác với NGINX, kiểm tra xem cặp khóa-giá trị có được lưu trong bộ nhớ cache trong Memcached hay không và nếu có, trả về giá trị cho máy khách. Nếu không, NGINX giao tiếp với MongoDB để tìm nạp đầu ra và lưu thêm bộ nhớ cache trong Memcached. Xem Hình 5.

MIT đã phân tích hiệu suất của ứng dụng TCP ba tầng cả khi có và không có giảm tải dựa trên IPU, đo độ trễ nhắn tin trên các tải khác nhau, như trong ví dụ trước, được biểu thị bằng hàng nghìn truy vấn mỗi giây (kQPS). Xem Hình 6.

Khi giảm tải bị tắt và xem xét độ trễ đuôi (tức là trường hợp xấu nhất), ứng dụng bắt đầu bão hòa ở khoảng 17kQPS, như được biểu thị bằng điểm uốn trong biểu đồ. Ngoài mức tải đó, hệ thống không còn có thể theo kịp các yêu cầu một cách hiệu quả, rất có thể là do sự sụt giảm gói dẫn đến việc truyền lại TCP. Tuy nhiên, khi giảm tải được bật, độ bão hòa không bắt đầu cho đến khi tải 26kQPS, cho thấy IPU cho phép tăng 53% thông lượng trong khi vẫn duy trì độ trễ đuôi chấp nhận được. Giống như ví dụ trước, điều này thể hiện sự cải thiện đáng kể về dung lượng hệ thống, dẫn đến tiết kiệm 30-40% trong cả tổng chi phí máy chủ và tiêu thụ năng lượng.
Cấu hình hệ thống
Cấu hình hệ thống được MIT sử dụng để đo điểm chuẩn microservices như sau:
- Hai máy chủ ổ cắm kép Inspur, mỗi máy chủ có Bộ xử lý Intel® Xeon® Gold 6338 với bộ nhớ đệm 48MB, chạy ở tốc độ 2,0 GHz với tốc độ turbo 3,2 GHz. Mỗi máy chủ được cấu hình với bộ nhớ 512GB, ổ khởi động 480GB, mô-đun lưu trữ kép P6410 NVMe 1,6TB và một mô-đun 10G bộ điều khiển Intel® Ethernet XL710 NIC.
- Ngoài NIC tiêu chuẩn, mỗi máy chủ được cấu hình với một bộ điều hợp Intel IPU C5000X với cổng SFP28 10/25G kép và giao diện máy chủ PCIe 3.0, dựa trên FPGA Intel® Stratix® và Hệ thống trên chip (SoC) Intel® Xeon® D. Xem Hình 7.
- Mỗi IPU đang chạy phần mềm Link-Virtualization 4.3.3 từ Napatech, cung cấp một mặt phẳng dữ liệu ảo hóa được giảm tải và tăng tốc bao gồm các chức năng như Open vSwitch (OVS), hỗ trợ VirtIO, di chuyển trực tiếp, phản chiếu VM-to-VM, đóng gói / giải mã VLAN / VxLAN, Q-in-Q, cân bằng tải RSS, tổng hợp liên kết và Chất lượng dịch vụ (QoS).
