ENVOY LÀ GÌ

  -  

Envoy là 1 trong proxy nguồn mở được tạo vì chưng Lyft. Khi trái đất đang hướng đến một loài kiến ​​trúc microservices, các lập trình viên đang gặp mặt phải những trở ngại trong việc quản lý các hoạt động trong hai nghành nghề dịch vụ chính:

Kết nối mạng.Khả năng giám sát.

Bạn đang xem: Envoy là gì

Envoy nỗ lực giải quyết những vụ việc này bằng phương pháp làm cho những mạng trở phải minh bạch rộng với những ứng dụng. Nó cũng cung cấp một cách để thu thập số liệu thống kê xuất sắc hơn để việc gỡ lỗi với theo dõi những vấn đề trở nên thuận lợi hơn.

Cách thịnh hành nhất nhưng mà proxy Envoy được triển khai ngày nay là kết phù hợp với các áp dụng dưới dạng một sidecar. Nếu như bạn chưa biết về mẫu mã sidecar thì bạn cũng có thể đọc về nó trong nội dung bài viết dưới đây.


Các mẫu mã design pattern hiện đại
Một số mẫu design pattern hoàn toàn có thể giúp các bạn đạt được tài năng mở rộng, tính khả dụng, bảo mật, độ tin yêu và kỹ năng phục hồi cho ứng dụng.
*
Trung Nguyenkanamara.vn
*

Trong nội dung bài viết này, tôi sẽ nói đến cách bước đầu với Envoy Proxy với chỉ dẫn DIY và phương pháp sử dụng các tính năng khác nhau của Envoy để nâng cao độ tin cậy, bảo mật và khả năng đo lường và thống kê các ứng dụng của bạn.

Giới thiệu về Envoy

Envoy là 1 trong những quy trình khép kín. Khi 1 client điện thoại tư vấn một proxy Envoy, yêu cầu sẽ đi qua các mô-đun Envoy không giống nhau. Hãy nỗ lực hiểu gần như điều này.

*
Downstream - Một ứng dụng khách từ xa kết nối với Envoy.Listener - Một mô-đun Envoy chịu trách nhiệm gật đầu đồng ý các liên kết mới với nạp IP / Port.Filter - Một mô-đun Envoy phụ trách xử lý các yêu cầu. Một yêu thương cầu hoàn toàn có thể phải trải sang 1 chuỗi các bộ lọc.Upstream - Một endpoint của Envoy chuyển tiếp một yêu cầu đến. Vào một mô hình sidecar, đó là ứng dụng hoặc một cụm ứng dụng / dịch vụ.

Triển khai Envoy

Trang website của Envoy liệt kê các Docker image khác biệt để bạn sử dụng. Trong giải đáp này, tôi vẫn đặt Envoy đằng trước một RESTful API. Nếu như khách hàng không ước ao sử dụng Envoy trong Docker container thì chúng ta cũng có thể chỉ buộc phải tải file thiết lập Envoy từ bỏ https://www.getenvoy.io/.

Tôi sẽ thực hiện một thương mại & dịch vụ được tạo thành sẵn từ Spring Boot, dịch vụ này sẽ vận động như một application / microservice bao gồm của tôi.

Khi chúng ta chạy lệnh dưới đây, bạn sẽ có thể thấy API đang hoạt động.

java -jar -d complete/target/rest-service-0.0.1-SNAPSHOT.jar$curl http://localhost:8080/greeting"id":2,"content":"Hello, World!"Tiếp theo, bạn cần viết một cấu hình proxy Envoy YAML như hình bên dưới đây:

Cấu hình này ra lệnh cho rất nhiều điều sau:

Nó tạo ra một HTTP Listener bên trên cổng 8585.Nó tạo thành một chuỗi cỗ lọc kiểm tra ngẫu nhiên yêu mong nào khớp với yêu ước /greeting và chuyển tiếp yêu mong đó tới nhiều greetingservice.Trong các greetingservice, bao gồm một endpoint đưa hướng những yêu mong đến địa chỉ 0.0.0.0:8080.Các nhiều greetingservice sẽ thực hiện cân bởi tải (load balancing) các yêu cầu thực hiện kỹ thuật ROUND_ROBIN vào trường phù hợp cụm chứa đựng nhiều endpoint.Nó chạy dịch vụ quản trị Envoy bên trên cổng 9901.

Ở phía trên tôi đang áp dụng Get Envoy phiên bản 1.15.0 đến thử nghiệm này. Lệnh sau sẽ khởi động proxy Envoy với thông số kỹ thuật đã cho ở trên.

$getenvoy run standard:1.15.0 -- --config-path simple.yamlBây giờ, khi chúng ta nhập địa chỉ http://localhost:8585/greeting vào trình duyệt, bạn sẽ thấy Envoy bước đầu hoạt đụng như một proxy cho thương mại dịch vụ greeting của bạn.

