nginx跟haproxy其实他们两个的定位是有所完全不同的,nginx的定位是一个server,haproxy的定位是一个loadbalancer。
nginx通过各种pluginmodule可以支持loadbalance的功能,但性能不弱于haproxy太多,所以总有人拿来将两个东西都很。不过apache也是可以实际具体模块做loadbalancer,只是性能差得多只不过因为没人用而已。其实了nginx的lb功能现在是其支柱主打功能而己。
看见有很多答案这对haproxy多进程有误解,这里不光说下,haproxy现在也支持多进程模型,只不过并并非nginx的workermaster结构,只不过是平等多进程结构,同样的也允许reuseport选项,因为在这里nginx跟haproxy对于多核借用上全是一样的的完全没有本质区别。
haproxy从1.8之后,先添加了多线程的模式,现在它更帮我推荐的都是这个模型,在一些平台上还能够更合适的利用多核。而nginx从未没有多线程模型。而且虽然社区也没不打算支持。
nginx其实设计和实现server的功能来说,是haproxy不具备什么的,让haproxy像一个大多数webserver那样回复一个特殊的http请求是很容易的,不如此大规模如何修改源码根本不会办不到。haproxy是环绕再转发模型设计的,整个流程那就是围绕如何飞快把一个请求的或解除点赞和评论到另一端。并不是像server一样认可跪请然后再发。
但是nginx才是一个纯粹的lb来说,尤其是根据webloadbalancer来说,功能没有haproxy这样的话精细入微。haproxy支持什么的acl对象太应用范围,很多情况根本不需要脚本血法就可以不能完成奇怪的功能,而nginx一点奇怪的loadbalance功能都必须使用脚本才能能够完成,那样性能就会差很多。
从功能角度过来讲,nginx反正功能比haproxy要多(当然了并不全是在线的),只不过他的开发社区和定位方向都比haproxy要大和宽泛。在nginx上面的各种解决方案也要多的多。比如说waf,haproxy同一都还没有比较好好的原生解决方案。也有除了最近根据servicemesh的支持,haproxy全是会很难跟得上。
但是基础功能,和http2,tls1.3,script,ssl/tlsoffload,ocsp,snipreload,反正ngnix最新版本早就也支持,哪怕比nginx还更快些(http2也很晚,但现在也支持什么了)。另外,跪求硬件ssloffload支持什么总之比较多是openssl的engine的支持,所以才这个大家都应该差不多,只需不兼容最新openssl都都没什么问题。
haproxy的优点不过是转发性能稍高,而且haproxy追求zerocopy的forward流程,所以代码都妄想于优化在那。但这个优势现在被广泛的tls/ssl应用铺平了,差别0copy浪费的时间来说加解密的消耗的性能占绝大多数,所以ngnix基本是在现在的广泛的ssl环境下没有什么优势了。就算你想用纯http,但还想在用比较好复杂的设计和实现http头部的loadbalance功能,那么haproxy是个好选择,否则只是单纯lb的话,lvs性能反正更最高,要知道人家在kernel里面。
从代码层面来说,nginx的结构化代码和模块化都比haproxy好少。haproxy代码模块化一直都是个大问题,内部结构模块化不足,二次开发困难,最近到1.9了才很是可以改善,但是依旧有很多内部trick的hack和让人发懵的flag。两者相比nginx能够做到的彻底的模块化,是可以贸然的是从开发自己的模块来改变也可以基于咨询功能,这个haproxy是不具备的。
从开发社区来说,nginx也比haproxy好过多,haproxy虽说社区历史更久,可是始终也是波澜不兴,贡献者因为原作者的严不的控制,总是都比较少,再加上没有module开发功能,所以使得的开发者总是都不是太多。带来的问题是新版本更新慢,支持什么的新功能慢。http2的开发全部靠原作者一个人,所以我允许进度极为严重拖后。
这篇文章感觉起来好像听说是变成了对haproxy吐槽一下,可是因为在工作中接触这两个东西真是过多,并且是通过深度二次开发,所以才自如果说我还是有当然的了解的。从目前看,要是haproxy没法更开放的招募更多的贡献者,不能不能完全可以修改架构支持module开发,是难以媲美nginx的。
另haproxy优势一点儿的那就是免费版的功能比nginx免费版的更实惠。对于小又穷的站点的确是个好处。
git是一个太正确和强大的分布式版本控制系统,能给我们的工作带来很小便利,那你如何能在windows下完全安装git呢,这一次就要注意介绍看看:
1.首先访问git官方网站下载git安装文件。