Envoy: introduction to overview for Modern Microservices

Envoy: introduction to overview for Modern Microservices

Introduction

Imagine you are part of a small startup that just scored its first major client. Suddenly, traffic ramps up overnight. A single monolithic application begins to buckle under the weight of endless user requests. The once-stable system becomes unreliable, forcing your team into frantic late-night debugging sessions. In the midst of this chaos, you hear about “Envoy” and how it helped big names like Lyft transition from a monolith into a microservices architecture. Curiosity piques. If Envoy can handle Lyft’s scale, perhaps it can handle yours.

Envoy in Context

Envoy is an open source Layer 7 proxy and communication bus created at Lyft. It was specifically designed to move their architecture from a monolith to a microservices ecosystem. According to the Cloud Native Computing Foundation’s 2021 Survey, 78% of respondents reported using containers in production environments (source: CNCF). Many of these containers rely on service proxies such as Envoy to effectively route and balance traffic. Envoy has garnered over 20,000 stars on GitHub, reflecting strong adoption within the developer community (source: GitHub Envoy Repo).

Why Understanding Envoy Matters

As software systems grow more complex, traditional monolithic deployments become increasingly cumbersome to maintain. Service downtime can mean large financial losses and reputation damage. Envoy’s robust feature set helps teams ensure high availability, observability, and reliability for modern applications. By managing connections, load balancing, and network traffic at scale, it frees developers to focus on business logic while Envoy handles details such as transport protocols, retries, and encryption.

Key Architectural Components

Envoy is especially powerful in microservices architectures because it can function both as a reverse proxy and a service mesh sidecar. It enables you to hide backend services from external clients, apply sophisticated routing rules, and track requests across distributed components. Envoy defines “clusters” as pools of backend hosts and “listeners” as ports that accept incoming traffic. Data travels from the client (downstream) to your internal service (upstream). Envoy leverages a single-process, multi-threaded model, where each worker thread manages connections independently for improved scalability.

Example Envoy Configuration

Below is a minimal Envoy configuration snippet that listens on port 8080 and forwards traffic to a backend service. This example demonstrates how listeners, routes, and clusters fit together:


static_resources:
  listeners:
    - name: main_listener
      address:
        socket_address:
          address: 0.0.0.0
          port_value: 8080
      filter_chains:
        - filters:
            - name: envoy.filters.network.http_connection_manager
              typed_config:
                "@type": type.googleapis.com/envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager
                stat_prefix: ingress_http
                route_config:
                  name: local_route
                  virtual_hosts:
                    - name: backend
                      domains: ["*"]
                      routes:
                        - match:
                            prefix: "/"
                          route:
                            cluster: service_cluster
                http_filters:
                  - name: envoy.filters.http.router

  clusters:
    - name: service_cluster
      connect_timeout: 1s
      type: STRICT_DNS
      lb_policy: ROUND_ROBIN
      load_assignment:
        cluster_name: service_cluster
        endpoints:
          - lb_endpoints:
              - endpoint:
                  address:
                    socket_address:
                      address: your_service_address
                      port_value: 9000

        

  • listeners: Specifies Envoy’s inbound connections
  • filter_chains: Defines what filters Envoy applies to incoming requests, such as HTTP connection management
  • route_config: Contains routing rules for matching requests and directing them to backend services
  • clusters: Maps to one or more endpoints (hosts) that Envoy will load balance

Run Envoy with your configuration:

envoy --config-path path/to/your-envoy-config.yaml
        

You can also specify concurrency (number of worker threads) with --concurrency 1 for testing or a higher number in production.

Security and Performance

Envoy can terminate TLS connections, which is critical for encrypting data in transit. According to IBM’s 2022 Cost of a Data Breach Report, the average total cost of a data breach stands at USD 4.35 million (source: IBM). By simplifying security configurations, Envoy helps organizations avoid expensive security pitfalls. Moreover, Envoy offers observability features like metrics, logs, and tracing, ensuring operators can track every request across microservices.

Real-World Use Cases

Envoy is ideal for organizations running large numbers of services. For instance, e-commerce platforms can place Envoy at the edge to route traffic to relevant product or checkout services. In a microservices environment, Envoy sidecars provide critical observability and control. Even content delivery networks can leverage Envoy’s load balancing and caching filters to speed up content access worldwide.

Conclusion

In short, Envoy offers a powerful and flexible solution for modern traffic management. It excels in microservices environments especially when coupled with container orchestration tools like Kubernetes and boasts advanced load balancing, routing, and service discovery features. With a proven track record at major tech companies, it has emerged as a go-to solution for robust, high-performance proxies. Gaining expertise in Envoy empowers engineering teams to handle distributed systems at scale, optimize network traffic, bolster security, and achieve end-to-end observability.

To view or add a comment, sign in

More articles by Filip Konkowski

Insights from the community

Others also viewed

Explore topics