curl http://localhost:8585/greeting"id":6,"content":"Hello, World!"Bạn cũng hoàn toàn có thể truy cập vào trang quản trị Envoy tại địa chỉ http://localhost:9901/.

*

Tất cả các dịch vụ cai quản trị cũng đều có sẵn bên dưới dạng API.

Nếu bạn truy vấn http://localhost:9901/stats, các bạn sẽ có thể thấy một lượng lớn thông tin về những yêu ước được hỗ trợ bởi proxy này.

Xem thêm: Nhân Viên Trông Quán Net Tuyển Nhân Viên Trông Quán Net Tại Hà Nội 2021 Mới Nhất

Ví dụ, nếu bạn có nhu cầu biết:

Tổng số kết nốiTổng số liên kết bị hủyTổng số kết nối đang hoạt độngCác phản hồi HTTP cho những yêu cầu không giống nhau được xử lý...

listener.0.0.0.0_8585.downstream_cx_active: 2listener.0.0.0.0_8585.downstream_cx_destroy: 4listener.0.0.0.0_8585.downstream_cx_total: 6listener.0.0.0.0_8585.downstream_pre_cx_active: 0listener.0.0.0.0_8585.downstream_pre_cx_timeout: 0listener.0.0.0.0_8585.http.ingress.downstream_rq_1xx: 0listener.0.0.0.0_8585.http.ingress.downstream_rq_2xx: 3listener.0.0.0.0_8585.http.ingress.downstream_rq_3xx: 0listener.0.0.0.0_8585.http.ingress.downstream_rq_4xx: 2listener.0.0.0.0_8585.http.ingress.downstream_rq_5xx: 0listener.0.0.0.0_8585.http.ingress.downstream_rq_completed: 5listener.0.0.0.0_8585.no_filter_chain_match: 0Bạn cũng rất có thể đạt được kết quả tương tự bằng phương pháp chạy Docker bên dưới dạng container trên và một máy chủ.

Các tính năng của Envoy

Bây giờ đồng hồ bạn đã biết phương pháp chạy proxy cơ bản bằng Envoy, hãy xem một số tính năng chính:

CachingFault injectionExternal authorizationCircuit breakingStats, access logging & tracingSecurity

Caching

Giống như các reverse proxy điển hình, Envoy được cho phép cache những phản hồi. Nếu như khách hàng biết một số đối tượng người dùng không biến hóa thường xuyên, thì chúng ta có thể sử dụng hào kiệt này.

Nó chất nhận được bạn triển khai những kỹ thuật cache không giống nhau như:

no-cache - trong trường vừa lòng này, cache sẽ gửi yêu thương cầu xác thực đến máy chủ gốc trước khi giao hàng yêu cầu.private - trong trường thích hợp này, phản hồi được ghi lại là riêng tứ và nó sẽ không còn được tàng trữ trên cache công khai / sử dụng chung.valid-for-time - trong trường thích hợp này, phản nghịch hồi vẫn còn trong bộ nhớ cache một thời gian nhất định trước lúc nó được xác thực lại từ sever ban đầu.

Bằng bí quyết triển khai bộ nhớ lưu trữ đệm, chúng ta cũng có thể cải thiện độ trễ của phản hồi từ microservices của mình. Điều này rất cần phải code trong ứng dụng / xúc tích nghiệp vụ.

Fault injection

Nếu bạn đã nghe về kỹ thuật lếu loạn, các bạn sẽ biết rằng fault injection là một trong những kỹ thuật để kiểm tra khả năng phục hồi của những microservices của bạn.

Envoy cho phép tạo ra sự chậm chạp trễ, hủy bỏ yêu cầu thương mại & dịch vụ với phản hồi của người dùng được chỉ định. Điều này góp kiểm tra kĩ năng của thương mại & dịch vụ trong trường hợp tất cả sự thế hoặc hỏng hóc hoặc quá tải. Nó có thể được giới hạn trong một tập hợp các dịch vụ rõ ràng mà chúng ta không bắt buộc phải đổi khác code của ứng dụng.

Bạn rất có thể tạo một khối hệ thống file ảo (/etc/config/v1) hoàn toàn có thể được thực hiện bởi Envoy để lựa chọn các cấu hình fault injection một phương pháp nhanh chóng. Sau đấy là một lấy ví dụ về cấu bên cạnh đó vậy:

Số liệu thống kê lại của Envoy cũng cho phép bạn đưa tin chi tiết về các lỗi được chuyển vào để các bạn biết áp dụng đang hoạt động như cố nào.

http.ingress_http.fault.aborts_injected: 6http.ingress_http.fault.active_faults: 0http.ingress_http.fault.delays_injected: 0http.ingress_http.fault.faults_overflow: 0http.ingress_http.fault.response_rl_injected: 0

