[原]HAproxy 代理技术原理探究
生活随笔
收集整理的這篇文章主要介紹了
[原]HAproxy 代理技术原理探究
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
HAproxy 技術(shù)分享
簡(jiǎn)介
HAProxy是一款提供高可用性、負(fù)載均衡以及基于TCP(第四層)和HTTP(第七層)應(yīng)用的代理軟件
Features
1.免費(fèi)
2.能夠做到4層以上代理
3.高性能
4.高穩(wěn)定性
使用案例
淘寶CDN(HTTP反向代理)
測(cè)試:
HTTP代理 ab -i -c 500 -n 100000
| --- node 8910 URL = / HAproxy| --- node 8911 URL = /| --- node 8912 URL = /| --- node 8913 /test/ (reqisetbe ^[^\ ]*\ /(test|uri)/ server_uri_route) #按照規(guī)則轉(zhuǎn)發(fā) ####### haproxy : (單獨(dú)由haproxy進(jìn)行均衡負(fù)載)Concurrency Level: 500 Time taken for tests: 32.562 seconds Complete requests: 100000 Failed requests: 0 Write errors: 0 Total transferred: 36606588 bytes HTML transferred: 0 bytes Requests per second: 3071.02 [#/sec] (mean) Time per request: 162.812 [ms] (mean) Time per request: 0.326 [ms] (mean, across all concurrent requests) Transfer rate: 1097.85 [Kbytes/sec] received####### nginx : (單獨(dú)由nginx進(jìn)行均衡負(fù)載)Concurrency Level: 500 Time taken for tests: 36.539 seconds Complete requests: 100000 Failed requests: 0 Write errors: 0 Total transferred: 38600000 bytes HTML transferred: 0 bytes Requests per second: 2736.82 [#/sec] (mean) Time per request: 182.694 [ms] (mean) Time per request: 0.365 [ms] (mean, across all concurrent requests) Transfer rate: 1031.65 [Kbytes/sec] received對(duì)比Nginx
| HTTP代理性能 | 9 | 10 |
| TCP 代理性能 | 0 | 10 |
| 穩(wěn)定性 | 10 | 10 |
| 轉(zhuǎn)發(fā)規(guī)則 | 10 | 7 |
| HTTP代理性能 | 9 | 10 |
| 平滑升級(jí) | 10 | 8 |
原理 epoll 轉(zhuǎn)發(fā)
驗(yàn)證 轉(zhuǎn)發(fā)方式為如下
通過(guò)TCP代理請(qǐng)求 www.baidu.com
strace 查看系統(tǒng)調(diào)用
zhangbo3@vm-222:/etc/haproxy$ sudo strace -p 7876epoll_wait(0, {{EPOLLIN, {u32=5, u64=5}}}, 7, 1000) = 1*** (事件循環(huán),監(jiān)聽(tīng)連接事件)accept(5, {sa_family=AF_INET, sin_port=htons(56479), sin_addr=inet_addr("127.0.0.1")}, [16]) = 1*** (來(lái)自客戶端[127.0.0.1]的請(qǐng)求, 端口56479[隨機(jī)端口])fcntl(1, F_SETFL, O_RDONLY|O_NONBLOCK) = 0*** (設(shè)置連接socket為非阻塞)setsockopt(1, SOL_TCP, TCP_NODELAY, [1], 4) = 0*** (設(shè)置TCP連接為 NODELAY, 禁止Nagle算法)accept(5, 0x7fff8da2d7a0, [128]) = -1 EAGAIN (Resource temporarily unavailable)*** (再次去accept連接失敗,因?yàn)閍ccept被循環(huán)包裹,需要返回 EAGAIN才break)recvfrom(1, "GET HTTP://www.baidu.com HTTP/1."..., 8192) = 212*** (收到來(lái)自客戶端的請(qǐng)求 curl -x 127.0.0.1:1180 www.baidu.com)recvfrom(1, 0x2560ac4, 7980, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable)*** (返回EAGAIN后break,表示收到完整的TCP數(shù)據(jù), 開(kāi)始處理請(qǐng)求數(shù)據(jù))epoll_ctl(0, EPOLL_CTL_ADD, 1, {EPOLLIN, {u32=1, u64=1}}) = 0*** (將來(lái)自客戶端的socket加入epoll監(jiān)聽(tīng)隊(duì)列)socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 2fcntl(2, F_SETFL, O_RDONLY|O_NONBLOCK) = 0setsockopt(2, SOL_TCP, TCP_NODELAY, [1], 4) = 0connect(2, {sa_family=AF_INET, sin_port=htons(8912), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 EINPROGRESS (Operation now in progress)*** (創(chuàng)建到backend的socket連接,這里backend配置為8912)*** (server server3 127.0.0.1:8912)sendto(2, "GET HTTP://www.baidu.com HTTP/1."..., 212, MSG_DONTWAIT|MSG_NOSIGNAL, NULL, 0) = 212*** (發(fā)送數(shù)據(jù)到backend)epoll_wait(0, {}, 7, 0) = 0*** (繼續(xù)進(jìn)入epoll_wait,等待來(lái)自backend的數(shù)據(jù)返回)gettimeofday({1413020002, 322710}, NULL) = 0recvfrom(2, 0x255c960, 16384, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable)*** (Backend數(shù)據(jù)來(lái)了)epoll_ctl(0, EPOLL_CTL_ADD, 2, {EPOLLIN, {u32=2, u64=2}}) = 0epoll_wait(0, {{EPOLLIN, {u32=2, u64=2}}}, 7, 1000) = 1gettimeofday({1413020003, 308930}, NULL) = 0recvfrom(2, "HTTP/1.1 200 OK\r\nDate: Sat, 11 O"...,16384) = 2896*** (backend 返回 HTTP 200, 這是標(biāo)準(zhǔn)HTTP協(xié)議頭)recvfrom(2, 0x255d4b0, 13488, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable)sendto(1, "HTTP/1.1 200 OK\r\nDate: Sat, 11 O"...) = 2896*** (將backend返回的數(shù)據(jù)發(fā)送到front end)epoll_wait(0, {{EPOLLIN, {u32=2, u64=2}}}, 7, 1000) = 1*** (繼續(xù)進(jìn)入epoll_wait)gettimeofday({1413020003, 309695}, NULL) = 0*** (客戶端連接超時(shí),關(guān)閉連接)shutdown(2, 1 /* send */) = 0close(2) = 0shutdown(1, 1 /* send */) = 0close(1) = 0驗(yàn)證單進(jìn)程模型 -> 查看線程數(shù)
cat /proc/7878/status
轉(zhuǎn)載于:https://www.cnblogs.com/Bozh/p/4019607.html
總結(jié)
以上是生活随笔為你收集整理的[原]HAproxy 代理技术原理探究的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: SoC嵌入式软件架构设计之二:虚拟内存管
- 下一篇: inline-block的兼容性问题