概述
随着互联网的高速发展,云产业的快速突起,基础架构网络逐渐偏向基于通用计算平台或模块化计算平台的架构融合,来支持多样化的网络功能,传统的PC机器在分布式计算平台上的优势更为明显。在这些针对海量数据处理或海量用户的服务场景,高性能编程显得尤为重要。
全文路线
-
分析了目前的传统服务器结构以及可能存在的问题引出需求
-
提出DPDK开发套件如何突破操作系统限制
-
之后分析了dpdk的整体结构
-
最后对相关联的技术和场景做扩展.
背景分析
前10年中,网络程序性能优化的目标主要是为了解决C10K问题,其研究主要集中在如何管理数万个客户端并发连接,各种I/O框架下如何进行性能优化,以及操作系统参数的一些优化。当前,解决C10K问题的服务器已经非常多。Nginx和Lighttpd两款非常优秀的基于事件驱动的web服务框架,Tornado和Django则是基于python开发的非阻塞的web框架这些软件使得C10K已经不再是问题了。
-
从整体上看 为了满足日益增长的需求主要采用分布式集群来分担负荷,应对大量的用户请求.
集群
-
从结构上来看一个节点的服务器框架包含
-
网络模块
-
事件驱动模块
-
隔离,多核业务分发模块
-
业务层
-
在单个节点上,核的使用来看,主要包括
-
单线程服务器 优点是无竞争,缺点是没有充分利用系统资源
-
多进程模型 隔离性好,利用了系统更多的资源,缺点是进程间资源共享难
-
多线程模型 充分利用系统资源,竞争需要小心处理
需求分析
1.dpdk PCI原理与testpmd/l3fwd/skeletion
2.kni数据流程
3.dpdk实现dns
4.dpdk高性能网关实现
5.半虚拟化virtio/vhost的加速
DPDK相关学习资料需要的可以点击 C++后端学习资料 免费领取
综合分析
-
在应对网络密集型的巨大数据量时,一般选择是横向扩展节点,但是节点的增多会变相的增加设备成本和技术风险,且当集群节点到一定的量后,节点之间的交互成本本身就会成为瓶颈。
-
在特定场合下,譬如嵌入式设备上的后台服务,服务器不可能搭建集群。
因此提升服务器本身性能同样重要。
具体分析
传统服务器可能有下面的潜在问题
-
异步模式的弊端 一般我们使用epoll来高效的处理网络读写事件。在基于多线程的服务器设计框架中,在没有请求到来的时候,线程将会休眠,当数据到来时,将由操作系统唤醒对应的线程,也就是说内核需要负责线程间频繁的上下文切换,我们是在依靠操作系统调度系统来服务网络包的调度。在网络负载很大的场景下只会造成核满转且不断相互切换,进一步增加