架构师之路 - 服务器硬件扫盲

本贴最后更新于 1536 天前,其中的信息可能已经事过境迁

很多架构师都是从软件开发成长起来的,大家在软件领域都有很深的造诣,大部分人对硬件接触的很少。而成为架构师后需要频繁的跟人 、硬件 、软件 、网络打交道,本篇文章就给大家带来服务器硬件方面的相关知识,主要包括服务器、CPU、内存、磁盘、网卡。

服务器

根据服务器的外形和使用场景我们将服务器分为以下四种:

  • 塔式服务器
    image.png
    塔式服务器类似于台式机,主要适用于没有机房机架的公司,一般存放于中小办公环境。
  • 机架式服务器
    image.png
    机架式服务器需要放置在标准机柜中,多存放于数据中心。
  • 刀片服务器
    image.png
    刀片服务器为了提供更高的密度,它比机架式服务器更节省空间,同时,散热问题也更突出,往往要在机箱内装上大型强力风扇来散热,一般应用于大型的数据中心或者需要大规模计算的领域。
  • 高密度服务器
    image.png
    高密度服务器是为了实现更高的空间利用率。

主板架构

服务器的机箱只是外壳,核心架构还是主板。

image.png

这个图是 Intel 典型的主板芯片组架构:服务器的主板有个统一的中央芯片组(Intel C600),芯片组可以连接多个 CPU(E5-2400/2600),CPU 之间通过 QPI 快速通道进行连接,CPU 与内存插槽,PCIE 插槽之间连接,芯片组还与低速的外设进行连接(USB、网卡、SATA 等)。

服务器选型考虑因素

做服务选型主要基于以下几个方面:

  • 限制条件:操作系统 OS、客户喜好及预算、应用系统的编程语言
  • 部署规模:如果规模较大,需要考虑空间占用问题,可考虑刀片或高密度服务器
  • 扩展性:内存数量、磁盘数量、PCI 插槽数量
  • 稳定性
    • OS:UNIX > Linux > Windows
    • 硬件:小型机 > x86 服务器
  • 物理机、虚拟机、容器
    • 计算特点的考虑:是要将一个大的计算能力进行分割,灵活分配,还是有一个很大的课题要用多台机器联合计算
    • IO 特点的考虑:吞吐率与 IOPS 多大?虚拟机能否承受?

服务器厂商

  • 国内的服务器厂商主要有:曙光、华为、浪潮、H3C、联想、长城等
  • 国外的服务器厂商主要有:Dell、HP、IBM

CPU

CPU 作为服务器的核心固件,我们主要通过以下几个概念来了解:

  • Socket
    Socket 俗称多少路,就是一个服务器主板上可以安装几个物理 CPU
  • Core
    一个物理 CPU 实际可以有几个内核(Core),比如我们经常听到的 32 核 64 核、128 核等等
  • 超线程
    如果一个内核可以同时运行 2 个线程我们就称这个 CPU 具有超线程能力,反之则不具备超线程能力
  • 频率
    也叫主频,这个越高越好
  • 内存通道
    每个 CPU 能支撑的最大内存数,Intel 最新的能支持 6 个
  • 内存带宽、内存规格
    CPU 支持什么规格的内存,支持的频率范围是多少

以上的这些概念数据可以通过 CPU 的产品规格书中进行详细了解。在服务器上可以通过 lscpu 命令查看 cpu 信息

image.png

上图服务器 CPU 显示有 72 个,是因为有 2 个 Socket,每个 Socket 有 18 核而每核可以同时运行 2 个线程,通过 2 x 18 x 2 = 72 得到。

厂商

  • 国外的 CPU 厂商主要有:Intel、AMD
  • 国内的 CPU 厂商主要有:龙芯、兆芯、飞腾、海光、申威、华为等

主流产品介绍

Intel 系列

Intel 现在主推的是“Intel 至强可扩展”系列,在这个系列下又分为四档:铂金、金、银、铜,每档下面又有不同的型号

image.png

AMD 系列

AMD 系列主要用到的是霄龙系列,霄龙系列 CPU 核数很高,下面我们看看几款具体的产品

