Envoy Là Gì
Envoy là một trong những proxy nguồn mở được tạo vị Lyft. Khi trái đất đang hướng về một kiến trúc microservices, các lập trình viên đang gặp phải những khó khăn trong việc quản lý các hoạt động trong hai nghành nghề 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ấn đề này bằng phương pháp làm cho các mạng trở cần minh bạch hơn với những ứng dụng. Nó cũng cung cấp một phương pháp để thu thập số liệu thống kê xuất sắc hơn để vấn đề gỡ lỗi và theo dõi những vấn đề trở nên dễ dãi hơn.
Cách phổ cập nhất nhưng mà proxy Envoy được triển khai ngày nay là kết phù hợp với các ứng dụng dưới dạng một sidecar. Nếu như bạn chưa biết về mẫu sidecar thì chúng ta có thể đọc về nó trong nội dung bài viết dưới đây.
Các mẫu design pattern hiện tại đại
Một số mẫu mã design pattern rất có thể giúp chúng ta đạ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 mang đến ứng dụng.


Trong bài viết này, tôi sẽ nói đến cách bắt đầu với Envoy Proxy với lí giải DIY và cách sử dụng những tính năng khác biệt của Envoy để nâng cao độ tin cậy, bảo mật và khả năng giám sát các áp dụng của bạn.
Giới thiệu về Envoy
Envoy là một trong quy trình khép kín. Khi một client điện thoại tư vấn một proxy Envoy, yêu mong sẽ đi qua các mô-đun Envoy không giống nhau. Hãy nỗ lực hiểu các điều này.

Triển khai Envoy
Trang website của Envoy liệt kê những Docker image không giống nhau để chúng ta sử dụng. Trong trả lời này, tôi đang đặt Envoy đằng trước một RESTful API. Nếu như khách hàng không muốn sử dụng Envoy trong Docker container thì bạn cũng có thể chỉ cần tải file thiết đặt Envoy trường đoản cú https://www.getenvoy.io/.
Tôi sẽ áp dụng một dịch vụ được chế tạo ra sẵn trường đoản cú Spring Boot, dịch vụ thương mại này sẽ hoạt động như một application / microservice bao gồm của tôi.
Khi bạn chạy lệnh bên dưới đây, các bạn sẽ có thể thấy API sẽ 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 phải viết một thông số kỹ thuật proxy Envoy YAML như hình bên dưới đây:
Cấu hình này chỉ thị cho đầy đủ điều sau:
Nó tạo thành một HTTP Listener trên cổng 8585.Nó tạo nên một chuỗi bộ lọc kiểm tra bất kỳ yêu cầu nào khớp cùng với yêu ước /greeting và chuyến qua yêu ước đó tới nhiều greetingservice.Trong cụm greetingservice, gồm một endpoint chuyển hướng các yêu mong đến địa chỉ cửa hàng 0.0.0.0:8080.Các cụm greetingservice sẽ thực hiện cân bằng tải (load balancing) các yêu cầu thực hiện kỹ thuật ROUND_ROBIN trong trường hợp cụm chứa được nhiều endpoint.Nó chạy dịch vụ thương mại quản trị Envoy bên trên cổng 9901.Ở đây tôi đang sử dụng Get Envoy phiên phiên bản 1.15.0 đến thử nghiệm này. Lệnh sau đang khởi cồn proxy Envoy với thông số kỹ thuật đã mang lại ở trên.
$getenvoy run standard:1.15.0 -- --config-path simple.yamlBây giờ, khi bạn nhập add http://localhost:8585/greeting vào trình duyệt, các bạn sẽ thấy Envoy bước đầu hoạt hễ như một proxy cho dịch vụ thương mại greeting của bạn.
curl http://localhost:8585/greeting"id":6,"content":"Hello, World!"Bạn cũng có thể truy cập vào trang quản ngại trị Envoy tại showroom http://localhost:9901/.

