超高性能网络应用开发:深入理解DPDK技术

DPDK是数据平面开发套件,由6WIND,Intel等多家公司开发,主要基于Linux系统运行,用于快速数据包处理的函数库与驱动集合,可以极大提高数据处理性能和吞吐量,提高数据平面应用程序的工作效率。

dpdk是什么?可能很多人只是听过,有的可能听都没有听过。但是目前确实很多的互联网大小厂都在使用这样一门技术,从招聘网站上看,对应的岗位也很多,薪资不菲:

图片

比如OVS,VPP等技术,很多云厂家都在用,提供云主机,组件,数据库等等,它对比于原生,能够大幅提升IPV4的转发性能,可以让用户在迁移包处理应用时,获得更好的成本和性能优势。

所以,随着技术的发展,dpdk会越来越受到重视,将广泛应用到各类分布式系统中。

还不熟悉的朋友,这里可以先领取一份dpdk新手学习资料包(入坑不亏):图片

图片

那听过它的朋友可能还会有一个问题,什么是云原生?首先,它是一个云产品,原生的意思是说,把原来已有的技术再拿过来用。举个例子:你在阿里云/腾讯云买了一个缓存服务器,它是基于redis做的,那么基于redis定制作为云产品,它就是一个云原生的东西。

作为近年来运用越来越广泛,被互联网企业越来越认可的技术,dpdk技术该如何学习呢?

这里给大家推荐零声教育全网独家的【DPDK网络存储虚拟化开发课程体系,通过32个项目案例,2W+行手写代码,全面解析4个dpdk技术方向:

1、DPDK网络专栏

(1)dpdk基础知识

  • 多队列网卡,vmxnet/e1000
  • igb_ uio与vfio模块
  • kni模块
  • hugepage的理解
  • 零拷贝
  • dpdk与netmap区别
  • dpdk的工作环境

(2)网络协议栈

  • dpdk-arp
  • netsh静态arp表设置
  • dpdk-icmp
  • udp协议格式分析
  • udp协议sendto, recvfrom实现
  • dpdk-ip
  • dpdk-tcp
  • tcp协议栈bind,listen, accept实现
  • tcp协议栈recv, send, close的实现
  • tcp三次握手实现
  • tcp四次挥手实现
  • tcp acknum与seqnum的确认机制实现
  • tcp的并发连接设计
  • epoll并发的实现
  • tcp协议栈与epoll之间的回调实现

(3)dpdk组件项目

  • dpdk-ac
  • dpdk-kni
  • /dev/ kni的原理分析
  • kni_ dev的流程
  • kni的t缓冲区,rx缓冲区
  • kni的用户空间与内核空间映射
  • mbuf如何转化为kernel的sk_ buff
  • dpdk- timer
  • bpftrace的使用
  • dpdk- bpf源码流程

(4)dpdk经典项目

  • dpdk- dns
  • dpdk- gateway
  • dpdk-ddos熵计算源码
  • ddos attach检测精确度调试
  • ddos attach测试T具hping3
  • 布谷鸟hash原理与使用

2、储存技术专栏

(1)高效磁盘io读写spdk(C)

  • 存储框架spdk,为技术栈打开扇存储的大门
  • spdk运行环境与vhost
  • NVMe与PCl的关系
  • 手把手实现spdk_ server
  • nvme与pcie以及手写nvme读写操作
  • bdev与blob之间的关系
  • 实现blob异步读写
  • blobstore的读写操作实现与rpc的关系
  • fio性能测试性能对比libaio,io_ uring,psync
  • fio plugin工作流程
  • fio plugin开发

(2)spdk文件系统的实现

  • 文件系统功能拆解
  • spdk_ env_ init与spdk_ app init的差别
  • spdk_ _thread_ poll实现rpc回调
  • fs_ operations结构体定义
  • file_ operations结构体定义
  • dir_ operations结构体定义
  • syscall的hook实现
  • http://io内存管理
  • 基数树对文件系统内存管理
  • spdk_ blob的open,read,write,close
  • 测试用例与调试入口函数

