woodgrovebank.com Public Internet Private Network • Acts as the public endpoint for the sites & services, or as a service mesh • Indirects calls to backend servers to perform real work, balancing load between them • Can offload work from backend servers: Encryption, Auth2, Compression, Caching
reverse proxy using .NET • Layer 7 proxy – terminates & re-issues requests • Inbound and outbound connections are independent • Enables offloading of work to proxy from back end servers • Extensibility & customizability is key requirement • Configuration – static files, Dynamic via API or on-demand per request • Pipeline of stages for how requests are processed • Use existing ASP.NET middleware or create new • Plan to ship multiple form factors • Standalone proxy “exe” with config files • Library + template project to enable customization • Docker image
Other routes Config Session Affinity Load Balancing Request Transformations Proxy-er Destination Enumeration HttpClient* Health checks Specific destination server http(s) http(s) Proxy process Kestrel Passive Health Checks
• Server can specify request limit per connection (default=100) • Connection callbacks • PlainTextStreamFilter – can intercept http traffic in plain text • Telemetry • EventSource Events & EventCounters • Track all stages of a request including DNS, TCP etc • HTTP version policies • Control over which versions a connection will use • Perf improvements • Sockets optimized on Linux
of route matches and their associated configuration. Routes tell the proxy which requests to forward • Clusters Contains a collection of named destinations and their addresses, any of which is considered capable of handling requests for a given route. Clusters tell the proxy where and how to forward requests https://microsoft.github.io/reverse-proxy/articles/config-files.html
and runtimes to build distributed applications • Runtimes have limited language support and tightly controlled feature sets • Runtimes only target specific infrastructure platforms with limited portability
http://localhost:3500/v1.0/state/inventory/item67 POST http://localhost:3500/v1.0/publish/shipping/orders GET http://localhost:3500/v1.0/secrets/keyvault/password POST http://localhost:3500/v1.0-alpha1/workflows/dapr/businessprocess/1234/start HTTP/gRPC Application Dapr sidecar
With any stack or language • Reuse your code with HTTP/gRPC proxy • Kubernetes, VMs, cloud or hybrid var request = new HttpRequestMessage(); request.RequestUri = new Uri(BASE_URL); //”http://localhost:3500” request.Headers.Add(“dapr-app-id”, configuration[“SCORE_SERVICE"]); request.Method = HttpMethod.Post; request.Content = new StringContent(requestBody, Encoding.UTF8, "application/json"); request.Headers.Add("X-ClientTraceId", Guid.NewGuid().ToString()); return request;