Tất cả các dịch vụ quản ngại 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, bạn sẽ có thể thấy một lượng lớn thông tin về những yêu ước được cung ứng bởi proxy này.
Xem thêm: Một Vài Máy Tính Lớn Khác Eniac, Một Vài Máy Tính Lớn Khác, Một Vài Máy Tính Lớn Khác Trên Thế Giới
Ví dụ, nếu bạn muốn biết:
Tổng số kết nốiTổng số kết nối bị hủyTổng số liên kết đang hoạt độngCác ý kiến HTTP cho các yêu cầu khác 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 tác dụng tương tự bằng phương pháp chạy Docker bên dưới dạng container trên cùng một máy chủ.
Các hào kiệt của Envoy
Bây giờ bạn đã hiểu phương pháp chạy proxy cơ bản bằng Envoy, hãy xem một trong những tính năng chính:
CachingFault injectionExternal authorizationCircuit breakingStats, access logging & tracingSecurityCaching
Giống như những reverse proxy điển hình, Envoy chất nhận được cache những phản hồi. Nếu như bạn biết một số đối tượng không thay đổi thường xuyên, thì bạn có thể sử dụng tác dụng này.
Nó có thể chấp nhận được bạn triển khai các kỹ thuật cache khác nhau như:
no-cache - trong trường vừa lòng này, cache đã gửi yêu cầu đảm bảo đến máy chủ gốc trước khi ship hàng yêu cầu.private - trong trường phù hợp này, phản hồi được đánh dấu là riêng tứ và nó sẽ không được tàng trữ trên cache công khai / sử dụng chung.valid-for-time - vào trường hòa hợp này, phản nghịch hồi vẫn còn đó trong bộ nhớ lưu trữ cache một thời hạn nhất định trước khi nó được xác thực lại từ máy chủ ban đầu.Bằng biện pháp triển khai bộ nhớ đệm, bạn 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 vận dụng / ngắn gọn 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à trong số những kỹ thuật nhằm kiểm tra tài năng phục hồi của các microservices của bạn.
Envoy chất nhận được tạo ra sự đủng đỉnh trễ, hủy quăng quật yêu cầu dịch vụ thương mại với ý kiến của người tiêu dùng được chỉ định. Điều này giúp kiểm tra tài năng của dịch vụ thương mại trong trường hợp gồm sự cố hoặc bong tróc hoặc vượt tải. Nó hoàn toàn có thể được giới hạn trong một tập hợp những dịch vụ rõ ràng mà các bạn không bắt buộc phải biến đổi 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 áp dụng bởi Envoy để chọn các cấu hình fault injection một giải pháp nhanh chóng. Sau đó là một lấy ví dụ như về cấu dường như vậy:
Số liệu những thống kê của Envoy cũng cho phép bạn đưa tin chi tiết về những lỗi được chuyển vào để chúng ta biết ứng dụng đang chuyển động như nuốm 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 có thể sử dụng Envoy nhằm ủy quyền những yêu ước cho một sever ủy quyền mặt ngoài. Nếu bạn đang sử dụng Envoy như một sidecar, điều này thuận tiện giúp tách logic nhiệm vụ của vận dụng khỏi máy chủ ủy quyền mà các bạn sử dụng.Nếu chúng ta đã quen thuộc với open Policy Agent, đây là một ví dụ hơi hay cho thấy thêm cách sử dụng hào kiệt này.
Circuit Breaking
Trong bài viết trước của tôi, tôi đã nói về mẫu Circuit Breaker, có thể được áp dụng để auto xác định sự suy giảm thương mại dịch vụ hoặc ngừng dịch vụ và bắt đầu trả lại ý kiến từ chính proxy, thay do làm hết sạch tài nguyên dịch vụ thương mại ban đầu.
Hiện tại, Envoy hỗ trợ ngắt mạch dựa vào các thông số sau:
Tối đa các kết nối cụm.Yêu cầu đang hóng xử lý buổi tối đa.Yêu cầu về tối đa.Số lần demo lại tối đa.Số lượng kết nối tối nhiều trên mỗi cụm....Nếu đạt đến ngẫu nhiên ngưỡng nào, thì Envoy đã mở mạch. Câu hỏi mở mạch hoàn toàn có thể được theo dõi bằng phương pháp sử dụng các số liệu thống kê lại như hình 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ố trong những thống kê sẽ giúp đỡ bạn dễ hiểu. Nó tạo nên ba một số loại thống kê:Upstream statsDownstream statsServer statsMột số cỗ lọc như Trình cai quản kết nối HTTP, hỗ trợ ghi nhật cam kết truy cập rất có thể mở rộng. Bạn có thể sử dụng sinks như tệp tin hoặc tệp tin nhật ký truy vấn gRPC, để lưu lại nhật ký kết truy cập.
Envoy cung ứng theo dõi với các nhà hỗ trợ theo dõi gốc cũng như phía bên ngoài như Jaeger, LightStep, Zipkin, v.v. Theo dõi và quan sát phân tán là rất đặc biệt đối với con kiến trúc microservices nhằm hiểu những 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 giám sát của vận dụng / thương mại dịch vụ của bạn.
Security
Giống như các proxy khác, Envoy có thể được thực hiện để cải thiện tính bảo mật tổng thể của ứng dụng. Nó cung cấp các cỗ lọc khác nhau như sau:
...Phần kết luận
Envoy proxy là một trong công cụ tuyệt đối hoàn hảo và đã được vận dụng khá rộng lớn rãi. Có tương đối nhiều dự án thương mại và mã mối cung cấp mở được kiến thiết trên Envoy. Có khá nhiều bộ thanh lọc thú vị mà lại Envoy cung cấp mà bạn cũng có thể muốn mày mò và sử dụng.
Xem thêm: Ngữ Văn Lớp 6 Bài So Sánh Sgk Ngữ Văn 6 Tập 2, Soạn Bài So Sánh (Chi Tiết)
Một số người có thể tranh luận rằng shop chúng tôi có thể có được điều này bằng cách sử dụng một trong những công núm hiện tất cả hoặc thậm chí sử dụng các framework tích thích hợp sẵn, vậy lý do lại áp dụng Envoy? Và đó là một lập luận công bằng. Tôi thấy tính năng lớn nhất của Envoy là trong những 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, bạn có thể dễ dàng nâng cao tính bảo mật, độ tin cậy và khả năng đo lường của phần lớn mọi áp dụng (cũ / mới) nhưng mà không đề nghị chạm vào mã ứng dụng.