Announcing General Availability of Envoy on Windows

Sotiris Nanopoulos
Envoy Proxy
Published in
5 min readMay 18, 2021

--

Envoy and Microsoft logo

The Envoy project has always strived to make the network “transparent” to all applications running regardless of the programming language, the platform architecture, and the operating system. Today, we’re excited to announce that Envoy is now generally available for use on the Windows platform! You can start using Envoy on Windows for production workloads starting with version 1.18.3.

Porting Envoy on Windows has been a goal of the community since 2016. Since then, the Envoy-Windows-Development group has made a lot of progress. Primarily composed of developers from VMware and Microsoft, the group has collaborated over the last year to get Envoy from an alpha release in October 2020 to a stable production-ready state today.

You can now use Envoy on Windows to build cloud-native applications, improve the observability of legacy applications, and even deploy Envoy alongside a Windows application as an edge proxy.

Before we delve into the public-facing features that we have built to improve the Windows experience, we would like to thank the Envoy developer community and maintainers for their guidance, support, and patience.

Recently added features

Since the Alpha release of Envoy on Windows we have added more features, enabled continuous integration, and improved the performance and reliability of Envoy on Windows.

Improved polling mechanism with synthetic edge events

Envoy solves the C10K problem on Linux by serving many clients with each thread and using nonblocking I/O and edge-triggered readiness change notifications. However, edge-triggered change notifications are not supported on Windows Server 2019 and this caused Envoy on Windows to spin and drain CPU resources.

To address this issue, we designed synthetic edge events that behave like edge events. Synthetic edge events are level events that are managed by Envoy and behave like edge events. We achieved this by manually disabling event registration when a new event arrives and enabling them again only when needed.

We observe, in the integration tests, that by switching to synthetic edge events, Envoy catches 3 orders of magnitude fewer events. This is a significant improvement that allows Envoy on Windows to scale to multiple concurrent connections. We plan to improve the event mechanism further. The newer version of Windows offers a native edge events API which we plan to integrate into Envoy.

Windows container image

We want operators and developers to be able to get started with Envoy on Windows with minimal friction. Since late October of 2020, we have been publishing developer images on docker hub. These images contain various SDK and tools that are particularly useful for developers looking to extend or experiment with Envoy. With version 1.18 we also publish slimmer images, envoy-windows, which are more suitable for production environments.

Improved Diagnostics

We expect that operators will want to run Envoy on different platforms with the same configuration. The new stream access loggers allow operators to redirect the access logs produced by the listeners and the admin portal to the standard output of the process. Envoy uses the correct native API to write to the standard output/error depending on the platform it runs on.

Add support for Clang compiler

Envoy users leverage Envoy’s versatile extension model to build custom filters and features for their use case. Part of the versatile extension model is the support for different architectures (arm) and compiler toolchains (Clang and GCC) on Linux. Following the spirit of the community, we have added support for Clang on Windows. Since January, the CI builds envoy.exe on every commit both with MSVC and Clang compiler.

Improved process management

The Alpha release focused on functionality more than usability. Since then, we have added features for developers and Windows native operators to manage the lifetime of the Envoy process with ease. Now Envoy terminates gracefully when Ctrl + C and Ctrl + Break events are sent to the console in the same way it handles SIGINT and SIGTERM. Additionally, we have added experimental support to run Envoy as a Windows service.

Contribution Statistics

Although these statistics do not say much on their own, we would like to take a step back to look at what we have accomplished in the past year:

  1. The Windows development group has contributed 189 patches to the Envoy repository.
  2. 416 out of the 435 Envoy’s tests are run on Windows at every commit. 16 tests are not compiled on Windows due to the lack of platform support for the particular feature and the remaining 3 tests are failing in the newly added QUIC support.
  3. We support two compilers (MSVC and Clang), three runtimes (win32 native, SCM, and containers), and multiple versions of the Windows OS (Client and Server versions 1809 and above).

What’s next for Envoy on Windows?

We still have a lot to work to get Envoy on Windows to parity with Linux. We look forward to:

  1. Add more sample sandboxes that demonstrate different use cases.
  2. Improve the distribution of binaries.
  3. Benchmark and improve performance.
  4. Integrate with Service Mesh solutions, like OSM, on the upcoming Windows Server 2022 release.

How do I provide feedback and get involved?

We are looking forward to listening to your feedback and your comments. There are multiple ways to reach us and all of them are equally effective so you can choose the one that you prefer.

You can get in touch with the contributors working on Envoy on Windows to ask questions or provide feedback in the Envoy slack workspace #envoy-windows-dev channel. Additionally, we follow and triage all the Github issues. We also follow the envoy-dev and envoy-announce Google groups and reply to questions and issues there. We also maintain a FAQ on the documentation website.

One important note, if you encounter a bug that is causing Envoy to crash, please reach out to envoy-security@googlegroups.com. You might have stumbled upon a security vulnerability that should not be publicly disclosed before we patch it.

Like every CNCF project, we host bi-weekly meetings which you can find on the Envoy CNCF calendar. These meetings are a good place to start engaging and contributing to the Envoy roadmap on Windows.

Envoy Windows Development Group,

Sunjay Bhatia, William A. Rowe Jr (VMware)

Praveen Balasubramanian, Nick Grifka, Randy Miller, Sotiris Nanopoulos, David Schott (Microsoft)

--

--

All things tech and business | Ideas are free | Opinions are my own | Eng. @Microsoft