今天玩龙之谷破晓奇兵主机突然吱吱的响,持续的,最小化就没有了,怎么回事?

&figure&&img src=&https://pic4.zhimg.com/v2-4a95e17cafda568f907f88bdc2807762_b.jpg& data-rawwidth=&1920& data-rawheight=&1080& class=&origin_image zh-lightbox-thumb& width=&1920& data-original=&https://pic4.zhimg.com/v2-4a95e17cafda568f907f88bdc2807762_r.jpg&&&/figure&&p&Ubuntu中的许多操作在终端(Terminal)中十分的快捷,记住一些快捷键的操作更得心应手。在Ubuntu中打开终端的快捷键是Ctrl+Alt+T。其他的一些常用的快捷键如下:&/p&&p&&b&快捷键与功能&/b&&/p&&p&
自动补全&br&
光标移动到开始位置&br&
光标移动到最末尾&br&
删除此处至末尾的所有内容&br&
删除此处至开始的所有内容&br&
删除当前字符&br&
删除当前字符前一个字符&br&
删除此处到左边的单词&br&
粘贴由Ctrl+u, Ctrl+d, Ctrl+w删除的单词&br&
相当于clear,即清屏&br&
查找历史命令&br&
向回移动光标&br&
向前移动光标&br&
将光标位置的字符和前一个字符进行位置交换&br&
恢复 ctrl+h 或者 ctrl+d 或者 ctrl+w 删除的内容&br&
暂停屏幕输出&br&
继续屏幕输出&br&
向上显示缓存命令&br&
向下显示缓存命令&br&
关闭终端&br&
在EOL和当前光标位置移动&br&
显示可能hostname补全&br&
终止进程/命令&/p&&p&
Shift+上或下
终端上下滚动&br&
Shift+PgUp/PgDn
终端上下翻页滚动&br&
Ctrl+Shift+n
新终端&br&
输入gnome-terminal打开终端&br&
Shift+Ctrl+T
打开新的标签页&br&
Shift+Ctrl+W
关闭标签页&br&
Shift+Ctrl+C
Shift+Ctrl+V
切换至对应的标签页&br&
Shift+Ctrl+N
打开新的终端窗口&br&
Shift+Ctrl+Q
管壁终端窗口&br&
打开帮助指南&br&
激活菜单栏&br&
全屏切换&br&
打开 “文件” 菜单(file)&br&
打开 “编辑” 菜单(edit)&br&
打开 “查看” 菜单(view)&br&
打开 “搜索” 菜单(search)&br&
Ctrl+Left-Arrow
光标移动到上一个单词的词首&br&
Ctrl+Right-Arrow
光标移动到下一个单词的词尾&/p&&p&
打开 “终端” 菜单(terminal)&br&
打开 “帮助” 菜单(help)&/p&&p&Shift+Ctrl+PgUp/PgDn
左移右移标签页&br&
Ctrl+PgUp/PgDn
切换标签页&/p&&p&另外一些小技巧包括:在终端窗口命令提示符下,连续按两次 Tab 键、或者连续按三次 Esc 键、或者按 Ctrl+I 组合键,将显示所有的命令及工具名称。Application 键即位置在键盘上右 Ctrl 键左边的那个键,作用相当于单击鼠标右键。&/p&&p&&b&Terminal终端 &/b&&/p&&p&
CTRL + ALT + T:
打开终端&br&
自动补全命令或文件名&br&
CTRL + SHIFT + V:
粘贴(Linux中不需要复制的动作,文本被选择就自动被复制)&br&
CTRL + SHIFT + T:
新建标签页&br&
关闭标签页&br&
清楚屏幕&br&
CTRL + R + 文本:
在输入历史中搜索&br&
移动到行首&br&
移动到行末&br&
终止当前任务&br&
把当前任务放到后台运行(相当于运行命令时后面加&)&br&
表示用户目录路径&/p&&p&如果打开一个程序,以“系统配置”为例,先按SUPER + A,SUPER即Win键,然后切换到中文输入法,输入“系统配置”,按回车即打开程序。再按TAB键浏览系统配置里的子配置程序&/p&&p&&b&桌面&/b&&/p&&p&ALT + F1:
聚焦到桌面左侧任务导航栏,可按上下键导航。&br&
运行命令&br&
关闭窗口&br&
ALT + TAB:
切换程序窗口&br&
ALT + 空格:
打开窗口菜单&br&
桌面截图&br&&/p&&p&SUPER + A:
搜索或浏览程序(Application)&/p&&p&&br&&/p&&p&SUPER + F:
搜索或浏览文件(File)&br&
SUPER + M:
搜索或浏览音乐文件(Music)&/p&&p&&b&Orca读屏软件 &/b&&/p&&p&启动Orca:
SUPER + A,然后输入orca,然后回车&br&
ORCA + 空格:
显示首选项对话框(ORCA键是指Insert插入键或CAPS LOCK大小写转换键,取决于设置)&br&
读当前时间&br&
ORCA + tt:
读当前日期&br&
切换合成语音开关&br&
朗读标题&br&
ORCA + //:
朗读状态栏&br&
ORCA + 分号:
朗读整个文件&br&
退出Orca&br&更多快捷键请参考Orca首选项的键绑定标签页&/p&&p&&b&Firefox浏览器 &/b&&/p&&p&进入Firefox的方法:&br&
1. SUPER + A,然后按firefox,回车。这个是在Dash面板中搜索应用程序运行。事实上,只要按fir就能定位到Firefox程序。&br&
2. ALT,然后按firefox,回车。这个相当于在命令行运行一条命令。&br&
3. 在终端中按firefox&,回车。这个适用于以终端作为主要操作窗口的用户,使用TAB键还可以自动补全命令(只需输入前几个字母再按TAB键)。&/p&&p&&在shell中是后台运行的意思,这样终端就不会被Firefox独占。&/p&&p&CTRL + T:
新建标签页&br&
关闭标签页&br&
CTRL + SHIFT + T:
重新打开最近关闭的一个标签页&br&
CTRL + TAB:
切换到下一个标签页&br&
CTRL + SHIFT + TAB: 切换到上一个标签页&br&
ALT + [1-8]:
跳到制定标签页&br&
跳到最后一个标签页&br&
跳到地址栏&br&
停止加载当前页面&br&
跳到搜索引擎输入框&br&
在当前页面中搜索&/p&&p&
收藏到书签&br&
ALT + 左方向键:
退出&/p&&p&/: 快速查找。在Linux中很多程序(如VI、Man、Less)都使用/作为搜索的快捷键,并且可使用正则表达式查找。但在Firefox中没有正则表达式搜索的功能。&/p&&p&&b&Gedit文本编辑器&/b&&/p&&p&启动gedit:
SUPER + A,然后按gedit,回车&br&
新建文档&br&
关闭文档&br&
CTRL + SHIFT + S: 另存为&br&
搜索并替换&br&
跳到某一行&br&
退出&/p&&p&&b&Nautilus文件管理器&/b&&/p&&p&启动Nautilus的方法:&/p&&p&1. SUPER + 1,这个方法仅适用于Nautilus在左边快速启动的位置没有改变的情况。&br&
2. SUPER + A,然后输入nautilus,然后回车&br&
F2: 重命名&br&
CTRL + 1: 图标视图&br&
CTRL + 2: 列表视图&br&
CTRL + T: 新建标签页&br&
CTRL + W: 关闭标签页&br&
CTRL + D: 收藏到书签&br&
CTRL + Q: 退出&br&
Nautilus还有很多和Firefox一致的快捷键。&/p&&hr&&p&你想更深入了解学习Linux知识体系,你可以看一下我们花费了一个多月整理了上百小时的几百个知识点体系内容: &/p&&p&&a href=&http://link.zhihu.com/?target=http%3A//www.magedu.com/74163.html%3Flinux_wenzhang_zhihu_jinke_zuiquanubuntuzhongduankuanjiejian_& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&【超全整理】《Linux云计算从入门到精通》linux学习入门教程系列实战笔记全放送&/a&&/p&
Ubuntu中的许多操作在终端(Terminal)中十分的快捷,记住一些快捷键的操作更得心应手。在Ubuntu中打开终端的快捷键是Ctrl+Alt+T。其他的一些常用的快捷键如下:快捷键与功能 Tab 自动补全 Ctrl+a 光标移动到开始位置 Ctrl+e 光标移动到最末尾 Ctrl+k 删除…
今天有一位同学来看望我,一位大三的学生,聊了计算机网络,让我惊讶的是,H同学的计算机网络水平很高,即使工作十年的网络工程师能达到他的水平,也是非常稀少的。&br&&br&闲聊他说过一句话:最喜欢看交换机闪烁的灯,闪一下就意味着有一个包从此端口经过…&br&&br&记得N年前,我看到灯闪烁一下,想到的是心跳,在心跳示波器上就是一串脉冲信号,这是计算机网络传输的一个单元,姑且称为IP包。&br&&br&计算机网络的数据传输,是由N个离散的数据单元(IP包)组成的,再去回忆关于TCP连接的概念,TCP的面向连接,而数据单元IP包却是离散的,而TCP也是由IP包来承载的,那意味着TCP报文也是离散的,既然是离散的,又谈何连接呢?&br&&br&TCP连接是一种逻辑概念,通信双方通过离散的IP包交互,分享了彼此的序列号、缓存大小等参数,彼此就可以认为和对方是连接的。&br&&br&而在这个逻辑连接上传输数据,自然需要对方确认,否则如何知道离散的IP包是否到达对方?&br&&br&而如果迟迟收不到对方的确认,也不能傻傻地等不是吗?需要将数据再重传,可以重传多次,一直到收到对方的确认,这样即使网络有短暂的故障,可以通过多次重传予以克服。而如果重传了多次还是没有收到对方的确认,那只有放弃了,告诉用户发生的一切。&br&&br&这是我看完TCP/IP协议的一点总结,这块是计算机网络的核心,比路由协议更重要,所以要花很多时间研究这些最核心的技术。&br&&br&而在研究这些基础内容时,需要用抓包工具将网络上离散的数据单元捕获下来,研究数据单元的时序、数据单元的格式、研究数据单元是由谁触发产生的,是TCP/IP系统进程、还是用户进程,对这些细节的越深入,脑海里就会勾勒出一个分层的场景:用户进程(高层)、TCP/IP系统进程(中层)、硬件网卡(底层),有了分层的概念,就会自然地去想象,数据单元从高层--& 中层--&底层 下沉的过程,以及数据单元从底层 ---& 中层 ---&高层上浮的过程,下沉、上浮的过程牵扯到很多细节,这需要看TCP/IP协议。&br&&br&说了一堆,核心思想是,想学好计算机网络,首先要有H同学那样的热情,研究TCP/IP协议,做实验,抓包解析,然后再去看书,再实验,抓包分析…这个过程是一个周期性的迭代过程,需要时间的积累。
今天有一位同学来看望我,一位大三的学生,聊了计算机网络,让我惊讶的是,H同学的计算机网络水平很高,即使工作十年的网络工程师能达到他的水平,也是非常稀少的。 闲聊他说过一句话:最喜欢看交换机闪烁的灯,闪一下就意味着有一个包从此端口经过… 记得N…
&figure&&img src=&https://pic2.zhimg.com/v2-1e263e4f8b60_b.jpg& data-rawwidth=&720& data-rawheight=&400& class=&origin_image zh-lightbox-thumb& width=&720& data-original=&https://pic2.zhimg.com/v2-1e263e4f8b60_r.jpg&&&/figure&&p&作者:Matt Klein &/p&&p&译者:崔秀龙&/p&&p&原题:Introduction to modern network load balancing and proxying&/p&&p&&br&&/p&&p&最近我注意到,针对负载均衡和代理这两项现代网络技术,有教育意义的介绍性材料相当稀缺。这引起我的思考:为什么会这样?在可靠的分布系统的架构中,负载均衡是核心概念之一,这一地位要求有对应的高质量信息。&/p&&p&&br&&/p&&p&然而经过搜索之后,发现这方面的内容的确匮乏。Wikipedia 上的 负载均衡 和 代理服务器 页面只包含了一些相关主题的概念,这些概念的阐述,尤其是微服务架构相关的部分显得相当概括和晦涩。Google 搜索 Load Balancing,则会出现一些供应商页面,充斥了各种时髦用词,却罕有细节。&/p&&p&本文里我会尝试对现代网络负载均衡和代理技术进行一些讲解,来弥补上述的材料缺失。平心而论,相关内容中的大量主题足以支撑起一本专著。为了符合我对博客长度的控制习惯,我会将其中一些复杂主题进行概括和提炼,用简单的概要方式进行陈述;根据读者的兴趣和反馈,我可能会在后续文章中对某些话题的细节进行更多的阐述。&/p&&p&上面的内容就是我开始写作本文的动机,下面开始正式内容。&/p&&p&1&/p&&p&&b&网络负载均衡和代理是什么?&/b&Wikipedia 对负载均衡的定义 是:&/p&&p&In computing, load balancing improves the distribution of workloads across multiple computing resources, such as computers, a computer cluster, network links, central processing units, or disk drives. Load balancing aims to optimize resource use, maximize throughput, minimize response time, and avoid overload of any single resource. Using multiple components with load balancing instead of a single component may increase reliability and availability through redundancy. Load balancing usually involves dedicated software or hardware, such as a multilayer switch or a Domain Name System server process.&/p&&blockquote&中文版:&/blockquote&&p&负载平衡(Load balancing)是一种计算机网络技术,用来在多个计算机(计算机集群)、网络连接、CPU、磁盘驱动器或其他资源中分配负载,以达到最优化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。使用带有负载平衡的多个服务器组件,取代单一的组件,可以通过冗余提高可靠性。负载平衡服务通常是由专用软件和硬件来完成。&/p&&blockquote&上面的定义不仅包含了网络,还包含了计算的所有方面。操作系统、网络以及容器编排器等都有各自的负载均衡技术,用于使用各自的资源进行各自的任务调度。本文仅就网络负载均衡进行探讨。&/blockquote&&p&&br&&/p&&p&&br&&/p&&p&图 1:网络负载均衡概览&/p&&p&&br&&/p&&p&图 1 对网络负载均衡进行了一个高层次的概括。多个客户端向多个后端发起资源请求,负载均衡器处于客户端和后端之间,简单来说完成如下任务:&/p&&ul&&li&服务发现:系统中有哪些后端可用?这些后端的地址(也就是:负载均衡器如何同这些后端通信)?&/li&&li&健康检查:哪些后端是健康的可以用于接收请求?&/li&&li&负载均衡:用什么算法来把独立的请求分发给健康的后端?&/li&&/ul&&p&在分布式系统中合理的使用负载均衡能带来很多好处:&/p&&ul&&li&命名抽象:每个客户端不再需要知道每一个后端(服务发现),客户端可以通过预定义的机制来找到负载均衡器,然后让负载均衡器完成命名解析功能。这些机制包括内置库,以及路人皆知的 DNS/IP/端口 地址,后面会深入讨论。&/li&&li&错误隔离:通过健康检查以及一些其他的算法和技术,负载均衡器的路由方法能够有效的绕过瘫痪或过载的后端。这样运维人员在面对系统故障时,就可以更加从容的进行错误处理。&/li&&li&成本和性能收益:分布式系统的网络的一致性比较差。系统通常要跨越多个网络区域。同一区域内,网络资源通常是低售的;而在跨区域的情况下,超售则是常态(超售和低售的鉴别,是通过网卡上可消耗的带宽和路由器之间的可用带宽进行比对得出的结论)。智能的负载均衡会尽可能保证通信在同一区域内进行,从而提高性能(降低延迟)并降低总体系统成本(降低区域间的带宽和光纤需求)。&/li&&/ul&&p&&br&&/p&&p&&b&负载均衡器 vs 代理服务器&/b&业内谈到网络负载均衡器,Load Balancer 以及 Proxy 这两个术语经常会同样对待,本文中也把这两个词条等价处理(卖弄一下:并非所有的代理都是负载均衡器,但是负载均衡是主流代理的首要功能)。&/p&&p&有人可能会问,有的负载均衡功能是作为客户端库的内置功能完成的,这种负载均衡器就不是代理服务器。这一话题本就容易混淆,这一质问更加让人糊涂。文中会详述这种负载均衡器的拓扑,这种嵌入的负载均衡方式只是代理的一种特例,应用通过内嵌的库来完成代理职能,跟典型的负载均衡器的区别仅在于进程内外而已,其整体抽象是一致的。&/p&&p&&b&四层(连接/会话)负载均衡&/b&业界在讨论负载均衡技术的时候,经常会分为两类:L4 和 L7。这一分类来源于 OSI 模型的四层和七层的定义。OSI 模型无法很好的描述负载均衡方案中的复杂性,一个四层负载均衡在完成传统的四层协议任务例如 UDP 和 TCP 之外,往往还会加入了其他层次的内容。例如一个四层的 TCP 负载均衡还支持 TLS 功能,这算七层负载均衡了么?&/p&&p&&br&&/p&&figure&&img src=&http://pic3.zhimg.com/v2-ecbfc179139a_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&800& data-rawheight=&126& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&http://pic3.zhimg.com/v2-ecbfc179139a_r.jpg&&&/figure&&p&&br&&/p&&p&图 2:TCP 终端四层负载均衡&/p&&blockquote&图 2 展示了一个传统的四层 TCP 负载均衡器。这个例子中,客户端向负载均衡器发起了一个 TCP 连接,负载均衡器 &i&终结&/i& 了这一连接(也就是说直接响应了 SYN),接下来选择一个后端,然后创建了到后端的新的 TCP 连接(就是发起了新的 SYN)。图中的细节不需太过关注,后面的四层负载均衡章节会进行详细讨论。&/blockquote&&p&本节的关键点是四层负载均衡一般只在四层的 TCP/UDP 进行操作。笼统的说,负载均衡器负责操作这些字节,保证同一会话的字节们只跟同一个后端打交道。四层负载均衡对通信中的应用细节是一无所知的。通信内容可以是 HTTP、Redis、MongoDB 或者任何应用协议。&/p&&p&&b&七层(应用)负载均衡&/b&四层负载均衡很简单,目前还在大面积使用。四层负载均衡有什么短处,以至于需要七层(应用)负载均衡呢?例如下面几个四层的案例:&/p&&ul&&li&两个 gRPC/HTTP2 客户端要连接到后端,所以通过四层负载均衡器来完成这一过程。&/li&&li&四层负载均衡器为每个接入的 TCP 连接创建一个外发的 TCP 连接,这样就有了两个接入、两个外发的连接。&/li&&li&然而客户端 A 的请求频率是每分钟 1 请求,而客户端 B 的频率是每秒钟 50 请求。&/li&&/ul&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&在上述场景中,为客户端 A 服务的后端,其负载水平仅相当于为客户端 B 服务的后端的约 1/3000 左右,这明显违背了负载均衡器的初衷。在所有多工、保持连接的协议中都会发生这样的情况(多工意思是在单一四层连接中并行发送应用请求;保持连接则意味着在没有活动请求的情况下,也不会关闭连接)。出于性能方面的考虑(创建连接的成本通常较高,尤其是当使用 TLS 对连接进行加密的情况下),所有的现代协议都包含这两个特性,所以随着时间的推移,四层负载均衡的负载不均的情况会越发明显。七层负载均衡能够解决这一问题。&/p&&p&&br&&/p&&figure&&img src=&http://pic3.zhimg.com/v2-4289cba5ac1bfdbbc2e7540a_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&800& data-rawheight=&325& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&http://pic3.zhimg.com/v2-4289cba5ac1bfdbbc2e7540a_r.jpg&&&/figure&&p&&br&&/p&&p&图三:HTTP/2 七层终端负载均衡&/p&&p&&br&&/p&&p&图 3 描述了七层的 HTTP/2 负载均衡。这里客户端发起了对负载均衡的单个连接。负载均衡器连接到了两个后端。当客户端向负载均衡器发送两个 HTTP/2 流的时候,两个流会分别送往不同后端。这样多工客户端的大量不同的请求会被高效的分发给多个后端。这就是七层负载均衡对现代协议的重要性的来由(因为对应用流量的洞察能力,七层负载均衡还有很多其他好处,后面会详细描述)。&/p&&p&&b&七层负载均衡和 OSI 模型&/b&之前四层负载均衡章节中说过,用 OSI 模型来描述负载均衡是有困难的。OSI 描述的第七层,涵盖了负载均衡的多方面功能的臭显。比如对 HTTP 来说,有以下几个低级一些的层次:&/p&&ul&&li&可选的 TLS。网络界对 TLS 究竟应该属于 OSI 模型的哪一层素有争议。为讨论方便,我们放在七层。&/li&&li&物理的 HTTP 协议(HTTP/1或 HTTP/2)。&/li&&li&逻辑 HTTP 协议(Header、Body 和 Trailer)。&/li&&li&消息协议(gRPC、REST 等)。&/li&&/ul&&p&&br&&/p&&p&一个成熟的的七层负载均衡器应该照顾到上面描述的每一层次。另一个七层负载均衡器可能只支持七层分类中的特性的一个子集。总而言之,七层负载均衡器的范畴包含了远超四层的为数众多的功能(例子中只提到了了 HTTP;Redis、Kafka、MongoDB 等也都是七层应用协议的例子,也都应受益于七层负载均衡)。&/p&&p&2&/p&&p&&b&负载均衡器特性&/b&下面简单汇总一下负载均衡器的高层功能。并非所有负载均衡器都提供了所有功能。&/p&&p&&b&服务发现&/b&服务发现就是负载均衡器用于决定可用后台列表的过程。这一功能的实现方式花样百出,下面举一些例子:&/p&&ul&&li&静态配置文件。&/li&&li&DNS。&/li&&li&Zookeeper、Etcd、Consul 等。&/li&&li&Envoy 的 统一数据平面 API。&/li&&/ul&&p&&br&&/p&&p&&br&&/p&&p&&b&健康检查&/b&负载均衡器使用健康检查功能,来检测后端是否可用。健康检查有两种实现思路:&/p&&ul&&li&主动式:负载均衡器周期性的向后端发送 ping (例如一个发送到&code&/healthcheck&/code&端点的 HTTP 请求),以此判断后端的健康情况。&/li&&li&被动式:负载均衡器通过对主数据流的分析来确定健康情况。比如一个四层负载均衡器,在发现连续三个连接错误的情况下,就会判定一个后端不可用;七层负载均衡可能会在连续三个 HTTP 503 响应之后判定这一后端为不健康状态。&/li&&/ul&&p&&br&&/p&&p&&br&&/p&&p&&b&负载均衡&/b&是的,负载均衡器必须为负载做均衡。有了一系列的健康后端,如何选择后端来响应一个请求或者连接呢?负载均衡算法是一个活跃的研究领域,有 Round Robin 这样的简单办法,也有通过延迟和后端负载情况进行判断的复杂方案。 Power of 2 least request load balancing 一文,介绍了最流行的兼顾性能和简易的负载均衡算法之一。&/p&&p&随机选择两个后端,进一步选择其中负载较低的一个。&/p&&blockquote&&b&Session 粘连&/b&在某些应用中有一个重要需求:同一会话的请求需要到达同一后端。对于缓存、临时复杂状态等场景来说这是很必要的。对于“同一会话”的定义有多种形式,可能包括 HTTP Cookie、客户端连接的属性以及其他属性。很多七层负载均衡器具有一些对会话粘连的支持。然而我认为会话粘连是一种天然易碎的情况(处理会话的后端可能会瘫痪),所以对于依赖会话的系统设计应该多加小心。&/blockquote&&p&&b&TLS 终端&/b&TLS 这一话题,不管是边缘服务还是服务间通讯,都值得大书特书。因此很多七层负载均衡器在 TLS 处理方面都做了大量工作,其中包含终端、证书校验和绑定,使用 SNI 提供证书等功能。&/p&&p&&b&观测性&/b&我常说:“观测性、观测性、观测性。”,网络是一个天生不可靠的东西,负载均衡器应该提供状态、跟踪以及日志,协助运维人员甄别故障,从而进行修复。负载均衡器的检测输出差距很大。高级的负载均衡器供应包含数字统计、分布式跟中和自定义日志的大量输出。我认为增强的观测性并不是从天而降的,负载均衡器需要做出很多附加工作来完成这一任务。对性能造成的负面影响,相对于这一系列数据的好处来说,不值一提。&/p&&p&&b&安全性和拒绝服务攻击防范&/b&在边缘部署拓扑(后面会讲解)中,负载均衡器经常需要实现各种包含频率限制、认证以及 DoS 防范(例如 IP 地址的标记和辨识、Tarpitting等方式)等在内的安全功能。&/p&&p&&b&配置和控制平面&/b&负载均衡器应该是可配置的。在大规模部署中,这是一个重要的工作量。通常来说,用来配置负载均衡器的系统被称为“控制平面”,会有多种实现。拙作 Service Mesh Data Plan vs Control Plan 中对这一部分内容作了更深入的探讨。&/p&&p&&b&还有很多&/b&这部分只是对于负载均衡器的功能层面作了一些介绍。下面还会在七层负载均衡器方面做更多的深入讨论。&/p&&p&3&/p&&p&&b&负载均衡器的拓扑分类&/b&我们已经对负载均衡器的概念作了一些概括的介绍,四层和七层负载均衡器的区别,以及负载均衡器特性的汇总,接下来我们会针对分布式系统中的负载均衡器部署拓扑进行一些探讨(下面的每一种拓扑都是适用于四层和七层负载均衡器的)。&/p&&p&&b&中间代理&/b& &/p&&p&&br&&/p&&p&图 4:中间代理负载均衡拓扑&/p&&p&&br&&/p&&p&图 4 描述的这种拓扑对多数读者来说都是最熟悉的。这一类别包括了 Cisco、Juniper、F5 等硬件产品;云软件解决方案例如 Amazone 的 ALB 和 NLB 以及 Google 的 Cloud Load Balancer,还有 HAProxy、NGINX 以及 Envoy 这样的纯软件自主方案。中间代理方案的优势在于对用户提供的简便性。&/p&&p&一般情况下用户只要通过 DNS 连接到负载均衡器即可,无需担心其他情况;弱势在于,负载均衡器存在单点失败的风险,同时也是可能的性能瓶颈。中间代理通常是一个不便运维的黑盒子。问题出现在哪里?是客户端还是物理网络?是中间代理还是后端?很难界定。 &/p&&p&&b&边缘代理&/b& &/p&&p&&br&&/p&&p&图 5:边缘代理负载均衡拓扑&/p&&p&&br&&/p&&p&图 5 实际上是中间代理的一种变体,这种负载均衡器可以通过 Internet 进行访问。在这一场景下,负载均衡器通常需要提供一些附加的 “API 网关”类功能,例如 TLS 终端、频率限制、认证以及流量路由等。优势和劣势跟中间服代理类似。在一个大的面向 Internet 的分布式系统中,边缘服务器通常是一个必要的组成部分。&/p&&p&客户端通常会使用某个不受服务提供商控制的网络库,通过 DNS 来访问这一系统(后面将会讨论的嵌入客户库或者 Sidecar 代理拓扑都不适合直接运行在客户端)。另外为了安全方面的考虑,为所有的面向 Internet 的流量使用单一的网关来提供入站流量是一个普遍要求。&/p&&p&&b&嵌入式客户库&/b&&/p&&p&图 6:通过嵌入客户端库实现负载均衡&/p&&p&&br&&/p&&p&为了克服随中间代理而出现的单点失败以及性能问题,很多成熟架构把负载均衡直接植入如图 6 所示的客户端库中。不同的库所支持的功能差别很大,此类产品中最知名的功能丰富的包括 Finagle、Eureka/Ribbon/Hystrix 以及 gRPC(大致基于 Google 的一个称为 Stubby 的内部系统)。这种方式的好处是把所有负载均衡特性完全分布到每个客户端,从而避免了前面说到的单点失败和性能瓶颈。&/p&&p&这种做法的弱势也很明显,一个组织使用的所有语言,都需要实现这种客户端库。分布式架构下,这种多语言支持的要求会越来越多。这种环境里,每种语言的网络库实现造成的成本会让人望而却步。最后,在大的服务架构中进行库升级也是一个很大的挑战,而在生产环境中并行运行不同的版本,又会给运维造成更大压力。 &/p&&p&结合上面的优劣势分析,可以知道,在能够限制编程语言使用,并克服升级痛苦的情况下,这种架构是可以获得成功的。&/p&&p&&b&Sidecar 代理&/b&&/p&&p&图 7:Sidecar 代理实现负载均衡&/p&&p&&br&&/p&&p&嵌入式客户库的一个变体就是图 7 中的 Sidecar 代理拓扑。近年来,这一拓扑以 “Service Mesh” 的概念日益流行。Sidecar 代理背后的思路是,以进程间通信造成的些许延迟为代价,在无需顾虑编程语言锁定的情况下获得嵌入客户端库的各种优点。目前流行的 Sidecar 负载均衡包括 Envoy、NGINX、HAProxy 以及 Linkerd,我的两篇文章:Introducing Envoy 和 Service Mesh Data Plan vs Control Plan 对这种结构进行了更细致的描写。&/p&&p&&br&&/p&&p&&b&不同负载均衡器拓扑的总结和优劣势&/b&&/p&&ul&&li&中间代理拓扑是最简单的最典型的方式。他的弱点在于:故障单点、伸缩瓶颈以及黑箱操作。&/li&&li&边缘代理拓扑和中间代理类似,通常无法忽略。&/li&&li&嵌入客户端库的方式提供了最好的性能和伸缩性,不过面向多种语言的开发,和升级所有服务的库都是很大的挑战。&/li&&li&Sidecar 代理拓扑比嵌入式客户端库要弱,但也避免了这种方式的两大难点。&/li&&/ul&&p&&br&&/p&&p&总的来说,我认为在服务对服务的情况下,Sidecar 代理拓扑(Service Mesh)会逐渐代替所有其他拓扑形式。为了处理进入 Service Mesh 之前的流量,边缘代理拓扑会长期存在。&/p&&p&&br&&/p&&p&4&/p&&p&&b&四层负载均衡的现状四层负载均衡器还有用么?&/b&本文已经谈论了很多七层负载均衡器对现代协议的好处,后面还会谈到七层负载均衡的功能细节。这是否意味着四层负载均衡器无需存在了?不是的。虽然我认为最终七层负载均衡会完全在&i&服务对服务&/i&的场景中取代四层负载均衡器,但四层负载均衡器对边缘通信还是非常有意义的,这是因为所有现代的大型分布式架构都是用了两层的四层/七层负载均衡架构来处理互联网流量。在七层负载均衡器之前部署独立的四层负载均衡器的好处是:&/p&&ul&&li&七层负载均衡器要在应用层面进行更多的精密分析、变换以及路由工作,对于原始流量(每秒数据包或每秒字节数)的负载,其能力要弱于优化过的四层负载均衡器。这一现实使得四层负载均衡器更便于应对拒绝服务攻击(例如 SYN flood、通用包 flood 攻击等)。&/li&&/ul&&p&&br&&/p&&ul&&li&相对于四层负载均衡器,七层负载均衡器的开发更加活跃,部署更加频繁,也会有更多 Bug。有了前置的四层负载均衡器,就可以在七层负载均衡器升级期间进行健康检查和排空,现代四层负载均衡器通常使用 BGP 和 ECMP(后续章节会详细讲解),七层负载均衡的部署通常会较为简单。最后因为七层负载均衡器相对来说复杂度较高,因此也更容易出现问题,有了前端的四层负载均衡,就可以在出现问题的时候利用路由功能绕过故障节点,提高系统的总体稳定性。&/li&&/ul&&p&&br&&/p&&p&下文中我会讲到集中不同设计的中间/边缘四层负载均衡器。后面提到的设计通常是无法用在客户库或 Sidecar 拓扑中的。&/p&&p&&br&&/p&&p&&b&TCP/UDP 终端负载均衡器&/b&&/p&&figure&&img src=&http://pic3.zhimg.com/v2-ecbfc179139a_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&800& data-rawheight=&126& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&http://pic3.zhimg.com/v2-ecbfc179139a_r.jpg&&&/figure&&p&&br&&/p&&p&图 8:四层终端负载均衡器&/p&&p&&br&&/p&&p&还在应用的第一种四层负载均衡器是图 8中的终端负载均衡器。这和我们介绍四层负载均衡的时候讲到的内容是一致的。这种类型的负载均衡器中,使用了两个的独立的 TCP 连接:一个用于客户端和负载均衡器之间;另一个用在负载均衡器和后端之间。&/p&&p&四层终端负载均衡器还有两个原因:&/p&&ol&&li&实现相对简单。&/li&&li&靠近客户端的连接终端对性能有显著影响。尤其是如果客户使用有损网络(例如蜂窝网)的话,在进入稳定的有线传输到最终目的之前,是容易发生重传的。换句话说,这种负载均衡器适用于在存在点(Point of Presence )场景下的原始 TCP 连接。&/li&&/ol&&p&&br&&/p&&p&&b&TCP/UDP 透传负载均衡器&/b&&/p&&figure&&img src=&http://pic3.zhimg.com/v2-599a3c25af8a7bfb16cac12d5078293a_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&800& data-rawheight=&212& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&http://pic3.zhimg.com/v2-599a3c25af8a7bfb16cac12d5078293a_r.jpg&&&/figure&&p&&br&&/p&&p&图 9:透传负载均衡器&/p&&p&&br&&/p&&p&四层负载均衡器的另一种类型就是图 9所说的透传负载均衡器。这种类型的负载均衡过程中,TCP连接没有被负载均衡器终结,每个链接的数据包,在经过连接分析和网络地址转换(NAT)过程之后,都被转发给一个选中的后端。首先让我们定义一下连接跟踪和 NAT:&/p&&ul&&li&连接跟踪:跟踪全部活动 TCP 连接的过程。这里包括很多内容,例如握手是否完成,是否收到 FIN,连接发呆了多久,这个连接转发给哪一个后端等。&/li&&li&NAT:是使用连接跟踪数据,来更改数据包的 IP/端口信息使之穿过负载均衡器的过程。&/li&&/ul&&p&&br&&/p&&p&&br&&/p&&p&有了连接跟踪和 NAT,负载均衡器就能把客户端的 TCP 流量几乎原封不动的的转发给后端。例如客户端同&code&1.2.3.4:80&/code&进行通信,选中的后端是&code&10.0.0.2:9000&/code&。客户端的 TCP 数据包会到达位于&code&1.2.3.4:80&/code&的负载均衡器。负载均衡器会把目标 IP 和端口替换为&code&10.0.0.2:9000&/code&;同时还会把源 IP 替换为负载均衡器的 IP。当后端响应 TCP 连接时,数据包就会返回给负载均衡器,负载均衡器中的链接跟踪和 NAT 再次发挥作用,反向送回数据包。&/p&&p&为什么会使用这一种负载均衡器,而不是前面提到的终端型呢?&/p&&ul&&li&性能和资源消耗:透传型的负载均衡器没有终结 TCP 连接,无需缓存任何的 TCP 连接窗口。每个连接的状态存储非常小,通常使用高效的哈希表查询即可。正因如此,相对终端负载均衡器来说,透传型负载均衡器能够处理更大数量的活动链接,单位时间内处理更多的数据包。&/li&&li&允许后端进行拥塞控制:TCP 拥塞控制 是一种机制,让 Internete 端点对外发数据进行流量控制,防止超量使用带宽和缓冲。&/li&&li&为直接服务器返回(Direct Server Return = DSR)做基线,以及四层负载均衡集群:透传负载均衡也是高级四层负载均衡(例如后面将要说到的 DSR 和使用分布式一致性哈希的集群)的基础。&/li&&/ul&&p&&br&&/p&&p&&b&Direct Server Return (DSR)&/b&&/p&&p&&br&&/p&&p&图 10:四层 DSR&/p&&blockquote&图 10展示的就是 DSR 负载均衡。DSR 构建在前文提到的透传负载均衡器的基础之上。DSR 是一种优化方案,只有入站/请求数据包通过负载均衡;出站/响应数据包绕过负载均衡器直接返回给客户端。使用 DSR 方案的有趣之处在于,很多负载的响应比请求数据量大很多(比如典型的 HTTP 请求和响应)。假设 10% 的流量是请求,另外 90% 是响应,如果使用了 DSR 负载均衡,仅需要 1/10 的容量就能够满足系统需要。从前的负载均衡非常昂贵,这一方案能够显著降低系统成本并提高可靠性(更少就是更好)。DSR 负载均衡器用下面的方式扩展了透传负载均衡的概念:&/blockquote&&ul&&li&由于响应包不再经过负载均衡器,所以连接跟踪仅有部分数据,负载均衡器无法知道完整的 TCP 连接状态。然而还是可以通过对客户数据包的观察,对发呆超时的情况来推断具体状态。&/li&&li&负载均衡器通常使用 GRE 来封装 IP 包,并从负载均衡器发送到后端。这样当后端接收到封装后的数据包,可以解包并获得客户端的端口和地址。这样后端就能直接跨过负载均衡器直接发送响应包给客户端了。&/li&&li&DSR 负载均衡器的一个重要部分就是:后端部分的参与了负载均衡过程。后端需要合理的配置 GRE 隧道,并且需要根据网络的低级细节来配置自己的连接跟踪以及 NAT 等。&/li&&/ul&&p&&br&&/p&&p&注意不管是 DSR 还是透传负载均衡器,其中的连接跟踪、NAT、GRE 等组成部分都有很多不同设计方式。这些设置从负载均衡器到后端都会涉及。这部分内容超出了本文的范围,就不再深入进行了。&/p&&p&&b&使用高可用配对方式实现容错&/b& &/p&&p&&br&&/p&&p&图 11:使用 HA 对和连接跟踪实现容错&/p&&p&&br&&/p&&p&到现在,我们要考虑四层负载均衡的容错设计了。不管是 DSR 还是透传负载均衡都需要一定数量的链接跟踪和状态数据存储在负载均衡器中。负载均衡器宕机了会怎样?——所有经过这一负载均衡器的连接都会断掉。可能对应用产生显著影响。&/p&&p&历史上,四层负载均衡器是一种从典型供应商(Cisco、Juniper、F5 等)采购的硬件。这些设备非常昂贵,能够处理大量通信。为了防止单点失败导致的所有连接中断,引发应用故障,负载均衡器通常会使用高可用配对的方式进行部署,如图 11 所示。典型的高可用负载均衡器配置会满足如下设计:&/p&&ul&&li&一对高可用边缘路由器提供一系列的虚拟 IP(VIP)。这些边缘路由器使用边界网关协议(BGP)来发布虚拟 IP。主要边缘路由器的 BGP 优先级高于备用边缘路由器,所以正常情况下他会处理所有流量(BGP 是一个超级复杂的协议;为了行文方便,可以理解 BGP 是一种机制,这种机制让网络设备可以宣称自身能够处理来自其他网络设备的流量,并且每个连接都会有一个权重,从而影响连接的通信)。&/li&&li&类似的,主要四层负载均衡向 BGP 权重较高的边缘路由器宣告可用,所以在通常情况下,他会处理所有流量。&/li&&li&两个边缘路由器和两个负载均衡器是交叉连接的,这意味着如果一个边缘路由器或者一个负载均衡器宕机,或者因为某些原因 BGP 宣布失效,备用设备就会接入,承载所有流量。&/li&&/ul&&p&&br&&/p&&p&上面的设置是目前很多互联网上的高流量应用还在持续使用的方式,但是这种方案有一些副作用:&/p&&ul&&li&VIP 必须通过高可用负载均衡器对流量进行正确的分配。如果单一 VIP 的容量超过了 HA 对,则 VIP 需要分割为多个 VIP。&/li&&li&系统资源使用率很低。通常会有一半的容量在闲置。过去的负载均衡器非常昂贵,所以这一闲置成本也是很高的。&/li&&li&现代分布式系统设计要求比主备模式更好的容错设计。例如一个系统需要在多个同时出现故障的情况下保持运行。高可用负载均衡对如果遭遇同时故障,就会导致完全瘫痪。&/li&&li&供应商提供的硬件设备价格昂贵,会导致对特定厂商的依赖。使用支持水平扩展的软件方案对商业硬件设施进行替换,是目前普遍存在的迫切需要。&/li&&/ul&&p&&b&使用分布式一致性哈希进行容错和伸缩&/b& &/p&&p&&br&&/p&&p&&br&&/p&&p&图 12:四层负载均衡器和一致哈希实现容错和伸缩&/p&&p&&br&&/p&&p&前文介绍了通过高可用配对的方式来进行负载均衡器的容错设置,以及随之而来的问题。千禧年初,一些大的互联网基础设施提供商开始设计和部署新的图 12 模式的并行四层负载均衡系统。这类系统的目标是:&/p&&ul&&li&解决使用成对 HA 模式设计的负载均衡方案带来的所有问题。&/li&&li&从厂商专属的专利硬件模式的负载均衡器中迁移出来,使用标准服务器和网卡配合商业软件方案进行替代。&/li&&/ul&&p&&br&&/p&&p&四层负载均衡器的设计是 fault tolerance and scaling via clustering and distributed consistent hashing 的最佳引用,具体工作模式是:&/p&&ul&&li&N 个边缘路由器在同一 BGP 权重上,声明所有的 任播 VIP。使用 ECMP(等价多路径路由) 来保证所有单一 Flow 能够到达同一个边缘路由器。一个 Flow 通常是一个由源 IP/端口和目的 IP/端口 构成的元组。(简单说,ECMP 是一个在使用一致性哈希连接的独立加权网络上分发数据包的方式)。边缘路由器并不在意哪些数据包去了哪里。一般会倾向于把来自于一个 Flow 所有数据包发送给同一套连接,以此避免乱序包导致的性能损失。&/li&&li&N 个四层负载均衡器向边缘路由器在同一个 BGP 权重上声明所有的 VIP。再次借助 ECMP,边缘路由器会选择为同一个 Flow 选择同一个负载均衡器。&/li&&li&每个四层负载均衡器会进行部分的连接跟踪,为这一 Flow 使用一致性哈希选择一个后端。从负载均衡器到后端的数据包会使用 GRE 进行封装。&/li&&li&接下来使用 DSR 将相应包直接从后端通过边缘路由器发送会客户端。&/li&&li&四层负载均衡器使用的一致性哈希算法是一个活跃的研究领域,其中涉及合理分配、减小延迟、后端变更成本以及最小化内存开支等各方面要素。这方面的完整讨论也超出了本文范围。&/li&&/ul&&p&&br&&/p&&p&&br&&/p&&p&接下来看看这种设计如何克服 HA 配对方式的缺点:&/p&&ul&&li&新的边缘路由器和负载均衡器可以按需加入。一致性哈希会在各个层次上使用,在加入新机器的时候,尽可能降低受影响的 Flow 数量。&/li&&li&在保持对突发消耗的支持能力以及容错能力的同时,可以提高资源的使用率。&/li&&li&边缘路由器和负载均衡都可以使用使用普通硬件,仅是传统硬件负载均衡成本的几分之一(下文会进一步说明)。&br&&br&&/li&&/ul&&p&&br&&/p&&p&行文至此,有读者可能会问:“为什么不让边缘路由器直接通过 ECMP 和后端进行通信?为什么我们还需要负载均衡器?”。答案是 DoS 防范以及后端运维难度。如果没有负载均衡器支持,每个后端都需要加入 BGP,而且难于进行滚动更新。&/p&&p&所有的现代四层负载均衡系统都在向着这一方案(或其变体)迁移。两个最为公众所知的例子就是 Google 的 Maglev 以及 Amazon 的 Network Load Balancer (NLB)。目前还没有任何开源负载均衡器实现了这一设计,然而据我所知,有公司要在 2018 年发布一个这样的产品。我很期待他的出现,这一产品将会填补开源网络组件的重要空白。&/p&&p&&b&当前七层负载均衡的技术状态&/b& &/p&&p&Current state of the art in L7 load balancing The proxy wars in tech currently is quite literally the proxy wars. Or the &war of the proxies&. Nginx plus, HAProxy, linkerd, Envoy all quite literally killing it. And proxy-as-a-service/routing-as-a-service SaaS vendors raising the bar as well. Very interesting times!&/p&&blockquote&是的,的确是这样。近几年我们看到七层负载均衡/代理技术的开发工作开始复兴。随着分布式微服务系统的不断推进,这方面也会不断进步。从基础上看,目前对于靠不住的网络的依赖越发严重,带来更高的运维难度。从长远看,自动伸缩、容器编排等技术的大量使用,意味着静态 IP、静态文件的时代已经过去了。系统不仅更多的使用网络,而且更加动态,需要新的负载均衡功能。在本节中我们简单归纳一下现在七层负载均衡器的功能。&/blockquote&&p&&b&协议支持&/b&现代七层负载均衡器加入了很多不同协议的显式支持。负载均衡器对应用通讯认识越多,就越能做好监控输出、高级负载均衡和路由等功能。例如目前 Envoy 显式的支持七层协议解析和路由的范围包括 HTTP/1、HTTP/2、gRPC、Redis、MongoDB 以及 DynamoDB。包括 MySQL 和 Kafka 在内的更多协议会逐渐添加进来。&/p&&p&&b&动态配置&/b&如上文所述,分布式系统的大行其道,需要有动态配置能力来提高系统的动态和控制能力。Istio就是一个这种系统的例子。请参考 Service Mesh Data Plan vs Control Plan 来获取更多这方面的内容。&/p&&p&&b&高级负载均衡&/b&七层负载均衡器一般都有内置的高级负载均衡支持,例如超时、重试、频率控制、断路器、Shadow、缓冲、基于内容的路由等。&/p&&p&&b&可观测性&/b& &/p&&p&上文中也提到过,负载均衡的一个常见功能,越来越多的动态系统被部署,调试难度也水涨船高。健壮的协议规范观测输出可能是未来七层负载均衡器要提供的最重要功能之一。统计数字、分布式跟踪以及可以定义日志的输出,目前已经成为对器层负载均衡解决方案的必须要求。&/p&&p&&b&扩展性&/b&现代七层负载均衡器需要能够简单的加入定制功能。这一功能可以通过编写可插接过滤器,并载入到负载均衡器的方式来实现。很多负载均衡器还支持脚本扩展,例如 Lua。&/p&&p&&b&容错&/b&在讲四层负载均衡的容错时颇费了一番口舌。七层负载均衡的容错又怎样呢?一般来说我们认为七层负载均衡器(的工作负载)是无状态的可抛弃的。使用普通软件就能够简单的对七层负载均衡器进行水平扩展。另外七层负载均衡的流量处理和状态跟踪的复杂度要远超四层。设置七层负载均衡器的 HA 配对在技术上是可行的,但会非常繁杂。&/p&&p&总的说来,不管是四层还是七层的负载均衡,业界都在尝试走出 HA 配对模式,转向一致性哈希为基础的水平扩展方式。&/p&&p&&b&更多&/b&七层负载均衡器正在高速发展。可以参考 Envoy 架构概览。&/p&&p&&br&&/p&&p&5&/p&&p&&b&全局负载均衡和中心控制平面&/b&&/p&&p&&br&&/p&&p&图 13:全局负载均衡&/p&&p&&br&&/p&&p&未来会有越来越多的独立负载均衡器以商品设备的面目呈现。我认为真正的创新和商业机会来自于控制平面。图 13展示了一个全局负载均衡系统。在本例中有一些不同的东西:&/p&&ul&&li&每个 Sidecar 代理和三个不同区域的后端进行通信。&/li&&li&如图,90% 的流量会被发送到 C 区,A B 两区分别得到 5%。&/li&&li&Sidecar 代理和后端都会周期性的向全局负载均衡器进行汇报。这样全局负载均衡器就可以根据延迟、成本、负载、失败率等数据进行精密决策。&/li&&li&全局负载均衡周期性的使用当前的路由信息配置每个 Sidecar 代理。&/li&&/ul&&p&全局负载均衡能做一些单一负载均衡器做不到的事情,例如:&/p&&ul&&li&对分区故障的自动检测和路由绕行。&/li&&li&应用全局的安全和路由策略。&/li&&li&使用机器学习和神经网络,对异常流量进行检测和防范,包括分布式拒绝服务攻击。&/li&&li&提供中央界面和可视化支持,让工程师能够以聚合的角度,对整个分布式系统进行监控和运维。&/li&&/ul&&p&&br&&/p&&p&全局负载均衡器要成为现实,他的数据平面必须具有强大的动态配置能力。请参考我的博客:Envoy's universal data plane API,以及 Service Mesh Data Plan vs Control Plan 。&/p&&p&&br&&/p&&p&6&/p&&p&&b&从硬件到软件的变革&/b& &/p&&p&这里只是简要的提到了硬件和软件的问题,主要聚焦在四层负载均衡高可用方面的历史问题。这一领域的业界趋势又如何呢?&/p&&p&这一推虽说略显浮夸,但却很好的描述了技术趋势:&/p&&ul&&li&历史上的负载均衡器和路由器都曾经是昂贵的专属硬件&/li&&li&逐渐的,多数三层四层网络设备都被替换为通用服务器硬件和网卡,以及基于 IPVS、DPDK 和 &a href=&http://link.zhihu.com/?target=http%3A//fd.io& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&fd.io&/span&&span class=&invisible&&&/span&&/a&之类的框架的特定软件方案。一个现代的成本低于 $5k 的数据中心,运行 Linux 和自定义的基于 DPDK 的 user-space 应用,能够轻松用超小数据包跑满 80Gbps 的网络。另外廉价的基于 ASICs 的基础路由器/交换机也能够完成 ECMP 路由工作,并能支撑和通用路由器同级别的带宽和包速率。&/li&&li&Nginx、HAProxy 以及 Envoy 这样的七层软负载均衡,也正快速发展,逐步进入过去由 F5 这样的厂商的专属领域。此外,七层负载均衡器正激进的向通用软件方案的方向迈进。&/li&&li&同时,主要云提供商推动的 IaaS、CaaS 以及 FaaS 潮流,使得只有一小部分人需要理解物理网络(这属于黑科技,以及“我们不再需要深入了解”的范围了)。&/li&&/ul&&p&&br&&/p&&p&7&/p&&p&&b&结论,以及负载均衡器的未来&/b& &/p&&p&综上所述,本文的主旨:&/p&&ul&&li&负载均衡器是现代分布式系统的关键组件。&/li&&li&有两种负载均衡器:四层和七层。&/li&&li&四层和七层负载均衡器都与现代架构相关。&/li&&li&四层负载均衡器正在朝着基于一致性哈希的水平扩展方案的方向进行迁移。&/li&&li&由于动态微服务架构的成长,七层负载均衡器得以快速发展。&/li&&li&控制平面和数据平面的拆分,和全局负载均衡,是负载均衡的未来发展方向和机会来源。&/li&&li&业界正激进的迈向标准硬件和软件的开源解决方案。我相信传统的像 F5 这样的负载均衡厂商会被开源软件和云供应商取代。传统的路由器、交换机厂商,例如 Arista/Cumulus 等,短期内会有更好的发展,但最终也会被共有云提供商及其自研物理网络所取代。&/li&&/ul&&p&&br&&/p&&p&总的说来,我认为这是计算器网络的奇迹年代。多数系统开始向开源和软件方向转变,极大的提高了迭代速度。未来,分布式系统又向无服务器计算进军,底层网络和负载均衡系统的复杂性也势必齐头并进,水涨船高。&/p&&p&&br&&/p&&p&&br&&/p&&p&原文:&a href=&http://link.zhihu.com/?target=https%3A//blog.envoyproxy.io/introduction-to-modern-network-load-balancing-and-proxying-a57f6ff80236& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&blog.envoyproxy.io/intr&/span&&span class=&invisible&&oduction-to-modern-network-load-balancing-and-proxying-a57f6ff80236&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&&br&&/p&&p&&br&&/p&&p&&br&&/p&&p&&b&推荐活动:&/b&&/p&&p&2018年数人云Meetup:Building Microservice 系列活动开始啦,第一期1月27日深圳站——Cloud Native架构下的K8S与微服务实践,开始报名啦,点击阅读原文即可报名~~&/p&&p&&br&&/p&&p&&br&&/p&&p&&b&推荐社区:&/b&&/p&&p&ServiceMesh中文社区(&b&&a href=&http://link.zhihu.com/?target=http%3A//servicemesh.cn& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&servicemesh.cn&/span&&span class=&invisible&&&/span&&/a&&/b&)已上线,Istio、Conduit官方文档翻译版已在社区发布,欢迎大家扫描下方二维码加入组织。&/p&&p&&br&&/p&&p&&a href=&http://link.zhihu.com/?target=http%3A//weixin.qq.com/r/QSiYgM7E0JOvrYrj931T& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&weixin.qq.com/r/QSiYgM7&/span&&span class=&invisible&&E0JOvrYrj931T&/span&&span class=&ellipsis&&&/span&&/a& (二维码自动识别)&/p&&p&&b&添加小数微信:xiaoshu062&/b&&/p&&p&&b&备注公司、姓名、职位&/b&&/p&&p&&b&小数将拉您进入相应技术群&/b&&/p&&p&&br&&/p&&p&&a href=&http://link.zhihu.com/?target=http%3A//weixin.qq.com/r/g0zbw9DEdo0JrZSg9xmR& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&weixin.qq.com/r/g0zbw9D&/span&&span class=&invisible&&Edo0JrZSg9xmR&/span&&span class=&ellipsis&&&/span&&/a& (二维码自动识别)&/p&&p&&/p&
作者:Matt Klein 译者:崔秀龙原题:Introduction to modern network load balancing and proxying 最近我注意到,针对负载均衡和代理这两项现代网络技术,有教育意义的介绍性材料相当稀缺。这引起我的思考:为什么会这样?在可靠的分布系统的架构中,负载…
&p&用户在使用 Docker 部署业务一段时间后,可能会发现宿主节点的磁盘容量持续增长,甚至将磁盘空间耗尽进而引发宿主机异常,进而对业务造成影响。 本文先对 Docker 的空间分析与清理进行说明,然后对容器的磁盘容量限制与使用建议做简要说明。&/p&&h2&&b&典型问题场景&/b&&/h2&&p&用户发现 Docker 宿主机的磁盘空间使用率非常高。通过 du 逐层分析,发现是 Volume 或 overlay2 等目录占用了过高空间。示例如下:&/p&&figure&&img src=&http://pic4.zhimg.com/v2-6abf009ccf923e5bff8ba7_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&871& data-rawheight=&258& class=&origin_image zh-lightbox-thumb& width=&871& data-original=&http://pic4.zhimg.com/v2-6abf009ccf923e5bff8ba7_r.jpg&&&/figure&&h2&&b&空间使用分析&/b&&/h2&&p&遇到此类问题,可以参阅如下步骤进行空间分析,定位占用过高空间的业务来源。&/p&&p&&b&分析 Docker 空间分布&/b&&/p&&p&Docker 的内置 CLI 指令 &code&docker system df&/code& ,可用于查询镜像(Images)、容器(Containers)和本地卷(Local Volumes)等空间使用大户的空间占用情况。 示例输出如下:空间使用分析&/p&&figure&&img src=&http://pic2.zhimg.com/v2-c2a029ad2dbeb3c0d18dfed_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&863& data-rawheight=&122& class=&origin_image zh-lightbox-thumb& width=&863& data-original=&http://pic2.zhimg.com/v2-c2a029ad2dbeb3c0d18dfed_r.jpg&&&/figure&&p&&b&查看空间占用细节&/b&&/p&&p&可以进一步通过 &code&-v&/code& 参数查看空间占用细节,以确定具体是哪个镜像、容器或本地卷占用了过高空间。示例输出如下:&/p&&div class=&highlight&&&pre&&code class=&language-docker&&&span&&/span&&span class=&o&&[&/span&root@node3 docker&span class=&o&&]&/span&# docker system df -v
&span class=&c&&# 镜像的空间使用情况&/span&
Images space usage:
REPOSITORY
SHARED SIZE
UNIQUE SIZE
CONTAINERS
&span class=&m&&5&/span& days ago
&span class=&m&&0&/span& B
&span class=&m&&1&/span&
b8efb18f159b
&span class=&m&&3&/span& months ago
&span class=&m&&0&/span& B
&span class=&m&&4&/span&
&span class=&m&&3&/span& months ago
&span class=&m&&0&/span& B
&span class=&m&&0&/span&
606fed0878ec
&span class=&m&&4&/span& months ago
&span class=&m&&0&/span& B
&span class=&m&&0&/span&
tutum/curl
&span class=&m&&3&/span& years ago
&span class=&m&&0&/span& B
&span class=&m&&1&/span&
&span class=&c&&# 容器的空间使用情况&/span&
Containers space usage:
CONTAINER ID
LOCAL VOLUMES
d1da451ceeab
&span class=&s2&&&ping 127.0.0.1&&/span&
&span class=&m&&0&/span&
About an hour ago
Up About an hour
956ae1d241e8
nginx:latest
&span class=&s2&&&nginx -g 'daemon ...&&/span&
&span class=&m&&0&/span&
&span class=&m&&26&/span& B
&span class=&m&&3&/span& months ago
Up &span class=&m&&3&/span& months
localTest_restserver_2
nginx:latest
&span class=&s2&&&nginx -g 'daemon ...&&/span&
&span class=&m&&0&/span&
&span class=&m&&2&/span& B
&span class=&m&&3&/span& months ago
Up &span class=&m&&3&/span& months
&span class=&c&&# 本地卷的空间使用情况&/span&
Local Volumes space usage:
&span class=&k&&VOLUME&/span&&span class=&s&& NAME
SIZE&/span&
83bac02a15f85b71e1565affca59fe0d28e65c26d1c
&span class=&m&&0&/span&
&span class=&m&&830&/span& B
a479c303b278ff694a554aac630e72b7ac4d87b648
&span class=&m&&0&/span&
79a25b7d8f4f24e08fdaad14bfd065503
&span class=&m&&1&/span&
&/code&&/pre&&/div&&h2&&b&空间清理&/b&&/h2&&h2&自动清理&/h2&&p&可以通过 Docker 内置的 CLI 指令 &code&docker system prune&/code& 来进行自动空间清理。&/p&&blockquote&&b&Tips&/b& :&br&&b&不同状态的镜像&/b&&/blockquote&&ul&&li&&b&已使用镜像(used image)&/b&: 指所有已被容器(包括已停止的)关联的镜像。即 docker ps -a 看到的所有容器使用的镜像。&/li&&li&&b&未引用镜像(unreferenced image)&/b&:没有被分配或使用在容器中的镜像,但它有 Tag 信息。&/li&&li&&b&悬空镜像(dangling image)&/b&:未配置任何 Tag (也就无法被引用)的镜像,所以悬空。这通常是由于镜像 build 的时候没有指定 -t 参数配置 Tag 导致的。比如:&/li&&/ul&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&REPOSITORY
5 days ago
# 悬空镜像(dangling image)
&/code&&/pre&&/div&&blockquote&&b&挂起的卷(dangling Volume)&/b&&br&类似的,dangling=true 的 Volume 表示没有被任何容器引用的卷。&/blockquote&&p&&b&docker system prune 自动清理说明&/b&:&/p&&ul&&li&该指令默认会清除所有如下资源:&/li&&ul&&li&已停止的容器(container)&/li&&li&未被任何容器所使用的卷(volume)&/li&&li&未被任何容器所关联的网络(network)&/li&&li&所有悬空镜像(image)。&/li&&/ul&&li&该指令默认只会清除悬空镜像,未被使用的镜像不会被删除。&/li&&li&添加 &code&-a 或 --all&/code& 参数后,可以一并清除所有未使用的镜像和悬空镜像。&/li&&li&可以添加 &code&-f 或 --force&/code& 参数用以忽略相关告警确认信息。&/li&&li&指令结尾处会显示总计清理释放的空间大小。&/li&&/ul&&p&操作示例:&/p&&figure&&img src=&http://pic2.zhimg.com/v2-afae5_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&869& data-rawheight=&713& class=&origin_image zh-lightbox-thumb& width=&869& data-original=&http://pic2.zhimg.com/v2-afae5_r.jpg&&&/figure&&h2&手工清理&/h2&&p&&b&网络清理&/b&&/p&&p&网络配置通常占用的空间非常低,略过。&/p&&p&&b&镜像清理&/b&&/p&&p&如果通过 docker system df 分析,是镜像占用了过高空间。则可以根据业务情况,评估相关镜像的使用情况。对于悬空和未使用的镜像, 可以使用如下指令手工清理:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&# 删除所有悬空镜像,但不会删除未使用镜像:
docker rmi $(docker images -f &dangling=true& -q)
# 删除所有未使用镜像和悬空镜像。
# 【说明】:轮询到还在被使用的镜像时,会有类似&image is being used by xxx container&的告警信息,所以相关镜像不会被删除,忽略即可。
docker rmi $(docker images-q)
&/code&&/pre&&/div&&p&&b&卷清理&/b&&/p&&p&如果通过 docker system df 分析,是卷占用了过高空间。则可以根据业务情况,评估相关卷的使用情况。对于未被任何容器调用的卷(-v 结果信息中,&LINKS& 显示为 0),可以使用如下指令手工清理:&/p&&figure&&img src=&http://pic4.zhimg.com/v2-bad4f593ee9b0bcf032d9df_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&867& data-rawheight=&142& class=&origin_image zh-lightbox-thumb& width=&867& data-original=&http://pic4.zhimg.com/v2-bad4f593ee9b0bcf032d9df_r.jpg&&&/figure&&p&&b&容器清理&/b&&/p&&p&如果通过 docker system df 分析,是某个容器占用了过高空间。则可以根据业务情况,评估相关容器的业务归属并进行处理。对于已停止或其它异常状态的容器,可以结合
&code&-f 或 --filter&/code& 筛选器,使用类似如下指令来手工清理:&/p&&figure&&img src=&http://pic3.zhimg.com/v2-e0ec4a8bbbb_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&868& data-rawheight=&108& class=&origin_image zh-lightbox-thumb& width=&868& data-original=&http://pic3.zhimg.com/v2-e0ec4a8bbbb_r.jpg&&&/figure&&blockquote&更多关于 ps 指令支持的筛选器信息,可以参阅&a href=&http://link.zhihu.com/?target=https%3A//docs.docker-cn.com/engine/reference/commandline/ps/%23filtering& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&官方文档&/a&。&/blockquote&&h2&&b&在用空间资源分析&/b&&/h2&&p&对于还在使用的空间资源,可以参阅如下说明做进一步排查分析。&/p&&p&&b&镜像空间分析&/b&&/p&&p&如果某个镜像占用了过高空间,则可以通过如下方式做进一步空间分析:&/p&&ol&&li&通过 docker system df 获取占用过高空间的镜像信息。&/li&&li&基于相应镜像创建测试容器。&/li&&li&exec 进入容器后,结合 du 等 shell 指令做进一步空间分析,定位出占用最高空间的目录或文件。&/li&&li&结合业务情况做进一步处理,重新 build 镜像。&/li&&/ol&&p&示例:&/p&&figure&&img src=&http://pic1.zhimg.com/v2-ab5c829d316a9721b8dda48_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&867& data-rawheight=&256& class=&origin_image zh-lightbox-thumb& width=&867& data-original=&http://pic1.zhimg.com/v2-ab5c829d316a9721b8dda48_r.jpg&&&/figure&&p&&b&容器空间分析&/b&&/p&&p&如果某个运行中的容器占用了过高空间,则可以通过如下方式做进一步空间分析:&/p&&blockquote&&b&Tips&/b& :&br&&b&容器的只读层与镜像层的空间占用情况&/b&&br&一个容器的占用的总空间,包含其最顶层的读写层(writable layer)和底部的只读镜像层(base image layer,read-only)。更多相关说明,可以参阅&a href=&http://link.zhihu.com/?target=https%3A//docs.docker-cn.com/engine/userguide/storagedriver/imagesandcontainers/%23container-and-layers& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&官方文档&/a&。&br&可以通过 docker ps 的 &code&-s&/code& 参数来分别显示二者的空间占用情况,进而判断相应容器的空间占用主要是来自原始镜像,还是运行中产生。&/blockquote&&figure&&img src=&http://pic2.zhimg.com/v2-82ce6b220fe5aef04c051db37c20460d_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&796& data-rawheight=&561& class=&origin_image zh-lightbox-thumb& width=&796& data-original=&http://pic2.zhimg.com/v2-82ce6b220fe5aef04c051db37c20460d_r.jpg&&&/figure&&p&示例:&/p&&div class=&highlight&&&pre&&code class=&language-text&&&span&&/span&# 如下容器的原始镜像占用了 422MB 空间,实际运行过程中只占用了 2B 空间:
CONTAINER ID
ac39128ccbc0
registry.aliyuncs.com/acs-sample/wordpress:4.6
&/entrypoint.sh ap...&
3 months ago
Up 11 days
0.0.0.0:32779-&80/tcp
2 B (virtual 422 MB)
&/code&&/pre&&/div&&p&容器空间占用的分析步骤:&/p&&ol&&li&通过 docker system df 获取占用过高空间的容器信息。&/li&&li&通过前述 &code&-s&/code& 参数确认到底是底层镜像,还是运行过程中产生的数据占用了过高空间。&/li&&li&exec 进入容器,结合 du 等 shell 指令做进一步空间分析,定位出占用最高空间的目录或文件。&/li&&li&结合业务情况做进一步处理。&/li&&/ol&&h2&&b&引申:Docker 磁盘空间限制与使用建议&/b&&/h2&&h2&磁盘空间限制&/h2&&p&&b&使用 Device Mapper 存储驱动限制容器磁盘空间&/b&&/p&&p&如果使用 Device Mapper 作为底层存储驱动,则可以通过 Docker daemon 的如下参数来全局限制单个容器占用空间的大小:&/p&&ul&&li&&code&--storage-opt dm.basesize=20G&/code& 表示限制单个容器最多占用 20G 空间,将应用于任何新建容器。&/li&&/ul&&p&更多关于 Device Mapper 存储驱动的说明,可以参阅&a href=&http://link.zhihu.com/?target=https%3A//docs.docker-cn.com/engine/userguide/storagedriver/device-mapper-driver/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&官方文档&/a&。&/p&&p&&b&使用 btrfs 存储驱动限制容器磁盘空间&/b&&/p&&p&btrfs 驱动主要使用 btrfs 所提供的 subvolume 功能来实现。一个容器会对应一个 subvolume。针对容器对应的 subvolume 启用并配置 quota 即可限制其磁盘空间。示例配置:&/p&&figure&&img src=&http://pic2.zhimg.com/v2-7aad0e2e4bff65dbd9412d_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&867& data-rawheight=&47& class=&origin_image zh-lightbox-thumb& width=&867& data-original=&http://pic2.zhimg.com/v2-7aad0e2e4bff65dbd9412d_r.jpg&&&/figure&&p&btrfs 还有其它很好的特性,比如可以在线扩容(在线加入一块新的块设备,来扩充整个文件系统的大小)。更多关于 btrfs 存储驱动的说明,可以参阅&a href=&http://link.zhihu.com/?target=https%3A//docs.docker-cn.com/engine/userguide/storagedriver/btrfs-driver/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&官方文档&/a&。&/p&&p&&b&外挂 LVM 卷&/b&&/p&&p&如果使用的是其它不支持对单个容器的磁盘容量进行限制的存储驱动,则可以考虑如下通用方案:&/p&&ul&&li&通过 LVM 方式创建一个指定容量的卷,然后挂载到宿主操作系统上特定目录。最后通过 --volume 参数来让容器来挂载使用相应目录。&/li&&/ul&&p&&b&注意&/b&:该方案的前提条件是,容器中所有落盘操作要全部落到上述 &--volume& 参数指定的卷中,否则容器还会占用默认 aufs 所在盘的空间,进而造成统计不准。&/p&&h2&Docker 存储使用建议&/h2&&p&细化的存储使用最佳实践与采用的存储驱动(storage driver)类型强相关,您可以参阅&a href=&http://link.zhihu.com/?target=https%3A//docs.docker-cn.com/engine/userguide/storagedriver/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&官方文档&/a&做相关了解,本文不做进一步细化说明。&br&通用的存储使用建议如下:&/p&&ul&&li&容器内的业务日志务必配置轮询覆写,或者使用日志驱动将日志输出到外部存储。避免日志文件持续增长,占用过高磁盘空间。&/li&&li&结合外部监控对宿主机的磁盘空间使用情况进行监控和告警。&/li&&li&可以参阅文档 &a href=&http://link.zhihu.com/?target=https%3A//yq.aliyun.com/articles/53313& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&如何给容器服务的Docker增加数据盘&/a&来扩容默认 Docker 存储空间。&/li&&/ul&&p&&a href=&http://link.zhihu.com/?target=http%3A//click.aliyun.com/m/36534/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&原文&/a&&/p&&p&&b&更多技术干货敬请关注云栖社区知乎机构号:&a href=&https://www.zhihu.com/org/a-li-yun-yun-qi-she-qu-48& class=&internal&&阿里云云栖社区 - 知乎&/a&&/b&&/p&
用户在使用 Docker 部署业务一段时间后,可能会发现宿主节点的磁盘容量持续增长,甚至将磁盘空间耗尽进而引发宿主机异常,进而对业务造成影响。 本文先对 Docker 的空间分析与清理进行说明,然后对容器的磁盘容量限制与使用建议做简要说明。典型问题场景用…
这几天组好了NAS,把方案分享出来给各位下片狂魔,好东西放在网盘里面会变成这个屌样:&br&&figure&&img src=&https://pic2.zhimg.com/34b9a4e1b14c7cb4a252720cbad34465_b.png& data-rawwidth=&855& data-rawheight=&613& class=&origin_image zh-lightbox-thumb& width=&855& data-original=&https://pic2.zhimg.com/34b9a4e1b14c7cb4a252720cbad34465_r.png&&&/figure&&br&&b&【导航】&/b&&br&第一层 需求分析&br&第二层 硬件方案&br&第三层 软件玩法(手机看片,远程下载,远程开机,远程桌面,虚拟机服务器)&br&第四层 硬件选购&br&第五层 装机清单(考虑到一些没装过机害怕买错or不关心配置只想要NAS的同学,加一节)&br&第六层 家庭组网&br&&br&&b&第一层 需求分析&/b&&br&————————————————————————————————————————&br&&br&&b&【需求】&br&&/b&1、盘位多,8-10盘位。&br&2、静音。&br&3、便宜。&br&4、省电。&br&5、高清播放。&br&6、可玩性高,支持虚拟化VT-x。&br&7、可扩展性强,PCIe,USB3.0。&br&&br&&b&【为什么盘位要多?】&/b&&br&-- PC普及这么多年了,谁没用过几台PC,可能硬件都过时了,硬盘没有过时啊,还有旧笔记本的硬盘,旧移动硬盘一大堆,都想不起来用。&br&-- 硬盘一段时间内只有一个容量的性价比最高,单G最便宜,且越来越便宜,成品NAS盘位那么少,一步到位很不划算,慢慢买的话,买了新的旧的盘就没地放啦。&br&&br&&b&【要不要硬件RAID?】&/b&&br&-- 不要!家用的话RAID提升性能被100MByte/s的网速限制,RAID1 RAID5高可用的话可以用软的,WIN8开始自带“存储空间”功能,所以没必要。&br&&figure&&img src=&https://pic1.zhimg.com/b59ba7b6b908bfe1a77acc_b.png& data-rawwidth=&212& data-rawheight=&52& class=&content_image& width=&212&&&/figure&&br&&b&【为什么不买群辉?】&/b&&br&-- 最多5盘位,还6千多软妹币,盘位比硬盘还贵,开什么玩笑,也不好玩。&br&-- 在虚拟机里面装了黑群晖体验了下,易用性上再易用不如Windows熟悉,动手能力强的可以直接上Linux。真的喜欢用群辉的话,可以装在虚拟机里面,用NFS共享,再mount到群辉里面(远程目录不能用Video Station等功能)。&br&-- 我自己试了群辉的多媒体功能,需要存本地的片儿Video Station识别不出来,识别出来的电影干嘛费那么大劲存本地啊?&br&&figure&&img src=&https://pic4.zhimg.com/ea60f8f9d18b9d6b930aec4e60eab14b_b.png& data-rawwidth=&220& data-rawheight=&220& class=&content_image& width=&220&&&/figure&&br&&b&【为什么不买HP小Server?】&/b&&br&-- 价格不算太贵,,盘位少才4个,机箱不可扩展,接口少可玩性不高,同等价位下CPU也不行。&br&&figure&&img src=&https://pic4.zhimg.com/d1fbce319327cfc6b7aecf777c835243_b.png& data-rawwidth=&220& data-rawheight=&220& class=&content_image& width=&220&&&/figure&&br&&b&【为什么不用旧电脑+硬盘盒?】&br&&/b&-- 旧设备功耗高,也不静音。&br&-- 我先是改造了旧笔记本,PCI-Express接口转了两个USB3.0,扩展USB3.0千兆网卡。又花了250在某宝买了个4盘位USB3.0硬盘座,发现他娘的硬盘不休眠,宣传的功能是能休眠的,插在极路由上也不识别,就给某宝退了。&br&&figure&&img src=&https://pic4.zhimg.com/c7003fffd0cf33accbe35f_b.png& data-rawwidth=&220& data-rawheight=&220& class=&content_image& width=&220&&&/figure&-- 而且,而且,而且插在硬盘座上面不固定,震动太大,伤硬盘。&br&-- 又考虑硬盘盒方案,最低500多软妹币,一想一个破盒子500多,网络下载都不带,还不如自己组装了。&br&&figure&&img src=&https://pic4.zhimg.com/ff3d8e94edfafce4ca0c63_b.png& data-rawwidth=&220& data-rawheight=&220& class=&content_image& width=&220&&&/figure&&br&&b&【为什么不买其他成品NAS?】&/b&&br&-- 威联通TS-451,TS-453等,配置跟我这个一毛一样(J1800,J1900),价格都在4000以上,不过盘位比群晖多。&br&-- 万由NAS也跟我这个一毛一样(J1900,N3150),价格1600多,优势就是定制的4盘位热插拔小机箱。&br&&br&&b&【为什么不用智能路由器?】&/b&&br&-- 极路由3,USB速度约10MByte/s,USB2.0都没跑满。小米路由和极硬货就是单盘位。&br&-- 就算自己刷OpenWrt,能跑满USB2.0的硬件都不多,更不便宜,且移动和复制的速度降到了互联网下载速度,好虐心。&br&-- 路由器可扩展性差,只能完成一些基础的文件共享功能,自己组的性能强悍,可以写脚本,爬虫等24小时挂机。&br&&br&&b&第二层 硬件方案&/b&&br&————————————————————————————————————————&br&&br&所以,所以,所以我是这么搞的:&br&&br&&b&【整体配置写在前面,嫌我啰嗦的直接转“第四层硬件选购”】&/b&&br&&b&CPU:J/N3160 (约2GHz四核)&/b&&br&&b&GPU:Intel HD Graphics Gen7/8&/b&&br&&b&内存:4G/8G(支持双通道)&/b&&br&&b&盘位:8盘位2个热插拔/&/b&&b& 10盘位3个热插拔&/b&&br&&b&网卡:1000Mbit/s有线网卡&/b&&br&&b&电源:400w 80plus金牌&/b&&br&&b&显卡接口:DVI,VGA,HDMI(接口看主板,J1900最大2K高清,N3150最大4K高清)&/b&&br&&b&其他接口:eSATA,USB3.0 * 3,USB2.0 *3 &/b&&br&&b&功耗:待机功耗20w以内&/b&&br&&b&价格:1000 - 1500元&/b&&br&&br&&b&【集成CPU主板:385软妹币】&br&&/b&&figure&&img src=&https://pic3.zhimg.com/c55dc75f0fd9452_b.png& data-rawwidth=&220& data-rawheight=&220& class=&content_image& width=&220&&&/figure&&b&缺点:&/b&&br&-- 相对于HP小服务器,没有远程管理界面。家用可以忽略,有Wake On LAN就足够了,再配合智能路由器就可以远程开机,也可以在BIOS电源设置里设置断电后状态为“Last State”或者“Power ON”就可以像服务器一样一直开机。&br&&b&优点:&/b&&br&-- 无CPU风扇超静音。&br&-- CPU性能较成品NAS强,比HP小服务器性价比也高很多。&br&-- 集成显卡性能强劲,可以硬件加速4k高清,不打游戏不编程只办公上网看片的话性能绰绰有余。&br&-- 现在新出的CPU都支持VT-x,想玩啥直接上虚拟机,做Server的也可以一直开机哈哈。&br&-- 带3个PCIE插槽,可玩性大大加强。&br&-- 带3个USB3.0接口。&br&-- 千兆网卡,NAS必配。&br&&br&&b&【主机箱:89软妹币】&br&&/b&&figure&&img src=&https://pic2.zhimg.com/4ff7b8b4fe47731bfb5ed_b.png& data-rawwidth=&293& data-rawheight=&220& class=&content_image& width=&293&&&/figure&&b&缺点:&/b&&br&-- 大,嫌大的可以折叠了。只要有地方放,连根网线过去就完全不用看到。&br&&b&优点:&/b&&br&-- 盘位多,共9个盘位。5个3.5寸盘位。4个光驱位,可以用光驱位转3.5寸的架子。&br&-- 外露两个光驱位做热插拔,某宝30软妹币一个。&br&&figure&&img src=&https://pic4.zhimg.com/5b44dce8ec7b0d1edc52d3_b.png& data-rawwidth=&395& data-rawheight=&402& class=&content_image& width=&395&&&/figure&&br&&b&【电源:218软妹币包邮】&br&&/b&&figure&&img src=&https://pic4.zhimg.com/97fb3fe8e7_b.png& data-rawwidth=&753& data-rawheight=&204& class=&origin_image zh-lightbox-thumb& width=&753& data-original=&https://pic4.zhimg.com/97fb3fe8e7_r.png&&&/figure&(选择要点就是节能,NAS常年开机,80plus金牌可以节省很多电费,所以不要在电源上省钱。)&br&&b&经过实际测试,上面这句话是错误的,由于功耗太低,所以效率体现不出来,只要买品牌电源就可以,太差的话风扇用久了可能噪声会变大。&/b&&br&&br&&figure&&img src=&https://pic1.zhimg.com/b6d163ed51e07a9aab4d07f77b0291a8_b.png& data-rawwidth=&676& data-rawheight=&388& class=&origin_image zh-lightbox-thumb& width=&676& data-original=&https://pic1.zhimg.com/b6d163ed51e07a9aab4d07f77b0291a8_r.png&&&/figure&&br&&figure&&img src=&https://pic3.zhimg.com/ba27a7e6cce_b.png& data-rawwidth=&214& data-rawheight=&186& class=&content_image& width=&214&&&/figure&&br&&figure&&img src=&https://pic1.zhimg.com/843c89fc6b3a0aecc798_b.png& data-rawwidth=&250& data-rawheight=&250& class=&content_image& width=&250&&&/figure&从上图看SATA电源不够,只有4个,可以买SATA电源一分二的线材,IDE大4PIN转两个SATA,转够10个SATA。&br&&br&&figure&&img src=&https://pic1.zhimg.com/9eb0ba2fc876caca9050_b.png& data-rawwidth=&79& data-rawheight=&49& class=&content_image& width=&79&&&/figure&电源是额定400瓦,功率肯定够(3.5寸硬盘启动电流略高,都按12V,1A算,10块盘才120瓦,主板大概20w)。&br&&br&&b&【内存:4G 105软妹币】&/b&&br&&figure&&img src=&https://pic1.zhimg.com/e1b127c6c993c54b1be85e73e236b8a8_b.png& data-rawwidth=&252& data-rawheight=&229& class=&content_image& width=&252&&&/figure&&b&要玩虚拟机的同学4G很紧张,可以买两条4G*2,CPU支持双通道。&/b&&br&&br&&b&【SATA扩展卡:111软妹币】&/b&&br&主板自带2个SATA3.0。2个PCIE1x,1个PCIE16x。&br&SATA扩展卡性价比比较高的有两种,2口的33,4口的85(机械硬盘速度最高100MByte/s,用不到SATA3)&br&&figure&&img src=&https://pic2.zhimg.com/c2e334ce4b691d32bef8cd_b.png& data-rawwidth=&232& data-rawheight=&288& class=&content_image& width=&232&&&/figure&&figure&&img src=&https://pic3.zhimg.com/595a8cec799caa4be638c9ac6f4b1c76_b.png& data-rawwidth=&225& data-rawheight=&266& class=&content_image& width=&225&&&/figure&&br&&b&【系统盘:88软妹币包邮】&/b&&br&系统盘用固态硬盘会比较快,30G装系统够了,要折腾虚拟机的可以买60G或者120G。&br&买J1900用Linux系统的可以把系统装在U盘上,8G就够装完整图形界面。&br&&b&有2.5寸硬盘或者固态硬盘空闲的可以省了,一定不要用3.5寸做系统盘,一直开着很吵。&/b&&br&&figure&&img src=&https://pic1.zhimg.com/231c53c795797dbcf789c0_b.png& data-rawwidth=&250& data-rawheight=&262& class=&content_image& width=&250&&&/figure&&br&&b&【硬盘减震】&/b&&br&已经有三位同学提出硬盘震动的问题,我目前只有两块3.5的盘感受不到,总结解决方法如下:&br&1、购买硬盘减震圈。淘宝1元20个。&figure&&img src=&https://pic3.zhimg.com/811fa1dabea_b.png& data-rawwidth=&250& data-rawheight=&222& class=&content_image& width=&250&&&/figure&2、光驱位请购买硬盘减震支架。&figure&&img src=&https://pic2.zhimg.com/3e405c2c61f4833ebd6ef189e79e1b91_b.png& data-rawwidth=&250& data-rawheight=&250& class=&content_image& width=&250&&&/figure&3、购买板材厚度大于1mm的质量好的机箱。&br&4、硬盘请看准低速监控级绿盘或2.5寸笔记本硬盘。&br&5、还有问题的请全部购买固态硬盘,彻底解决震动问题。&br&&br&至此硬件搞定,核算一下:&br&集成主板:400(带邮费)&br&机箱:79(机箱太重,某宝邮费会很贵,黑东79包邮,微信入口购买还减了10块)&br&电源:218(包邮)&br&内存:105(包邮)&br&系统盘:88(包邮)&br&SATA扩展卡:111(3 * PCIe转SATA3.0两口带邮费)&br&&b&总计:1001软妹币。&/b&&br&&br&没有算热插拔抽取盒,我还没有买,没热插拔需求的也可以不买,SATA数据及电源线买硬盘的时候可以让老板送。&br&害怕被人说广告,基本没写型号,也没给链接。&br&都写出来也太乱了,想要买的,我把我选的单独列个【硬件选购】章节。&br&&br&&b&【使用实测】&/b&&br&&figure&&img src=&https://pic1.zhimg.com/cf1dd1edc_b.png& data-rawwidth=&643& data-rawheight=&597& class=&origin_image zh-lightbox-thumb& width=&643& data-original=&https://pic1.zhimg.com/cf1dd1edc_r.png&&&/figure&开着优酷(硬件加速)写知乎,CPU快满了,再开网页就卡了。&br&&br&&b&【性能比较】&/b&&br&&b&N3150的NAS(测完了我发现性能他娘的竟然只比我平板高一点点,当然CPU功耗只高2W):&/b&&br&&b&&figure&&img src=&https://pic1.zhimg.com/a3b510ff6c67e6ce316baf9f944a47cc_b.png& data-rawwidth=&905& data-rawheight=&607& class=&origin_image zh-lightbox-thumb& width=&905& data-original=&https://pic1.zhimg.com/a3b510ff6c67e6ce316baf9f944a47cc_r.png&&&/figure&&br&台电平板(X98 Air&/b&&b&3G 64G版):&/b&&br&&b&&figure&&img src=&https://pic3.zhimg.com/a3b29ad4cf16d7be5ebaa2_b.png& data-rawwidth=&900& data-rawheight=&600& class=&origin_image zh-lightbox-thumb& width=&900& data-original=&https://pic3.zhimg.com/a3b29ad4cf16d7be5ebaa2_r.png&&&/figure&&br&我的编程及游戏机 (E3-核超线程 8G单通道内存 GTX960显卡)&br&&/b&&figure&&img src=&https://pic2.zhimg.com/c180ffc31d_b.png& data-rawwidth=&900& data-rawheight=&600& class=&origin_image zh-lightbox-thumb& width=&900& data-original=&https://pic2.zhimg.com/c180ffc31d_r.png&&&/figure&&br&&b&【艳照】&/b&&br&内存和抽取盒到了,装上发个机箱内部艳照,&a href=&//link.zhihu.com/?target=http%3A//cn.bing.com/search%3Fq%3D%25e8%e8%%25e7%25b2%%%25e5%25b8%25a6%26form%3DENRCV3& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&粘扣带&i class=&icon-external&&&/i&&/a&做扎线带很好使,塑料的一次性还不好拆。&br&&figure&&img src=&https://pic1.zhimg.com/e12c22dfeb14d4751fed78_b.png& data-rawwidth=&689& data-rawheight=&622& class=&origin_image zh-lightbox-thumb& width=&689& data-original=&https://pic1.zhimg.com/e12c22dfeb14d4751fed78_r.png&&&/figure&&br&&br&光驱位装了两个热插拔抽取盒,感觉没上图机箱底部的5个3.5盘位稳,没需求的还是买减震架比较稳妥。&br&&figure&&img src=&https://pic4.zhimg.com/f648e615e178b46df73b3_b.png& data-rawwidth=&368& data-rawheight=&624& class=&content_image& width=&368&&&/figure&&br&&br&&b&第三层 软件玩法&/b&&br&————————————————————————————————————————&br&&br&&b&【写给小白】&/b&&br&目的是为了&b&用&/b&的话,请安装Windows(请支持正版),高手达人、学习研究、高富帅、自带优越感的、请自便,不在讨论之列。&br&&br&其实大家最最最最常用的就是&b&“躺在床上随时用手机、iPad看硬盘里的片”。&/b&&br&&b&Windows服务端设置:&/b&&br&目标文件夹右键-&属性-&共享-&高级共享-&勾选”共享此文件夹“-&&b&(需要在手机上删片的请继续设置-&权限-&完全控制-&允许)&/b&-&确定-&确定-&确定-&确定。&br&&br&&b&Android播放客户端(手机,盒子,智能电视):&/b&&br&推荐1:威动播放器-&家庭共享-&选择自动发现的nas设备名称-&输入Windows账号密码-&选择片播放。&br&推荐2:ES文件浏览器-&网络-&局域网-&扫描-&选择自动发现的nas设备名称-&输入Windows账号密码-&选择片播放。&br&&b&ES文件浏览器可以在手机端删除丑八怪哦~&/b&&br&&figure&&img src=&https://pic4.zhimg.com/eca4c0ddb_b.png& data-rawwidth=&273& data-rawheight=&220& class=&content_image& width=&273&&&/figure&&figure&&img src=&https://pic3.zhimg.com/e44b62703aeb65e76f2e_b.png& data-rawwidth=&57& data-rawheight=&55& class=&content_image& width=&57&&&/figure&&br&&b&Android Pad客户端:&/b&&br&威动播放器&b&HD&/b&&br&&br&&b&iOS播放客户端:&/b&&br&推荐:“OPlayerHD Lite”(免费的哦)-&文件服务器-&自动发现-&选择自动发现的nas设备名称-&输入Windows账号密码-&选择片播放。&br&&br&&b&Win7/8/10平板及PC:&/b&&br&推荐:网络-&自动发现的NAS设备名-&右键固定到开始屏幕 or 固定到快速访问-&打开文件播放。&br&映射网络驱动器不好使,连不上就报错,还容易被流氓应用唤醒硬盘。&br&&br&&b&以上客户端都支持保存密码自动登录,自己研究。&br&&/b&&br&&b&【NAS操作系统方案】&/b&&br&方案一:NAS裸机安装Windows,可在虚拟机中安装Linux,群晖,软路由。&br&推荐。Windows对硬件兼容性好,驱动普遍支持,能无需配置充分发挥显卡性能,平时可做上网机,观影机,HTPC高清电视。&br&&br&方案二:NAS裸机安装Linux,可在虚拟机中安装Windows,群晖,软路由。&br&技术宅推荐。Windows还是有些缺陷的,系统及某些流氓软件会莫名其妙唤醒全部硬盘。只要能驱动,Linux多媒体不是问题。没有迅雷下载有点问题,移植的也麻烦,可以在Win虚拟机里面迅雷。&br&&br&方案三:NAS裸机安装群晖,可在虚拟机中安装Windows,Linux,软路由。&br&不推荐。NAS的显卡都浪费了。NAS中集成的功能当然做得很用户友好,非常方便。但是没有的功能很多需要自己编译源码,没有Linux发行版的软件仓库方便,很鸡肋。&br&&br&&b&注1:以上群晖都可以换成其他NAS操作系统。&/b&&br&&b&注2:不推荐裸机安装NAS操作系统。&/b&&br&&br&&b&【Win版本】&/b&&br&&b&迅雷远程下载:&/b&&br&服务端:安装迅雷-&登录-&远程设备-&立即绑定。&br&安卓客户端:迅雷电视助手(别问我为什么叫电视助手)-&登录-&我的-&选择设备-&加号新建。&br&网页客户端:yuancheng.xunlei.com-&登录-&选择设备-&新建。&br&&br&&b&百度云管家远程下载(推送到设备):&/b&&br&服务端:安装百度云管家-&登录。&br&安卓客户端:安装百度云-&登录-&长按文件或文件夹-&更多-&推动到设备-&选择NAS设备名。&br&网页:pan.baidu.com-&登录-&勾选文件或文件夹-&推动到云设备-&选择设备。&br&iPad客户端:没}

我要回帖

更多关于 龙之谷之黑龙崛起 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信