前期分享重点回顾
课间讨论各种语言问题:
C:代码不够重用,存在内存问题,适发底层核心组件(框架变化少,需要控制资源)。
CPP:语法复杂,进入门槛高,内存问题,人力问题
JAVA:GC代码复杂的问题 ,过于抽象。性能问题
GO:不支持面向对象,代码复用差,GC问题
Python:性能问题,操作问题(语法,多线程,GIL)
核心是:深入理解概念和原则,大量实践验证原则,找出问题的根源(不要错过任何重要问题),经常总结复习
具体来说,后台面试的常见问题,缓存设计:面试官可以从缓存的角色开始,数据淘汰选择这些基本问题,如果候选人可以说,可以抛出数据更新缓存不一致这个问题,大多数候选人不知道延迟双删除,那么这个问题可以成为一个开放的问题,面试官可以引导候选人一步一步地推导不同数据更新顺序的后果。在指导了几个场景后,问题可以顺利地成为候选人设计方案,减少数据更新场景中缓存不一致的负面影响。这个过程更容易看出候选人经过一系列分析后的思考和总结能力,也可能看到候选人通常的一些思维方式.
社会招聘面对的是老手,那些职位匹配,技术栈匹配更容易获得offer,高薪取决于HC的紧急和重要性(高等级HC),例如,一些核心部门只招聘10级以上的工程师。这些工资需要与平均水平相匹配。如果你以前的工资很低,涨幅会很大!
面试是一个双向选择的过程。工作不是要求,也不是要求,大多数时候不雇佣你只是因为你运气不好,学校招聘不能进入公司,可以通过社会招聘(弯道超车)(可能水平和薪水会更高),不是,可以尝试几次,没有必要担心,给自己太大的压力,你应该得到的只是时间问题。
推荐文章:
计算机网络硬核指南|网络设计的核心思想
Reactor是基于同步IO,事件驱动机制,reactor实现了被动事件接收和分发的模型,同步等待事件到来并做出反应,Reactor实现相对简单,高效处理耗时短的处理场景,接收多个服务请求,依次处理事件驱动程序
Proactor基于异步IO,同时处理多个服务请求的事件驱动程序,处理速度快,Proactor性能更高,能处理耗时的并发场景
Linux内核协议栈实现框架-分层思想
1.socket layer
2.tcp/udp layer(TCP,UDP)
3.L3 IP layer(route,netfilter,arp)
4.L2 link layer(driver)
5.hardware driver layer
推荐文章:
Linux Kernel TCP/IP Stack|Linux网络硬核系列
Linux网络子系统
传统Linux网络驱动问题
突出的中断费,大量数据的到来会引发频繁的中断(softirq)费用使系统无法承受,
将包从内核缓冲区复制到用户缓冲区,带来系统调用和数据包复制的费用,
对于许多网络功能节点,TCP/IP数据转发环节不需要协议,
NAPI/Netmap虽然从内核到用户空间的数据拷贝减少了,但操作系统调度带来的数据拷贝cache替换也会对性能产生负面影响。
改善iptables/netfilter提高规模瓶颈Linux内核协议栈IO性能和核心需要提供新的解决方案,即eBPF/XDP框架
BPF 是 Linux内核中高度灵活和高效的类似虚拟机的技术,允许以安全的方式在各个挂钩点执行字节码。它用于许多Linux最突出的内核系统是网络、跟踪和安全(如沙箱)。
XDP的全称是:eXpress DataPath,XDP 是Linux提供高性能、可编程的网络数据包处理框架。
? 直接管网卡RX数据包(类似DPDK处理用户态驱动)
? 通过运行BPF指令快速处理报文;
? 和Linux协议栈无缝对接;
推荐文章:
Linux网络新技术基石 |eBPF and XDP
在Kubernetes为了确保容器之间的网络交换,网络至关重要。Kubernetes它本身并没有实现容器网络,而是通过插件自由访问。接入容器网络需要满足以下基本原则:
Pod无论在任何节点运行,都可以直接通信,而无需使用NAT实现地址转换。
Node与Pod在不受限制的前提下,可以互相通信,Pod可访问任何网络。
Pod拥有独立的网络栈,Pod看到自己的地址应该和外面看到的地址一样,而且是一样的Pod所有容器共享同一网络栈。
流行插件:Flannel、Calico、Weave、Contiv
lOverlay模式:Flannel(UDP、vxlan)、Weave、Calico(IPIP)
三层路由模式:Flannel(host-gw)、Calico(BGP)
Underlay网络:Calico(BGP)
目前依赖容器网络Linux 底层技术
网络命名空间(NetworkNamespace),Veth Pair
网桥bridge和路由子系统
Iptables/Netfilter
ebpf和 XDP
网络虚拟化 (NV) 是指将传统的硬件交付网络资源抽象到软件中。NV 它可以将多个物理网络集成到基于软件的虚拟网络中,也可以将网络分为多个隔离和独立的虚拟网络。
在传统的网络环境中,物理主机包含一张或多张网卡(NIC),要实现与其他物理主机的通信,需要通过自己的方式NIC连接到交换机等外部网络设施。
在这种架构下,为了隔离应用,往往会在物理设备上部署一个应用,这样会有两个问题,
1)在大多数情况下,某些应用程序可能是空的,
2)当应用程序增加时,扩展性问题只能通过增加物理设备来解决。无论如何,这种结构都会极大地浪费物理资源。
虚拟机与虚拟机之间的通信由虚拟交换机完成。虚拟网卡与虚拟交换机之间的链接也是虚拟链接。整个主机构成一个虚拟网络。如果虚拟机涉及三层网络包转发,则由另一个角色虚拟路由器完成。
虚拟网络核心技术:
?虚拟路由器-vswitch(宿主机虚拟网络封包转发程序: 内核netfilter,DPDK,FPGA等)
?高性能网关-GW(NAT,EIP-GW,LB等)
? APP性能优化:空间局部性和时间局部性
?协议栈调优:numa亲和力,中断亲和力,软中断队列大小,邻居表大小,连接跟踪表大小,TCP队列调整、协议栈内存分配、拥塞控制算法优化
? Bypass内核协议栈:DPDK,RDMA.
?网卡优化:驱动配置,offload,网卡队列,智能网卡,高性能网卡。
?&nsp; 硬件加速器:ASIC、FPGA,网络处理器,多核处理器
推荐文章:
Linux调度系统全景指南(终结篇-性能优化)
Linux问题分析与性能优化
拥塞控制的意义:
解决对共享链路的带宽分配问题
保持网络通畅
小流无阻塞地通过网络(FCT=RTT)
实现高效带宽利用
维护流之间的公平性
采集信息:
• 丢包
• 队列高度
• RTT
• INT信息(In-bandNetwork Telemetry,带内网络遥测技术)
传统Linux网络驱动的问题
中断开销突出,大量数据到来会触发频繁的中断(softirq)开销导致系统无法承受
需要把包从内核缓冲区拷贝到用户缓冲区,带来系统调用和数据包复制的开销
对于很多网络功能节点来说,TCP/IP协议并非是数据转发环节所必需的
NAPI/Netmap等虽然减少了内核到用户空间的数据拷贝,但操作系统调度带来的cache替换也会对性能产生负面影响
1 DPDK无中断方式直接操作网卡的接收和发送队列2 软中断必须内核处理,DPDK UIO很薄,专门处理软中断(链路状态通知仍必须采用中断方式)。
DPDK网络优化
•PMD用户态驱动•CPU亲缘性和独占•内存大页和降低内存访问开销•避免False Sharing•内存对齐•cache对齐•NUMA•减少进程上下文切换•分组预测机制•利用流水线并发•为了利用空间局部性•充分挖掘网卡的潜能
https://tonydeng.github.io/sdn-handbook/dpdk/introduction.html
RDMA 作为一种旁路内核的远程内存直接访问技术,被广泛应用于数据密集型和计算密集型场景中,是高性能计算、机器学习、数据中心、海量存储等领域的重要解决方案。
RDMA 具有零拷贝、协议栈卸载的特点。RDMA 将协议栈的实现下沉至RDMA网卡(RNIC),绕过内核直接访问远程内存中的数据
RDMA 与传统 TCP/IP实现相比不仅节省了协议处理和数据拷贝所需的CPU资源,同时也提高了网络吞吐量、降低了网络通信时延
ASIC的特点是:面向特定用户的需求,ASIC在批量生产时与通用集成电路相比具有体积更小、功耗更低、可靠性提高、性能提高、保密性增强、成本降低等优点。
FPGA的特点:加电时,FPGA芯片将EPROM中数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。掉电后,FPGA恢复成白片,内部逻辑关系消失,因此FPGA能够反复使用。理论上,FPGA允许无限次的编程。
ASIC需要较长的开发周期,风险较大
从设计成本来考虑,小批量上FPGA占优,大批量时,ASIC占优
相同的工艺和设计,在FPGA上的速度应该比ASIC跑得慢。因为FPGA内部是基于通用的结构,也就是LUT(lookup table),它可以实现加法器,组合逻辑等等,而ASIC,一般加法器就是加法器,而比较器就是比较器,FPGA结构上的通用性必然导致冗余
总的来说,就如同GPU和CPU一样。GPU可以非常快的处理图像,但是让GPU去处理其他的东西,GPU表示摊手。CPU很多的运算都能处理,也能去处理图像,只是慢而已。一旦你是冲着某个目的去的(ASIC)你为了实现这个目标,你各种没节操没下线都可以。如果你想要多方面兼顾(FPGA),你就不可能在每一个方面都做到最好,你必须trade-off。
Nitro项目将焦点放在这三成的虚拟化损耗上,通过定制化的硬件,将这些虚拟化损耗挪到定制的Nitro系统上,让服务器上的资源基本上都能够提供给用户。
阿里神龙架构把VPC网络虚拟化 offload到FPGA硬件。
核心思想:从下到上分层分析各层可能产生丢包场景,先查看关键信息,然后再分析确认;
了解收发包的原理,可以了解到丢包原因主要会涉及网卡设备、网卡驱动、内核协议栈,APP socket程序等。从下到上分层分析(各层可能性出现的丢包场景),然后查看关键信息(学会使用各种网络排障工具),最终定位出网络问题的原因。
本地服务器排查
> 硬件网卡丢包
> 网卡驱动丢包
> 以太网链路层丢包
> 网络IP层丢包
> 传输层UDP/TCP丢包
> 应用层socket丢包
推荐文章:
云网络丢包故障定位全景指南
技术前沿:智能故障定位系统,比如阿里的vtrace和齐天平台。
文章:https://developer.aliyun.com/article/764841?spm=a2c6h.12873639.0.0.6117671ctzqYdB
论文:https://dl.acm.org/doi/abs/10.1145/3387514.3405851
阿里齐天平台:https://developer.aliyun.com/article/727656
。这次5个多小时的分享,在场的同学都说已经可以回本了。
极客星球希望成为,决定做这个,,尽最大努力提供技术和成长帮助!我愿把我毕生所学的知识和多年职场实战经验分享给大家, 帮你解决技术成长中困惑和迷茫,扫清无用的障碍,助你快速成长,物有所值!
目前还有一些优惠劵,欢迎大家加入极客星球,相互学习,共同进步!
五个多小时的分享,值得一个三连(一朵小红花)吗
- END -
推荐阅读
每个人都有自己的人生节奏
求点赞,在看,分享三连