型号 CPU 核心数 线程数量 最大加速时钟频率 基准时钟频率 默认 TDP/TDP
霄龙 7742 64 128 高达 3.4GHZ 2.25GHZ 225W
霄龙 7702 64 128 高达 3.35GHZ 2GHZ 200W
霄龙 7702P 64 128 高达 3.4GHZ 2GHZ 200W
霄龙 7642 48 96 高达 3.35GHZ 2.3GHZ 225W
霄龙 7552 48 96 高达 3.3GHZ 2.2GHZ 200W
霄龙 7542 32 64 高达 3.4GHZ 2.9GHZ 225W

华为鲲鹏系列

鲲鹏 916(低功耗级)

  • 32 核/2.4GHz/16nm/75W
  • 4 通道 DDR4 控制器
  • PCIe 3.0 ,10GE
  • 支持 2 路互联

鲲鹏 920-3326/4826(极致效能型)

  • 32/48 核/2.6GHz/7nm/120/150W
  • 8 通道 DDR4 控制器
  • PCIe 4.0 ,100GE,CCIX
  • 支持 2/4 路互联

鲲鹏 920-3326/4826(极致性能级)

  • 64 核/2.6GHz/7nm/180W
  • 8 通道 DDR4 控制器
  • PCIe 4.0 ,100GE,CCIX
  • 支持 2/4 路互联

主流 CPU 型号性能横向对比

image.png

通过上图大家可以看到国产 CPU 与国外 CPU 之间的差距,性能基本只有 Intel 中档 CPU 性能的一半左右,国产 CPU 还有很长的路要走。

NUMA

NUMA 即 Non-Uiform Memory Access(非一致性内存访问),结合我们之前讲述的主板架构,两颗 CPU 之间有一个通道,每个 CPU 与各自的内存通道进行直连,可以通过下图直观看出。

image.png

CPU0 访问 左边的内存通道速度很快,CPU1 访问右边的内存通道也很快,当 CPU1 要访问左边的内存通道必须要借助 CPU0 的帮忙,需要先通过 QPI 总线找到 CPU0,再来访问左边的内存通道,这就产生了额外的开销,访问左边内存通道的开销相当于直连访问右边通道开销的 3 倍。

所以对于计算密集型任务我们需要尽量避免这种跨 CPU 的内存访问,这就是 NUMA 的问题,非一致性指的是访问本地和跨 CPU 访问的代价差别不一致

我们可以通过指令 numactl -s 查看 numa 的信息

image.png

可以使用指令 numactl --cpunodebind=0 --membind=0 command 指定进程使用的 numa 节点和内存

如上就是让 command 指令只使用 cpu0 ,和内存 0,这就使得进程指令在运行的时候使用的 CPU 和内存在同一侧,达到计算性能速度最大化的效果。

内存

内存大家平时工作中接触的都比较多,对于内存我们主要通过以下几个方面来了解:

  • 内存规格
    DDR3、DDR4,目前主流已经是 DDR4
  • 内存大小
    2G、4G、8G、16G、32G
  • 内存频率
    1333MHz, 1600MHz, 1866MHz、2133MHz, 2400MHz , 2666MHz
  • 带宽
    即 CPU 对内存实际读写数据的速度,DDR4 2400 内存的带宽为 30GB/s 左右
  • 通道
    一个 CPU 可以连接多个内存,CPU 上的内存通道数指的是 CPU 能并发访问直连多少个内存。4 通道表示 CPU 可以同时访问与之直连的 4 根内存,这样就能达到带宽翻四倍的效果。
    在 4 通道模式下读取 1G 的数据进内存,最终数据会分布在 4 根内存上而不是一根内存,这就实现了速度的翻 4 倍;
    每颗 CPU 对自己的内存控制器直连的内存访问速度较快,要访问另一颗 CPU 连接的内存时,需要通过 QPI 总线,开销为本地内存的 3 倍。

了解内存信息

主要通过以下三个命令全面了解内存信息

  • 我们可以通过 dmidecode -t memory | more 指令查看内存信息,效果如下:

image.png

  • 可以使用 dmidecode -t memory | grep Size 指令查看内存大小并判断内存是否正常工作

image.png

将内存插入主板时一般需要对称插入,通过上图我们可以看到下面有根内存不工作。

  • 可以通过 free 指令查看内存容量

image.png

