Thử nghiệm: Apache ShenYu

ShenYu là một API gateway mới nằm trong hệ sinh thái mã nguồn mở của Apache, được thiết kế tốt với nhiều tính năng thiết thực, có thể phục vụ tốt việc làm API gateway trong các dự án Microservices. Bài viết này sẽ giới thiệu và thử nghiệm chức năng cơ bản của ShenYu.

Upload image

Khi thiết kế hệ thống theo kiến trúc Microservices, API gateway là một thành phần cực kỳ quan trọng. API gateway đóng vai trò như một cổng trung gian duy nhất để đáp ứng các yêu cầu từ người dùng. Ngoài ra, API gateway còn có thể bao gồm nhiều chức năng nâng cao khác như cân bằng tải (load balancing), xác thực (authentication), giới hạn lưu lượng (rate limiting), chuyển mã (request conversion), theo dõi lưu lượng hệ thống theo thời gian thực (real-time traffic analytics)...

Hiện tại có khá nhiều API gateway như Kong, Apigee, KrakenD... Bài viết này mình sẽ giới thiệu về ShenYu - một API gateway mới nằm trong hệ sinh thái mã nguồn mở của Apache.

Về ShenYu gateway

Theo thông báo chính thức từ Apache vào ngày 28/7/2022, ShenYu là dự án mới nhất vừa đạt tiêu chuẩn tốt nghiệp và trở thành dự án cấp cao nhất của Apache.

Về ý nghĩa, ShenYu (tiếng Việt là Xi Vưu) là tên một vị thần thời thượng cổ trong văn hoá của Trung Hoa, cùng thời kỳ với Viêm Đế, Hoàng Đế.

Các chức năng đáng chú ý của ShenYu bao gồm:

  • Hỗ trợ khá nhiều giao thức giao tiếp phổ biến như: Spring Cloud, gRPC, WebSocket, MQTT, Apache® Dubbo™, Motan, SOFA, TARS...
  • Hỗ trợ các cơ chế bảo mật như: Sign, OAuth 2.0, JWT, WAF...
  • Cho phép thay nóng các phần mở rộng
  • Cho phép quản lý API tập trung trên trang quản trị
  • Cho phép chuyển đổi giao thức (conversion)
  • Cho phép theo dõi lưu lượng theo thời gian thực
  • Cho phép kết hợp máy chủ (clustering) sử dụng ETCD hoặc ZooKeeper
  • Hỗ trợ các ngôn ngữ phổ biến như: .NET, Python, Go, Java...

Hiện tại, phiên bản mới nhất của ShenYu là 2.5.0

Thử nghiệm nhanh với ShenYu

Cài đặt

ShenYu được viết bằng Java nên khi chạy sẽ yêu cầu có JDK 1.8. Ngoài ra, ShenYu cũng hỗ trợ ảnh Docker được cài sẵn. Trong phần thử nghiệm này, ta sẽ sử dụng Docker để thiết lập nhanh ShenYu. Nếu các bạn đã quen thuộc với Java thì có thể trực tiếp sử dụng mã nguồn và khởi động bằng Maven.

Đầu tiên, khởi động phần quản trị cho ShenYu:

docker pull apache/shenyu-admin
docker network create shenyu
docker run -d -p 9095:9095 --net shenyu apache/shenyu-admin

Sau đó, khởi động phần bootstrap cho ShenYu:

docker pull apache/shenyu-bootstrap
docker run -d -p 9195:9195 --net shenyu apache/shenyu-bootstrap

Sau khi khởi động thành công thì ta có thể vào trang admin của ShenYu tại địa chỉ localhost:9095 với tài khoản mặc định admin/123456.

Upload image

Tại đây, ta có thể thấy danh sách các plugin đã được nạp sẵn như Mock, Cache, Proxy, Logging, ...

Upload image

Thử nghiệm chức năng proxy với phần mở rộng divide

Phần tiếp theo ta sẽ sử dụng plugin Divide để tạo một http proxy đơn giản.

Trước tiên, ta tạo một mock service bằng Postman hoặc một web server bất kỳ:

Upload image

Kiểm tra lại mock bằng Postman:

Upload image

Sau đó, ta vào trang quản trị, đến phần PluginList >>> Divide và tạo thêm một Selector như sau:

Upload image

Tiếp theo ta tạo một Rule:

Upload image

Sau đó ta có thể kiểm tra lại tại địa chỉ localhost:9195/helloworld:

Upload image

Như vậy, ta đã cấu hình xong một máy chủ proxy với ShenYu. Nếu các bạn quan tâm có thể tìm hiểu thêm ShenYu từ các nguồn sau:

Kết luận

Như vậy chúng ta đã tìm hiểu nhanh về ShenYu - một API gateway mới nhất trong cộng đồng mã nguồn mở Apache. ShenYu là một dự án điển hình của Apache khi được thiết kế tốt và có rất nhiều tính năng thiết thực. Tuy nhiên phần tài liệu của dự án khá kém, nhiều phần bị sai hoặc chưa được cập nhật, dẫn đến quá trình tìm hiểu gặp nhiều khó khăn.

Nếu bạn không ngại việc tự đọc mã nguồn thì ShenYu là một dự án có nhiều tiềm năng, có thể phục vụ tốt cho việc làm API gateway trong các dự án Microservices.

Atekco - Home for Authentic Technical Consultants