<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Web Server on Leanku 的博客</title><link>https://www.leanku.com/tags/web-server/</link><description>Recent content in Web Server on Leanku 的博客</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Wed, 10 Jul 2024 00:00:00 +0000</lastBuildDate><atom:link href="https://www.leanku.com/tags/web-server/index.xml" rel="self" type="application/rss+xml"/><item><title>一个 HTTP 请求的并发链路：从 Web Server 到 MySQL</title><link>https://www.leanku.com/post/computerscience/http-request-concurrency-chain-webserver-mysql/</link><pubDate>Wed, 10 Jul 2024 00:00:00 +0000</pubDate><guid>https://www.leanku.com/post/computerscience/http-request-concurrency-chain-webserver-mysql/</guid><description>&lt;h1 id="一个-http-请求的并发链路从-web-server-到-mysql"&gt;一个 HTTP 请求的并发链路：从 Web Server 到 MySQL&lt;/h1&gt;&#10;&lt;p&gt;前面的文章分别讨论了并发是什么、进程线程协程如何执行请求、IO 多路复用如何管理大量连接，以及如何用 QPS、并发数和响应时间衡量系统。&lt;/p&gt;&#10;&lt;p&gt;但这些概念真正进入后端系统之后，会形成一条完整的链路：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Client&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Web Server / Nginx&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Application&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Process / Thread / Coroutine&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Redis / RPC / MySQL&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Response&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ↓&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Client&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;真正的高并发问题，通常也不是发生在某一个组件上，而是发生在&lt;strong&gt;整个链路的容量不匹配&lt;/strong&gt;上。&lt;/p&gt;&#10;&lt;p&gt;例如：&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;Web Server 可以接收 10000 个连接，应用可以运行 1000 个协程，但 MySQL 连接池只有 50 个连接。&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;这并不意味着系统只能处理 50 个 HTTP 请求，但意味着&lt;strong&gt;同时进行数据库操作的请求最多受到这 50 个连接的约束&lt;/strong&gt;。&lt;/p&gt;&#10;&lt;p&gt;因此，理解高并发，不能只看 Web Server 或应用服务器，而要沿着一次请求完整地看下去。&lt;/p&gt;&#10;&lt;h2 id="1-一个-http-请求到底经过哪些组件"&gt;1. 一个 HTTP 请求到底经过哪些组件？&lt;/h2&gt;&#10;&lt;p&gt;假设用户访问：&lt;/p&gt;</description></item></channel></rss>