External authorization

Bạn rất có thể sử dụng Envoy để ủy quyền các yêu mong cho một sever ủy quyền mặt ngoài. Nếu bạn đang sử dụng Envoy như 1 sidecar, điều này thuận lợi giúp bóc tách logic nhiệm vụ của ứng dụng khỏi máy chủ ủy quyền mà chúng ta sử dụng.

Nếu chúng ta đã thân quen với xuất hiện Policy Agent, đó là một ví dụ khá hay cho biết cách sử dụng hào kiệt này.

Circuit Breaking

Trong nội dung bài viết trước của tôi, tôi đã nói tới mẫu Circuit Breaker, có thể được sử dụng để tự động xác định sự suy giảm dịch vụ thương mại hoặc xong dịch vụ và bước đầu trả lại phản hồi từ thiết yếu proxy, thay vì chưng làm cạn kiệt tài nguyên dịch vụ thương mại ban đầu.

Hiện tại, Envoy cung ứng ngắt mạch dựa vào các thông số sau:

Tối đa những kết nối cụm.Yêu ước đang hóng xử lý về tối đa.Yêu cầu buổi tối đa.Số lần thử lại về tối đa.Số lượng kết nối tối nhiều trên mỗi cụm....

Nếu đạt đến bất kỳ ngưỡng nào, thì Envoy vẫn mở mạch. Việc mở mạch có thể được theo dõi bằng cách sử dụng những số liệu những thống kê như hình bên dưới đây:

cluster.local_service.circuit_breakers.default.cx_open: 0cluster.local_service.circuit_breakers.default.cx_pool_open: 0cluster.local_service.circuit_breakers.default.rq_open: 0cluster.local_service.circuit_breakers.default.rq_pending_open: 0cluster.local_service.circuit_breakers.default.rq_retry_open: 0cluster.local_service.circuit_breakers.high.cx_open: 0cluster.local_service.circuit_breakers.high.cx_pool_open: 0cluster.local_service.circuit_breakers.high.rq_open: 0cluster.local_service.circuit_breakers.high.rq_pending_open: 0cluster.local_service.circuit_breakers.high.rq_retry_open: 0

Stats, access logging & tracing

Như tôi vẫn đề cập trước đó, Envoy có một số thống kê sẽ giúp bạn dễ dàng hiểu. Nó tạo ra ba loại thống kê:

Upstream statsDownstream statsServer stats

Một số bộ lọc như Trình quản lý kết nối HTTP, cung cấp ghi nhật cam kết truy cập có thể mở rộng. Bạn cũng có thể sử dụng sinks như tệp tin hoặc tệp tin nhật ký truy cập gRPC, để lưu lại nhật cam kết truy cập.

Envoy cung cấp theo dõi với những nhà hỗ trợ theo dõi nơi bắt đầu cũng như bên phía ngoài như Jaeger, LightStep, Zipkin, v.v. Theo dõi phân tán là rất đặc biệt quan trọng đối với con kiến ​​trúc microservices nhằm hiểu các luồng dịch vụ, độ trễ, tuần từ bỏ hóa, v.v.

Nhìn chung, những tính năng này cải thiện khả năng thống kê giám sát của vận dụng / dịch vụ thương mại của bạn.

Security

Giống như những proxy khác, Envoy có thể được sử dụng để nâng cao tính bảo mật toàn diện của ứng dụng. Nó cung cấp các bộ lọc không giống nhau như sau:

...

Phần kết luận

Envoy proxy là 1 trong công cụ hoàn hảo và tuyệt vời nhất và vẫn được vận dụng khá rộng lớn rãi. Có rất nhiều dự án dịch vụ thương mại và mã mối cung cấp mở được chế tạo trên Envoy. Có nhiều bộ lọc thú vị nhưng mà Envoy hỗ trợ mà chúng ta có thể muốn tò mò và sử dụng.

Xem thêm: Điện Thoại Samsung Galaxy J5 2016 Lần Đầu Lộ Cấu Hình Hoàn Chỉnh

Một số người có thể tranh luận rằng công ty chúng tôi có thể đã đạt được điều này bằng cách sử dụng một trong những công nuốm hiện có hoặc thậm chí còn sử dụng những framework tích hòa hợp sẵn, vậy vì sao lại áp dụng Envoy? Và đó là một lập luận công bằng. Tôi thấy công dụng lớn độc nhất của Envoy là trong các doanh nghiệp đang hoạt động các áp dụng cũ. Bằng cách sử dụng Envoy như một sidecar hoặc proxy phía trước, chúng ta có thể dễ dàng cải thiện tính bảo mật, độ tin cậy và khả năng đo lường và thống kê của hầu như mọi vận dụng (cũ / mới) cơ mà không đề nghị chạm vào mã ứng dụng.