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