首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

深入理解 Web Server 原理与实践:c10k 问题

提出问题

作者从现代计算机硬件所能承受的带宽和计算速度来(注:十多年前的计算机)计算支持单个 client 所需要的内存和带宽以及计算周期,从而得出当时的计算机承载 10k 个连接并不是多大的问题。

基础知识准备

在理解作者所要讲解的问题之前,作者提供了一本书供读者参考--Unix Network Programming : Networking Apis: Sockets and Xti (Volume 1),只有对 socket、IO 模型、线程等操作系统技术有所理解才能更好的理解作者提出的问题。

借力开源 IO framework

作者列举和介绍了一些著名的 IO framework,借助这些 IO framework 开发者可以比较容易实现各种夸平台的高性能的 Web Server,作者的意图也很明显:不要重复发明轮子,程序员要善于借力。

各种 IO 编程范式在各个平台的实现

作者分析了各种 IO 策略在各个平台的实现以及它们的优缺点,其中包括:

使用非阻塞 IO 单线程 level-trigger 模型

使用非阻塞 IO 单线程 edge-trigger 模型

单线程 异步 IO 模型

多线程模型

有了这些分析,读者几乎可以说对这些模型的优缺点有了大体的掌握和理解。

特定问题特定分析

总是有些问题需要额外关注,作者列举了 linux 的打开文件的问题,Java 的 IO 模型实现问题,这些问题在设计和实现 Web Server 时都需要特别关注。

技巧和限制

作者列举在实现高性能的的同时有些技巧需要我们去留意,比如 zero-copy、TCP 数据发送的问题等等,除此之外一些系统或技术的限制我们也应该去了解,也就是说要充分发挥技术的优势,尽量避免技术的缺陷。

如何衡量性能

说了那么多高性能的实用技术,又如何评估呢?作者提供了两个指标:

每秒的连接数

尽可能多的传输大文件的 client 存在时 client 的传输速率

开源实现

最后是各种模型范式的开源实现,这些都是非常好的学习资料,几乎囊括了几乎现在所有的高性能服务的实现模型。

总结

当下的计算机硬件可以非常轻松的获得 c10k 的性能,拿 nginx 来举例 2核4g 的配置可以轻松获得数万的并发连接,当我们解决了 c10k 的问题之后,下一步应该向 c10m 迈进。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180710G0965200?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券