(3)spdk kv存储的实现

  • KV存储拆解Set, Get, Mod, Del
  • app/.a库/so库对于kv存储的选择
  • bdev与blob对于kv存储的选择
  • kv service启动blob资源操作
  • kv service关闭blob资源回收
  • kv service接口set,get,modify,delete
  • kv遍历与查找实现
  • page存储chunk的管理
  • pagechunk的get与put
  • page单查找与多页查找
  • btree, artree, hashmap,radixtree, rbtree之间的选择
  • slab的实现
  • slab分配slot与释放slot
  • 为kv加上conf文件
  • 测试用例与性能测试

3、安全与网关开发专栏

(1)可扩展的矢量数据包处理框架vpp(c/c++)

  • vpp命令详解
  • mac/ip转发plugin
  • load_ balance plugin
  • flowtable plugin
  • vpp源码之间的差异
  • 多网卡数据接收与转发
  • 解决plugin编译加载
  • vpp启动load so的流程
  • vpp的结构体vlib_ _main实现分析
  • vpp的结构体vnet_ main
  • vector的操作实现
  • vpp vcl库与LD_ PRELOAD实现分析
  • vcl原理讲解
  • vcl tcpserver实现原理
  • vcl tcpclient实现原理
  • vcl与iperf3的客户端与服务器
  • vcl与nginx的wrk性能测试
  • vcl与haproxy的性能测试
  • vpp 1801版本与vpp 2206版本
  • vpp httpserver的实现源码
  • vpp plugin quic源码分析
  • vpp plugin hs_ app的源码
  • vpp plugin rdma的实现分析
  • vpp plugin loadbalance
  • vpp plugin nat的源码分析
  • vpp host-stack tcp协议实现
  • vpp plugin的测试用例实现

(2)golang的网络开发框架nff-go(golang)

  • nff-go实现的技术原理
  • nff-go/low.h实现分析
  • nff- go数据接收的实现
  • nff-go数据发送的实现
  • ipsec协议解析与strongswan的ipsec
  • nff go的缺陷与不足

4、虚拟化与云原生专栏

(1)DPDK的虚拟交换机框架OvS

  • ovs编译安装,ovs核心组件内容
  • ovs-vswitchd的工作原理
  • ovs-vswitchd与dpdk的关系
  • ovs-vsctl的网桥,网口操作
  • qemu-system-x86_ 64构建多子网
  • ovs与qemu数据流分发
  • ovs搭建docker跨主机通信
  • ovsdb server与ovsdb协议
  • json-rpc为控制面提供开发
  • ovs-tcpdump/ovs-l3ping
  • OvS 4种数据路径
  • VXL AN数据协议
  • ovs流量统计

(2)高性能4层负载均衡器DPVS

  • dpvs的技术组件与功能边界
  • lvs+keepalived配置高可用server
  • dpvs与|lvs+ keepalived的关系
  • dpvs.conf的配置文件
  • dpvs的FNat/NAT/SNAT模式
  • dpvs的DR模式
  • dpvs的tun模式
  • 通过quagga配置ospf
  • dpvs的tc流控操作与源码实现
  • dpvs代码架构分析
  • dpvs测试用例ipset, tc,mempool

5、测试工具专栏

(1)perf3

  • vpp vcl的perf3接口hook
  • perf3测网络带宽
  • tcp吞吐量测试
  • udp丢包与延迟测试
  • json测试结果输出

(2)TRex

  • TRex的运行原理
  • TRex与dpdk
  • 构建TRex测试系统
  • t-rex -64- debug gdb调试
  • bg-sim- 64模拟单元测试
  • YAML文件编写
  • 流编排与自动化框架
  • 报文变量设置

(3)dpdk-pktgen

  • pktgen命令讲解
  • default.cfg配置文件分析
  • 120M bits/s的转发速率

(4)fio

  • ioengine的实现
  • ioengine_ ops的分析
  • iodepth的分析
  • spdk_ nvme的fio分析
  • spdk_ bdev的fio分析
  • spdk_ blob的ioengine实现
  • psync,io_ uring, libaio性能对比

6.性能测试专栏

(1)性能指标

  • 吞吐量bps
  • 拆链/建链pps
  • 并发
  • 最大时延
  • 最小时延
  • 平均时延
  • 负载
  • 包速fps
  • 丢包率

(2)测试方法

  • 测试用例
  • vpp sandbox
  • perf3灌包
  • rfc2544

以上是系统学习课程内容,需要系统学习请扫码添加小雯老师(备注gzh领取专属大额优惠券,备注成功还可以额外获取200的京东购物卡

图片

帮助大家全面掌握DPDK的核心技术点:

  • DDOS防护
  • ovS虚拟交换机
  • VPP数据包处理框架
  • nff-go的网络开发框架
  • 网络虚拟化virtio
  • spdk高效磁盘io读写
  • 用户态协议栈
  • c1000k,c10m
  • ovs的二开

那什么样的程序员适合学习dpdk技术?

  • 计算机相关专业,对底层技术原理感兴趣的应届生;
  • 对网络原理、dpdk、高性能网络开发的在职工程师;
  • 工作中从事dpdk/vpp/ovs等开发的工程师;
  • 有良好的计算机原理和底层技术基础,想往互联网行业发展的桌面开发,c++开发工程师等等

课程目标岗位

  • 高级网络开发工程师
  • DPDK开发工程师
  • 云基础开发工程师
  • NFV开发工程师
  • 高性能优化工程师
  • 云产品研发工程师
  • SDN开发工程师

至于学习效果怎么样?👇

图片

图片

图片

自学的弊端:网上资料繁杂,知识零碎,看过之后容易很快就忘掉,遇到问题只能自己钻研,有些很简单的问题不知不觉就浪费了很多时间,除非你是定力耐心毅力非常强的人,不然学习起来会没有方向感,盲目的看书枯燥乏味耗时比较长,会导致没有学习积极性失去信心与坚持下去的决心等等。总的来说自学不能说完全不行,只是适合少数人,自学的难度比报班系统学习一定是困难很多很多倍,多付出很多很多倍的。

反之报班学习的优势在于:

节约时间,知识串联:视频学习老师会提取知识点讲解出来比看书快了很多倍,并且理解起来比枯燥乏味的读书更有意思,尤其计算机相关的理论知识更是繁琐复杂交错依附,报班会让你更加系统的学习,知道前因后果来龙去脉,老师会把知识串联起来交给你,配套的资料发给你,而不是独立零散的知识点学习,对于提升来说,是高效且快速的。

老师答疑:遇到不懂得问题,老师会在自己看到的第一时间给到解答,24小时的答疑服务,会大大节约了你的学习时间。老师在知识体系,课程内容上,简历书写,面试指导,谈薪技巧等等方面都有着丰富的经验,课程内容也是由简到难,源码分析勾画重点,不做无用功,会提供配套的学习资料,图文并茂,讲解上通俗易懂,技术慢慢深入串联,学员通过和老师的沟通交流从而轻松学习,来达到自己想要达到的目标。

时间自由学习高效:很多在职的开发人员除了日常上班大部分时间还要加班,对于提升自己都是挤时间,没有完整的学习时间,这样其实给自学增添了很大的难度,跟着视频学习每日定好进度下班以后有固定的学习时间学习内容,或者周末抽几个小时整时间学习,有方向感且高效。

要说报班学习的弊端,那我只能想到一个,就是会有金钱上的一个付出,但是技术学会了是会跟随你一辈子的,现在的付出可能就是以后你一个月的涨薪部分,这个账怎么算都不会亏。投资自己 是风险最低 收益最高的,在大环境中安于现状才是井底之蛙,不断学习提升自己才是程序员最需要做的,提升工作竞争力,让自己在现在的公司被需要!

现如今各行各业内卷都很严重,不要说行业不行,而是大家越来越专业,这个是行业发展的必然性,优胜劣汰适者生存,时代在改变,不提高自己的核心竞争力就要出局。

最后:

给校招的小伙伴一句话:第一份工作不亚于一次高考,珍惜校招,社招的竞争是你目前想象不到的。能去大厂觉不妥协,IT行业第一份工作背景越好,起点越高,后续发展空间越好!

给那些1-3年的安于现状的伙伴一句话:

不要抱怨市场,不要安于现状,在低端,往中端领域看,在中端往高端领域看。认知以及对自身的要求,都会有所改变。

给那些担心35岁的伙伴一句话:

决定上限的不是年纪,而是技术。

原创文章,作者:guozi,如若转载,请注明出处:https://www.sudun.com/ask/81350.html

(0)
guozi's avatarguozi
上一篇 2024年5月31日 上午11:34
下一篇 2024年5月31日 上午11:36

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注