sách gpt4 ăn đã đi

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ại Tác giả: Tôi là chú chim nhỏ Thời gian cập nhật: 2023-04-11 14:31:32 28 4
mua khóa gpt4 giày nike

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ý
Sự đăng ký
Dịch vụ
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
Đă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
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
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
Đă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 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ý
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ủ
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
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
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ủ
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
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! .

28 4 0
tôi là một con chim nhỏ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress