Hãy xem các nguyên tắc phối hợp giữa các thành phần Nacos, OpenFeign, Ribbon và Loadbalancer
In lạiTác giả: Tôi là chú chim nhỏThời gian cập nhật: 2023-04-11 14:31:32284
Xin chào mọi người, tôi là Sanyou~~.
Cách đây vài ngày có một anh lớn đã hỏi mình một câu hỏi Nếu trung tâm đăng ký cần tích hợp Spring Cloud thì cần triển khai những giao diện và thông số kỹ thuật nào để đạt được cân bằng tải Spring Cloud.
Vì anh này hỏi tôi và tình cờ biết nên tôi phải viết bài để trả lời câu hỏi này, mặc dù tôi đã trả lời trong cuộc trò chuyện tiếp theo.
Tiếp theo, bài viết này sẽ tìm hiểu các nguyên tắc phối hợp của Nacos, OpenFeign, Ribbon, bộ cân bằng tải và các thành phần khác, đồng thời nói về những giao diện nào nên được triển khai.
Một điều nữa là bài viết này không đưa ra những phân tích chi tiết và chuyên sâu về mã nguồn của từng thành phần. Nếu quan tâm, bạn có thể xem các bài viết trước đây của tôi về Nacos, OpenFeign, Article on Ribbon phân tích mã nguồn.
Nacos
Hãy bắt đầu với Nacos.
Nacos là gì? Có một đoạn như vậy trên trang web chính thức.
Điểm dễ hiểu của đoạn này là Nacos là trung tâm đăng ký và trung tâm cấu hình! .
Ở Nacos, có khái niệm về máy khách và máy chủ.
Máy chủ cần được triển khai riêng để lưu dữ liệu phiên bản dịch vụ.
Máy khách là SDK được sử dụng để liên lạc với máy chủ và hỗ trợ các ngôn ngữ khác nhau.
Khi cần đăng ký với máy chủ Nacos hoặc lấy dữ liệu phiên bản dịch vụ, bạn chỉ cần sử dụng SDK khách do Nacos cung cấp, như sau:
Giới thiệu sự phụ thuộc.
< sự phụ thuộc > < nhómId >
com.alibaba.nacos
nhómId > < hiện vậtId >
nacos-khách hàng
hiện vậtId > < phiên bản >
1.4.4
phiên bản > sự phụ thuộc >
Mã mẫu.
Thuộc tính thuộc tính =
mới
Của cải();
thuộc tính.setProperty(
"máy chủAddr"
,
"máy chủ cục bộ"
);
thuộc tính.setProperty(
"không gian tên"
,
"8848"
);
NamingService đặt tên = NamingFactory.createNamingService(thuộc tính);
// Đăng ký dịch vụ, đăng ký dịch vụ đặt hàng, IP của dịch vụ đặt hàng là 192.168.2.100, port 8080
đặt tên.registerInstance(
"đặt hàng"
,
"192.168.2.100"
,
8080
);
// Khám phá dịch vụ, lấy tất cả các phiên bản dịch vụ đặt hàng
Danh sách instanceList = naming.selectInstances(
"đặt hàng"
,
ĐÚNG VẬY
);
Khi một dịch vụ được đăng ký vào máy chủ Nacos, sẽ có một bộ sưu tập bên trong máy chủ để lưu trữ thông tin dịch vụ.
Bộ sưu tập này có một cái tên nổi tiếng trong thế giới đăng ký, Service Register.
Làm thế nào để thực hiện đăng ký dịch vụ tự động?
Những bạn đã sử dụng SpringCloud chắc hẳn biết rằng dịch vụ có thể được đăng ký tự động vào trung tâm đăng ký dịch vụ khi dự án bắt đầu mà không cần phải viết mã thủ công như trên.
Dịch vụ đăng ký tự động Sanbanaxe
Bản thân SpringCloud cung cấp một bộ cơ chế để đăng ký dịch vụ tự động hoặc các ràng buộc, thực chất là ba giao diện. Miễn là trung tâm đăng ký triển khai các giao diện này, nó có thể tự động đăng ký vào trung tâm đăng ký khi dịch vụ khởi động. dịch vụ tự động đăng ký Sanbanaxe.
Đóng gói dữ liệu phiên bản dịch vụ--Đăng ký
Đăng ký là giao diện do SpringCloud cung cấp và kế thừa giao diện ServiceInstance.
Sự đăng ký
Dịch vụ
Có thể thấy từ định nghĩa giao diện của ServiceInstance rằng đây là sự đóng gói dữ liệu phiên bản dịch vụ, chẳng hạn như địa chỉ IP và số cổng của dịch vụ này là gì.
Do đó, Đăng ký là việc đóng gói dữ liệu phiên bản dịch vụ hiện tại, đóng gói các thông tin như IP máy và số cổng của dịch vụ hiện tại.
Vì Nacos muốn tích hợp Spring Cloud nên nó triển khai giao diện này một cách tự nhiên.
Đăng ký Nacos
Bằng cách này, thông tin về dịch vụ hiện tại cần được đăng ký tại trung tâm đăng ký sẽ được gói gọn.
Đăng ký dịch vụ--ServiceRegistry
ServiceRegistry cũng là một giao diện và generics là các giao diện đóng gói dữ liệu phiên bản dịch vụ được đề cập ở trên.
Dịch vụRegistry
Chức năng của giao diện này là đăng ký dữ liệu Đăng ký dịch vụ hiện tại được gói gọn ở trên vào trung tâm đăng ký thông qua phương thức đăng ký.
Nacos cũng thực hiện giao diện này.
Dịch vụ NacosRegistry
Và mã triển khai của phương thức đăng ký cốt lõi gần giống như bản demo trước đó.
Đăng ký dịch vụ tự động--AutoServiceRegistration
Đăng ký dịch vụ tự động
AutoServiceRegistration là một giao diện đánh dấu nên nó không có ý nghĩa thực tế. Nó chỉ thể hiện ý nghĩa của việc đăng ký tự động.
AutoServiceRegistration có triển khai trừu tượng Tóm tắtAutoServiceRegistration.
Tóm tắtAutoServiceRegistration là một lớp trừu tượng
Tóm tắtAutoServiceRegistration triển khai ApplicationListener và lắng nghe sự kiện WebServerInitializedEvent.
Sự kiện WebServerInitializedEvent được SpringBoot phát hành khi dự án được bắt đầu, sau khi các dịch vụ Web như tomcat được khởi động. Lưu ý rằng sự kiện này chỉ được phát hành trong môi trường Web.
ServletWebServerInitializedEvent là gì?
Vì vậy, khi dự án SpringBoot được khởi động và tomcat cũng như các máy chủ web khác được khởi động thành công, việc thực thi trình nghe Tóm tắtAutoServiceRegistration sẽ được kích hoạt.
Cuối cùng, ServiceRegistry sẽ được gọi để đăng ký Đăng ký để thực hiện đăng ký dịch vụ tự động.
Nacos đương nhiên kế thừa Tóm tắtAutoServiceRegistration.
NacosAutoServiceĐăng ký
Đối với Nacos, thông tin IP và cổng đăng ký dịch vụ hiện tại được đăng ký tại trung tâm đăng ký dịch vụ Nacos.
Vì vậy, toàn bộ quá trình đăng ký có thể được tóm tắt trong hình ảnh này.
Tất nhiên, không chỉ Nacos thực hiện điều này. Các trung tâm đăng ký phổ biến như Eureka và Zookeeper thực hiện ba điều trên khi tích hợp Spring Cloud.
Ruy-băng
Sau khi nói về cách tự động đăng ký dịch vụ vào trung tâm đăng ký trong môi trường Spring Cloud, hãy nói về Ribbon.
Chúng ta đều biết rằng Ribbon là thành phần cân bằng tải và vai trò của nó là chọn một phiên bản dịch vụ từ nhiều phiên bản dịch vụ dựa trên một thuật toán nhất định.
Nhưng tôi có một câu hỏi. Dữ liệu của các phiên bản dịch vụ đều có trong trung tâm đăng ký. ? ?
Câu trả lời thực ra rất đơn giản, đó là trung tâm đăng ký cần chủ động thích ứng với Ribbon. Chỉ cần trung tâm đăng ký thích ứng với Ribbon thì Ribbon sẽ tự nhiên biết dữ liệu của phiên bản dịch vụ.
Ribbon cung cấp một giao diện để lấy các phiên bản dịch vụ, được gọi là ServerList.
Danh sách máy chủ
Giao diện cung cấp hai phương thức, thực tế là giống nhau trong nhiều cách triển khai và không có sự khác biệt.
Sau khi Ribbon lấy được dữ liệu phiên bản dịch vụ thông qua ServerList, nó sẽ thực hiện cân bằng tải dựa trên dữ liệu này.
Nacos đương nhiên cũng triển khai giao diện ServerList để cung cấp cho Ribbon dữ liệu dịch vụ trong trung tâm đăng ký Nacos.
Danh sách máy chủ Nacos
Bằng cách này, Ribbon có thể lấy được dữ liệu của trung tâm đăng ký dịch vụ Nacos.
Tương tự, ngoài Nacos, các trung tâm đăng ký như Eureka, Zookeeper cũng triển khai giao diện này.
Tại thời điểm này, bạn thực sự hiểu làm thế nào Ribbon biết dữ liệu của trung tâm đăng ký và nó cần trung tâm đăng ký thích ứng.
Đây là ý kiến cá nhân của tôi Trên thực tế, tôi nghĩ Ribbon không gói gọn sự hỗ trợ để có được các phiên bản dịch vụ khi thích ứng với Spring Cloud.
Vì bản thân SpringCloud là một tập hợp các ràng buộc và thông số kỹ thuật, miễn là tuân theo bộ thông số kỹ thuật này thì mỗi thành phần đều có thể được thay thế. Đây là lý do tại sao việc thay đổi trung tâm đăng ký chỉ yêu cầu thay đổi các phần phụ thuộc và thay đổi tệp cấu hình.
Bản thân Ribbon là một thành phần cân bằng tải cụ thể nếu trung tâm đăng ký muốn tích hợp Spring Cloud thì nó phải thích ứng riêng với Ribbon, điều này phần nào vi phạm ý nghĩa của các ràng buộc của Spring Cloud.
Cũng giống như mybatis, mybatis dựa vào jdbc, nhưng mybatis hoàn toàn không quan tâm đến cơ sở dữ liệu nào triển khai jdbc.
Một cách tiếp cận thực sự tốt là sử dụng API do Spring Cloud cung cấp để có được các phiên bản dịch vụ khi Ribbon thích ứng với Spring Cloud. Bằng cách này, các trung tâm đăng ký khác nhau chỉ cần thích ứng với API này và không cần điều chỉnh riêng Ribbon.
SpringCloud thực sự cung cấp một API như vậy để lấy các phiên bản dịch vụ, DiscoveryClient.
Khám pháKhách hàng
Các phiên bản dịch vụ có thể được lấy thông qua DiscoveryClient, tất nhiên điều này cũng yêu cầu các trung tâm đăng ký khác nhau điều chỉnh.
Sau khi Ribbon và các thành phần khác ngừng bảo trì, các quan chức của SpringCloud cũng đã phát triển bộ cân bằng tải thành phần cân bằng tải để thay thế Ribbon.
< sự phụ thuộc > < nhómId >
org.springframework.cloud
nhómId > < hiện vậtId >
spring-cloud-starter-loadbalancer
hiện vậtId > < phiên bản >
2.2.5.PHÁT HÀNH
phiên bản > sự phụ thuộc >
Lớp dưới cùng của thành phần này sử dụng DiscoveryClient khi lấy phiên bản dịch vụ.
Vì vậy, đối với gói cân bằng tải Loadbalancer, trung tâm đăng ký chỉ cần triển khai DiscoveryClient và sau đó nó sẽ tự động thích ứng với Loadbalancer.
mởgiả vờ
OpenFeign là một RPC framework Khi cần gọi một dịch vụ từ xa, chúng ta chỉ cần khai báo một giao diện để gọi nó từ xa, như minh họa bên dưới.
Nghe có vẻ đáng kinh ngạc nhưng trên thực tế, về cơ bản, nó tạo ra một đối tượng proxy động cho giao diện và phân tích các chú thích trên lớp và phương thức.
Khi phương thức được gọi, một địa chỉ yêu cầu http sẽ được ghép theo các tham số phía trên phương thức. Định dạng của địa chỉ này là http://service name/interface path.
Ví dụ, trong ví dụ trên, khi phương thức saveOrder được gọi, địa chỉ được đánh vần theo quy tắc này là http://order/order. Thứ tự đầu tiên là tên dịch vụ và thứ tự thứ hai là chú thích PostMapping.
Nhưng do chúng ta chỉ biết tên dịch vụ cần gọi mà không biết IP và port của dịch vụ nên vẫn không thể gọi được dịch vụ từ xa. Chúng ta phải làm sao?
Lúc này đến lượt Ribbon xuất hiện, vì Ribbon, người anh lớn, đã biết dữ liệu của instance dịch vụ.
Vì vậy, OpenFeign đã nói với Ribbon, anh ơi, anh có thể lấy tất cả dữ liệu phiên bản dịch vụ của dịch vụ đặt hàng từ trung tâm đăng ký không? Hãy giúp tôi tìm một trong những dữ liệu phiên bản dịch vụ này cho tôi.
Vì vậy Ribbon sẽ chọn một phiên bản dịch vụ từ các phiên bản dịch vụ lấy được từ trung tâm đăng ký theo chính sách cân bằng tải và trả về OpenFeign.
OpenFeign lấy phiên bản dịch vụ và bây giờ lấy ip và cổng nơi đặt dịch vụ. Sau đó, nó sẽ xây dựng lại đường dẫn yêu cầu và thay thế tên dịch vụ trong đường dẫn bằng ip và cổng.
tái tạoURIVớiMáy chủ
Máy chủ là sự đóng gói thông tin phiên bản dịch vụ
gốc là url gốc, như đã đề cập ở trên,
http://đặt hàng/đặt hàng
Giả sử rằng IP và cổng của dịch vụ orde thu được lần lượt là 192.168.2.100 và 8080. Đường dẫn được xây dựng lại cuối cùng là http://192.168.2.100:8080/order.
Đối với bộ cân bằng tải được đề cập trước đó, nó thực sự giống nhau. Nó cũng sẽ chọn một phiên bản dịch vụ từ các phiên bản dịch vụ mà DiscoveryClient thu được sang OpenFeign theo thuật toán cân bằng tải. Sau đó, nó cũng sẽ xây dựng lại url dựa trên phiên bản dịch vụ đó. sau đó gửi yêu cầu http.
mã url tái cấu trúc thành phần cân bằng tải
Tóm tắt
Tại thời điểm này, chúng tôi đã giải thích xong các nguyên tắc phối hợp của Nacos, OpenFeign, Ribbon, bộ cân bằng tải và các thành phần khác. Trên thực tế, mỗi thành phần sẽ dành riêng một số giao diện mở rộng. Đây cũng là điều mà nhiều khung nguồn mở thực hiện và chúng được điều chỉnh. bởi các khuôn khổ của bên thứ ba, chỉ cần triển khai các giao diện này.
Cuối cùng vẽ hình tóm tắt nguyên lý hoạt động của nhóm giá trên.
Cuối cùng, tôi muốn nói rằng có thể xem các bài viết về phân tích mã nguồn Nacos, OpenFeign và Ribbon từ danh mục bài viết trong thanh menu phụ trợ nhật ký java của tài khoản công khai WeChat Sanyou.
Các bài viết phổ biến được đề xuất từ các số trước
7 lý do để sử dụng RocketMQ nhiều lần
Cách đọc mã nguồn, tôi đã tổng hợp 18 mẹo.
Làm thế nào để thực hiện các nhiệm vụ bị trì hoãn, tôi đã tổng hợp 11 phương pháp.
Cách viết code đẹp, tôi đã tổng hợp được 45 mẹo.
Ba mươi nghìn từ để nắm bắt các điểm mở rộng chung của Spring/Boot.
Một bài đánh giá dài 20.000 từ về các mẫu thiết kế đã bị chơi xấu.
Quét mã QR hoặc tìm kiếm và theo dõi nhật ký java của tài khoản chính thức Sanyou để có được thông tin kịp thời. Tài khoản chính thức cam kết giải thích công nghệ thông qua hình vẽ và ngôn ngữ dễ hiểu, giúp bạn dễ dàng tìm hiểu công nghệ hơn. câu hỏi phỏng vấn thực tế bằng cách trả lời cuộc phỏng vấn.
Cuối cùng, bài viết này về nguyên tắc phối hợp của các thành phần Nacos, OpenFeign, Ribbon và Loadbalancer kết thúc tại đây. Nếu bạn muốn biết thêm về nguyên tắc phối hợp của các thành phần Nacos, OpenFeign, Ribbon và Loadbalancer, vui lòng xem nội dung bài viết này. tìm kiếm các bài viết của CFSDN hoặc tiếp tục duyệt các bài viết liên quan. Tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .
1. Giới thiệu Sau khi hiểu rõ các tính năng của r-nacos, nhiều sinh viên ban đầu chỉ sử dụng r-nacos cho môi trường phát triển và thử nghiệm. Sau một thời gian sử dụng, một số sinh viên có ý định chuyển môi trường sản xuất từ nacos sang r-nacos. Một số server nacos đã qua sử dụng trước đây
Việc học không nhất thiết phải quá tiện dụng, Brother 2 sẽ giúp bạn dễ dàng đọc mã nguồn từ một chiều không gian cao hơn~ Trong bài viết trước, chúng tôi đã phân tích quy trình cốt lõi của việc đăng ký máy khách Nacos: máy khách Nacos lấy danh sách phiên bản từ quá trình đăng ký trung tâm cứ sau 6 giây thông qua một tác vụ đã lên lịch. Khi tìm thấy các thay đổi đối với phiên bản,
Để triển khai Nacos, tôi sử dụng triển khai docker (chế độ độc lập Mysql), tài liệu trang web chính thức: https://nacos.io/zh-cn/docs/quick-start-docker.html Kéo mã
Nội dung Lời nói đầu Công việc chuẩn bị Cài đặt Nacos và giới thiệu sử dụng Chuẩn bị 3 dịch vụ SpringBoot, giới thiệu Nacos và Kafka Business Diễn giải
Nội dung tiên quyết 1. Giới thiệu về SpringCloud Alibaba và Nacos [Trung tâm đăng ký] 1. Nacos (Phần 2) 1.1 Trình diễn cấu hình cơ bản của Trung tâm cấu hình dịch vụ 1. Tạo mô-đun được đặt tên là clo.
Lời nói đầu: Chúng tôi thường tích hợp swagger để tích hợp các tài liệu giao diện trong các dự án springboot đơn lẻ; tuy nhiên, trong dự án microservice springcloud, có nhiều mô-đun nghiệp vụ nếu chúng tôi truy cập swagger-ui của từng mô-đun riêng biệt như trước.
Trước đó chúng ta đã phân tích Apollo của Ctrip (xem giải thích chi tiết về thiết kế và công dụng của Apollo), bây giờ chúng ta hãy xem nacos của Alibaba. Giống như apollo, nacos cũng là một trung tâm cấu hình, cũng có thể thực hiện quản lý tập trung cấu hình và quản lý môi trường, nghĩa là
Theo mặc định, bạn đã xem các hướng dẫn trước đây của tôi và đã hoàn thành dự án trong hướng dẫn trước đó. Hướng dẫn trước https://www.cnblogs.com/leafstar/p/17638782.html. Liên kết dự án
Bài viết này được in lại từ tài khoản công khai WeChat "Cộng đồng người Trung Quốc Java", do Anh Lei viết. Để in lại bài viết này, vui lòng liên hệ với tài khoản chính thức của cộng đồng Java Trung Quốc. Trong Nacos, các cuộc gọi dịch vụ chủ yếu được thực hiện thông qua RestTemplate + RestT.
Nội dung Lời nói đầu 1. Chuẩn bị môi trường Nacos 1. Khởi động trung tâm cấu hình Nacos và tạo cấu hình định tuyến 2. Kết nối với trung tâm cấu hình Nacos 2. Project
Trước tiên hãy tải xuống gói nén nacos từ github: https://github.com/alibaba/nacos/releases. Sau khi quá trình tải xuống hoàn tất, hãy chuyển tệp đến máy chủ linux thông qua WinSCP và tiếp tục.
1. Giới thiệu Seata là giải pháp giao dịch phân tán nguồn mở chuyên cung cấp các dịch vụ giao dịch phân tán hiệu suất cao và dễ sử dụng theo kiến trúc microservice. Vào tháng 1 năm 2019, nhóm phần mềm trung gian của Alibaba đã khởi động dự án nguồn mở Fescar (Fast
Lời nói đầu thực sự tương đương với eureka và config (hoặc Apollo) được sử dụng trước đó. Bài viết này cung cấp cho người mới bắt đầu sử dụng nacos một cách nhanh nhất và dễ dàng nhất. Văn bản 1. Đầu tiên, ở tốc độ nhanh nhất, cục bộ (môi trường windows),
Ý tưởng của Sentinel là các nhà phát triển chỉ cần tập trung vào việc xác định tài nguyên. Khi tài nguyên được xác định thành công, các quy tắc hạ cấp kiểm soát luồng khác nhau có thể được thêm vào một cách linh hoạt. Trong sử dụng thực tế, sau khi thiết lập các quy tắc, chúng sẽ được lưu vào bộ nhớ. Sau khi khởi động lại ứng dụng, các quy tắc sẽ không còn hợp lệ.
Cấu hình quy tắc Sentinel, khi chúng tôi khởi động lại dịch vụ, tất cả các quy tắc sẽ biến mất. Chúng tôi có thể lưu trữ các cấu hình quy tắc này thông qua Zookeeper, Applo, Nacos và các trung tâm cấu hình khác để khởi động lại dịch vụ hoặc khởi động nhiều nút.
CFSDN nhấn mạnh vào nguồn mở để tạo ra giá trị và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây. Bài viết trên blog CFSDN này Spring Cloud Alibaba Nacos Getting Started Giải thích chi tiết đã được tác giả thu thập.
1. spring-cloud-starter-alibaba-nacos-discovery dựa vào báo cáo màu đỏ, không thể giới thiệu hoặc báo cáo rằng không thể tìm thấy và không thể giải quyết bằng cách thay đổi phiên bản. Sau khi bắt đầu dự án, dịch vụ không thể. được tìm thấy trong nacos ① Lỗi
Tôi là một lập trình viên xuất sắc, rất giỏi!