系统剩余内存 available 是我们最关心的一个值,不要被 free 列唬住了。

磁盘

对于磁盘我们主要通过吞吐率和 IOPS 两个指标来对其衡量

吞吐率/吞吐量:单位时间内读写的数据量

  • 机械硬盘:约 100MB/s – 200MB/s;
  • 普通固态硬盘:200MB/s - 500MB/s;
  • PCIE 固态硬盘(直连 CPU):900MB/s - 3GB/s

IOPS:每秒 IO 操作的次数

  • 机械硬盘:100-200
  • 普通固态硬盘:30000-50000
  • PCIE 固态硬盘(直连 CPU):数十万

为什么很多性能比较慢的服务在软件层面进行优化收益很小,而更换一块固态硬盘就能解决所有问题,问题就在这里。

普通固态硬盘的吞吐率大概为机械硬盘的 23 倍,而 IOPS 确达到了机械硬盘的 250300 倍。

IOPS 和数据吞吐量适用于不同的场合:

在随机读写频繁的应用中,如 OLTP(Online Transaction Processing),IOPS 是关键衡量指标。

对于大量顺序读写的应用,则更关注吞吐量指标。

读取 10000 个 1KB 文件,用时 10 秒 Throught(吞吐量)=1MB/s ,IOPS=1000 追求 IOPS
读取 1 个 10MB 文件,用时 0.2 秒 Throught(吞吐量)=50MB/s, IOPS=5 追求吞吐量

网卡

网卡,又称网络适配器或网络接口卡,英文名为 Network Interface Card。在网络中,如果有一台计算机没有网卡,那么这台计算机将不能和其他计算机通信,它将得不到服务器所提供的任何服务了。当然如果没有网卡,就称不上服务器了,所以说网卡是服务器必备的设备,就像普通 PC(个人电脑)要配处理器一样。

我们也可以也通过以下几个维度来了解下网卡:

网卡速度规格
100M、1G、10G、25G

网卡接口类型
RJ45(电、短距离)、光纤(光、长距离)

网卡绑定模式

多网卡绑定一方面能够提高网络吞吐量,另一方面也可以增强网络高可用。
从软件的角度来看,多网卡绑定实际上只需要提供一个额外的 bond 驱动程序即可,通过该虚拟网卡驱动程序可以将实际多块网卡屏蔽,对 TCP/IP 协议层而言只存在一个 Bond 网卡。Linux 主要有 7 种绑定模式:

  • broadcast (广播策略:data is transmitted over all ports)
    这种模式的特点是一个报文会复制两份往 bond 下的两个接口分别发送出去。当有对端交换机失效,我们感觉不到任何丢包。

  • round-robin (轮询策略:data is transmitted over all ports in turn)

    该模式下,链路处于负载均衡状态,数据以轮询方式向每条链路发送报文,基于 per packet 方式发送。即每条链路各一个数据包,这模式好处在于增加了带宽,同时支持容错能力,当有链路出问题,会把流量切换到正常的链路上。

  • active-backup (主备策略:one port or link is used while others are kept as a backup)
    在该模式下,一个端口处于主状态,一个处于备状态,所有流量都在主链路上发出和接收,备链路不会有任何流量。当主端口 down 掉时,备端口接管主状态。

  • loadbalance (适配器传输负载均衡:with active Tx load balancing and BPF-based Tx portselectors)
    在该模式下,通过源和目标 mac 做 hash 因子来做 xor 算法来选择链路,这样就使得到达特定对端的流量总是从同一个接口上发出。

  • lacp (动态链路聚合:implements the 802.3ad Link Aggregation Control Protocol)
    在该模式下,操作系统和交换机都会创建一个聚合组,在同一聚合组下的网口共享同样的速率和双工设定。

小结

本文给大家介绍了服务器硬件的基础知识,只有对硬件有了全面的认识和了解我们才能在硬件选型时做到心中有沟壑,可以针对各个组件的特点选取合适的硬件来支撑其运行。

  • 架构

    我们平时所说的“架构”主要是指软件架构,这是有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。另外还有“业务架构”、“网络架构”、“硬件架构”等细分领域。

    142 引用 • 442 回帖
1 操作
jianzh5 在 2020-09-07 15:02:36 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...