<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/rss.xsl" type="text/xsl"?>
<rss version="2.0">
  <channel>
    <title>IT瘾博客推荐</title>
    <link>https://itindex.net/categories/博客</link>
    <description>IT社区推荐资讯 - ITIndex.net</description>
    <language>zh</language>
    <copyright>https://itindex.net/</copyright>
    <generator>https://itindex.net/</generator>
    <docs>http://backend.userland.com/rss</docs>
    <image>
      <url>https://itindex.net/images/logo.gif</url>
      <title>IT社区推荐资讯 - ITIndex.net</title>
      <link>https://itindex.net/categories/博客</link>
    </image>
    <item>
      <title>Linux系统中负载较高问题排查思路与解决方法 - 朝明 - 博客园</title>
      <link>https://itindex.net/detail/62798-linux-%E7%B3%BB%E7%BB%9F-%E8%B4%9F%E8%BD%BD</link>
      <description>&lt;div&gt;    &lt;blockquote&gt;      &lt;p&gt;Load 就是对计算机干活多少的度量，Load Average 就是一段时间（1分钟、5分钟、15分钟）内平均Load。&lt;/p&gt;&lt;/blockquote&gt;    &lt;h3&gt;一、Load分析：&lt;/h3&gt;    &lt;h5&gt;情况1：CPU高、Load高&lt;/h5&gt;    &lt;ol&gt;      &lt;li&gt;通过top命令查找占用CPU最高的进程PID；&lt;/li&gt;      &lt;li&gt;通过top -Hp PID查找占用CPU最高的线程TID;&lt;/li&gt;      &lt;li&gt;对于java程序，使用jstack打印线程堆栈信息（可联系业务进行排查定位）；&lt;/li&gt;      &lt;li&gt;通过        &lt;code&gt;printf %x tid&lt;/code&gt;打印出最消耗CPU线程的十六进制；&lt;/li&gt;      &lt;li&gt;在堆栈信息中查看该线程的堆栈信息；&lt;/li&gt;&lt;/ol&gt;    &lt;h5&gt;情况2：CPU低、Load高&lt;/h5&gt;    &lt;ol&gt;      &lt;li&gt;通过top命令查看CPU等待IO时间，即        &lt;code&gt;%wa&lt;/code&gt;；&lt;/li&gt;      &lt;li&gt;通过        &lt;code&gt;iostat -d -x -m 1 10&lt;/code&gt;查看磁盘IO情况；(安装命令        &lt;code&gt;yum install -y sysstat&lt;/code&gt;)&lt;/li&gt;      &lt;li&gt;通过        &lt;code&gt;sar -n DEV 1 10&lt;/code&gt;查看网络IO情况；&lt;/li&gt;      &lt;li&gt;通过如下命令查找占用IO的程序；&lt;/li&gt;&lt;/ol&gt;    &lt;pre&gt;      &lt;code&gt;ps -e -L h o state,cmd  | awk &amp;apos;{if($1==&amp;quot;R&amp;quot;||$1==&amp;quot;D&amp;quot;){print $0}}&amp;apos; | sort | uniq -c | sort -k 1nr&lt;/code&gt;&lt;/pre&gt;    &lt;h3&gt;二、CPU高、Load高情况分析&lt;/h3&gt;    &lt;ul&gt;      &lt;li&gt;使用        &lt;code&gt;vmstat&lt;/code&gt;查看系统纬度的 CPU 负载；&lt;/li&gt;      &lt;li&gt;使用        &lt;code&gt;top&lt;/code&gt;查看进程纬度的 CPU 负载；&lt;/li&gt;&lt;/ul&gt;    &lt;h4&gt;2.1、使用 vmstat 查看系统纬度的 CPU 负载&lt;/h4&gt;    &lt;p&gt;可以通过 vmstat 从系统维度查看 CPU 资源的使用情况&lt;/p&gt;    &lt;p&gt;格式：      &lt;code&gt;vmstat -n 1&lt;/code&gt;      &lt;code&gt;-n 1&lt;/code&gt;表示结果一秒刷新一次&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;[root@k8s-10 ~]# vmstat -n 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  1      0 2798000   2076 6375040    0    0    10    76   10   49  6  2 91  1  0
 0  0      0 2798232   2076 6375128    0    0     0   207 7965 12525  7  2 90  2  0&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;返回结果中的主要数据列说明：&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;        &lt;p&gt;          &lt;strong&gt;r&lt;/strong&gt;： 表示系统中 CPU 等待处理的线程。由于 CPU 每次只能处理一个线程，所以，该数值越大，通常表示系统运行越慢。&lt;/p&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;          &lt;strong&gt;b&lt;/strong&gt;： 表示阻塞的进程,这个不多说，进程阻塞，大家懂的。&lt;/p&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;          &lt;strong&gt;us&lt;/strong&gt;： 用户CPU时间，我曾经在一个做加密解密很频繁的服务器上，可以看到us接近100,r运行队列达到80(机器在做压力测试，性能表现不佳)。&lt;/p&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;          &lt;strong&gt;sy&lt;/strong&gt;： 系统CPU时间，如果太高，表示系统调用时间长，例如是IO操作频繁。&lt;/p&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;          &lt;strong&gt;wa&lt;/strong&gt;：IO 等待消耗的 CPU 时间百分比。该值较高时，说明 IO 等待比较严重，这可能磁盘大量作随机访问造成的，也可能是磁盘性能出现了瓶颈。&lt;/p&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;          &lt;strong&gt;id&lt;/strong&gt;：处于空闲状态的 CPU 时间百分比。如果该值持续为 0，同时 sy 是 us 的两倍，则通常说明系统则面临着 CPU 资源的短缺。&lt;/p&gt;        &lt;p&gt;          &lt;strong&gt;常见问题及解决方法：&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;如果r经常大于4，且id经常少于40，表示cpu的负荷很重。&lt;/p&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;如果pi，po长期不等于0，表示内存不足。&lt;/p&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;如果disk经常不等于0，且在b中的队列大于3，表示io性能不好。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;    &lt;h4&gt;2.1、使用 top 查看进程纬度的 CPU 负载&lt;/h4&gt;    &lt;p&gt;可以通过 top 从进程纬度来查看其 CPU、内存等资源的使用情况。&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;[root@k8s-10 ~]# top -c
top - 19:53:49 up 2 days,  7:57,  3 users,  load average: 0.76, 0.79, 0.58
Tasks: 282 total,   2 running, 280 sleeping,   0 stopped,   0 zombie
%Cpu(s):  2.4 us,  1.4 sy,  0.0 ni, 95.0 id,  1.2 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 12304204 total,  2800864 free,  3119064 used,  6384276 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  8164632 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
29884 root      20   0 5346580 929332  14556 S   0.0  7.6   6:19.19 /opt/jdk1.8.0_144/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apach+
  875 root      20   0  729524 563424  38612 S   3.1  4.6  93:22.70 kube-apiserver --authorization-mode=Node,RBAC --service-node-port-range=80-60000 --advertise-address=10.68.7.162 --allow-privileged=true -+
 3870 nfsnobo+  20   0  910376 317248  22812 S   1.6  2.6  42:29.59 /bin/prometheus --config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/prometheus --storage.tsdb.retention=1d --web.enable-life+&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;默认界面上第三行会显示当前 CPU 资源的总体使用情况，下方会显示各个进程的资源占用情况。&lt;/p&gt;    &lt;p&gt;可以直接在界面输入大小字母 P，来使监控结果按 CPU 使用率倒序排列，进而定位系统中占用 CPU 较高的进程。最后，根据系统日志和程序自身相关日志，对相应进程做进一步排查分析，以判断其占用过高 CPU 的原因。&lt;/p&gt;    &lt;h4&gt;2.2、strace命令分析&lt;/h4&gt;    &lt;p&gt;      &lt;a href="https://oa.kedacom.com/confluence/pages/viewpage.action?pageId=77136289" rel="noopener" target="_blank"&gt;https://oa.kedacom.com/confluence/pages/viewpage.action?pageId=77136289&lt;/a&gt;&lt;/p&gt;    &lt;h3&gt;三、CPU低、Load高情况分析&lt;/h3&gt;    &lt;p&gt;      &lt;strong&gt;问题描述&lt;/strong&gt;：      &lt;br /&gt;Linux 系统没有业务程序运行，通过 top 观察，类似如下图所示，CPU 很空闲，但是 load average 却非常高：&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;处理办法&lt;/strong&gt;：&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;load average 是对 CPU 负载的评估，其值越高，说明其任务队列越长，处于等待执行的任务越多。&lt;/li&gt;      &lt;li&gt;出现此种情况时，可能是由于僵死进程导致的。可以通过指令        &lt;code&gt;ps -axjf&lt;/code&gt;查看是否存在 D 状态进程。&lt;/li&gt;      &lt;li&gt;D 状态是指不可中断的睡眠状态。该状态的进程无法被 kill，也无法自行退出。只能通过恢复其依赖的资源或者重启系统来解决。&lt;/li&gt;&lt;/ul&gt;    &lt;pre&gt;      &lt;code&gt;等待I/O的进程通过处于uninterruptible sleep或D状态；通过给出这些信息我们就可以简单的查找出处在wait状态的进程
ps -eo state,pid,cmd | grep &amp;quot;^D&amp;quot;; echo &amp;quot;----&amp;quot;

- 查找占用IO的程序
ps -e -L h o state,cmd  | awk &amp;apos;{if($1==&amp;quot;R&amp;quot;||$1==&amp;quot;D&amp;quot;){print $0}}&amp;apos; | sort | uniq -c | sort -k 1nr&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
    &lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/62798-linux-%E7%B3%BB%E7%BB%9F-%E8%B4%9F%E8%BD%BD</guid>
      <pubDate>Sat, 08 Jul 2023 12:01:28 CST</pubDate>
    </item>
    <item>
      <title>AI绘画能力的起源：通俗理解VAE、扩散模型DDPM、ViT/Swin transformer_v_JULY_v的博客-CSDN博客</title>
      <link>https://itindex.net/detail/62749-ai-%E7%BB%98%E7%94%BB-%E7%90%86%E8%A7%A3</link>
      <description>&lt;div&gt;    &lt;h1&gt;前言&lt;/h1&gt;    &lt;p&gt;2018年我写过一篇博客，叫：《      &lt;a href="https://blog.csdn.net/v_july_v/article/details/80170182" title=""&gt;一文读懂目标检测：R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD&lt;/a&gt;》，该文相当于梳理了2019年之前CV领域的典型视觉模型，比如&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;2014 R-CNN&lt;/li&gt;      &lt;li&gt;2015 Fast R-CNN、Faster R-CNN&lt;/li&gt;      &lt;li&gt;2016 YOLO、SSD&lt;/li&gt;      &lt;li&gt;2017 Mask R-CNN、YOLOv2&lt;/li&gt;      &lt;li&gt;2018 YOLOv3&lt;/li&gt;&lt;/ul&gt;    &lt;p&gt;随着2019 CenterNet的发布，特别是2020发布的DETR(End-to-End Object Detection with Transformers)之后，自此CV迎来了生成式下的多模态时代&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;2020年        &lt;br /&gt;5月 DETR        &lt;br /&gt;6月 DDPM(即众人口中常说的扩散模型diffusion model)        &lt;br /&gt;10月 DDIM、Vision Transformer(简称ViT)&lt;/li&gt;      &lt;li&gt;2021年        &lt;br /&gt;1月 CLIP、DALL·E        &lt;br /&gt;3月 Swin Transformer        &lt;br /&gt;11月 MAE、Swin Transformer V2&lt;/li&gt;      &lt;li&gt;2022年        &lt;br /&gt;1月 BLIP        &lt;br /&gt;4月 DALL·E 2        &lt;br /&gt;8月 Stable Diffusion、BEiT-3、Midjourney V3&lt;/li&gt;      &lt;li&gt;2023年        &lt;br /&gt;1月 BLIP2        &lt;br /&gt;3月 Visual ChatGPT、GPT-4、Midjourney V5        &lt;br /&gt;4月 SAM(Segment Anything Model)&lt;/li&gt;&lt;/ul&gt;    &lt;p&gt;但看这些模型接二连三的横空出世，都不用说最后爆火的GPT4，便可知不少CV同学被卷的不行&lt;/p&gt;    &lt;p&gt;说到GPT4，便不得不提ChatGPT，实在是太火了，改变了很多行业，使得国内外绝大部分公司的产品、服务都值得用LLM全部升级一遍(比如微软的365 Copilot、阿里所有产品、金山WPS等等)&lt;/p&gt;    &lt;p&gt;而GPT4相比GPT3.5或GPT3最本质的改进就是增加了多模态的能力，使得ChatGPT很快就能支持图片的输入形式，从而达到图生文和文生图的效果，而AI绘画随着去年stable diffusion和Midjourney的推出，使得文生图火爆异常，各种游戏的角色设计、网上店铺的商品/页面设计都用上了AI绘画这样的工具，更有不少朋友利用AI绘画取得了不少的创收，省时省力还能赚钱，真香&lt;/p&gt;    &lt;p&gt;但面对这么香的技术，其背后的一系列原理到底是什么呢，本文特从头开始，不只是简单的讲一下扩散模型的原理，而是在反复研读相关论文之后，准备把20年起相关的CV多模态模型全部梳理一遍，从VE、VAE、DDPM到ViT/Swin transformer、CLIP/BLIP，再到stable diffusion/Midjourney、GPT4，当然，实际写的时候，会分成两篇甚至多篇文章，比如&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;第一篇，即本文《AI绘画能力的起源：通俗理解VAE、扩散模型DDPM、ViT/Swin transformer》&lt;/li&gt;      &lt;li&gt;第二篇，即下篇《AIGC下的CV多模态原理解析：从CLIP/BLIP到stable diffusion/Midjourney、GPT4》&lt;/li&gt;&lt;/ul&gt;    &lt;p&gt;就当2020年之后的CV视觉发展史了&lt;/p&gt;    &lt;p&gt;且过程中会尽可能写透彻每一个模型的原理，举个最简单的例子，网上介绍VAE的文章都太数学化(更怕那种表面正确其实关键的公式是错的误导人)，如果更边推导边分析背后的理论意义(怎么来的 出发点是什么 为什么要这么做 这么做的意义是什么)，则会更好理解，这就跟变介绍原理边coding实现 会更好理解、理解更深 一个道理&lt;/p&gt;    &lt;p&gt;&lt;/p&gt;    &lt;h1&gt;第一部分 编码器VE与变分自编码器VAE&lt;/h1&gt;    &lt;h2&gt;1.1 AE：编码器(数据      &lt;img alt="X" src="https://latex.codecogs.com/gif.latex?X"&gt;&lt;/img&gt;压缩为低维表示      &lt;img alt="z" src="https://latex.codecogs.com/gif.latex?z"&gt;&lt;/img&gt;)-解码器(低维表示恢复为原始数据      &lt;img alt="\hat{X}" src="https://latex.codecogs.com/gif.latex?%5Chat%7BX%7D"&gt;&lt;/img&gt;)架构&lt;/h2&gt;    &lt;p&gt;自编码器(Autoencoder，简称AE)是一种无监督学习的神经网络，用于学习输入数据的压缩表示。具体而言，可以将其分为两个部分：编码器和解码器&lt;/p&gt;    &lt;p&gt;      &lt;img alt="" height="341" src="https://img-blog.csdnimg.cn/f6b0541a54124bb392f15450125e1877.png" width="600"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;        &lt;p&gt;编码器：编码器是一个神经网络，负责将输入数据          &lt;img alt="X" src="https://latex.codecogs.com/gif.latex?X"&gt;&lt;/img&gt;（如图像、文本等）压缩为一个低维表示          &lt;img alt="z" src="https://latex.codecogs.com/gif.latex?z"&gt;&lt;/img&gt;，且表示为          &lt;img alt="z = g(X)" src="https://latex.codecogs.com/gif.latex?z%20%3D%20g%28X%29"&gt;&lt;/img&gt;&lt;/p&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;解码器：解码器是另一个神经网络，负责将编码器生成的低维表示恢复为原始数据          &lt;img alt="\hat{X}" src="https://latex.codecogs.com/gif.latex?%5Chat%7BX%7D"&gt;&lt;/img&gt;，且表示为          &lt;img alt="\hat{X} = f(z)" src="https://latex.codecogs.com/gif.latex?%5Chat%7BX%7D%20%3D%20f%28z%29"&gt;&lt;/img&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;    &lt;p&gt;从而最终完成这么一个过程：      &lt;img alt="X \rightarrow z \rightarrow \hat{X}" src="https://latex.codecogs.com/gif.latex?X%20%5Crightarrow%20z%20%5Crightarrow%20%5Chat%7BX%7D"&gt;&lt;/img&gt;，而其训练目标即是最小化输入数据      &lt;img alt="X" src="https://latex.codecogs.com/gif.latex?X"&gt;&lt;/img&gt;与解码器重建数据      &lt;img alt="\hat{X}" src="https://latex.codecogs.com/gif.latex?%5Chat%7BX%7D"&gt;&lt;/img&gt;之间的差异，所以自编码器常用的一个损失函数为      &lt;img alt="l = || X - \hat{X} || ^2" src="https://latex.codecogs.com/gif.latex?l%20%3D%20%7C%7C%20X%20-%20%5Chat%7BX%7D%20%7C%7C%20%5E2"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;这个自编码的意义在于&lt;/p&gt;    &lt;ol&gt;      &lt;li&gt;模型训练结束后，我们就可以认为编码        &lt;img alt="z" src="https://latex.codecogs.com/gif.latex?z"&gt;&lt;/img&gt;囊括了输入数据        &lt;img alt="X" src="https://latex.codecogs.com/gif.latex?X"&gt;&lt;/img&gt;的大部分信息，也因此我们可以直接利用        &lt;img alt="z" src="https://latex.codecogs.com/gif.latex?z"&gt;&lt;/img&gt;表达原始数据，从而达到数据降维的目的&lt;/li&gt;      &lt;li&gt;解码器只需要输入某些低维向量        &lt;img alt="z" src="https://latex.codecogs.com/gif.latex?z"&gt;&lt;/img&gt;，就能够输出高维的图片数据        &lt;img alt="\hat{X}" src="https://latex.codecogs.com/gif.latex?%5Chat%7BX%7D"&gt;&lt;/img&gt;，那我们能否        &lt;strong&gt;把解码器模型直接当做生成模型&lt;/strong&gt;，在低维空间中随机生成某些向量        &lt;img alt="z" src="https://latex.codecogs.com/gif.latex?z"&gt;&lt;/img&gt;，再喂给解码器        &lt;img alt="f(z)" src="https://latex.codecogs.com/gif.latex?f%28z%29"&gt;&lt;/img&gt;来生成图片呢？&lt;/li&gt;&lt;/ol&gt;    &lt;p&gt;对于第二点，理论上可以这么做，但问题在于&lt;/p&gt;    &lt;ol&gt;      &lt;li&gt;绝大多数随机生成的        &lt;img alt="z,f(z)" src="https://latex.codecogs.com/gif.latex?z%2Cf%28z%29"&gt;&lt;/img&gt;只会生成一些没有意义的噪声，之所以如此，原因在于没有显性的对        &lt;img alt="z" src="https://latex.codecogs.com/gif.latex?z"&gt;&lt;/img&gt;的分布        &lt;img alt="p(z)" src="https://latex.codecogs.com/gif.latex?p%28z%29"&gt;&lt;/img&gt;进行建模，我们并不知道哪些        &lt;img alt="z" src="https://latex.codecogs.com/gif.latex?z"&gt;&lt;/img&gt;能够生成有用的图片&lt;/li&gt;      &lt;li&gt;而且我们用来训练        &lt;img alt="f(z)" src="https://latex.codecogs.com/gif.latex?f%28z%29"&gt;&lt;/img&gt;的数据是有限的，        &lt;img alt="f" src="https://latex.codecogs.com/gif.latex?f"&gt;&lt;/img&gt;可能只会对极有限的        &lt;img alt="z" src="https://latex.codecogs.com/gif.latex?z"&gt;&lt;/img&gt;有响应。而整个低维空间又是一个比较大的空间，如果只在这个空间上随机采样的话，我们自然不能指望总能恰好采样到能够生成有用的图片的        &lt;img alt="z" src="https://latex.codecogs.com/gif.latex?z"&gt;&lt;/img&gt;&lt;/li&gt;&lt;/ol&gt;    &lt;p&gt;有问题自然便得探索对应的解决方案，而VAE(自变分编码器，Variational Autoencoders)则是在AE的基础上，      &lt;strong&gt;显性的对        &lt;img alt="z" src="https://latex.codecogs.com/gif.latex?z"&gt;&lt;/img&gt;的分布        &lt;img alt="p(z)" src="https://latex.codecogs.com/gif.latex?p%28z%29"&gt;&lt;/img&gt;进行建模&lt;/strong&gt;(比如符合某种常见的概率分布)      &lt;strong&gt;，使得自编码器成为一个合格的生成模型&lt;/strong&gt;&lt;/p&gt;    &lt;h2&gt;1.2 Variational AutoEncoder (VAE)&lt;/h2&gt;    &lt;h3&gt;1.2.1 VAE：标数据的分布      &lt;img alt="\hat{X}" src="https://latex.codecogs.com/gif.latex?%5Chat%7BX%7D"&gt;&lt;/img&gt;和目标分布      &lt;img alt="X" src="https://latex.codecogs.com/gif.latex?X"&gt;&lt;/img&gt;尽量接近&lt;/h3&gt;    &lt;p&gt;VAE和GAN一样，都是从隐变量      &lt;img alt="Z" src="https://latex.codecogs.com/gif.latex?Z"&gt;&lt;/img&gt;生成目标数据，具体而言，先用某种分布随机生成一组隐变量      &lt;img alt="Z = \left \{ Z_1,Z_2,\cdots ,Z_k \right \}" src="https://latex.codecogs.com/gif.latex?Z%20%3D%20%5Cleft%20%5C%7B%20Z_1%2CZ_2%2C%5Ccdots%20%2CZ_k%20%5Cright%20%5C%7D"&gt;&lt;/img&gt;(假设隐变量服从正态分布)，然后这个      &lt;img alt="Z" src="https://latex.codecogs.com/gif.latex?Z"&gt;&lt;/img&gt;隐变量经过一个生成器生成一组数据      &lt;img alt="\hat{X} = \left \{ \hat{X_1},\hat{X_2},\cdots ,\hat{X_k} \right \}" src="https://latex.codecogs.com/gif.latex?%5Chat%7BX%7D%20%3D%20%5Cleft%20%5C%7B%20%5Chat%7BX_1%7D%2C%5Chat%7BX_2%7D%2C%5Ccdots%20%2C%5Chat%7BX_k%7D%20%5Cright%20%5C%7D"&gt;&lt;/img&gt;，具体如下图所示(本1.2节的部分图来自      &lt;a href="https://kexue.fm/archives/5253" title=""&gt;苏建林&lt;/a&gt;)：&lt;/p&gt;    &lt;p&gt;      &lt;img alt="" height="296" src="https://img-blog.csdnimg.cn/img_convert/172fa0fa018b56183b7dce834fe40550.png" width="600"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;而VAE和GAN都希望这组生成数据的分布      &lt;img alt="\hat{X}" src="https://latex.codecogs.com/gif.latex?%5Chat%7BX%7D"&gt;&lt;/img&gt;和目标分布      &lt;img alt="X" src="https://latex.codecogs.com/gif.latex?X"&gt;&lt;/img&gt;尽量接近，看似美好，但有两个问题&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;一方面，“尽量接近”并没有一个确定的关于        &lt;img alt="\hat{X}" src="https://latex.codecogs.com/gif.latex?%5Chat%7BX%7D"&gt;&lt;/img&gt; 和         &lt;img alt="X" src="https://latex.codecogs.com/gif.latex?X"&gt;&lt;/img&gt;的相似度的评判标准，比如KL散度便不行，原因在于KL散度是针对两个已知的概率分布求相似度的，而         &lt;img alt="\hat{X}" src="https://latex.codecogs.com/gif.latex?%5Chat%7BX%7D"&gt;&lt;/img&gt;和         &lt;img alt="X" src="https://latex.codecogs.com/gif.latex?X"&gt;&lt;/img&gt; 的概率分布目前都是未知(只有一批采样数据 没有分布表达式)&lt;/li&gt;      &lt;li&gt;二方面，经过采样出来的每一个        &lt;img alt="Z_k" src="https://latex.codecogs.com/gif.latex?Z_k"&gt;&lt;/img&gt;，不一定对应着每一个原来的        &lt;img alt="X_k" src="https://latex.codecogs.com/gif.latex?X_k"&gt;&lt;/img&gt;，故最后没法直接最小化        &lt;img alt="D^2(X_k,\hat{X_k})" src="https://latex.codecogs.com/gif.latex?D%5E2%28X_k%2C%5Chat%7BX_k%7D%29"&gt;&lt;/img&gt;&lt;/li&gt;&lt;/ul&gt;    &lt;p&gt;实际是怎么做的呢，事实上，与自动编码器由编码器与解码器两部分构成相似，VAE利用两个神经网络建立两个概率密度分布模型：&lt;/p&gt;    &lt;p&gt;      &lt;img alt="" height="297" src="https://img-blog.csdnimg.cn/e41bbe72ab7c446f8acd9f137695dd58.png" width="600"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;一个用于原始输入数据        &lt;img alt="X=\{X_1,...,X_k\}" src="https://latex.codecogs.com/gif.latex?X%3D%5C%7BX_1%2C...%2CX_k%5C%7D"&gt;&lt;/img&gt;的变分推断，生成隐变量        &lt;img alt="Z" src="https://latex.codecogs.com/gif.latex?Z"&gt;&lt;/img&gt;的变分概率分布        &lt;img alt="p(Z|X_k)" src="https://latex.codecogs.com/gif.latex?p%28Z%7CX_k%29"&gt;&lt;/img&gt;，称为推断网络        &lt;br /&gt;        &lt;strong&gt;而VAE的核心就是，我们不仅假设 &lt;/strong&gt;        &lt;img alt="p(Z)" src="https://latex.codecogs.com/gif.latex?p%28Z%29"&gt;&lt;/img&gt;        &lt;strong&gt;是正态分布，而且假设每个&lt;/strong&gt;        &lt;img alt="p(Z|X_k)" src="https://latex.codecogs.com/gif.latex?p%28Z%7CX_k%29"&gt;&lt;/img&gt;        &lt;strong&gt; 也是正态分布。&lt;/strong&gt;什么意思呢？即针对每个采样点        &lt;img alt="X_k" src="https://latex.codecogs.com/gif.latex?X_k"&gt;&lt;/img&gt;获得一个专属于它和         &lt;img alt="Z" src="https://latex.codecogs.com/gif.latex?Z"&gt;&lt;/img&gt; 的一个正态分布        &lt;img alt="p(Z|X_k)" src="https://latex.codecogs.com/gif.latex?p%28Z%7CX_k%29"&gt;&lt;/img&gt;        &lt;br /&gt;        &lt;br /&gt;换言之，有         &lt;img alt="k" src="https://latex.codecogs.com/gif.latex?k"&gt;&lt;/img&gt; 个         &lt;img alt="X" src="https://latex.codecogs.com/gif.latex?X"&gt;&lt;/img&gt; sample，就有        &lt;img alt="k" src="https://latex.codecogs.com/gif.latex?k"&gt;&lt;/img&gt;个正态分布         &lt;img alt="p(Z|X_k)" src="https://latex.codecogs.com/gif.latex?p%28Z%7CX_k%29"&gt;&lt;/img&gt;，毕竟没有任何两个采样点是完全一致的，而后面要训练一个生成器        &lt;img alt="\hat{X_k}=f(Z)" src="https://latex.codecogs.com/gif.latex?%5Chat%7BX_k%7D%3Df%28Z%29"&gt;&lt;/img&gt;，希望能够把从分布        &lt;img alt="p(Z|X_k)" src="https://latex.codecogs.com/gif.latex?p%28Z%7CX_k%29"&gt;&lt;/img&gt;采样出来的一个        &lt;img alt="Z_k" src="https://latex.codecogs.com/gif.latex?Z_k"&gt;&lt;/img&gt;还原为        &lt;img alt="X_k" src="https://latex.codecogs.com/gif.latex?X_k"&gt;&lt;/img&gt;，而如果从        &lt;img alt="p(Z)" src="https://latex.codecogs.com/gif.latex?p%28Z%29"&gt;&lt;/img&gt;中采样一个        &lt;img alt="Z_k" src="https://latex.codecogs.com/gif.latex?Z_k"&gt;&lt;/img&gt;，没法知道这个        &lt;img alt="Z_k" src="https://latex.codecogs.com/gif.latex?Z_k"&gt;&lt;/img&gt;对应于真实的        &lt;img alt="X_k" src="https://latex.codecogs.com/gif.latex?X_k"&gt;&lt;/img&gt;呢？现在        &lt;img alt="p(Z|X_k)" src="https://latex.codecogs.com/gif.latex?p%28Z%7CX_k%29"&gt;&lt;/img&gt;专属于        &lt;img alt="X_k" src="https://latex.codecogs.com/gif.latex?X_k"&gt;&lt;/img&gt;，我们有理由说从这个分布采样出来的        &lt;img alt="Z_k" src="https://latex.codecogs.com/gif.latex?Z_k"&gt;&lt;/img&gt;可以还原到对应的        &lt;img alt="X_k" src="https://latex.codecogs.com/gif.latex?X_k"&gt;&lt;/img&gt;中去        &lt;p&gt;          &lt;img alt="" height="312" src="https://img-blog.csdnimg.cn/183b7b0b77504abfa14d1d67695b7e3e.png" width="600"&gt;&lt;/img&gt;&lt;/p&gt;而如何确定这         &lt;img alt="k" src="https://latex.codecogs.com/gif.latex?k"&gt;&lt;/img&gt; 个正态分布呢，众所周知，确定一个正太分布只需确定其均值        &lt;img alt="u" src="https://latex.codecogs.com/gif.latex?u"&gt;&lt;/img&gt;和方差        &lt;img alt="\sigma ^2" src="https://latex.codecogs.com/gif.latex?%5Csigma%20%5E2"&gt;&lt;/img&gt; 即可，故可通过已知的        &lt;img alt="X_k" src="https://latex.codecogs.com/gif.latex?X_k"&gt;&lt;/img&gt;和 假设的        &lt;img alt="Z" src="https://latex.codecogs.com/gif.latex?Z"&gt;&lt;/img&gt;去确定均值和方差        &lt;br /&gt;具体可以构建两个神经网络        &lt;img alt="\mu _k = f_1(X_k)" src="https://latex.codecogs.com/gif.latex?%5Cmu%20_k%20%3D%20f_1%28X_k%29"&gt;&lt;/img&gt;，        &lt;img alt="log \sigma _{k}^{2} = f_2(X_k)" src="https://latex.codecogs.com/gif.latex?log%20%5Csigma%20_%7Bk%7D%5E%7B2%7D%20%3D%20f_2%28X_k%29"&gt;&lt;/img&gt;去计算。值得一提的是，选择拟合        &lt;img alt="log \sigma _{k}^{2}" src="https://latex.codecogs.com/gif.latex?log%20%5Csigma%20_%7Bk%7D%5E%7B2%7D"&gt;&lt;/img&gt;而不是直接拟合        &lt;img alt="\sigma _{k}^{2}" src="https://latex.codecogs.com/gif.latex?%5Csigma%20_%7Bk%7D%5E%7B2%7D"&gt;&lt;/img&gt;，是因为        &lt;img alt="\sigma _{k}^{2}" src="https://latex.codecogs.com/gif.latex?%5Csigma%20_%7Bk%7D%5E%7B2%7D"&gt;&lt;/img&gt;总是非负的，需要加激活函数处理，而拟合        &lt;img alt="log \sigma _{k}^{2}" src="https://latex.codecogs.com/gif.latex?log%20%5Csigma%20_%7Bk%7D%5E%7B2%7D"&gt;&lt;/img&gt;不需要加激活函数，因为它可正可负&lt;/li&gt;      &lt;li&gt;另一个根据生成的隐变量        &lt;img alt="Z" src="https://latex.codecogs.com/gif.latex?Z"&gt;&lt;/img&gt;的变分概率分布        &lt;img alt="p(Z)" src="https://latex.codecogs.com/gif.latex?p%28Z%29"&gt;&lt;/img&gt;，还原生成原始数据的近似概率分布        &lt;img alt="p(\hat{X}|Z)" src="https://latex.codecogs.com/gif.latex?p%28%5Chat%7BX%7D%7CZ%29"&gt;&lt;/img&gt;，称为生成网络         &lt;br /&gt;因为已经学到了这         &lt;img alt="k" src="https://latex.codecogs.com/gif.latex?k"&gt;&lt;/img&gt; 个正态分布，那可以直接从专属分布        &lt;img alt="p(Z|X_k)" src="https://latex.codecogs.com/gif.latex?p%28Z%7CX_k%29"&gt;&lt;/img&gt;中采样一个        &lt;img alt="Z_k" src="https://latex.codecogs.com/gif.latex?Z_k"&gt;&lt;/img&gt;出来，然后经过一个生成器得到        &lt;img alt="\hat{X_k} = f(Z_k)" src="https://latex.codecogs.com/gif.latex?%5Chat%7BX_k%7D%20%3D%20f%28Z_k%29"&gt;&lt;/img&gt;，那接下来只需要最小化方差         &lt;img alt="D^2(X_k,\hat{X_k})" src="https://latex.codecogs.com/gif.latex?D%5E2%28X_k%2C%5Chat%7BX_k%7D%29"&gt;&lt;/img&gt;就行        &lt;p&gt;          &lt;img alt="" height="407" src="https://img-blog.csdnimg.cn/d0f4229af78e42c6a2f1d9839831dd8d.png" width="600"&gt;&lt;/img&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;    &lt;p&gt;仔细理解的时候有没有发现一个问题？为什么在文章最开头，我们强调了没法直接比较       &lt;img alt="X" src="https://latex.codecogs.com/gif.latex?X"&gt;&lt;/img&gt; 与       &lt;img alt="\hat{X}" src="https://latex.codecogs.com/gif.latex?%5Chat%7BX%7D"&gt;&lt;/img&gt; 的分布，而在这里，我们认为可以直接比较这俩？注意，这里的       &lt;img alt="Z_k" src="https://latex.codecogs.com/gif.latex?Z_k"&gt;&lt;/img&gt; 是专属于或针对于      &lt;img alt="X_k" src="https://latex.codecogs.com/gif.latex?X_k"&gt;&lt;/img&gt;的隐变量，那么和       &lt;img alt="\hat{X_k}" src="https://latex.codecogs.com/gif.latex?%5Chat%7BX_k%7D"&gt;&lt;/img&gt;本身就有对应关系，因此右边的蓝色方框内的“生成器”，是一一对应的生成。&lt;/p&gt;    &lt;p&gt;另外，大家可以看到，均值和方差的计算本质上都是encoder。也就是说，VAE其实利用了两个encoder去分别学习均值和方差&lt;/p&gt;    &lt;h3&gt;1.2.2 VAE的Variational到底是个啥&lt;/h3&gt;    &lt;p&gt;这里还有一个      &lt;strong&gt;非常重要&lt;/strong&gt;的问题：由于我们通过最小化      &lt;img alt="D^2(X_k,\hat{X_k})" src="https://latex.codecogs.com/gif.latex?D%5E2%28X_k%2C%5Chat%7BX_k%7D%29"&gt;&lt;/img&gt;来训练右边的生成器，最终模型会逐渐使得       &lt;strong&gt;        &lt;img alt="X_k" src="https://latex.codecogs.com/gif.latex?X_k"&gt;&lt;/img&gt;&lt;/strong&gt; 和      &lt;img alt="\hat{X_k}" src="https://latex.codecogs.com/gif.latex?%5Chat%7BX_k%7D"&gt;&lt;/img&gt;趋于一致。但是注意，因为       &lt;img alt="Z_k" src="https://latex.codecogs.com/gif.latex?Z_k"&gt;&lt;/img&gt;是重新随机采样过的，而不是直接通过均值和方差encoder学出来的，这个生成器的输入       &lt;img alt="Z" src="https://latex.codecogs.com/gif.latex?Z"&gt;&lt;/img&gt;是有噪声的&lt;/p&gt;    &lt;ol&gt;      &lt;li&gt;仔细思考一下，这个噪声的大小其实就用方差来度量。为了使得分布的学习尽量接近，我们希望噪声越小越好，所以我们会尽量使得方差趋于 0&lt;/li&gt;      &lt;li&gt;但是方差不能为 0，因为我们还想要给模型一些训练难度。如果方差为 0，模型永远只需要学习高斯分布的均值，这样就丢失了随机性，VAE就变成AE了……        &lt;strong&gt;这就是为什么VAE要在AE前面加一个Variational：我们希望方差能够持续存在，从而带来噪声！&lt;/strong&gt;&lt;/li&gt;      &lt;li&gt;那如何解决这个问题呢？其实保证有方差就行，但是VAE给出了一个优雅的答案：不仅需要保证有方差，还要让所有        &lt;img alt="p(Z|X)" src="https://latex.codecogs.com/gif.latex?p%28Z%7CX%29"&gt;&lt;/img&gt;趋于标准正态分布        &lt;img alt="N(0,1)" src="https://latex.codecogs.com/gif.latex?N%280%2C1%29"&gt;&lt;/img&gt;，根据定义可知        &lt;p&gt;          &lt;img alt="P(Z) = \sum_{X}^{} p(Z|X)p(X) = \sum_{X}^{} N(0,1)p(X) = N(0,1)\sum_{X}p(X) = N(0,1)" src="https://latex.codecogs.com/gif.latex?P%28Z%29%20%3D%20%5Csum_%7BX%7D%5E%7B%7D%20p%28Z%7CX%29p%28X%29%20%3D%20%5Csum_%7BX%7D%5E%7B%7D%20N%280%2C1%29p%28X%29%20%3D%20N%280%2C1%29%5Csum_%7BX%7Dp%28X%29%20%3D%20N%280%2C1%29"&gt;&lt;/img&gt;&lt;/p&gt;这个式子的关键意义在于告诉我吗：如果所有        &lt;img alt="p(Z|X)" src="https://latex.codecogs.com/gif.latex?p%28Z%7CX%29"&gt;&lt;/img&gt;都趋于        &lt;img alt="N(0,1)" src="https://latex.codecogs.com/gif.latex?N%280%2C1%29"&gt;&lt;/img&gt;，那么我们可以保证        &lt;img alt="p(Z)" src="https://latex.codecogs.com/gif.latex?p%28Z%29"&gt;&lt;/img&gt;也趋于        &lt;img alt="N(0,1)" src="https://latex.codecogs.com/gif.latex?N%280%2C1%29"&gt;&lt;/img&gt;，从而实现先验的假设，这样就形成了一个闭环！那怎么让所有        &lt;img alt="p(Z|X)" src="https://latex.codecogs.com/gif.latex?p%28Z%7CX%29"&gt;&lt;/img&gt;趋于        &lt;img alt="N(0,1)" src="https://latex.codecogs.com/gif.latex?N%280%2C1%29"&gt;&lt;/img&gt;呢？还是老套路：加loss        &lt;br /&gt;        &lt;br /&gt;到此为止，我们可以把VAE进一步画成：        &lt;p&gt;          &lt;img alt="" height="518" src="https://img-blog.csdnimg.cn/7af29ce00e2844459b64e19ebfd6d2e3.png" width="600"&gt;&lt;/img&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;    &lt;p&gt;现在我们来回顾一下VAE到底做了啥。VAE在AE的基础上&lt;/p&gt;    &lt;p&gt;      &lt;img alt="" height="300" src="https://img-blog.csdnimg.cn/67dcdbc68fea4eebbd85ba3f732abf22.png" width="600"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;一方面，对均值的encoder添加高斯噪声(正态分布的随机采样)，使得decoder(即生成器)有噪声鲁棒性&lt;/li&gt;      &lt;li&gt;二方面，为了防止噪声消失，将所有        &lt;img alt="p(Z|X)" src="https://latex.codecogs.com/gif.latex?p%28Z%7CX%29"&gt;&lt;/img&gt;趋近于标准正态分布，将encoder的均值尽量降为 0，而将方差尽量保持住&lt;/li&gt;&lt;/ul&gt;    &lt;p&gt;这样一来，当decoder训练的不好的时候，整个体系就可以降低噪声；当decoder逐渐拟合的时候，就会增加噪声&lt;/p&gt;    &lt;p&gt;&lt;/p&gt;    &lt;h1&gt;第二部分 扩散模型DDPM：Denoising Diffusion Probabilistic Models&lt;/h1&gt;    &lt;p&gt;在写本文之前，我反复看了网上很多阐述DDPM的文章，实话说，一开始看到那种一上来就一堆公式的，起初确实看不下去，虽然后来 慢慢的都看得下去了，但如果对于一个初次接触DDPM的初学者来说，一上来一堆公式确实容易把人绕晕，但如果没有公式，则又没法透彻理解背后的算法步骤，两相权衡，本文将侧重算法每一步的剖析，而公式更多为解释算法原理而服务，说白了，侧重原理 其次公式，毕竟原理透彻了，公式也就自然而然的能写出来了&lt;/p&gt;    &lt;p&gt;2020年，UC Berkeley等人的Jonathan Ho等人通过论文《Denoising Diffusion Probabilistic Models》正式提出DDPM&lt;/p&gt;    &lt;p&gt;扩散模型的灵感来自非平衡热力学，通过定义了一个扩散步骤的马尔可夫链，以缓慢地将随机噪声添加到数据中，然后学习反转扩散过程以从噪声中构建所需的数据样本&lt;/p&gt;    &lt;p&gt;对于噪声的扩散，在数据当中，不断地加入具有高斯分布的噪声，最开始还具有原始图片的特征，但是随着噪声的不断加入，最后会变为一个纯噪声图片。&lt;/p&gt;    &lt;p&gt;      &lt;img alt="" height="329" src="https://img-blog.csdnimg.cn/img_convert/8f55007795e5f942e7d0fb121048aa9d.png" width="600"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;每一个噪声都是在前一时刻增加噪声而来的（马尔科夫过程），从最开始的      &lt;img alt="x_0" src="https://latex.codecogs.com/gif.latex?x_0"&gt;&lt;/img&gt;时刻开始，最终得到      &lt;img alt="x_T" src="https://latex.codecogs.com/gif.latex?x_T"&gt;&lt;/img&gt;时刻的纯噪声图像。不过问题来是为什么要加噪声？&lt;/p&gt;    &lt;ol&gt;      &lt;li&gt;Diffusion的本质是去噪，为了推导出逆向的去噪方法，必须了解增加噪声的原理。同时，添加噪声的过程其实就是不断构建标签的过程。如果在前一时刻可以预测出来后一时刻的噪声，很方便地可以实现还原操作(就和人走路一样，不管你从哪来，哪怕走过万水千山，最后都可按原路返回至原出发点)        &lt;p&gt;          &lt;img alt="" src="https://img-blog.csdnimg.cn/img_convert/ee8bfdf21e98df9ca4429ef62a3dfb33.webp?x-oss-process=image/format,png"&gt;&lt;/img&gt;&lt;/p&gt;&lt;/li&gt;      &lt;li&gt;且在噪声的添加过程中，每一步都要保持尽量        &lt;u&gt;相同的噪声扩散幅度&lt;/u&gt;。图片前期的分布非常均匀，添加一些噪声便可以将原始分布改变，但到后期，需要添加更多的噪声，方可保证噪声扩散幅度相同(这就像往水中加糖，为了使糖的甜味增长相同，后期需要加更多的糖)&lt;/li&gt;&lt;/ol&gt;    &lt;p&gt;所以DDPM的目标在于：作为一个生成式模型，其目标是从随机噪声直接生成图片，换言之，首先训练一个噪声估计模型，然后将输入随机噪声还原成图片)，相当于就两个关键，一个是训练过程，一个是推理过程&lt;/p&gt;    &lt;ol&gt;      &lt;li&gt;训练过程：随机生成噪声        &lt;img alt="\epsilon" src="https://latex.codecogs.com/gif.latex?%5Cepsilon"&gt;&lt;/img&gt;，经过        &lt;img alt="T" src="https://latex.codecogs.com/gif.latex?T"&gt;&lt;/img&gt;步将噪声扩散到输入原始图片        &lt;img alt="x_0" src="https://latex.codecogs.com/gif.latex?x_0"&gt;&lt;/img&gt;中，破坏后的图片        &lt;img alt="x_T" src="https://latex.codecogs.com/gif.latex?x_T"&gt;&lt;/img&gt;，学习破坏图片的预估噪声        &lt;img alt="\epsilon _\theta (x_t,t)" src="https://latex.codecogs.com/gif.latex?%5Cepsilon%20_%5Ctheta%20%28x_t%2Ct%29"&gt;&lt;/img&gt;，用L2 loss约束与        &lt;img alt="\epsilon" src="https://latex.codecogs.com/gif.latex?%5Cepsilon"&gt;&lt;/img&gt;原始输入噪声的距离&lt;/li&gt;      &lt;li&gt;推理过程：即输入噪声，经过预估噪声模型还原成图片&lt;/li&gt;&lt;/ol&gt;    &lt;h2&gt;2.1 DDPM的训练过程：先前向加噪后反向去噪从而建立噪声估计模型&lt;/h2&gt;    &lt;h3&gt;2.1.1 前向过程(加噪)：通过高斯噪音随机加噪——给图片打马赛克&lt;/h3&gt;    &lt;p&gt;前向过程(forward process)也称为扩散过程(diffusion process)，简单理解就是对原始图片      &lt;img alt="x_0" src="https://latex.codecogs.com/gif.latex?x_0"&gt;&lt;/img&gt;通过逐步添加「方差为      &lt;img alt="\beta _t" src="https://latex.codecogs.com/gif.latex?%5Cbeta%20_t"&gt;&lt;/img&gt;的高斯噪声」变成      &lt;img alt="x_T" src="https://latex.codecogs.com/gif.latex?x_T"&gt;&lt;/img&gt;，从而达到破坏图片的目的，如下图 &lt;/p&gt;    &lt;p&gt;      &lt;img alt="" height="97" src="https://img-blog.csdnimg.cn/276a0b28b83549ff8c299611550bd46a.png" width="600"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;在从      &lt;img alt="x_{t-1}" src="https://latex.codecogs.com/gif.latex?x_%7Bt-1%7D"&gt;&lt;/img&gt;到      &lt;img alt="x_t" src="https://latex.codecogs.com/gif.latex?x_t"&gt;&lt;/img&gt;的过程中，其对应的分布      &lt;img alt="q(x_t|x_{t-1})" src="https://latex.codecogs.com/gif.latex?q%28x_t%7Cx_%7Bt-1%7D%29"&gt;&lt;/img&gt;是一个正太分布，且其均值是      &lt;img alt="u_t = \sqrt{1-\beta _t }x_{t-1}" src="https://latex.codecogs.com/gif.latex?u_t%20%3D%20%5Csqrt%7B1-%5Cbeta%20_t%20%7Dx_%7Bt-1%7D"&gt;&lt;/img&gt;，方差为      &lt;img alt="\beta _t" src="https://latex.codecogs.com/gif.latex?%5Cbeta%20_t"&gt;&lt;/img&gt;，则有 &lt;/p&gt;    &lt;p&gt;      &lt;img alt="q(x_t|x_{t-1}) = N(x_t;u_t = \sqrt{1-\beta _t }x_{t-1},\beta _t \mathbb{I})" src="https://latex.codecogs.com/gif.latex?q%28x_t%7Cx_%7Bt-1%7D%29%20%3D%20N%28x_t%3Bu_t%20%3D%20%5Csqrt%7B1-%5Cbeta%20_t%20%7Dx_%7Bt-1%7D%2C%5Cbeta%20_t%20%5Cmathbb%7BI%7D%29"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;解释下这里的      &lt;img alt="\beta _t \mathbb{I}" src="https://latex.codecogs.com/gif.latex?%5Cbeta%20_t%20%5Cmathbb%7BI%7D"&gt;&lt;/img&gt;，原因在于我们一般处于多维情况下，而      &lt;img alt="\mathbb{I}" src="https://latex.codecogs.com/gif.latex?%5Cmathbb%7BI%7D"&gt;&lt;/img&gt;是单位矩阵，表明每个维度有相同的标准偏差      &lt;img alt="\beta _t" src="https://latex.codecogs.com/gif.latex?%5Cbeta%20_t"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;blockquote&gt;      &lt;p&gt;因为是马尔可夫链，所以联合分布就是：&lt;/p&gt;      &lt;p&gt;        &lt;img alt="" height="94" src="https://img-blog.csdnimg.cn/86840903f12945e1800fa32eafd4a6fd.png" width="600"&gt;&lt;/img&gt;&lt;/p&gt;      &lt;p&gt; 如下图所示&lt;/p&gt;      &lt;p&gt;        &lt;img alt="" height="580" src="https://img-blog.csdnimg.cn/b74e2cdad4d74d349b84ee65cad4a025.png" width="1200"&gt;&lt;/img&gt;&lt;/p&gt;&lt;/blockquote&gt;    &lt;p&gt;如果我们定义       &lt;img alt="\alpha _t = 1 - \beta_t" src="https://latex.codecogs.com/gif.latex?%5Calpha%20_t%20%3D%201%20-%20%5Cbeta_t"&gt;&lt;/img&gt;,   预先设定好一个超参数      &lt;img alt="\left \{ {a_t} \right \}_{t=1}^{T}" src="https://latex.codecogs.com/gif.latex?%5Cleft%20%5C%7B%20%7Ba_t%7D%20%5Cright%20%5C%7D_%7Bt%3D1%7D%5E%7BT%7D"&gt;&lt;/img&gt;『被称为Noise schedule，通常是一些列很小的值』，以及       &lt;img alt="\varepsilon _{t-1} \sim N(0,1)" src="https://latex.codecogs.com/gif.latex?%5Cvarepsilon%20_%7Bt-1%7D%20%5Csim%20N%280%2C1%29"&gt;&lt;/img&gt;是高斯噪声，便可以得到      &lt;img alt="x_t" src="https://latex.codecogs.com/gif.latex?x_t"&gt;&lt;/img&gt;的采样值&lt;/p&gt;    &lt;p&gt;      &lt;img alt="x_t = \sqrt{a_t}x_{t-1} + \sqrt{1-a_t} \epsilon _{t-1}" src="https://latex.codecogs.com/gif.latex?x_t%20%3D%20%5Csqrt%7Ba_t%7Dx_%7Bt-1%7D%20+%20%5Csqrt%7B1-a_t%7D%20%5Cepsilon%20_%7Bt-1%7D"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;这里值得注意下，即两个高斯分布相加仍为一个高斯分布, 新的分布均值为原先两个均值的和, 方差为原先两个方差的和，且把上述公式迭代变换下，可以直接得出       &lt;img alt="x_0" src="https://latex.codecogs.com/gif.latex?x_0"&gt;&lt;/img&gt;到       &lt;img alt="x_t" src="https://latex.codecogs.com/gif.latex?x_t"&gt;&lt;/img&gt;的公式，如下：&lt;/p&gt;    &lt;p&gt;      &lt;img alt="x_t = \sqrt{\bar{a_t}}x_{0} + \sqrt{1-\bar{a_t}} \epsilon" src="https://latex.codecogs.com/gif.latex?x_t%20%3D%20%5Csqrt%7B%5Cbar%7Ba_t%7D%7Dx_%7B0%7D%20+%20%5Csqrt%7B1-%5Cbar%7Ba_t%7D%7D%20%5Cepsilon"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;其中      &lt;img alt="\bar{a_t} = \prod_{i}^{t} a_i" src="https://latex.codecogs.com/gif.latex?%5Cbar%7Ba_t%7D%20%3D%20%5Cprod_%7Bi%7D%5E%7Bt%7D%20a_i"&gt;&lt;/img&gt;，这是随Noise schedule设定好的超参数，      &lt;img alt="\varepsilon \sim N(0,1)" src="https://latex.codecogs.com/gif.latex?%5Cvarepsilon%20%5Csim%20N%280%2C1%29"&gt;&lt;/img&gt;也是一个高斯噪声&lt;/p&gt;    &lt;p&gt;换言之，所以       &lt;img alt="x_t" src="https://latex.codecogs.com/gif.latex?x_t"&gt;&lt;/img&gt; 在       &lt;img alt="x_0" src="https://latex.codecogs.com/gif.latex?x_0"&gt;&lt;/img&gt;条件下的分布就是均值为       &lt;img alt="\sqrt{\bar{a_t}}x_0" src="https://latex.codecogs.com/gif.latex?%5Csqrt%7B%5Cbar%7Ba_t%7D%7Dx_0"&gt;&lt;/img&gt;, 方差为      &lt;img alt="1-\bar{a_t}" src="https://latex.codecogs.com/gif.latex?1-%5Cbar%7Ba_t%7D"&gt;&lt;/img&gt;的正态分布&lt;/p&gt;    &lt;p&gt;      &lt;img alt="" height="63" src="https://img-blog.csdnimg.cn/5cb4d57e0c5d4894bed32e5c962977a3.png" width="600"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;blockquote&gt;      &lt;p&gt;考虑到可能会有读者对这个        &lt;img alt="x_0" src="https://latex.codecogs.com/gif.latex?x_0"&gt;&lt;/img&gt;到         &lt;img alt="x_t" src="https://latex.codecogs.com/gif.latex?x_t"&gt;&lt;/img&gt;的一步到位感到困惑，而一般的同类文章不会展开的特别细，故本文细致展开下(能拆10步则10步 确保阅读无障碍)&lt;/p&gt;      &lt;ol&gt;        &lt;li&gt;我们从原始公式开始：          &lt;br /&gt;          &lt;img alt="x_t = \sqrt{a_t} x_{t-1} + \sqrt{1-a_t} \epsilon_{t-1}" src="https://latex.codecogs.com/gif.latex?x_t%20%3D%20%5Csqrt%7Ba_t%7D%20x_%7Bt-1%7D%20+%20%5Csqrt%7B1-a_t%7D%20%5Cepsilon_%7Bt-1%7D"&gt;&lt;/img&gt;          &lt;br /&gt;然后可以将          &lt;img alt="x_{t-1}" src="https://latex.codecogs.com/gif.latex?x_%7Bt-1%7D"&gt;&lt;/img&gt;替换为          &lt;img alt="x_{t-2}" src="https://latex.codecogs.com/gif.latex?x_%7Bt-2%7D"&gt;&lt;/img&gt;的表达式：          &lt;br /&gt;          &lt;img alt="x_{t-1} = \sqrt{a_{t-1}} x_{t-2} + \sqrt{1-a_{t-1}} \epsilon_{t-2}" src="https://latex.codecogs.com/gif.latex?x_%7Bt-1%7D%20%3D%20%5Csqrt%7Ba_%7Bt-1%7D%7D%20x_%7Bt-2%7D%20+%20%5Csqrt%7B1-a_%7Bt-1%7D%7D%20%5Cepsilon_%7Bt-2%7D"&gt;&lt;/img&gt;          &lt;br /&gt;代入到          &lt;img alt="x_t" src="https://latex.codecogs.com/gif.latex?x_t"&gt;&lt;/img&gt;的公式中：          &lt;br /&gt;          &lt;img alt="x_t = \sqrt{a_t} (\sqrt{a_{t-1}} x_{t-2} + \sqrt{1-a_{t-1}} \epsilon_{t-2}) + \sqrt{1-a_t} \epsilon_{t-1}" src="https://latex.codecogs.com/gif.latex?x_t%20%3D%20%5Csqrt%7Ba_t%7D%20%28%5Csqrt%7Ba_%7Bt-1%7D%7D%20x_%7Bt-2%7D%20+%20%5Csqrt%7B1-a_%7Bt-1%7D%7D%20%5Cepsilon_%7Bt-2%7D%29%20+%20%5Csqrt%7B1-a_t%7D%20%5Cepsilon_%7Bt-1%7D"&gt;&lt;/img&gt;&lt;/li&gt;        &lt;li&gt;继续展开，下一步是将          &lt;img alt="x_{t-2}" src="https://latex.codecogs.com/gif.latex?x_%7Bt-2%7D"&gt;&lt;/img&gt;替换为          &lt;img alt="x_{t-3}" src="https://latex.codecogs.com/gif.latex?x_%7Bt-3%7D"&gt;&lt;/img&gt;的表达式：          &lt;br /&gt;          &lt;img alt="x_{t-2} = \sqrt{a_{t-2}} x_{t-3} + \sqrt{1-a_{t-2}} \epsilon_{t-3}" src="https://latex.codecogs.com/gif.latex?x_%7Bt-2%7D%20%3D%20%5Csqrt%7Ba_%7Bt-2%7D%7D%20x_%7Bt-3%7D%20+%20%5Csqrt%7B1-a_%7Bt-2%7D%7D%20%5Cepsilon_%7Bt-3%7D"&gt;&lt;/img&gt;          &lt;br /&gt;代入到          &lt;img alt="x_t" src="https://latex.codecogs.com/gif.latex?x_t"&gt;&lt;/img&gt;的公式中：          &lt;br /&gt;          &lt;img alt="x_t = \sqrt{a_t} (\sqrt{a_{t-1}} (\sqrt{a_{t-2}} x_{t-3} + \sqrt{1-a_{t-2}} \epsilon_{t-3}) + \sqrt{1-a_{t-1}} \epsilon_{t-2}) + \sqrt{1-a_t} \epsilon_{t-1}" src="https://latex.codecogs.com/gif.latex?x_t%20%3D%20%5Csqrt%7Ba_t%7D%20%28%5Csqrt%7Ba_%7Bt-1%7D%7D%20%28%5Csqrt%7Ba_%7Bt-2%7D%7D%20x_%7Bt-3%7D%20+%20%5Csqrt%7B1-a_%7Bt-2%7D%7D%20%5Cepsilon_%7Bt-3%7D%29%20+%20%5Csqrt%7B1-a_%7Bt-1%7D%7D%20%5Cepsilon_%7Bt-2%7D%29%20+%20%5Csqrt%7B1-a_t%7D%20%5Cepsilon_%7Bt-1%7D"&gt;&lt;/img&gt;&lt;/li&gt;        &lt;li&gt;然后继续展开，这次用          &lt;img alt="x_{t-3}" src="https://latex.codecogs.com/gif.latex?x_%7Bt-3%7D"&gt;&lt;/img&gt;的表达式替换          &lt;img alt="x_{t-3}" src="https://latex.codecogs.com/gif.latex?x_%7Bt-3%7D"&gt;&lt;/img&gt;：          &lt;br /&gt;          &lt;img alt="x_{t-3} = \sqrt{a_{t-3}} x_{t-4} + \sqrt{1-a_{t-3}} \epsilon_{t-4}" src="https://latex.codecogs.com/gif.latex?x_%7Bt-3%7D%20%3D%20%5Csqrt%7Ba_%7Bt-3%7D%7D%20x_%7Bt-4%7D%20+%20%5Csqrt%7B1-a_%7Bt-3%7D%7D%20%5Cepsilon_%7Bt-4%7D"&gt;&lt;/img&gt;          &lt;br /&gt;代入到          &lt;img alt="x_t" src="https://latex.codecogs.com/gif.latex?x_t"&gt;&lt;/img&gt;的公式中：          &lt;br /&gt;          &lt;img alt="x_t = \sqrt{a_t} (\sqrt{a_{t-1}} (\sqrt{a_{t-2}} (\sqrt{a_{t-3}} x_{t-4} + \sqrt{1-a_{t-3}} \epsilon_{t-4}) + \sqrt{1-a_{t-2}} \epsilon_{t-3}) + \sqrt{1-a_{t-1}} \epsilon_{t-2}) + \sqrt{1-a_t} \epsilon_{t-1}" src="https://latex.codecogs.com/gif.latex?x_t%20%3D%20%5Csqrt%7Ba_t%7D%20%28%5Csqrt%7Ba_%7Bt-1%7D%7D%20%28%5Csqrt%7Ba_%7Bt-2%7D%7D%20%28%5Csqrt%7Ba_%7Bt-3%7D%7D%20x_%7Bt-4%7D%20+%20%5Csqrt%7B1-a_%7Bt-3%7D%7D%20%5Cepsilon_%7Bt-4%7D%29%20+%20%5Csqrt%7B1-a_%7Bt-2%7D%7D%20%5Cepsilon_%7Bt-3%7D%29%20+%20%5Csqrt%7B1-a_%7Bt-1%7D%7D%20%5Cepsilon_%7Bt-2%7D%29%20+%20%5Csqrt%7B1-a_t%7D%20%5Cepsilon_%7Bt-1%7D"&gt;&lt;/img&gt;&lt;/li&gt;        &lt;li&gt;继续这个过程，直到用          &lt;img alt="x_0" src="https://latex.codecogs.com/gif.latex?x_0"&gt;&lt;/img&gt;替换所有的中间变量          &lt;br /&gt;          &lt;img alt="x_t = (\sqrt{a_t} \sqrt{a_{t-1}} \cdots \sqrt{a_1}) x_0 + (\sqrt{a_t} \sqrt{a_{t-1}} \cdots \sqrt{a_2} \sqrt{1-a_1}) \epsilon_0 + \cdots + (\sqrt{a_t} \sqrt{a_{t-1}} \sqrt{a_{t-2}} \sqrt{1-a_{t-3}}) \epsilon_{t-4} + (\sqrt{a_t} \sqrt{a_{t-1}} \sqrt{1-a_{t-2}}) \epsilon_{t-3} + (\sqrt{a_t} \sqrt{1-a_{t-1}}) \epsilon_{t-2} + \sqrt{1-a_t} \epsilon_{t-1}" src="https://latex.codecogs.com/gif.latex?x_t%20%3D%20%28%5Csqrt%7Ba_t%7D%20%5Csqrt%7Ba_%7Bt-1%7D%7D%20%5Ccdots%20%5Csqrt%7Ba_1%7D%29%20x_0%20+%20%28%5Csqrt%7Ba_t%7D%20%5Csqrt%7Ba_%7Bt-1%7D%7D%20%5Ccdots%20%5Csqrt%7Ba_2%7D%20%5Csqrt%7B1-a_1%7D%29%20%5Cepsilon_0%20+%20%5Ccdots%20+%20%28%5Csqrt%7Ba_t%7D%20%5Csqrt%7Ba_%7Bt-1%7D%7D%20%5Csqrt%7Ba_%7Bt-2%7D%7D%20%5Csqrt%7B1-a_%7Bt-3%7D%7D%29%20%5Cepsilon_%7Bt-4%7D%20+%20%28%5Csqrt%7Ba_t%7D%20%5Csqrt%7Ba_%7Bt-1%7D%7D%20%5Csqrt%7B1-a_%7Bt-2%7D%7D%29%20%5Cepsilon_%7Bt-3%7D%20+%20%28%5Csqrt%7Ba_t%7D%20%5Csqrt%7B1-a_%7Bt-1%7D%7D%29%20%5Cepsilon_%7Bt-2%7D%20+%20%5Csqrt%7B1-a_t%7D%20%5Cepsilon_%7Bt-1%7D"&gt;&lt;/img&gt;          &lt;br /&gt;然后再把上述公式的后半部分的顺序调整一下，即得          &lt;br /&gt;          &lt;img alt="x_t = (\sqrt{a_t} \sqrt{a_{t-1}} \cdots \sqrt{a_1}) x_0 + \sqrt{1-a_t} \epsilon_{t-1} + (\sqrt{a_t} \sqrt{1-a_{t-1}}) \epsilon_{t-2} + (\sqrt{a_t} \sqrt{a_{t-1}} \sqrt{1-a_{t-2}}) \epsilon_{t-3} + (\sqrt{a_t} \sqrt{a_{t-1}} \sqrt{a_{t-2}} \sqrt{1-a_{t-3}}) \epsilon_{t-4} + \cdots + (\sqrt{a_t} \sqrt{a_{t-1}} \cdots \sqrt{a_2} \sqrt{1-a_1}) \epsilon_0" src="https://latex.codecogs.com/gif.latex?x_t%20%3D%20%28%5Csqrt%7Ba_t%7D%20%5Csqrt%7Ba_%7Bt-1%7D%7D%20%5Ccdots%20%5Csqrt%7Ba_1%7D%29%20x_0%20+%20%5Csqrt%7B1-a_t%7D%20%5Cepsilon_%7Bt-1%7D%20+%20%28%5Csqrt%7Ba_t%7D%20%5Csqrt%7B1-a_%7Bt-1%7D%7D%29%20%5Cepsilon_%7Bt-2%7D%20+%20%28%5Csqrt%7Ba_t%7D%20%5Csqrt%7Ba_%7Bt-1%7D%7D%20%5Csqrt%7B1-a_%7Bt-2%7D%7D%29%20%5Cepsilon_%7Bt-3%7D%20+%20%28%5Csqrt%7Ba_t%7D%20%5Csqrt%7Ba_%7Bt-1%7D%7D%20%5Csqrt%7Ba_%7Bt-2%7D%7D%20%5Csqrt%7B1-a_%7Bt-3%7D%7D%29%20%5Cepsilon_%7Bt-4%7D%20+%20%5Ccdots%20+%20%28%5Csqrt%7Ba_t%7D%20%5Csqrt%7Ba_%7Bt-1%7D%7D%20%5Ccdots%20%5Csqrt%7Ba_2%7D%20%5Csqrt%7B1-a_1%7D%29%20%5Cepsilon_0"&gt;&lt;/img&gt;&lt;/li&gt;        &lt;li&gt;每个时间步都会引入一个新的噪声项ε和一个新的混合系数a，为了简化这个表达式，我们引入累积混合系数          &lt;img alt="\bar{a_t}" src="https://latex.codecogs.com/gif.latex?%5Cbar%7Ba_t%7D"&gt;&lt;/img&gt;          &lt;br /&gt;          &lt;img alt="\bar{a_t} = \prod_{i=1}^{t} a_i" src="https://latex.codecogs.com/gif.latex?%5Cbar%7Ba_t%7D%20%3D%20%5Cprod_%7Bi%3D1%7D%5E%7Bt%7D%20a_i"&gt;&lt;/img&gt;，即          &lt;img alt="\sqrt{\bar{a_t}} = \sqrt{a_t} \sqrt{a_{t-1}} \cdots \sqrt{a_1}" src="https://latex.codecogs.com/gif.latex?%5Csqrt%7B%5Cbar%7Ba_t%7D%7D%20%3D%20%5Csqrt%7Ba_t%7D%20%5Csqrt%7Ba_%7Bt-1%7D%7D%20%5Ccdots%20%5Csqrt%7Ba_1%7D"&gt;&lt;/img&gt;&lt;/li&gt;        &lt;li&gt;在这个累积混合系数的帮助下，我们可以将          &lt;img alt="x_t" src="https://latex.codecogs.com/gif.latex?x_t"&gt;&lt;/img&gt;的表达式简化下：          &lt;br /&gt;          &lt;img alt="x_t = \sqrt{\bar{a_t}} x_0 + \sqrt{1-a_t} \epsilon_{t-1} + (\sqrt{a_t} \sqrt{1-a_{t-1}}) \epsilon_{t-2} + \cdots + (\sqrt{\bar{a_t}} \sqrt{1-a_1}) \epsilon_0" src="https://latex.codecogs.com/gif.latex?x_t%20%3D%20%5Csqrt%7B%5Cbar%7Ba_t%7D%7D%20x_0%20+%20%5Csqrt%7B1-a_t%7D%20%5Cepsilon_%7Bt-1%7D%20+%20%28%5Csqrt%7Ba_t%7D%20%5Csqrt%7B1-a_%7Bt-1%7D%7D%29%20%5Cepsilon_%7Bt-2%7D%20+%20%5Ccdots%20+%20%28%5Csqrt%7B%5Cbar%7Ba_t%7D%7D%20%5Csqrt%7B1-a_1%7D%29%20%5Cepsilon_0"&gt;&lt;/img&gt;&lt;/li&gt;        &lt;li&gt;接下来，注意到          &lt;br /&gt;          &lt;img alt="\epsilon_{t-1}" src="https://latex.codecogs.com/gif.latex?%5Cepsilon_%7Bt-1%7D"&gt;&lt;/img&gt;的系数是          &lt;img alt="\sqrt{1-a_t}" src="https://latex.codecogs.com/gif.latex?%5Csqrt%7B1-a_t%7D"&gt;&lt;/img&gt;          &lt;br /&gt;          &lt;img alt="\epsilon_{t-2}" src="https://latex.codecogs.com/gif.latex?%5Cepsilon_%7Bt-2%7D"&gt;&lt;/img&gt;的系数是          &lt;img alt="\sqrt{a_t} \sqrt{1-a_{t-1}}" src="https://latex.codecogs.com/gif.latex?%5Csqrt%7Ba_t%7D%20%5Csqrt%7B1-a_%7Bt-1%7D%7D"&gt;&lt;/img&gt;          &lt;br /&gt;          &lt;img alt="\epsilon_{t-3}" src="https://latex.codecogs.com/gif.latex?%5Cepsilon_%7Bt-3%7D"&gt;&lt;/img&gt;的系数是          &lt;img alt="\sqrt{a_t} \sqrt{a_{t-1}} \sqrt{1-a_{t-2}}" src="https://latex.codecogs.com/gif.latex?%5Csqrt%7Ba_t%7D%20%5Csqrt%7Ba_%7Bt-1%7D%7D%20%5Csqrt%7B1-a_%7Bt-2%7D%7D"&gt;&lt;/img&gt;          &lt;p&gt;观察这三项，可以发现：每个            &lt;img alt="\epsilon" src="https://latex.codecogs.com/gif.latex?%5Cepsilon"&gt;&lt;/img&gt;项的系数都可以表示为            &lt;img alt="\sqrt{1-a_i} \sqrt{a_{i+1}} \cdots \sqrt{a_t}" src="https://latex.codecogs.com/gif.latex?%5Csqrt%7B1-a_i%7D%20%5Csqrt%7Ba_%7Bi+1%7D%7D%20%5Ccdots%20%5Csqrt%7Ba_t%7D"&gt;&lt;/img&gt;，其中            &lt;img alt="i" src="https://latex.codecogs.com/gif.latex?i"&gt;&lt;/img&gt;从0到t-1。这是一个递归关系，我们可以使用它来合并所有的            &lt;img alt="\epsilon" src="https://latex.codecogs.com/gif.latex?%5Cepsilon"&gt;&lt;/img&gt;项            &lt;br /&gt;设            &lt;img alt="C_{i-1} = \sqrt{1-a_i} \sqrt{a_{i+1}} \cdots \sqrt{a_t}" src="https://latex.codecogs.com/gif.latex?C_%7Bi-1%7D%20%3D%20%5Csqrt%7B1-a_i%7D%20%5Csqrt%7Ba_%7Bi+1%7D%7D%20%5Ccdots%20%5Csqrt%7Ba_t%7D"&gt;&lt;/img&gt;，那么我们可以将            &lt;img alt="x_t" src="https://latex.codecogs.com/gif.latex?x_t"&gt;&lt;/img&gt;写成：            &lt;br /&gt;            &lt;img alt="x_t = \sqrt{\bar{a_t}} x_0 + C_{t-1} \epsilon_{t-1} + C_{t-2} \epsilon_{t-2} + \cdots + C_0 \epsilon_0" src="https://latex.codecogs.com/gif.latex?x_t%20%3D%20%5Csqrt%7B%5Cbar%7Ba_t%7D%7D%20x_0%20+%20C_%7Bt-1%7D%20%5Cepsilon_%7Bt-1%7D%20+%20C_%7Bt-2%7D%20%5Cepsilon_%7Bt-2%7D%20+%20%5Ccdots%20+%20C_0%20%5Cepsilon_0"&gt;&lt;/img&gt;&lt;/p&gt;&lt;/li&gt;        &lt;li&gt;可以将所有的          &lt;img alt="\epsilon" src="https://latex.codecogs.com/gif.latex?%5Cepsilon"&gt;&lt;/img&gt;项合并成一个项，因为它们都具有相同的递归关系，这意味着它们可以表示为          &lt;img alt="\sqrt{1-\bar{a_t}} \epsilon" src="https://latex.codecogs.com/gif.latex?%5Csqrt%7B1-%5Cbar%7Ba_t%7D%7D%20%5Cepsilon"&gt;&lt;/img&gt;，将这些项合并后，最终得到：          &lt;br /&gt;          &lt;img alt="x_t = \sqrt{\bar{a_t}} x_0 + \sqrt{1-\bar{a_t}} \epsilon" src="https://latex.codecogs.com/gif.latex?x_t%20%3D%20%5Csqrt%7B%5Cbar%7Ba_t%7D%7D%20x_0%20+%20%5Csqrt%7B1-%5Cbar%7Ba_t%7D%7D%20%5Cepsilon"&gt;&lt;/img&gt;          &lt;br /&gt;           &lt;p&gt;可能还是有读者对这最后一步的推导有疑惑，故我还是不厌其烦的耐心解释如下&lt;/p&gt;          &lt;p&gt;由于每个            &lt;img alt="\epsilon_i" src="https://latex.codecogs.com/gif.latex?%5Cepsilon_i"&gt;&lt;/img&gt;的方差都等于 1，我们得到：&lt;/p&gt;          &lt;p&gt;            &lt;img alt="\text{Var}(\xi) = C_{t-1}^2 + C_{t-2}^2 + \cdots + C_0^2" src="https://latex.codecogs.com/gif.latex?%5Ctext%7BVar%7D%28%5Cxi%29%20%3D%20C_%7Bt-1%7D%5E2%20+%20C_%7Bt-2%7D%5E2%20+%20%5Ccdots%20+%20C_0%5E2"&gt;&lt;/img&gt;&lt;/p&gt;          &lt;p&gt;接下来，我们可以将            &lt;img alt="x_t" src="https://latex.codecogs.com/gif.latex?x_t"&gt;&lt;/img&gt;的表达式改写为：&lt;/p&gt;          &lt;p&gt;            &lt;img alt="x_t = \sqrt{\bar{a}_t} x_0 + \xi" src="https://latex.codecogs.com/gif.latex?x_t%20%3D%20%5Csqrt%7B%5Cbar%7Ba%7D_t%7D%20x_0%20+%20%5Cxi"&gt;&lt;/img&gt;&lt;/p&gt;          &lt;p&gt;我们可以发现            &lt;img alt="\xi" src="https://latex.codecogs.com/gif.latex?%5Cxi"&gt;&lt;/img&gt;的方差与            &lt;img alt="1 - \bar{a}_t" src="https://latex.codecogs.com/gif.latex?1%20-%20%5Cbar%7Ba%7D_t"&gt;&lt;/img&gt;成比例，即：&lt;/p&gt;          &lt;p&gt;            &lt;img alt="\text{Var}(\xi) = 1 - \bar{a}_t" src="https://latex.codecogs.com/gif.latex?%5Ctext%7BVar%7D%28%5Cxi%29%20%3D%201%20-%20%5Cbar%7Ba%7D_t"&gt;&lt;/img&gt;&lt;/p&gt;          &lt;p&gt;为了使            &lt;img alt="\xi" src="https://latex.codecogs.com/gif.latex?%5Cxi"&gt;&lt;/img&gt;的方差等于 1，我们可以引入一个新的随机变量            &lt;img alt="\epsilon" src="https://latex.codecogs.com/gif.latex?%5Cepsilon"&gt;&lt;/img&gt;，其方差也等于 1，并将            &lt;img alt="\xi" src="https://latex.codecogs.com/gif.latex?%5Cxi"&gt;&lt;/img&gt;与            &lt;img alt="\epsilon" src="https://latex.codecogs.com/gif.latex?%5Cepsilon"&gt;&lt;/img&gt;的关系表示为：&lt;/p&gt;          &lt;p&gt;            &lt;img alt="\xi = \sqrt{1 - \bar{a}_t} \epsilon" src="https://latex.codecogs.com/gif.latex?%5Cxi%20%3D%20%5Csqrt%7B1%20-%20%5Cbar%7Ba%7D_t%7D%20%5Cepsilon"&gt;&lt;/img&gt;&lt;/p&gt;          &lt;p&gt;最后，我们可以将            &lt;img alt="x_t" src="https://latex.codecogs.com/gif.latex?x_t"&gt;&lt;/img&gt;的表达式简化为：&lt;/p&gt;          &lt;p&gt;            &lt;img alt="x_t = \sqrt{\bar{a}_t} x_0 + \sqrt{1 - \bar{a}_t} \epsilon" src="https://latex.codecogs.com/gif.latex?x_t%20%3D%20%5Csqrt%7B%5Cbar%7Ba%7D_t%7D%20x_0%20+%20%5Csqrt%7B1%20-%20%5Cbar%7Ba%7D_t%7D%20%5Cepsilon"&gt;&lt;/img&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/blockquote&gt;    &lt;h3&gt;2.1.2 反向过程(去噪)：复原被加噪的图片——使之清晰化&lt;/h3&gt;    &lt;p&gt;反向过程就是通过估测噪声，多次迭代逐渐将被破坏的       &lt;img alt="x_t" src="https://latex.codecogs.com/gif.latex?x_t"&gt;&lt;/img&gt;恢复成       &lt;img alt="x_0" src="https://latex.codecogs.com/gif.latex?x_0"&gt;&lt;/img&gt;，如下图&lt;/p&gt;    &lt;p&gt;      &lt;img alt="" height="101" src="https://img-blog.csdnimg.cn/img_convert/6b6ca23cfd3a66a6bc914860d74d59ba.png" width="600"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;相当于从      &lt;img alt="x_t" src="https://latex.codecogs.com/gif.latex?x_t"&gt;&lt;/img&gt;到      &lt;img alt="x_{t-1}" src="https://latex.codecogs.com/gif.latex?x_%7Bt-1%7D"&gt;&lt;/img&gt;的变化过程，用公式表示为&lt;/p&gt;    &lt;p&gt;      &lt;img alt="x_{t-1} = \frac{1}{\sqrt{a_t}} x_t - \frac{\sqrt{1-a_t}}{\sqrt{a_t}} \epsilon _\theta (x_t,t) + \sigma _t" src="https://latex.codecogs.com/gif.latex?x_%7Bt-1%7D%20%3D%20%5Cfrac%7B1%7D%7B%5Csqrt%7Ba_t%7D%7D%20x_t%20-%20%5Cfrac%7B%5Csqrt%7B1-a_t%7D%7D%7B%5Csqrt%7Ba_t%7D%7D%20%5Cepsilon%20_%5Ctheta%20%28x_t%2Ct%29%20+%20%5Csigma%20_t"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;这个公式所表达的含义在于，由于真实噪声      &lt;img alt="\epsilon" src="https://latex.codecogs.com/gif.latex?%5Cepsilon"&gt;&lt;/img&gt;在复原过程中不允许被使用，因此本步骤的关键就在于训练一个由      &lt;img alt="x_t" src="https://latex.codecogs.com/gif.latex?x_t"&gt;&lt;/img&gt;和      &lt;img alt="t" src="https://latex.codecogs.com/gif.latex?t"&gt;&lt;/img&gt;估测噪声的模型      &lt;img alt="\epsilon _\theta (x_t,t)" src="https://latex.codecogs.com/gif.latex?%5Cepsilon%20_%5Ctheta%20%28x_t%2Ct%29"&gt;&lt;/img&gt;，其中      &lt;img alt="\theta" src="https://latex.codecogs.com/gif.latex?%5Ctheta"&gt;&lt;/img&gt;就是模型本身需要训练的参数，      &lt;img alt="\sigma_t" src="https://latex.codecogs.com/gif.latex?%5Csigma_t"&gt;&lt;/img&gt;也是一个高斯噪声且      &lt;img alt="\sigma_t = N(0,1)" src="https://latex.codecogs.com/gif.latex?%5Csigma_t%20%3D%20N%280%2C1%29"&gt;&lt;/img&gt;，用于估测与实际的差距，且在DDPM中，使用的是U-Net作为估测噪声的模型&lt;/p&gt;    &lt;blockquote&gt;      &lt;p&gt;好，问题又来了，上面这个公式又是如何一步步推导来的呢？&lt;/p&gt;      &lt;ol&gt;        &lt;li&gt;首先，通过上一节 我们已经得到了          &lt;br /&gt;          &lt;img alt="x_t = \sqrt{a_t}x_{t-1} + \sqrt{1-a_t} \epsilon _{t-1}" src="https://latex.codecogs.com/gif.latex?x_t%20%3D%20%5Csqrt%7Ba_t%7Dx_%7Bt-1%7D%20+%20%5Csqrt%7B1-a_t%7D%20%5Cepsilon%20_%7Bt-1%7D"&gt;&lt;/img&gt;          &lt;br /&gt;其中，          &lt;img alt="x_t" src="https://latex.codecogs.com/gif.latex?x_t"&gt;&lt;/img&gt;和          &lt;img alt="x_{t-1}" src="https://latex.codecogs.com/gif.latex?x_%7Bt-1%7D"&gt;&lt;/img&gt;是在时间步          &lt;img alt="t" src="https://latex.codecogs.com/gif.latex?t"&gt;&lt;/img&gt;和          &lt;img alt="t-1" src="https://latex.codecogs.com/gif.latex?t-1"&gt;&lt;/img&gt;的数据，          &lt;img alt="\epsilon_t" src="https://latex.codecogs.com/gif.latex?%5Cepsilon_t"&gt;&lt;/img&gt;是一个独立的高斯噪声，          &lt;img alt="a_t" src="https://latex.codecogs.com/gif.latex?a_t"&gt;&lt;/img&gt;是一个预先设定的系数          &lt;br /&gt;别忘了，在DDPM中，我们的目标是找到一个去噪函数          &lt;img alt="\epsilon_\theta (x_t, t)" src="https://latex.codecogs.com/gif.latex?%5Cepsilon_%5Ctheta%20%28x_t%2C%20t%29"&gt;&lt;/img&gt;用于在每个时间步去除噪声&lt;/li&gt;        &lt;li&gt;我们现在需要对上述等式进行变换，以便得到          &lt;img alt="x_{t-1}" src="https://latex.codecogs.com/gif.latex?x_%7Bt-1%7D"&gt;&lt;/img&gt;关于          &lt;img alt="x_t" src="https://latex.codecogs.com/gif.latex?x_t"&gt;&lt;/img&gt; 和          &lt;img alt="\epsilon_\theta (x_t, t)" src="https://latex.codecogs.com/gif.latex?%5Cepsilon_%5Ctheta%20%28x_t%2C%20t%29"&gt;&lt;/img&gt;的表达式。首先，我们将上述等式除以          &lt;img alt="\sqrt{a_t}" src="https://latex.codecogs.com/gif.latex?%5Csqrt%7Ba_t%7D"&gt;&lt;/img&gt;，得到：          &lt;br /&gt;          &lt;img alt="\frac{x_t}{\sqrt{a_t}} = x_{t-1} + \frac{\sqrt{1 - a_t}}{\sqrt{a_t}} \epsilon_{t-1}" src="https://latex.codecogs.com/gif.latex?%5Cfrac%7Bx_t%7D%7B%5Csqrt%7Ba_t%7D%7D%20%3D%20x_%7Bt-1%7D%20+%20%5Cfrac%7B%5Csqrt%7B1%20-%20a_t%7D%7D%7B%5Csqrt%7Ba_t%7D%7D%20%5Cepsilon_%7Bt-1%7D"&gt;&lt;/img&gt;&lt;/li&gt;        &lt;li&gt;现在我们需要用去噪函数          &lt;img alt="\epsilon_\theta (x_t, t)" src="https://latex.codecogs.com/gif.latex?%5Cepsilon_%5Ctheta%20%28x_t%2C%20t%29"&gt;&lt;/img&gt;替换掉          &lt;img alt="\epsilon_{t-1}" src="https://latex.codecogs.com/gif.latex?%5Cepsilon_%7Bt-1%7D"&gt;&lt;/img&gt;。在DDPM中，去噪函数的目标是从          &lt;img alt="x_t" src="https://latex.codecogs.com/gif.latex?x_t"&gt;&lt;/img&gt;中恢复出噪声          &lt;img alt="\epsilon_{t-1}" src="https://latex.codecogs.com/gif.latex?%5Cepsilon_%7Bt-1%7D"&gt;&lt;/img&gt;。因此，我们可以写：          &lt;br /&gt;          &lt;img alt="\epsilon_{t-1} = \epsilon_\theta (x_t, t)" src="https://latex.codecogs.com/gif.latex?%5Cepsilon_%7Bt-1%7D%20%3D%20%5Cepsilon_%5Ctheta%20%28x_t%2C%20t%29"&gt;&lt;/img&gt;&lt;/li&gt;        &lt;li&gt;将这个表达式带入上面的等式，我们得到：          &lt;br /&gt;          &lt;img alt="\frac{x_t}{\sqrt{a_t}} = x_{t-1} + \frac{\sqrt{1 - a_t}}{\sqrt{a_t}} \epsilon_\theta (x_t, t)" src="https://latex.codecogs.com/gif.latex?%5Cfrac%7Bx_t%7D%7B%5Csqrt%7Ba_t%7D%7D%20%3D%20x_%7Bt-1%7D%20+%20%5Cfrac%7B%5Csqrt%7B1%20-%20a_t%7D%7D%7B%5Csqrt%7Ba_t%7D%7D%20%5Cepsilon_%5Ctheta%20%28x_t%2C%20t%29"&gt;&lt;/img&gt;&lt;/li&gt;        &lt;li&gt;最后，我们将等式左边的          &lt;img alt="x_{t-1}" src="https://latex.codecogs.com/gif.latex?x_%7Bt-1%7D"&gt;&lt;/img&gt;项移到右边，并将其写成          &lt;img alt="x_{t-1}" src="https://latex.codecogs.com/gif.latex?x_%7Bt-1%7D"&gt;&lt;/img&gt;的表达式：          &lt;br /&gt;          &lt;img alt="x_{t-1} = \frac{1}{\sqrt{a_t}} x_t - \frac{\sqrt{1-a_t}}{\sqrt{a_t}} \epsilon_\theta (x_t, t)" src="https://latex.codecogs.com/gif.latex?x_%7Bt-1%7D%20%3D%20%5Cfrac%7B1%7D%7B%5Csqrt%7Ba_t%7D%7D%20x_t%20-%20%5Cfrac%7B%5Csqrt%7B1-a_t%7D%7D%7B%5Csqrt%7Ba_t%7D%7D%20%5Cepsilon_%5Ctheta%20%28x_t%2C%20t%29"&gt;&lt;/img&gt;          &lt;br /&gt;这就是我们需要的表达式，它描述了如何从时间步          &lt;img alt="t" src="https://latex.codecogs.com/gif.latex?t"&gt;&lt;/img&gt;的数据          &lt;img alt="x_t" src="https://latex.codecogs.com/gif.latex?x_t"&gt;&lt;/img&gt;和去噪函数          &lt;img alt="\epsilon_\theta (x_t, t)" src="https://latex.codecogs.com/gif.latex?%5Cepsilon_%5Ctheta%20%28x_t%2C%20t%29"&gt;&lt;/img&gt;恢复出时间步          &lt;img alt="t-1" src="https://latex.codecogs.com/gif.latex?t-1"&gt;&lt;/img&gt;的数据          &lt;img alt="x_{t-1}" src="https://latex.codecogs.com/gif.latex?x_%7Bt-1%7D"&gt;&lt;/img&gt;。在反向去噪过程中，我们将使用这个表达式逐步回溯到初始时间步，以生成新的样本&lt;/li&gt;&lt;/ol&gt;&lt;/blockquote&gt;    &lt;hr&gt;&lt;/hr&gt;    &lt;p&gt;更具体而言，正向扩散和逆扩散过程都是马尔可夫，唯一的区别就是正向扩散里每一个条件概率的高斯分布的均值和方差都是已经确定的（依赖于      &lt;img alt="\beta _t" src="https://latex.codecogs.com/gif.latex?%5Cbeta%20_t"&gt;&lt;/img&gt;和      &lt;img alt="x_0" src="https://latex.codecogs.com/gif.latex?x_0"&gt;&lt;/img&gt;），而逆扩散过程里面的均值和方差需要通过网络学出来&lt;/p&gt;    &lt;p&gt;怎么个学法呢？如果我们能够逆转前向过程并从      &lt;img alt="q(x_{t-1}|x_t)" src="https://latex.codecogs.com/gif.latex?q%28x_%7Bt-1%7D%7Cx_t%29"&gt;&lt;/img&gt;采样，就可以从高斯噪声      &lt;img alt="x_T \sim N( 0, I )" src="https://latex.codecogs.com/gif.latex?x_T%20%5Csim%20N%28%200%2C%20I%20%29"&gt;&lt;/img&gt;还原出原图分布      &lt;img alt="x_0 \sim q(x)" src="https://latex.codecogs.com/gif.latex?x_0%20%5Csim%20q%28x%29"&gt;&lt;/img&gt;。可证明如果      &lt;img alt="q(x_t|x_{t-1})" src="https://latex.codecogs.com/gif.latex?q%28x_t%7Cx_%7Bt-1%7D%29"&gt;&lt;/img&gt;满足高斯分布且      &lt;img alt="\beta _t" src="https://latex.codecogs.com/gif.latex?%5Cbeta%20_t"&gt;&lt;/img&gt;足够小，      &lt;img alt="q(x_{t-1}|x_t)" src="https://latex.codecogs.com/gif.latex?q%28x_%7Bt-1%7D%7Cx_t%29"&gt;&lt;/img&gt;仍然是一个高斯分布。然现在的问题是，我们无法直接去推断      &lt;img alt="q(x_{t-1}|x_t)" src="https://latex.codecogs.com/gif.latex?q%28x_%7Bt-1%7D%7Cx_t%29"&gt;&lt;/img&gt;，好在我们可以使用「参数为 θ 的U-Net+attention 结构」去预测这样的一个逆向的分布      &lt;img alt="p_\theta" src="https://latex.codecogs.com/gif.latex?p_%5Ctheta"&gt;&lt;/img&gt;（类似 VAE）： &lt;/p&gt;    &lt;p&gt;      &lt;img alt="&amp;#22312;&amp;#36825;&amp;#37324;&amp;#25554;&amp;#20837;&amp;#22270;&amp;#29255;&amp;#25551;&amp;#36848;" src="https://img-blog.csdnimg.cn/8798db1111054e8c83633dfc1e5748e3.png"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;不过在DDPM的论文中，作者把条件概率      &lt;img alt="p_\theta (x_{t-1}|x_t)" src="https://latex.codecogs.com/gif.latex?p_%5Ctheta%20%28x_%7Bt-1%7D%7Cx_t%29"&gt;&lt;/img&gt;的方差直接取了      &lt;img alt="\beta _t" src="https://latex.codecogs.com/gif.latex?%5Cbeta%20_t"&gt;&lt;/img&gt;，而不是上面说的需要网络去估计的      &lt;img alt="\sum _\theta (x_t, t)" src="https://latex.codecogs.com/gif.latex?%5Csum%20_%5Ctheta%20%28x_t%2C%20t%29"&gt;&lt;/img&gt;，所以说实际上只有均值需要网络去估计。虽然我们无法得到逆转过程的概率分布      &lt;img alt="q(x_{t-1}|x_t)" src="https://latex.codecogs.com/gif.latex?q%28x_%7Bt-1%7D%7Cx_t%29"&gt;&lt;/img&gt;，但是如果知道      &lt;img alt="x_0,q(x_{t-1}|x_t, x_0)" src="https://latex.codecogs.com/gif.latex?x_0%2Cq%28x_%7Bt-1%7D%7Cx_t%2C%20x_0%29"&gt;&lt;/img&gt;就可以直接写出&lt;/p&gt;    &lt;p&gt;      &lt;img alt="&amp;#22312;&amp;#36825;&amp;#37324;&amp;#25554;&amp;#20837;&amp;#22270;&amp;#29255;&amp;#25551;&amp;#36848;" src="https://img-blog.csdnimg.cn/b86edade9ed045efb66738f89623d684.png"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt; 故有：&lt;/p&gt;    &lt;p&gt;      &lt;img alt="&amp;#22312;&amp;#36825;&amp;#37324;&amp;#25554;&amp;#20837;&amp;#22270;&amp;#29255;&amp;#25551;&amp;#36848;" src="https://img-blog.csdnimg.cn/d30ed0a8a71b46b69e8e68aa73271210.png"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;blockquote&gt;      &lt;p&gt;解释下上面7.1~7.5这5个步骤的推导&lt;/p&gt;      &lt;ol&gt;        &lt;li&gt;          &lt;p&gt;7.1依据的是            &lt;br /&gt;            &lt;img alt="P(A|B) = \frac{P(AB)}{P(B)}" src="https://latex.codecogs.com/gif.latex?P%28A%7CB%29%20%3D%20%5Cfrac%7BP%28AB%29%7D%7BP%28B%29%7D"&gt;&lt;/img&gt;&lt;/p&gt;&lt;/li&gt;        &lt;li&gt;7.2中，分母部分依据的是          &lt;br /&gt;          &lt;img alt="P(AB) = P(A)P(B|A)" src="https://latex.codecogs.com/gif.latex?P%28AB%29%20%3D%20P%28A%29P%28B%7CA%29"&gt;&lt;/img&gt;          &lt;br /&gt;分子部分依据的是          &lt;br /&gt;          &lt;img alt="P(ABC)=P(A)P(B|A)P(C|AB)" src="https://latex.codecogs.com/gif.latex?P%28ABC%29%3DP%28A%29P%28B%7CA%29P%28C%7CAB%29"&gt;&lt;/img&gt;&lt;/li&gt;        &lt;li&gt;7.3依据的是分子分母同时除以          &lt;img alt="q(x_0)" src="https://latex.codecogs.com/gif.latex?q%28x_0%29"&gt;&lt;/img&gt;&lt;/li&gt;        &lt;li&gt;7.4依据的是          &lt;br /&gt;          &lt;img alt="&amp;#22312;&amp;#36825;&amp;#37324;&amp;#25554;&amp;#20837;&amp;#22270;&amp;#29255;&amp;#25551;&amp;#36848;" src="https://img-blog.csdnimg.cn/b62cbd7b56c042e08e09381db0cc8a07.png"&gt;&lt;/img&gt;          &lt;br /&gt;和          &lt;br /&gt;           &lt;img alt="q(x_t|x_{t-1})" src="https://latex.codecogs.com/gif.latex?q%28x_t%7Cx_%7Bt-1%7D%29"&gt;&lt;/img&gt;是一个正太分布，且其均值是          &lt;img alt="u_t = \sqrt{1-\beta _t }x_{t-1}" src="https://latex.codecogs.com/gif.latex?u_t%20%3D%20%5Csqrt%7B1-%5Cbeta%20_t%20%7Dx_%7Bt-1%7D"&gt;&lt;/img&gt;，方差为          &lt;img alt="\beta _t" src="https://latex.codecogs.com/gif.latex?%5Cbeta%20_t"&gt;&lt;/img&gt;，且          &lt;img alt="\alpha _t = 1 - \beta_t" src="https://latex.codecogs.com/gif.latex?%5Calpha%20_t%20%3D%201%20-%20%5Cbeta_t"&gt;&lt;/img&gt; &lt;/li&gt;        &lt;li&gt;至于7.5          &lt;br /&gt;首先考虑           &lt;img alt="\frac{1}{2} (ax^2 + bx + c)" src="https://latex.codecogs.com/gif.latex?%5Cfrac%7B1%7D%7B2%7D%20%28ax%5E2%20+%20bx%20+%20c%29"&gt;&lt;/img&gt;，可以整理为          &lt;img alt="\frac{1}{2} a(x + \frac{b}{2a})^2 + C" src="https://latex.codecogs.com/gif.latex?%5Cfrac%7B1%7D%7B2%7D%20a%28x%20+%20%5Cfrac%7Bb%7D%7B2a%7D%29%5E2%20+%20C"&gt;&lt;/img&gt;，则其均值为          &lt;img alt="- \frac{b}{2a}" src="https://latex.codecogs.com/gif.latex?-%20%5Cfrac%7Bb%7D%7B2a%7D"&gt;&lt;/img&gt;，方差为          &lt;img alt="\frac{1}{a}" src="https://latex.codecogs.com/gif.latex?%5Cfrac%7B1%7D%7Ba%7D"&gt;&lt;/img&gt;，从而有          &lt;br /&gt;          &lt;img alt="&amp;#22312;&amp;#36825;&amp;#37324;&amp;#25554;&amp;#20837;&amp;#22270;&amp;#29255;&amp;#25551;&amp;#36848;" src="https://img-blog.csdnimg.cn/367543b1b80e47bea981d6861637d5fc.png"&gt;&lt;/img&gt;          &lt;br /&gt;          &lt;br /&gt;根据          &lt;img alt="x_t = \sqrt{\bar{a}_t} x_0 + \sqrt{1 - \bar{a}_t} \epsilon" src="https://latex.codecogs.com/gif.latex?x_t%20%3D%20%5Csqrt%7B%5Cbar%7Ba%7D_t%7D%20x_0%20+%20%5Csqrt%7B1%20-%20%5Cbar%7Ba%7D_t%7D%20%5Cepsilon"&gt;&lt;/img&gt;，可知          &lt;img alt="&amp;#22312;&amp;#36825;&amp;#37324;&amp;#25554;&amp;#20837;&amp;#22270;&amp;#29255;&amp;#25551;&amp;#36848;" src="https://img-blog.csdnimg.cn/5e7f13871fb64089a9c3eac3994f22be.png"&gt;&lt;/img&gt;，代入上式 可得          &lt;img alt="&amp;#22312;&amp;#36825;&amp;#37324;&amp;#25554;&amp;#20837;&amp;#22270;&amp;#29255;&amp;#25551;&amp;#36848;" src="https://img-blog.csdnimg.cn/b603a9585ab54fb691a8f6af9044fe85.png"&gt;&lt;/img&gt;          &lt;p&gt;相当于在给定            &lt;img alt="x_0" src="https://latex.codecogs.com/gif.latex?x_0"&gt;&lt;/img&gt;的条件下，后验条件高斯分布的均值只和超参数            &lt;img alt="\alpha _t" src="https://latex.codecogs.com/gif.latex?%5Calpha%20_t"&gt;&lt;/img&gt;、            &lt;img alt="x_t" src="https://latex.codecogs.com/gif.latex?x_t"&gt;&lt;/img&gt;、            &lt;img alt="\varepsilon _t" src="https://latex.codecogs.com/gif.latex?%5Cvarepsilon%20_t"&gt;&lt;/img&gt;有关，方差只与超参数            &lt;img alt="\alpha" src="https://latex.codecogs.com/gif.latex?%5Calpha"&gt;&lt;/img&gt;有关，从而通过以上的方差和均值，我们就得到了            &lt;img alt="q(x_{t-1}|x_t, x_0)" src="https://latex.codecogs.com/gif.latex?q%28x_%7Bt-1%7D%7Cx_t%2C%20x_0%29"&gt;&lt;/img&gt;的解析形式 &lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/blockquote&gt;    &lt;h3&gt;2.1.3 如何训练：建立噪声估计模型      &lt;img alt="\epsilon _\theta (x_t,t)" src="https://latex.codecogs.com/gif.latex?%5Cepsilon%20_%5Ctheta%20%28x_t%2Ct%29"&gt;&lt;/img&gt;——最小化估计噪声与真实噪声之间的差距&lt;/h3&gt;    &lt;p&gt;接下来介绍这个模型要怎么优化，即网络该怎么训练去估计条件概率      &lt;img alt="p_\theta (x_{t-1}|x_t)" src="https://latex.codecogs.com/gif.latex?p_%5Ctheta%20%28x_%7Bt-1%7D%7Cx_t%29"&gt;&lt;/img&gt;的均值      &lt;img alt="u_\theta (x_t,t)" src="https://latex.codecogs.com/gif.latex?u_%5Ctheta%20%28x_t%2Ct%29"&gt;&lt;/img&gt;和方差      &lt;img alt="\sum (x_t,t)" src="https://latex.codecogs.com/gif.latex?%5Csum%20%28x_t%2Ct%29"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;我们要最小化目标分布的负对数似然：&lt;/p&gt;    &lt;p&gt;      &lt;img alt="" height="184" src="https://img-blog.csdnimg.cn/dbb8682acf8a48ec9c5f8ce9123fb84b.png" width="600"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt; 令&lt;/p&gt;    &lt;p&gt;      &lt;img alt="" height="79" src="https://img-blog.csdnimg.cn/235826b5db7247c08493a9deda65a11e.png" width="600"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;所以       &lt;img alt="L_{LVB}" src="https://latex.codecogs.com/gif.latex?L_%7BLVB%7D"&gt;&lt;/img&gt;就是我们的上界，我们要最小化它，接着进行变形&lt;/p&gt;    &lt;p&gt;      &lt;img alt="&amp;#22312;&amp;#36825;&amp;#37324;&amp;#25554;&amp;#20837;&amp;#22270;&amp;#29255;&amp;#25551;&amp;#36848;" src="https://img-blog.csdnimg.cn/6dee87df1e34418e801aa469a4261cff.png"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;对于上面公式最后得到的结果&lt;/p&gt;    &lt;ol&gt;      &lt;li&gt;首先，        &lt;img alt="L_T" src="https://latex.codecogs.com/gif.latex?L_T"&gt;&lt;/img&gt;是和优化无关的(由于前向过程 q 没有可学习参数，而        &lt;img alt="x_T" src="https://latex.codecogs.com/gif.latex?x_T"&gt;&lt;/img&gt; 则是纯高斯噪声，因此 LT 可以当做常量忽略)，所以不用管，只用看右边的        &lt;img alt="L_{t-1}" src="https://latex.codecogs.com/gif.latex?L_%7Bt-1%7D"&gt;&lt;/img&gt;&lt;/li&gt;      &lt;li&gt;然后，        &lt;img alt="L_{t-1}" src="https://latex.codecogs.com/gif.latex?L_%7Bt-1%7D"&gt;&lt;/img&gt;是KL散度，则可以看做拉近 2 个分布的距离：         &lt;br /&gt;第一个分布        &lt;img alt="q(x_{t-1}|x_T,x_0)" src="https://latex.codecogs.com/gif.latex?q%28x_%7Bt-1%7D%7Cx_T%2Cx_0%29"&gt;&lt;/img&gt; 我们已经在上一节推导出其解析形式，这是一个高斯分布，其均值和方差为        &lt;br /&gt;        &lt;img alt="&amp;#22312;&amp;#36825;&amp;#37324;&amp;#25554;&amp;#20837;&amp;#22270;&amp;#29255;&amp;#25551;&amp;#36848;" src="https://img-blog.csdnimg.cn/bc89c7f7d828438bab061fd96ace96cb.png"&gt;&lt;/img&gt;        &lt;br /&gt;第二个分布        &lt;img alt="p_\theta (x_{t-1},x_t)" src="https://latex.codecogs.com/gif.latex?p_%5Ctheta%20%28x_%7Bt-1%7D%2Cx_t%29"&gt;&lt;/img&gt;是我们网络期望拟合的目标分布，也是一个高斯分布，均值用网络估计，方差被设置为了一个和        &lt;img alt="\beta_t" src="https://latex.codecogs.com/gif.latex?%5Cbeta_t"&gt;&lt;/img&gt;有关的常数        &lt;br /&gt;        &lt;img alt="&amp;#22312;&amp;#36825;&amp;#37324;&amp;#25554;&amp;#20837;&amp;#22270;&amp;#29255;&amp;#25551;&amp;#36848;" src="https://img-blog.csdnimg.cn/b7997e1642354c99bcecfc3074f1ebef.png"&gt;&lt;/img&gt;        &lt;br /&gt;如果有两个分布 p,q 都是高斯分布，则他们的KL散度为        &lt;br /&gt;        &lt;img alt="&amp;#22312;&amp;#36825;&amp;#37324;&amp;#25554;&amp;#20837;&amp;#22270;&amp;#29255;&amp;#25551;&amp;#36848;" src="https://img-blog.csdnimg.cn/8549adadc74944f79a421917b3ce1b13.png"&gt;&lt;/img&gt;        &lt;br /&gt;然后因为这两个分布的方差全是常数，和优化无关，所以其实优化目标就是两个分布均值的二范数        &lt;br /&gt;        &lt;img alt="" height="102" src="https://img-blog.csdnimg.cn/dc544670055a4cae9b1d8c6fd43d9364.png" width="600"&gt;&lt;/img&gt;&lt;/li&gt;      &lt;li&gt;这个时候我们可以直接整个网络出来直接预测         &lt;img alt="u_\theta (x_t,t)" src="https://latex.codecogs.com/gif.latex?u_%5Ctheta%20%28x_t%2Ct%29"&gt;&lt;/img&gt; ，且        &lt;img alt="u_\theta (x_t,t)" src="https://latex.codecogs.com/gif.latex?u_%5Ctheta%20%28x_t%2Ct%29"&gt;&lt;/img&gt;会尽可能去预测        &lt;img alt="" height="40" src="https://img-blog.csdnimg.cn/da3a5d2e8bda44d0b0061fe41ad30ea2.png" width="150"&gt;&lt;/img&gt;，因为        &lt;img alt="x_t" src="https://latex.codecogs.com/gif.latex?x_t"&gt;&lt;/img&gt;是        &lt;img alt="u_\theta" src="https://latex.codecogs.com/gif.latex?u_%5Ctheta"&gt;&lt;/img&gt; 的输入的，其它的量都是常熟，所以其中的未知量其实只有        &lt;img alt="\epsilon" src="https://latex.codecogs.com/gif.latex?%5Cepsilon"&gt;&lt;/img&gt;，所以我们干脆把        &lt;img alt="u_\theta (x_t,t)" src="https://latex.codecogs.com/gif.latex?u_%5Ctheta%20%28x_t%2Ct%29"&gt;&lt;/img&gt;定义成：        &lt;br /&gt;        &lt;img alt="" height="66" src="https://img-blog.csdnimg.cn/e723cddff8894f3ca5bb6a8b884c91ac.png" width="400"&gt;&lt;/img&gt;        &lt;br /&gt;也就是说，不用网络直接预测        &lt;img alt="\tilde{u_t}(x_t,x_0)" src="https://latex.codecogs.com/gif.latex?%5Ctilde%7Bu_t%7D%28x_t%2Cx_0%29"&gt;&lt;/img&gt;，而是用网络        &lt;img alt="\epsilon _\theta (x_t,t)" src="https://latex.codecogs.com/gif.latex?%5Cepsilon%20_%5Ctheta%20%28x_t%2Ct%29"&gt;&lt;/img&gt;先预测噪声        &lt;img alt="\epsilon" src="https://latex.codecogs.com/gif.latex?%5Cepsilon"&gt;&lt;/img&gt;，然后把预测出来的噪声带入到定义好的表达式中去计算出预测的均值，其实是一样的&lt;/li&gt;      &lt;li&gt;所以，最终把这个公式，带入到 上一公式中得到：        &lt;br /&gt;        &lt;img alt="&amp;#22312;&amp;#36825;&amp;#37324;&amp;#25554;&amp;#20837;&amp;#22270;&amp;#29255;&amp;#25551;&amp;#36848;" src="https://img-blog.csdnimg.cn/2bbd71da745d419092f853ae9b8dcc61.png"&gt;&lt;/img&gt;        &lt;br /&gt;经过这样一番推导之后就是个 L2 loss。网络的输入是一张和噪声线性组合的图片，然后要估计出来这个噪声：        &lt;br /&gt;        &lt;img alt="&amp;#22312;&amp;#36825;&amp;#37324;&amp;#25554;&amp;#20837;&amp;#22270;&amp;#29255;&amp;#25551;&amp;#36848;" src="https://img-blog.csdnimg.cn/4112c33f31ca4803ad9899efc5310911.png"&gt;&lt;/img&gt;&lt;/li&gt;&lt;/ol&gt;    &lt;p&gt;由上可知，DDPM的关键是训练       &lt;img alt="\epsilon _\theta (x_t,t)" src="https://latex.codecogs.com/gif.latex?%5Cepsilon%20_%5Ctheta%20%28x_t%2Ct%29"&gt;&lt;/img&gt;模型，使其预测的       &lt;img alt="\hat{\epsilon }" src="https://latex.codecogs.com/gif.latex?%5Chat%7B%5Cepsilon%20%7D"&gt;&lt;/img&gt;与真实用于破坏的      &lt;img alt="\epsilon" src="https://latex.codecogs.com/gif.latex?%5Cepsilon"&gt;&lt;/img&gt; 相近，用L2距离刻画相近程度就好，因此我们的Loss就是如下公式&lt;/p&gt;    &lt;p&gt;      &lt;img alt="L = ||\epsilon -\epsilon _\theta(x_t,t)|| ^2 \\ = || \epsilon - \epsilon _\theta (\sqrt{\bar{a_t}}x_0 +\sqrt{1-\bar{a_t}}\epsilon ,t) ||^2" src="https://latex.codecogs.com/gif.latex?L%20%3D%20%7C%7C%5Cepsilon%20-%5Cepsilon%20_%5Ctheta%28x_t%2Ct%29%7C%7C%20%5E2%20%5C%5C%20%3D%20%7C%7C%20%5Cepsilon%20-%20%5Cepsilon%20_%5Ctheta%20%28%5Csqrt%7B%5Cbar%7Ba_t%7D%7Dx_0%20+%5Csqrt%7B1-%5Cbar%7Ba_t%7D%7D%5Cepsilon%20%2Ct%29%20%7C%7C%5E2"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;而整个训练过程可如下图描述&lt;/p&gt;    &lt;p&gt;      &lt;img alt="" height="419" src="https://img-blog.csdnimg.cn/3a414b1fff004c70bdb1cbe578fd4605.png" width="800"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;DDPM论文中对应的伪代码为&lt;/p&gt;    &lt;p&gt;      &lt;img alt="" height="281" src="https://img-blog.csdnimg.cn/5fd19f74114d413f84154db61de7c395.png" width="600"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;相当于训练时，网络输入为       &lt;img alt="x_t" src="https://latex.codecogs.com/gif.latex?x_t"&gt;&lt;/img&gt;(由      &lt;img alt="x_0" src="https://latex.codecogs.com/gif.latex?x_0"&gt;&lt;/img&gt; 和噪声       &lt;img alt="\epsilon" src="https://latex.codecogs.com/gif.latex?%5Cepsilon"&gt;&lt;/img&gt; 线性组合而成) 和时刻      &lt;img alt="t" src="https://latex.codecogs.com/gif.latex?t"&gt;&lt;/img&gt; ，输出要尽可能的拟合输入的噪声       &lt;img alt="\epsilon" src="https://latex.codecogs.com/gif.latex?%5Cepsilon"&gt;&lt;/img&gt; (通过L2 loss约束)：&lt;/p&gt;    &lt;p&gt;      &lt;img alt="" height="54" src="https://img-blog.csdnimg.cn/92bb64bf96fa4c65a7a195ae4c29d1ba.png" width="600"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;h2&gt;2.2 通过训练好的DDPM生成图片&lt;/h2&gt;    &lt;p&gt;在得到噪声估测模型       &lt;img alt="\epsilon _\theta (x_t,t)" src="https://latex.codecogs.com/gif.latex?%5Cepsilon%20_%5Ctheta%20%28x_t%2Ct%29"&gt;&lt;/img&gt; 后，想要生成模型就很简单了。从N(0,1)中随机生成一个噪声作为      &lt;img alt="X_T" src="https://latex.codecogs.com/gif.latex?X_T"&gt;&lt;/img&gt;，然后再用该模型逐步从估测噪声，并用去噪公式逐渐恢复到       &lt;img alt="x_0" src="https://latex.codecogs.com/gif.latex?x_0"&gt;&lt;/img&gt; 即可，见如下伪代码&lt;/p&gt;    &lt;p&gt;      &lt;img alt="" height="261" src="https://img-blog.csdnimg.cn/146c3cdcf2e0450990da52f73eebbe3b.png" width="600"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;相当于推理时，我们从各项独立的高斯分布      &lt;img alt="X_T" src="https://latex.codecogs.com/gif.latex?X_T"&gt;&lt;/img&gt; 开始，一共       &lt;img alt="T" src="https://latex.codecogs.com/gif.latex?T"&gt;&lt;/img&gt; 步，每一步其实都是用了一次reparameterization trick。&lt;/p&gt;    &lt;p&gt;每一步具体来说，我们有了       &lt;img alt="X_T" src="https://latex.codecogs.com/gif.latex?X_T"&gt;&lt;/img&gt; ， 想要得到      &lt;img alt="X_{t-1}" src="https://latex.codecogs.com/gif.latex?X_%7Bt-1%7D"&gt;&lt;/img&gt;，因为我们之前逆扩散过程建模有： &lt;/p&gt;    &lt;p&gt;      &lt;img alt="" height="53" src="https://img-blog.csdnimg.cn/58302123cf94459cbdba8bbd3916c252.png" width="600"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;      &lt;img alt="" height="92" src="https://img-blog.csdnimg.cn/844d1d4c012546eca11e5f7193b84788.png" width="600"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt; 所以由reparameterization trick我们有：&lt;/p&gt;    &lt;p&gt;      &lt;img alt="" height="75" src="https://img-blog.csdnimg.cn/9254710aced346c19ba880baea7089cc.png" width="600"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt; 每一轮都这样迭代，最终就得到了生成的图片&lt;/p&gt;    &lt;p&gt;//又不一小心把本文发布出去了，本来一直在草稿里要修改个把星期的，一方面 下文还有很多内容需要更新，二方面 上文还有很多细节有待补充完善 比如一些公式的拆解，待更..&lt;/p&gt;    &lt;p&gt;&lt;/p&gt;    &lt;h1&gt;参考文献与推荐阅读&lt;/h1&gt;    &lt;ol&gt;      &lt;li&gt;        &lt;a href="https://kexue.fm/archives/5253" title=""&gt;变分自编码器（一）：原来是这么一回事&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;..&lt;/li&gt;      &lt;li&gt;关于VAE的几篇文章：        &lt;a href="https://zhuanlan.zhihu.com/p/64485020" title=""&gt;一文理解变分自编码器（VAE）&lt;/a&gt;、        &lt;a href="https://zhuanlan.zhihu.com/p/348498294" title=""&gt;机器学习方法—优雅的模型（一）：变分自编码器（VAE）&lt;/a&gt;、&lt;/li&gt;      &lt;li&gt;苏剑林关于扩散模型的几篇文章：        &lt;a href="https://kexue.fm/archives/9119" title=""&gt;（一）：DDPM = 拆楼 + 建楼&lt;/a&gt;、        &lt;a href="https://kexue.fm/archives/9152" title=""&gt;（二）：DDPM = 自回归式VAE&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;        &lt;a href="https://www.zhihu.com/question/545764550" title=""&gt;怎么理解今年 CV 比较火的扩散模型（DDPM）？&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;知乎上关于扩散模型的几篇文章：          &lt;a href="https://zhuanlan.zhihu.com/p/566618077" title=""&gt;全网最简单的扩散模型DDPM教程&lt;/a&gt;、          &lt;a href="https://zhuanlan.zhihu.com/p/610012156" title=""&gt;Diffusion扩散模型大白话讲解&lt;/a&gt;、          &lt;a href="https://www.zhihu.com/question/545764550/answer/2926355957" title=""&gt;扩散生成模型: 唯美联姻物理概念与机器学习&lt;/a&gt; &lt;/p&gt;&lt;/li&gt;      &lt;li&gt;        &lt;a href="https://calvinyluo.com/2022/08/26/diffusion-tutorial.html" title=""&gt;Understanding Diffusion Models: A Unified Perspective&lt;/a&gt;(另，这是其        &lt;a href="https://arxiv.org/pdf/2208.11970" title=""&gt;PDF版本&lt;/a&gt;)&lt;/li&gt;      &lt;li&gt;        &lt;a href="https://shao.fun/blog/w/how-diffusion-models-work.html" title=""&gt;扩散模型是如何工作的：从0开始的数学原理&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;        &lt;a href="https://lilianweng.github.io/posts/2021-07-11-diffusion-models/" title=""&gt;What are Diffusion Models?&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;        &lt;a href="https://www.assemblyai.com/blog/diffusion-models-for-machine-learning-introduction/" title=""&gt;Introduction to Diffusion Models for Machine Learning&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;关于扩散模型的几篇论文        &lt;br /&gt;        &lt;a href="https://cvpr2022-tutorial-diffusion-models.github.io/" title=""&gt;CVPR 2022 Tutorial: Denoising Diffusion-based Generative Modeling: Foundations and Applications&lt;/a&gt;        &lt;br /&gt;​​​​​​​        &lt;a href="https://arxiv.org/pdf/2105.05233" title=""&gt;Diffusion Models Beat GANs on Image Synthesis&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;关于DDPM的几篇文章：        &lt;a href="https://blog.csdn.net/qq_45752541/article/details/127956235" title=""&gt;DDPM概率扩散模型（原理+代码)&lt;/a&gt;、        &lt;a href="https://www.cnblogs.com/MTandHJ/p/15698607.html" title=""&gt;Denoising Diffusion Probabilistic Models (DDPM)&lt;/a&gt;、        &lt;a href="https://xyfjason.top/2022/09/29/%E4%BB%8EVAE%E5%88%B0DDPM/" title=""&gt;从VAE到DDPM&lt;/a&gt;、        &lt;a href="https://www.jianshu.com/p/9e6a28f1018a" title=""&gt;扩散模型原理解析&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;
    &lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/62749-ai-%E7%BB%98%E7%94%BB-%E7%90%86%E8%A7%A3</guid>
      <pubDate>Wed, 03 May 2023 07:52:37 CST</pubDate>
    </item>
    <item>
      <title>Linux 下如何查找木马并处理 - ericyuan - 博客园</title>
      <link>https://itindex.net/detail/62734-linux-%E6%9C%A8%E9%A9%AC-ericyuan</link>
      <description>&lt;div&gt;    &lt;p&gt;1、cat /etc/passwd 未发现陌生用户和可疑root权限用户。&lt;/p&gt;    &lt;p&gt;2、netstat -anp 查看所有进程及pid号，未发现异常连接。&lt;/p&gt;    &lt;p&gt;3、last 查看最近登录用户，未发现异常&lt;/p&gt;    &lt;p&gt;4、cat /etc/profile 查看系统环境变量，未发现异常&lt;/p&gt;    &lt;p&gt;5、ls -al /etc/rc.d/rc3.d ，查看当前级别下开机启动程序，未见异常（有一些脸生，只好利用搜索引擎了）&lt;/p&gt;    &lt;p&gt;6、crontab -l 检查计划任务，root用户和web运行用户各检查一遍，未见任何异常&lt;/p&gt;    &lt;p&gt;7、cat /root/.bashrc 和 cat /home/用户/.bashrc 查看各用户变量，未发现异常&lt;/p&gt;    &lt;p&gt;8、查看系统日志。主要是/var/log/messages(进程日志)、/var/log/wtmp(系统登录成功日志 who /var/log/wtmp)、/var/log//bmtp(系统登录失败日志)、/var/log/pureftpd.log(pureftpd的连接日志)，未发现异常（考虑到了可能的日志擦除，重点看了日志的连续性，未发现明显的空白时间段）&lt;/p&gt;    &lt;p&gt;9、history 查看命令历史。cat /home/用户/.bash_history 查看各用户命令记录，未发现异常&lt;/p&gt;    &lt;p&gt;10、系统的查完了，就开始查web的。初步查看各站点修改时间，继而查看各站点的access.log和error.log（具体路径不发了 ），未发现报告时间前后有异常访问。虽有大量攻击尝试，未发现成功。&lt;/p&gt;    &lt;p&gt;11、日志分析完毕，查找可能存在的webshell。方法有两个，其一在服务器上手动查找；其二，将web程序下载到本地使用webshellscanner或者web杀毒等软件进行查杀。考虑到站点较多，数据量大，按第一种方法来。 在linux上查找webshell基本两个思路：修改时间和特征码查找。 特征码例子：find 目录 -name &amp;quot;*.php&amp;quot;（asp、aspx或jsp） |xargs grep &amp;quot;POST[（特征码部分自己添加）&amp;quot; |more 修改时间：查看最新3天内修改的文件，find 目录 -mtime 0 -o -mtime 1 -o -mtime 2 当然也可以将两者结合在一起，find 目录 -mtime 0 -o -mtime 1 -o -mtime 2 -name &amp;quot;*.php&amp;quot; 的确查找到了一些停用的站点下有webshell&lt;/p&gt;    &lt;p&gt;--------&lt;/p&gt;    &lt;p&gt;查找全站关键字：“pack”、“eval”&lt;/p&gt;&lt;/div&gt;
    &lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/62734-linux-%E6%9C%A8%E9%A9%AC-ericyuan</guid>
      <pubDate>Thu, 13 Apr 2023 22:41:24 CST</pubDate>
    </item>
    <item>
      <title>服务端性能优化--最大QPS推算及验证 - huangyingsheng - 博客园</title>
      <link>https://itindex.net/detail/62539-%E6%9C%8D%E5%8A%A1-%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96-qps</link>
      <description>&lt;div&gt;    &lt;h1&gt;服务端性能优化--最大QPS推算及验证&lt;/h1&gt;    &lt;p&gt;影响QPS（即吞吐量）的因素有哪些？每个开发都有自己看法，一直以为众说纷纭，例如：&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;QPS受编程语言的影响。（PHP是最好的语言？）&lt;/li&gt;      &lt;li&gt;QPS主要受编程模型的影响，比如不是coroutine、是不是NIO、有没有阻塞？&lt;/li&gt;      &lt;li&gt;QPS主要由业务逻辑决定，业务逻辑越复杂，QPS越低。&lt;/li&gt;      &lt;li&gt;QPS受数据结构和算法的影响。&lt;/li&gt;      &lt;li&gt;QPS受线程数的影响。&lt;/li&gt;      &lt;li&gt;QPS受系统瓶颈的影响。&lt;/li&gt;      &lt;li&gt;QPS和RT关系非常紧密。&lt;/li&gt;      &lt;li&gt;more...&lt;/li&gt;&lt;/ul&gt;    &lt;p&gt;嗯，这些说法好像都对，但是好像又有点不对，好像总是不太完整，有没有一个系统点的说法能让人感觉一听就豁然开朗？      &lt;br /&gt;今天我们就这个话题来阐述一下，将一些现有的理论作为依据，把上方这些看起来比较零碎的看法总结归纳起来，希望能为服务端的性能提升进行一点优化，这也是一个优化的起点，未来才有可能做更多的优化，例如TCP、DNS、CDN、系统监控、多级缓存、多机房部署等等优化的手段。&lt;/p&gt;    &lt;img height="100" src="https://summer-blog-images.oss-cn-shanghai.aliyuncs.com/generic/v2-bc309f8a7eb0de9dd0c7277be07e9a46_1440w.jpg" width="100"&gt;&lt;/img&gt;    &lt;p&gt;      &lt;strong&gt;好了，废话不多说，直接开聊。&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;我们经常再做优化的时候，例如电商的促销秒杀等活动页，一开始可能会认为说Gzip并不是影响CPU的最大因子，直到拿出一次又一次的实验数据，研发们才开始慢慢接受（尬不尬），这是为什么？难道说Gzip真的是影响CPU的最大因子吗？那我们就拿出一点数据来验证一下对吧，接下来我们从RT着手开始慢慢了解，看到文章结尾就知道为什么Gzip和CPU的关系，同事也会发现，性能优化的相关知识其实也是体系化的，并不是分散零碎的。&lt;/p&gt;    &lt;h3&gt;RT&lt;/h3&gt;    &lt;p&gt;什么是 RT ？是概念还是名词还是理论？      &lt;br /&gt;      &lt;br /&gt;RT其实也没那么玄乎，就是 Response Time （就是响应时间嘛，哈哈哈），只不过看你目前在什么场景下，也许你是c端（app、pc等）的用户，响应时间是你请求服务器到服务器响应你的时间间隔，对于我们后端优化来说，就是接受到请求到响应用户的时间间隔。这听起来怎么感觉这不是在说废话吗？这说的不都是服务端的处理时间吗？不同在哪里？其实这里有个容易被忽略的因素，叫做网络开销。      &lt;br /&gt;所以服务端RT ≈ 网络开销 + 客户端RT。也就是说，一个差的网络环境会导致两个RT差距的悬殊（比如，从深圳访问上海的请求RT，远大于上海本地内的请求RT）&lt;/p&gt;    &lt;p&gt;客户端的RT则会直接影响客户体验，要降低客户端RT，提升用户的体验，必须考虑两点，第一点是服务端的RT，第二点是网络。对于网络来说常见的有CDN、AND、专线等等，分别适用于不同的场景，有机会写个blog聊一下这个话题。&lt;/p&gt;    &lt;p&gt;对于服务端RT来说，主要看服务端的做法。      &lt;br /&gt;有个公式：RT = Thread CPU Time + Thread Wait Time      &lt;br /&gt;从公式中可以看出，要想降低RT，就要降低 Thread CPU Time 或者 Thread Wait Time。这也是马上要重点深挖的一个知识点。&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;Thread CPU Time（简称CPU Time）        &lt;br /&gt;        &lt;br /&gt;Thread Wait Time（简称Wait Time）&lt;/strong&gt;&lt;/p&gt;    &lt;h3&gt;单线程QPS&lt;/h3&gt;    &lt;p&gt;我们都知道 RT 是由两部分组成 CPU Time + Wait Time 。那如果系统里只有一个线程或者一个进程并且进程中只有一个线程的时候，那么最大的 QPS 是多少呢？      &lt;br /&gt;假设 RT 是 199ms （CPU Time 为 19ms ，Wait Time 是 180ms ），那么 1000s以内系统可以接收的最大请求就是      &lt;br /&gt;1000ms/(19ms+180ms)≈5.025。&lt;/p&gt;    &lt;p&gt;所以得出单线程的QPS公式：&lt;/p&gt;    &lt;p&gt;&lt;/p&gt;    &lt;div&gt;\[单线程QPS = 1000ms/RT
\]&lt;/div&gt;    &lt;p&gt;&lt;/p&gt;    &lt;h3&gt;最佳线程数&lt;/h3&gt;    &lt;p&gt;还是上面的那个话题 （CPU Time 为 19ms ，Wait Time 是 180ms ），假设CPU的核数1。假设只有一个线程，这个线程在执行某个请求的时候，CPU真正花在该线程上的时间就是CPU Time，可以看做19ms，那么在整个RT的生命周期中，还有 180ms 的 Wait Time，CPU在做什么呢？抛开系统层面的问题（这里不考虑什么时间片轮循、上下文切换等等），可以认为CPU在这180ms里没做什么，至少对于当前的业务来说，确实没做什么。&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;一核的情况        &lt;br /&gt;由于每个请求的接收，CPU只需要工作19ms，所以在180ms的时间内，可以认为系统还可以额外接收180ms/19ms≈9个的请求。由于在同步模型中，一个请求需要一个线程来处理，因此，我们需要额外的9个线程来处理这些请求。这样，总的线程数就是：&lt;/li&gt;&lt;/ul&gt;    &lt;p&gt;&lt;/p&gt;    &lt;div&gt;\[（180ms + 19ms）/19ms ≈ 10个
\]&lt;/div&gt;    &lt;p&gt;&lt;/p&gt;    &lt;p&gt;        多线程之后，CPU Time从19ms变成了20ms，这1ms的差值代表多线程之后上下文切换、GC带来的额外开销（对于我们java来说是jvm，其他语言另外计算），这里的1ms只是代表一个概述，你也可以把它看做n。&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;        &lt;p&gt;两核的情况          &lt;br /&gt;一核的情况下可以有10个线程，那么两核呢？在理想的情况下，可以认为最佳线程数为：2 x ( 180ms + 20ms )/20ms = 20个&lt;/p&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;CPU利用率          &lt;br /&gt;我们之前说的都是CPU满载下的情况，有时候由于某个瓶颈，导致CPU不得不有效利用，比如两核的CPU，因为某个资源，只能各自使用一半的能效，这样总的CPU利用率就变成了50%，再这样的情况下，最佳线程数应该是：50% x 2 x( 180ms + 20ms )/20ms = 10个          &lt;br /&gt;这个等式转换成公式就是：最佳线程数 = (RT/CPU Time) x CPU 核数 x CPU利用率          &lt;br /&gt;当然，这不是随便推测的，在收集到的很多的一些著作或者论坛的文档里都有这样的一些实验去论述这个公式或者这个说法是正确的。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;    &lt;h3&gt;最大QPS&lt;/h3&gt;    &lt;h4&gt;1.最大QPS公式推导&lt;/h4&gt;    &lt;p&gt;假设我们知道了最佳线程数，同时我们还知道每个线程的QPS，那么线程数乘以每个线程的QPS既这台机器在最佳线程数下的QPS。所以我们可以得到下图的推算。&lt;/p&gt;    &lt;p&gt;      &lt;img alt="image" src="https://summer-blog-images.oss-cn-shanghai.aliyuncs.com/qps_optimization/image_001.png"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;我们可以把分子和分母去约数，如下图。&lt;/p&gt;    &lt;p&gt;      &lt;img alt="image" src="https://summer-blog-images.oss-cn-shanghai.aliyuncs.com/qps_optimization/image_002.png"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;于是简化后的公式如下图.&lt;/p&gt;    &lt;p&gt;      &lt;img alt="image" src="https://summer-blog-images.oss-cn-shanghai.aliyuncs.com/qps_optimization/image_003.png"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;从公式可以看出，决定QPS的时CPU Time、CPU核数和CPU利用率。CPU核数是由硬件做决定的，很难操纵，但是CPU Time和CPU利用率与我们的代码息息相关。&lt;/p&gt;    &lt;p&gt;虽然宏观上是正确的，但是推算的过程中还是有一点小小的不完美，因为多线程下的CPU Time（比如高并发下的GC次数增加消耗更多的CPU Time、线程上下文切换等等）和单线程的CPU Time是不一样的，所以会导致推算出来的结果有误差。&lt;/p&gt;    &lt;p&gt;尤其是在同步模型下的相同业务逻辑中，单线程时的CPU Time肯定会比大量多线程的CPU Time小，但是对于异步模型来说，切换的开销会变得小很多，为什么？这里先卖个葫芦吧，看完本篇就知道了。&lt;/p&gt;    &lt;p&gt;既然决定QPS的是CPU Time和CPU核数，那么这两个因子又是由谁来决定的呢？（越看越懵哈）&lt;/p&gt;    &lt;h4&gt;2.CPU Time&lt;/h4&gt;    &lt;p&gt;终于讲到了 CPU Time，CPU Time不只是业务逻辑所消耗的CPU时间，而是一次请求中所有环节上消耗的CPU时间之和。比如在web应用中，一个请求过来的HTTP的解析所消耗的CPU时间，是CPU Time的一部分。另外，这个请求中请求RPC的encode和decode所消耗的CPU时间也是CPU Time的一部分。&lt;/p&gt;    &lt;p&gt;那么CPU Time是由哪些因素决定的呢？两个关键字：数据结构+算法。      &lt;br /&gt;举一些例子吧&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;均摊问题&lt;/li&gt;      &lt;li&gt;hash问题&lt;/li&gt;      &lt;li&gt;排序和查找问题&lt;/li&gt;      &lt;li&gt;状态机问题&lt;/li&gt;      &lt;li&gt;序列化问题&lt;/li&gt;&lt;/ul&gt;    &lt;h4&gt;3.CPU利用率&lt;/h4&gt;    &lt;p&gt;CPU利用率不高的情况时常发生，一下因素都会影响CPU的利用率，从而影响系统可以支持的最大QPS。&lt;/p&gt;    &lt;h5&gt;1) IO能力&lt;/h5&gt;    &lt;ul&gt;      &lt;li&gt;磁盘IO&lt;/li&gt;      &lt;li&gt;网络IO        &lt;br /&gt;·带宽，比如某大促压力测试时，由于某个应用放在Tair中的数据量大，导致Tair的机器网卡跑满。        &lt;br /&gt;·网路链路，还是这次大促，借用了其他核心交换机下的机器，导致客户端RT明显增加。&lt;/li&gt;&lt;/ul&gt;    &lt;h5&gt;2) 数据库连接池（并发能力=PoolWaitTime/RT(Client) x PoolSize）。&lt;/h5&gt;    &lt;h5&gt;3) 内存不足，GC大量占用CPU，导致给业务逻辑使用的CPU利用率下降，而且GC时还满足Amdahl定律锁定义的场景。&lt;/h5&gt;    &lt;h5&gt;4) 共享资源的竞争，比如各种锁策略(读写锁、锁分离等)，各种阻塞队列，等等。&lt;/h5&gt;    &lt;h5&gt;5) 所依赖的其他后端服务QPS低造成的瓶颈。&lt;/h5&gt;    &lt;h5&gt;6) 线程数或者进程数，甚至编程模型(同步模型，异步模型)。&lt;/h5&gt;    &lt;p&gt;在压力测试过程中，出现最多的就是网络IO层面的问题，GC大量占用CPU Time之类的问题也经常出现。&lt;/p&gt;    &lt;h4&gt;4.CPU核数，Amdahl定律，Gustafson定律&lt;/h4&gt;    &lt;h5&gt;1)Amdahl定律(安达尔定律，不是达尔文定律！！！)&lt;/h5&gt;    &lt;p&gt;Amdahl定律是用来描述可伸缩性的，什么是可伸缩性？说白了就是比如增加计算机资源，如CPU、内存、宽带等，QPS能够相应的进行改进。&lt;/p&gt;    &lt;p&gt;既然Amdahl定律是描述可伸缩性的，那它是如何描述的呢？&lt;/p&gt;    &lt;p&gt;Amdahl在自己的论文中指出，可伸缩性是指在一个系统中，基于可并行化和串行化的组件各自所占的比例，当程序获得额外的计算资源(如CPU或者内存等)时，系统理论上能够获得的加速值(QPS或者其他指标可以翻几倍)。用一个公式来表达，如果F表示必须串行化执行的比例，那么在一个N核处理器的机器中，加速：&lt;/p&gt;    &lt;p&gt;&lt;/p&gt;    &lt;div&gt;\[Speedup \leq \frac{1}{F+\frac{1-F}{N}}
\]&lt;/div&gt;    &lt;p&gt;&lt;/p&gt;    &lt;p&gt;这个公式代表的意义是比较广泛的，在项目管理中也有一句类似的话：&lt;/p&gt;    &lt;p&gt;一个女人生一个孩子要9个月，但是永远不可能让9个女人在一个月内就生一个孩子。      &lt;br /&gt;我们根据这个例子套一个公式先，这里设F=100%，9个女人表示N=9，于是就有1/(100%+(1-100%)/9)=1，所以9个女人的加速比为1，等于没有加速。&lt;/p&gt;    &lt;p&gt;到这里，其实这个公式还只是描述了在增加资源的情况下系统的加速比，而不是在资源不变的情况下优化数据结构和算法之后带来的提升。优化数据结构和算法带来的提升要看前文中最大的QPS公式。不过这两个公式也不是完全没有联系的，在增加资源的情况下，它们的联系还是比较紧密的。&lt;/p&gt;    &lt;h5&gt;2) Gustafson定律（古斯塔夫森定律）&lt;/h5&gt;    &lt;p&gt;这个定律名字有点长，但这不是关键，关键的是，它是Amdahl定律的补充，公式为：&lt;/p&gt;    &lt;p&gt;&lt;/p&gt;    &lt;div&gt;\[S(P) = P-α·(P-1)
\]&lt;/div&gt;    &lt;p&gt;&lt;/p&gt;    &lt;p&gt;P是处理器的个数，α是串行时间占总执行时间的比例。      &lt;br /&gt;生孩子的案例再次套上这个公式，P为女人的个数，等于9，串行比例是100%。Speedup=9-100%x(9-1)=1，也就是9个女人是无法在一个月内把孩子生出来的……&lt;/p&gt;    &lt;p&gt;之所以说是Amdahl定律的补充，是因为两个定律的关系是相辅相成的关系。前者从串行和并行执行时间的角度来推导，后者从串行和并行的计算量角度来推导，不管是哪个角度，最终的结果其实是一样的。&lt;/p&gt;    &lt;h5&gt;3)CPU核数和Amdahl定律的关系&lt;/h5&gt;    &lt;p&gt;通过最大QPS公式，我们发现，在CPU Time和CPU利用率不变的情况下，核数越多，QPS就越大。比如核数从1到4，在CPU Time和CPU利用率不变的情况下，加速比应该是4，所以QPS应该也是增加4倍。&lt;/p&gt;    &lt;p&gt;这是资源增加（CPU核数增加）的情况下的加速比，也可以通过Amdahl定律来衡量，考虑串行和并行的比例在增加资源的情况下是否会改变。也就是要考虑在N增加的情况下，F受哪些因素的影响：&lt;/p&gt;    &lt;p&gt;&lt;/p&gt;    &lt;div&gt;\[Speedup \leq \frac{1}{F+\frac{1-F}{N}}
\]&lt;/div&gt;    &lt;p&gt;&lt;/p&gt;    &lt;p&gt;只要F大于0，最大QPS就不会翻4倍。      &lt;br /&gt;      &lt;br /&gt;一个公式说要增加4被倍，一个定理说 没有4倍，互相矛盾？      &lt;br /&gt;      &lt;br /&gt;其实事情是这样的，通过最大QPS公式，我们可以发现，如果CPU Time和CPU 利用率不变，核数从1增加到4，QPS会相应的增加4倍。但是在实际情况下，当核数增加时，CPU Time和CPU 利用率大部分时候是变化的，所以前面的假设不成立，即一般场景下QPS不能增加4倍。&lt;/p&gt;    &lt;p&gt;而Amdahl定律中的N变化时，F也可能会变化，即一般场景下，最大QPS并不能增加4被，所以这其实并不矛盾。相反它们是相辅相成的。这里一定要注意，这里说的是一般场景，如果你的场景完全没有串行（程序没有串行，系统没有串行，上下文切换没有串行，什么串行都没有），那么理论上是可以增加4倍的。&lt;/p&gt;    &lt;p&gt;为什么增加计算机资源时，最大QPS公式中的CPU Time和CPU利用率会变化，F也会变化呢？我们可以从宏观上分析一下，增加计算机资源时，达到满载:&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;        &lt;p&gt;QPS会更高，单位时间内产生的对象会更多。在同等条件下，minor GC被触发的次数增加，还有些场景发生过对象多到响应没返回它们就进了“老年代”，从而fullGC被触发。宏观上，这是属于串行的部分，对于Amdahl公式来说F会受到影响，对于最大QPS公式来说，CPU Time和CPU利用率也受到影响.&lt;/p&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;在同步模型下大量的线程在完成一次请求中，上下文被切换的次数大大增加。&lt;/p&gt;&lt;/li&gt;      &lt;li&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;尤其是在有 串行模块的时候，串行的执行和等待时间增加，F会变化，某些场景下CPU          &lt;br /&gt;利用率也达不到理想效果，这取决于你的代码。这也是要做锁分离、为什么要缩小同步          &lt;br /&gt;块的原因。当然还有锁自身的优化，比如偏向、自旋、读写分离等技术，都是为了不断          &lt;br /&gt;地减少Amdahl定律中的F，也是为了减少CPU Time ( 锁本身的优化)，提高CPU利          &lt;br /&gt;用率(使用锁的方法的优化)。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;    &lt;p&gt;。锁本身的优化最为津津乐道的是自旋、偏向、自适应，synchronized分析，还有reetrantLock的代码及AQS等等。&lt;/p&gt;    &lt;p&gt;。使用锁的优化方法最常见的是缩小锁区间、锁分离、无锁化、volatile。&lt;/p&gt;    &lt;p&gt;所以在增加计算资源时，更高的并发产生，会引起最大QPS公式中两个参数的变化，也会      &lt;br /&gt;引起Amdahl定律中F值的变化，同时公式和定律变化的趋势是相同的。Amdahl定律是得到广      &lt;br /&gt;泛认可的，也是得到数据验证的。最大QPS公式好像没有人验证过，这里引用一个比较有名的      &lt;br /&gt;测试结果，如下图.&lt;/p&gt;    &lt;p&gt;      &lt;img alt="image" src="https://summer-blog-images.oss-cn-shanghai.aliyuncs.com/qps_optimization/image_005.png"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;当计算资源(处理器数量)增加时，在串行部分比例不变的情况下，CPU利用率下降。&lt;/li&gt;      &lt;li&gt;当计算资源(处理器数量)增加时，串行占的比例越大，CPU利用率下降得越多。&lt;/li&gt;&lt;/ul&gt;    &lt;h3&gt;实验数据验证公式&lt;/h3&gt;    &lt;p&gt;所以其实到现在我们一直在说理论，带了一点点的公式，听起来好像是那么回事，但是公式到底怎么用？准不准确？可以精准测试还是概要测试即可？&lt;/p&gt;    &lt;p&gt;我们接下来实验一下吧。&lt;/p&gt;    &lt;p&gt;!!! 接下来会涉及到CPU Time 包含了操作系统对CPU的消耗，比如进程，线程调度等。&lt;/p&gt;    &lt;h4&gt;1.数据准备&lt;/h4&gt;    &lt;p&gt;这里就用之前的一个电商活动页面的优化来说吧，在这个过程中，我们做了大量测试，由于测试中使用了localhost方式，所以Java进程在IO上的Wait Time是非常小的。接下来，由于最佳线程数接近CPU核数,      &lt;br /&gt;所以在两核的机器上使用了10个Java进程，客户端发起了10个并发请求,这是在最佳线程数下(最佳线程数在一个区间里，在这个区间里QPS总体变化不大,并且也用了5、15个并发测试效果，发现QPS值基本相同)得出的大量结果，接下来就分析一下这些测试结果，见下表。&lt;/p&gt;    &lt;h5&gt;1)测试QPS结果&lt;/h5&gt;    &lt;table&gt;      &lt;tr&gt;        &lt;th&gt;原始页面大小&lt;/th&gt;        &lt;th&gt;压缩后的大小&lt;/th&gt;        &lt;th&gt;优化前QPS&lt;/th&gt;        &lt;th&gt;优化后QPS&lt;/th&gt;        &lt;th&gt;优化前RT&lt;/th&gt;        &lt;th&gt;优化后RT&lt;/th&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;92kb&lt;/td&gt;        &lt;td&gt;17kb&lt;/td&gt;        &lt;td&gt;164&lt;/td&gt;        &lt;td&gt;2024&lt;/td&gt;        &lt;td&gt;60.7ms&lt;/td&gt;        &lt;td&gt;4.9ms&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;138kb&lt;/td&gt;        &lt;td&gt;8.7kb&lt;/td&gt;        &lt;td&gt;143&lt;/td&gt;        &lt;td&gt;1859&lt;/td&gt;        &lt;td&gt;69.8ms&lt;/td&gt;        &lt;td&gt;3.3ms&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;182kb&lt;/td&gt;        &lt;td&gt;11.4kb&lt;/td&gt;        &lt;td&gt;121&lt;/td&gt;        &lt;td&gt;2083&lt;/td&gt;        &lt;td&gt;82.3ms&lt;/td&gt;        &lt;td&gt;4.8ms&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;248kb&lt;/td&gt;        &lt;td&gt;32kb&lt;/td&gt;        &lt;td&gt;77&lt;/td&gt;        &lt;td&gt;1977&lt;/td&gt;        &lt;td&gt;129.6ms&lt;/td&gt;        &lt;td&gt;5.0ms&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;295kb&lt;/td&gt;        &lt;td&gt;34.4kb&lt;/td&gt;        &lt;td&gt;70&lt;/td&gt;        &lt;td&gt;1722&lt;/td&gt;        &lt;td&gt;141.1ms&lt;/td&gt;        &lt;td&gt;5.8ms&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;    &lt;p&gt;      &lt;strong&gt;我们其实只要关注各项优化前后的QPS变化即可。&lt;/strong&gt;&lt;/p&gt;    &lt;h5&gt;2） CPU利用率&lt;/h5&gt;    &lt;p&gt;由于Apache Bench和Java部署在同一台机器.上，所以CPU利用率应该减去Apache Bench      &lt;br /&gt;的CPU资源消耗。根据观察，优化前Apache Bench 的CPU消耗在1.7%到2%之间，优化后      &lt;br /&gt;Apache Bench 的CPU资源消耗在20%左右。为什么优化前后有这么大的差距呢?因为优化后      &lt;br /&gt;响应能够及时返回，所以导致Apache Bench使用的CPU资源多了。&lt;/p&gt;    &lt;p&gt;在接下来的计算中，我们将优化前的CPU利用率设置为98%，优化后的CPU利用率设置为80%。&lt;/p&gt;    &lt;h5&gt;3）CPU Time 计算公式&lt;/h5&gt;    &lt;p&gt;根据QPS的计算方法，把QPS挪到右边的分母中，CPU  Time移到等号左边，就会得到下图的公式。&lt;/p&gt;    &lt;p&gt;      &lt;img alt="image" src="https://summer-blog-images.oss-cn-shanghai.aliyuncs.com/qps_optimization/image_004.png"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;h5&gt;4) CPU Time计算示例&lt;/h5&gt;    &lt;p&gt;根据上方列出的三点（CPU利用率、QPS和CPU核数），接下里我们就详细的描述一下推算方法了。&lt;/p&gt;    &lt;h4&gt;计算得到的CPU Time&lt;/h4&gt;    &lt;p&gt;根据上方的表格计算方法，利用QPS计算出各页面理论上的CPU Time，计算后的结果如下表：&lt;/p&gt;    &lt;table&gt;      &lt;tr&gt;        &lt;th&gt;原始页面92kb&lt;/th&gt;        &lt;th&gt;计算公式&lt;/th&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;优化前CPU Time计算&lt;/td&gt;        &lt;td&gt;1000 / 164 x 2 x 0.98 = 12ms&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;优化后CPU Time计算&lt;/td&gt;        &lt;td&gt;1000 / 2024 x 2 x 0.8 = 0.8ms&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;    &lt;p&gt;      &lt;br /&gt;      &lt;br /&gt;&lt;/p&gt;    &lt;table&gt;      &lt;tr&gt;        &lt;th&gt;原始页面大小&lt;/th&gt;        &lt;th&gt;压缩后的大小&lt;/th&gt;        &lt;th&gt;优化前QPS&lt;/th&gt;        &lt;th&gt;优化后QPS&lt;/th&gt;        &lt;th&gt;优化前CPU Time&lt;/th&gt;        &lt;th&gt;优化后CPU Time&lt;/th&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;92kb&lt;/td&gt;        &lt;td&gt;17kb&lt;/td&gt;        &lt;td&gt;164&lt;/td&gt;        &lt;td&gt;2024&lt;/td&gt;        &lt;td&gt;12ms&lt;/td&gt;        &lt;td&gt;0.8ms&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;138kb&lt;/td&gt;        &lt;td&gt;8.7kb&lt;/td&gt;        &lt;td&gt;143&lt;/td&gt;        &lt;td&gt;1859&lt;/td&gt;        &lt;td&gt;13.7ms&lt;/td&gt;        &lt;td&gt;0.86ms&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;182kb&lt;/td&gt;        &lt;td&gt;11.4kb&lt;/td&gt;        &lt;td&gt;121&lt;/td&gt;        &lt;td&gt;2083&lt;/td&gt;        &lt;td&gt;16.2ms&lt;/td&gt;        &lt;td&gt;0.77ms&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;248kb&lt;/td&gt;        &lt;td&gt;32kb&lt;/td&gt;        &lt;td&gt;77&lt;/td&gt;        &lt;td&gt;1977&lt;/td&gt;        &lt;td&gt;25.5ms&lt;/td&gt;        &lt;td&gt;0.81ms&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;295kb&lt;/td&gt;        &lt;td&gt;34.4kb&lt;/td&gt;        &lt;td&gt;70&lt;/td&gt;        &lt;td&gt;1722&lt;/td&gt;        &lt;td&gt;28ms&lt;/td&gt;        &lt;td&gt;0.93ms&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;    &lt;p&gt;这里主要看一下各项的CPU Time优化前后的变化，接下来，我们把两个值做减法，然后和开篇中提到过的实测程序中Gzip的CPU Time进行对比。&lt;/p&gt;    &lt;h4&gt;实测CPU Time&lt;/h4&gt;    &lt;h5&gt;1） 5个页面的Gzip所消耗的CPU Time&lt;/h5&gt;    &lt;p&gt;实测5个页面做Gzip所消耗的时间，然后跟公式计算出来的CPU Time做一个对比，如下表：&lt;/p&gt;    &lt;table&gt;      &lt;tr&gt;        &lt;th&gt;原始页面大小&lt;/th&gt;        &lt;th&gt;CPU Time公式差值(上表的CPU Time差值)&lt;/th&gt;        &lt;th&gt;Gzip CPU Time测量值(10次平均值)&lt;/th&gt;        &lt;th&gt;差值&lt;/th&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;92kb&lt;/td&gt;        &lt;td&gt;11.2ms&lt;/td&gt;        &lt;td&gt;8ms&lt;/td&gt;        &lt;td&gt;3.2ms&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;138kb&lt;/td&gt;        &lt;td&gt;12.8ms&lt;/td&gt;        &lt;td&gt;7ms&lt;/td&gt;        &lt;td&gt;5.8ms&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;182kb&lt;/td&gt;        &lt;td&gt;15.4ms&lt;/td&gt;        &lt;td&gt;9ms&lt;/td&gt;        &lt;td&gt;6.4ms&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;248kb&lt;/td&gt;        &lt;td&gt;24.7ms&lt;/td&gt;        &lt;td&gt;21ms&lt;/td&gt;        &lt;td&gt;3.0ms&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;295kb&lt;/td&gt;        &lt;td&gt;27.1ms&lt;/td&gt;        &lt;td&gt;23ms&lt;/td&gt;        &lt;td&gt;4.1ms&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;    &lt;p&gt;可以看到，计算出来的CPU Time值要比测出来的要多一点，多了几毫秒，这是为什么呢?      &lt;br /&gt;      &lt;br /&gt;      &lt;br /&gt;其实是因为在优化前，有两个消耗CPU Time的阶段，一个是执行Java代码时，另一个是执行Gzip时。而优化后，整个逻辑变成了从缓存获取数据后直接返回，只有非常少的Java代码在消耗CPU Time(10行以内)。&lt;/p&gt;    &lt;h5&gt;2） Java页面执行消耗的CPU Time&lt;/h5&gt;    &lt;p&gt;大体上可以认为：&lt;/p&gt;    &lt;p&gt;优化前的CPU Time - 优化后的CPU Time = Gzip CPU Time + 全页面Java代码的CPU Time&lt;/p&gt;    &lt;p&gt;在实验中，一开始只统计了 Gzip 本身的消耗，而在 Java 文件中 Java代码执行的时间并没有包含在内，所以两者差距比较大。于是，我们单独统计了5个页面的Java代码的执行时间，发现文件中Java码执行的时间为3~6ms。实际测量的Gzip CPU Time 加上3~6ms的Java代码执行时间，和使用公式计算出来的CPUTime基本吻合。&lt;/p&gt;    &lt;p&gt;根据上面的计算和测量结果，我们发现 Gzip 的  CPU Time消耗加上Java代码的CPU Time消耗，与公式测量出来的总的CPU Time消耗非常接近，误差为1~2ms。考虑到CPU Time测量是单线程测量，而压力测试QPS是并发情况下(会多出进程切换的开销和GC等的开销)，我们认为这点误差是合理的，测试结果说明公式在宏观上是正确的。&lt;/p&gt;    &lt;h3&gt;压力测试最佳线程数和QPS临界点&lt;/h3&gt;    &lt;p&gt;前面讲到了公式的推导，并在一个固定的条件下验证了公式在该场景下的正确性。&lt;/p&gt;    &lt;p&gt;假设在一个thread-per-client的场景，有一一个Ajax请求，这个请求返回一个Json字符串，每个请求的CPU Time为1ms，WaitTime为300ms(比如读写Socket和线程调度的等待开销)。那么最佳线程数是&lt;/p&gt;    &lt;p&gt;&lt;/p&gt;    &lt;div&gt;\[(300+1/1 )x4x 100%=1204
\]&lt;/div&gt;    &lt;p&gt;&lt;/p&gt;    &lt;p&gt;尤其在广域网上，Wait Time=300ms是正常的数值。在国际环境下，300ms就更加常见了。这意味着如果是4核的机器，需要1204个线程，如果是8核的机器则需要2408个线程。实际上，有些HTTP服务的CPU Time是远小于1ms的，比如上面的场景中将页面压缩并缓存起来之后,CPU Time基本为0.8ms,如果WaitTime还是300ms,那么需要数以千计的线程啊!当线程数不断增加的时候，到达某个临界点之后对系统就开始产生负面影响了。&lt;/p&gt;    &lt;p&gt;(1) 大量线程上下文切换的开销，引起CPU Time的增加及QPS的减少。所以，有时候还没有达到最佳线程数，而QPS已经开始略微下降了。因为CPU Time发生变化、线程多了之后，调度引起的CPU Time提升的百分比和QPS下降的百分比成正比(上方的QPS公式)，上下文切换带来的开销如下。&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;上下文切换(微妙级别)&lt;/li&gt;      &lt;li&gt;JVM本身的开销&lt;/li&gt;      &lt;li&gt;CPU Cache加载&lt;/li&gt;&lt;/ul&gt;    &lt;p&gt;(2)线程的栈空间会占用大量的内存，假设每个线程的栈空间是1MB，这么多的线程就要占用数GB的内存。&lt;/p&gt;    &lt;p&gt;(3)在CPU Time不变的情况下，因为线程上下文切换和操作系统想尽力为线程在宏观上平均分配时间片的行为，导致每个线程的Wait Time都增加了，于是每个请求的RT也增加了，最终就会产生用户体验下降的情况。&lt;/p&gt;    &lt;p&gt;可以 用一张图来表示一下临界点的概念。&lt;/p&gt;    &lt;p&gt;      &lt;img alt="image" src="https://summer-blog-images.oss-cn-shanghai.aliyuncs.com/qps_optimization/image_006.png"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;由于线程数增加超过某个临界点会影响CPU Time、QPS和RT，所以很难精确测量高并发下的CPU Time,它随着机器硬件、操作系统、线程数等因素不断变化。我们能做的就是压力测试QPS，并在压力测试的过程中调整线程数，使QPS达到临界点，这个临界点是QPS的一个峰值点。这个峰值点的线程数即当前系统的最佳线程数，当然如果这个时候CPU利用率没有达到100%，那么证明系统中可能存在瓶颈，应该在找到并处理瓶颈之后继续压力测试，并且重新找到这个临界点。&lt;/p&gt;    &lt;p&gt;当数据结构发生改变、算法改进或者业务逻辑发生改变时，最佳线程数有可能会跟着变化。&lt;/p&gt;    &lt;h3&gt;总结：&lt;/h3&gt;    &lt;p&gt;这篇 blog的例子中，在CPU Time下降到1ms左右而Wait Time需要数百毫秒的场景下，我们需要很多线程。但是当达到这个线程数的时候，有可能早就达到了临界点。所以系统整体已经不是最健康的状态了，但是现有的编程模型已经阻碍了我们前进，那么应该怎么办呢?为使某个系统达到最优状态?&lt;/p&gt;    &lt;p&gt;所以下一篇blog我们来说一下编程中的同步模型和异步模型问题，以及为什么异步模型只需要这么少的线程，是不是公式在异步模型下失效了。&lt;/p&gt;    &lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;    &lt;p&gt;我的个人站点      &lt;br /&gt;SUMMER      &lt;a href="https://www.huangyingsheng.com/about" rel="noopener" target="_blank"&gt;https://www.huangyingsheng.com/about&lt;/a&gt;&lt;/p&gt;    &lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;    &lt;br /&gt;&lt;/div&gt;
    &lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/62539-%E6%9C%8D%E5%8A%A1-%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96-qps</guid>
      <pubDate>Mon, 12 Dec 2022 15:48:36 CST</pubDate>
    </item>
    <item>
      <title>Linux丢包故障的解决与思路 - Albert的博客 | Albert's Blog</title>
      <link>https://itindex.net/detail/62474-linux-%E4%B8%A2%E5%8C%85-albert</link>
      <description>&lt;div&gt;    &lt;h1&gt;Linux丢包故障的解决与思路&lt;/h1&gt;    &lt;h2&gt;前言&lt;/h2&gt;    &lt;p&gt;​		本文为大部分内容是转载:      &lt;a href="https://www.sdnlab.com/17530.html?sukey=3997c0719f151520fe14b6d2b703c7ea3889a1f21e7fc199d455cf8cdf7053345d52740536b2c1038eedca9ed28382f6"&gt;原文地址&lt;/a&gt;，和之前一样，在原文的基础上进行了一些格式的调整，包括一些错别字的修正，以及进行了一些博文链接的插入，以便于读者或者我自己更好的理解。&lt;/p&gt;    &lt;p&gt;​		我们使用      &lt;code&gt;Linux&lt;/code&gt;作为服务器操作系统时，为了达到高并发处理能力，充分利用机器性能，经常会进行一些内核参数的调整优化，但不合理的调整常常也会引起意想不到的其他问题，本文就一次      &lt;code&gt;Linux&lt;/code&gt;服务器丢包故障的处理过程，结合      &lt;code&gt;Linux&lt;/code&gt;内核参数说明和      &lt;code&gt;TCP/IP&lt;/code&gt;协议栈相关的理论，介绍一些常见的丢包故障定位方法和解决思路。&lt;/p&gt;    &lt;p&gt;​	    在开始之前，我们先用一张图解释 linux 系统接收网络报文的过程。&lt;/p&gt;    &lt;blockquote&gt;      &lt;ol&gt;        &lt;li&gt;首先网络报文通过物理网线发送到网卡&lt;/li&gt;        &lt;li&gt;网络驱动程序会把网络中的报文读出来放到 ring buffer 中，这个过程使用 DMA（Direct Memory Access），这个过程不需要 CPU 参与&lt;/li&gt;        &lt;li&gt;内核从 ring buffer 中读取报文进行处理，执行 IP 和 TCP/UDP 层的逻辑，最后把报文放到应用程序的 socket buffer 中&lt;/li&gt;        &lt;li&gt;应用程序从 socket buffer 中读取报文进行处理&lt;/li&gt;&lt;/ol&gt;&lt;/blockquote&gt;    &lt;p&gt;      &lt;img alt="image1" src="https://gitee.com/cclinuxer/blog_image/raw/master/image/1.jpg"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;​		在接收 UDP 报文的过程中，图中任何一个过程都可能会主动或者被动地把报文丢弃，因此丢包可能发生在网卡和驱动，也可能发生在系统和应用。之所以没有分析发送数据流程，一是因为发送流程和接收类似，只是方向相反；另外发送流程报文丢失的概率比接收小，只有在应用程序发送的报文速率大于内核和网卡处理速率时才会发生。本篇文章假定机器只有一个名字为 eth0 的 interface，如果有多个 interface 或者 interface 的名字不是 eth0，请按照实际情况进行分析。&lt;/p&gt;    &lt;p&gt;      &lt;code&gt;NOTE：文中出现的 RX（receive） 表示接收报文，TX（transmit） 表示发送报文。&lt;/code&gt;&lt;/p&gt;    &lt;h2&gt;一、问题现象&lt;/h2&gt;    &lt;p&gt;​			本次故障的反馈现象是：从办公网访问公网服务器不稳定，服务器某些端口访问经常超时，但      &lt;code&gt;Ping&lt;/code&gt;测试显示客户端与服务器的链路始终是稳定低延迟的。通过在服务器端抓包，发现还有几个特点：&lt;/p&gt;    &lt;blockquote&gt;      &lt;ul&gt;        &lt;li&gt;从办公网访问服务器有多个客户端，是同一个出口IP，有少部分是始终能够稳定连接的，另一部分间歇访问超时或延迟很高&lt;/li&gt;        &lt;li&gt;同一时刻的访问，无论哪个客户端的数据包先到达，服务端会及时处理部分客户端的SYN请求，对另一部分客户端的SYN包“视而不见”，如tcpdump数据所示，源端口为56909的SYN请求没有得到响应，同一时间源端口为50212的另一客户端SYN请求马上得到响应。&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;    &lt;div&gt;      &lt;div&gt;        &lt;pre&gt;          &lt;code&gt;$ sudo tcpdump -i eth0 port 22 and &amp;quot;tcp[tcpflags] &amp;amp; (tcp-syn) != 0&amp;quot;
18:56:37.404603 IP CLIENT.56909 &amp;gt; SERVER.22: Flags [S], seq 1190606850, win 29200, options [mss 1448,sackOK,TS val 198321481 ecr 0,nop,wscale 7], length 0
18:56:38.404582 IP CLIENT.56909 &amp;gt; SERVER.22: Flags [S], seq 1190606850, win 29200, options [mss 1448,sackOK,TS val 198321731 ecr 0,nop,wscale 7], length 0
18:56:40.407289 IP CLIENT.56909 &amp;gt; SERVER.22: Flags [S], seq 1190606850, win 29200, options [mss 1448,sackOK,TS val 198322232 ecr 0,nop,wscale 7], length 0
18:56:44.416108 IP CLIENT.56909 &amp;gt; SERVER.22: Flags [S], seq 1190606850, win 29200, options [mss 1448,sackOK,TS val 198323234 ecr 0,nop,wscale 7], length 0
18:56:45.100033 IP CLIENT.50212 &amp;gt; SERVER.22: Flags [S], seq 4207350463, win 65535, options [mss 1366,nop,wscale 5,nop,nop,TS val 821068631 ecr 0,sackOK,eol], length 0
18:56:45.100110 IP SERVER.22 &amp;gt; CLIENT.50212: Flags [S.], seq 1281140899, ack 4207350464, win 27960, options [mss 1410,sackOK,TS val 1709997543 ecr 821068631,nop,wscale 7], length 0
18:56:52.439086 IP CLIENT.56909 &amp;gt; SERVER.22: Flags [S], seq 1190606850, win 29200, options [mss 1448,sackOK,TS val 198325240 ecr 0,nop,wscale 7], length 0
18:57:08.472825 IP CLIENT.56909 &amp;gt; SERVER.22: Flags [S], seq 1190606850, win 29200, options [mss 1448,sackOK,TS val 198329248 ecr 0,nop,wscale 7], length 0
18:57:40.535621 IP CLIENT.56909 &amp;gt; SERVER.22: Flags [S], seq 1190606850, win 29200, options [mss 1448,sackOK,TS val 198337264 ecr 0,nop,wscale 7], length 0
18:57:40.535698 IP SERVER.22 &amp;gt; CLIENT.56909: Flags [S.], seq 3621462255, ack 1190606851, win 27960, options [mss 1410,sackOK,TS val 1710011402ecr 198337264,nop,wscale 7], length 0&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;    &lt;p&gt;​			如果能排除网卡或者驱动丢包可能的话，      &lt;code&gt;linux&lt;/code&gt;系统丢包的原因相对就很多，常见的有：      &lt;code&gt;UDP&lt;/code&gt;报文错误、防火墙、      &lt;code&gt;UDP buffer size&lt;/code&gt;不足、系统负载过高等，这里对这些丢包原因进行分析。&lt;/p&gt;    &lt;h2&gt;二、名词解释&lt;/h2&gt;    &lt;div&gt;      &lt;div&gt;        &lt;pre&gt;          &lt;code&gt;# ifconfig em2
em2       Link encap:Ethernet  HWaddr AC::3D:A9::0D
          inet addr:211.211.211.211  Bcast:211.211.211.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:  Metric:
          RX packets: errors: dropped: overruns: frame:
          TX packets: errors: dropped: overruns: carrier:
          collisions: txqueuelen:
          RX bytes: ( (1.3 TiB)
          Memory:94b00000-94b20000&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;    &lt;ul&gt;      &lt;li&gt;        &lt;p&gt;          &lt;code&gt;RX errors&lt;/code&gt;: 表示总的收包的错误数量，这包括 too-long-frames 错误，Ring Buffer 溢出错误，crc 校验错误，帧同步错误，fifo overruns 以及 missed pkg 等等。&lt;/p&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;          &lt;code&gt;RX dropped&lt;/code&gt;: 表示数据包已经进入了 Ring Buffer，但是由于          &lt;strong&gt;内存不够&lt;/strong&gt;等系统原因，导致在拷贝到内存的过程中被丢弃。&lt;/p&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;RX          &lt;code&gt;overruns&lt;/code&gt;: 表示了 fifo 的          &lt;code&gt;overruns&lt;/code&gt;，这是由于 Ring Buffer(aka Driver Queue) 传输的 IO 大于 kernel 能够处理的 IO 导致的，而 Ring Buffer 则是指在发起 IRQ 请求之前的那块 buffer。很明显，overruns 的增大意味着数据包没到 Ring Buffer 就被网卡物理层给丢弃了，而 CPU 无法即使的处理中断是造成 Ring Buffer 满的原因之一，上面那台有问题的机器就是因为          &lt;code&gt;interruprs&lt;/code&gt;分布的不均匀(都压在 core0)，没有做          &lt;code&gt;affinity&lt;/code&gt;而造成的丢包。&lt;/p&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;          &lt;code&gt;RX frame&lt;/code&gt;: 表示          &lt;code&gt;misaligned&lt;/code&gt;的          &lt;code&gt;frames&lt;/code&gt;&lt;/p&gt;        &lt;p&gt;对于 TX 的来说，出现上述 counter 增大的原因主要包括 aborted transmission, errors due to carrirer, fifo error, heartbeat erros 以及 windown error，而 collisions 则表示由于 CSMA/CD 造成的传输中断。&lt;/p&gt;        &lt;p&gt;          &lt;code&gt;dropped&lt;/code&gt;与          &lt;code&gt;overruns&lt;/code&gt;的区别&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;    &lt;code&gt;dropped&lt;/code&gt;：表示这个数据包已经进入到网卡的接收缓存    &lt;code&gt;fifo&lt;/code&gt;队列，并且开始被系统中断处理准备进行数据包拷贝（从网卡缓存    &lt;code&gt;fifo&lt;/code&gt;队列拷贝到系统内存），但由于此时的系统原因（比如内存不够等）导致这个数据包被丢掉，即这个数据包被    &lt;code&gt;Linux&lt;/code&gt;系统丢掉。    &lt;p&gt;​      &lt;code&gt;overruns&lt;/code&gt;：表示这个数据包还没有被进入到网卡的接收缓存fifo队列就被丢掉，因此此时网卡的fifo是满的。为什么fifo会是满的？因为系统繁忙，来不及响应网卡中断，导致网卡里的数据包没有及时的拷贝到系统内存，fifo是满的就导致后面的数据包进不来，即这个数据包被网卡硬件丢掉。所以，个人觉得遇到      &lt;code&gt;overruns&lt;/code&gt;非0，需要检测cpu负载与cpu中断情况&lt;/p&gt;    &lt;h2&gt;三、排查过程&lt;/h2&gt;    &lt;h3&gt;3.1、丢包的可能性&lt;/h3&gt;    &lt;p&gt;服务器能正常接收到数据包，问题可以限定在      &lt;strong&gt;两种可能&lt;/strong&gt;：&lt;/p&gt;    &lt;p&gt;部分客户端发出的数据包本身异常；&lt;/p&gt;    &lt;p&gt;服务器处理部分客户端的数据包时触发了某种机制丢弃了数据包。因为出问题的客户端能够正常访问公网上其他服务，后者的可能性更大。&lt;/p&gt;    &lt;p&gt;有哪些情况会导致Linux服务器丢弃数据包？&lt;/p&gt;    &lt;h3&gt;3.2 、确认有 UDP 丢包发生&lt;/h3&gt;    &lt;p&gt;要查看网卡是否有丢包，可以使用      &lt;code&gt;ethtool -S eth0&lt;/code&gt;查看，在输出中查找 bad 或者 drop 对应的字段是否有数据，在正常情况下，这些字段对应的数字应该都是 0。如果看到对应的数字在不断增长，就说明网卡有丢包。另外一个查看网卡丢包数据的命令是      &lt;code&gt;ifconfig&lt;/code&gt;，它的输出中会有 RX(receive 接收报文)和 TX（transmit 发送报文）的统计数据：&lt;/p&gt;    &lt;div&gt;      &lt;div&gt;        &lt;pre&gt;          &lt;code&gt;~# ifconfig eth0
...
        RX packets 3553389376  bytes 2599862532475 (2.3 TiB)
        RX errors 0  dropped 1353  overruns 0  frame 0
        TX packets 3479495131  bytes 3205366800850 (2.9 TiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
...&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;    &lt;p&gt;此外，      &lt;code&gt;linux&lt;/code&gt;系统也提供了各个网络协议的丢包信息，可以使用      &lt;code&gt;netstat -s&lt;/code&gt;命令查看，加上 –udp 可以只看 UDP 相关的报文数据：&lt;/p&gt;    &lt;div&gt;      &lt;div&gt;        &lt;pre&gt;          &lt;code&gt;[root@holodesk02 GOD]# netstat -s -u
IcmpMsg:
    InType0: 3
    InType3: 1719356
    InType8: 13
    InType11: 59
    OutType0: 13
    OutType3: 1737641
    OutType8: 10
    OutType11: 263
Udp:
    517488890 packets received
    2487375 packets to unknown port received.
    47533568 packet receive errors
    147264581 packets sent
    12851135 receive buffer errors
    0 send buffer errors
UdpLite:
IpExt:
    OutMcastPkts: 696
    InBcastPkts: 2373968
    InOctets: 4954097451540
    OutOctets: 5538322535160
    OutMcastOctets: 79632
    InBcastOctets: 934783053
    InNoECTPkts: 5584838675&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;    &lt;p&gt;对于上面的输出，关注下面的信息来查看 UDP 丢包的情况：&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;        &lt;code&gt;packet receive errors&lt;/code&gt;不为空，并且在一直增长说明系统有 UDP 丢包&lt;/li&gt;      &lt;li&gt;        &lt;code&gt;packets to unknown port received&lt;/code&gt;表示系统接收到的 UDP 报文所在的目标端口没有应用在监听，一般是服务没有启动导致的，并不会造成严重的问题&lt;/li&gt;      &lt;li&gt;        &lt;code&gt;receive buffer errors&lt;/code&gt;表示因为 UDP 的接收缓存太小导致丢包的数量&lt;/li&gt;&lt;/ul&gt;    &lt;p&gt;      &lt;strong&gt;NOTE： 并不是丢包数量不为零就有问题，对于 UDP 来说，如果有少量的丢包很可能是预期的行为，比如丢包率（丢包数量/接收报文数量）在万分之一甚至更低。&lt;/strong&gt;&lt;/p&gt;    &lt;h3&gt;3.2 、确认网卡或者驱动丢包&lt;/h3&gt;    &lt;p&gt;之前讲过，如果      &lt;code&gt;ethtool -S eth0&lt;/code&gt;中有      &lt;code&gt;rx_***_errors&lt;/code&gt;那么很可能是网卡有问题，导致系统丢包，需要联系服务器或者网卡供应商进行处理。&lt;/p&gt;    &lt;div&gt;      &lt;div&gt;        &lt;pre&gt;          &lt;code&gt;# ethtool -S eth0 | grep rx_ | grep errors
     rx_crc_errors: 0
     rx_missed_errors: 0
     rx_long_length_errors: 0
     rx_short_length_errors: 0
     rx_align_errors: 0
     rx_errors: 0
     rx_length_errors: 0
     rx_over_errors: 0
     rx_frame_errors: 0
     rx_fifo_errors: 0&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;    &lt;p&gt;      &lt;code&gt;netstat -i&lt;/code&gt;也会提供每个网卡的接发报文以及丢包的情况，正常情况下输出中 error 或者 drop 应该为 0。&lt;/p&gt;    &lt;p&gt;如果硬件或者驱动没有问题，一般网卡丢包是因为设置的缓存区（ring buffer）太小，可以使用 ethtool 命令查看和设置网卡的 ring buffer。&lt;/p&gt;    &lt;p&gt;      &lt;code&gt;ethtool -g&lt;/code&gt;可以查看某个网卡的 ring buffer，比如下面的例子&lt;/p&gt;    &lt;div&gt;      &lt;div&gt;        &lt;pre&gt;          &lt;code&gt;# ethtool -g eth0
Ring parameters for eth0:
Pre-set maximums:
RX:		4096
RX Mini:	0
RX Jumbo:	0
TX:		4096
Current hardware settings:
RX:		256
RX Mini:	0
RX Jumbo:	0
TX:		256&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;    &lt;p&gt;Pre-set 表示网卡最大的      &lt;code&gt;ring buffer&lt;/code&gt;值，可以使用      &lt;code&gt;ethtool -G eth0 rx 8192&lt;/code&gt;设置它的值。&lt;/p&gt;    &lt;h3&gt;3.3 、UDP 报文错误丢包&lt;/h3&gt;    &lt;p&gt;​	如果在传输过程中UDP 报文被修改，会导致 checksum 错误，或者长度错误，linux 在接收到 UDP 报文时会对此进行校验，一旦发明错误会把报文丢弃。&lt;/p&gt;    &lt;p&gt;如果希望 UDP 报文 checksum 及时有错也要发送给应用程序，可以在通过 socket 参数禁用 UDP checksum 检查：&lt;/p&gt;    &lt;div&gt;      &lt;div&gt;        &lt;pre&gt;          &lt;code&gt;int disable = 1;
setsockopt(sock_fd, SOL_SOCKET, SO_NO_CHECK, (void*)&amp;amp;disable, sizeof(disable)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;    &lt;h3&gt;3.4 、UDP buffer size 不足丢包&lt;/h3&gt;    &lt;p&gt;​	linux 系统在接收报文之后，会把报文保存到缓存区中。因为缓存区的大小是有限的，如果出现 UDP 报文过大（超过缓存区大小或者 MTU 大小）、接收到报文的速率太快，都可能导致 linux 因为缓存满而直接丢包的情况。&lt;/p&gt;    &lt;p&gt;在系统层面，linux 设置了 receive buffer 可以配置的最大值，可以在下面的文件中查看，一般是 linux 在启动的时候会根据内存大小设置一个初始值。&lt;/p&gt;    &lt;blockquote&gt;      &lt;ul&gt;        &lt;li&gt;/proc/sys/net/core/rmem_max：允许设置的 receive buffer 最大值&lt;/li&gt;        &lt;li&gt;/proc/sys/net/core/rmem_default：默认使用的 receive buffer 值&lt;/li&gt;        &lt;li&gt;/proc/sys/net/core/wmem_max：允许设置的 send buffer 最大值&lt;/li&gt;        &lt;li&gt;/proc/sys/net/core/wmem_dafault：默认使用的 send buffer 最大值&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;    &lt;p&gt;但是这些初始值并不是为了应对大流量的 UDP 报文，如果应用程序接收和发送 UDP 报文非常多，需要将这个值调大。可以使用 sysctl 命令让它立即生效：&lt;/p&gt;    &lt;div&gt;      &lt;div&gt;        &lt;pre&gt;          &lt;code&gt;sysctl -w net.core.rmem_max=26214400 # 设置为 25M，临时生效，下次启动消失&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;    &lt;p&gt;也可以修改      &lt;code&gt;/etc/sysctl.conf&lt;/code&gt;中对应的参数在下次启动时让参数保持生效。&lt;/p&gt;    &lt;p&gt;如果报文报文过大，可以在发送方对数据进行分割，保证每个报文的大小在 MTU 内。&lt;/p&gt;    &lt;p&gt;另外一个可以配置的参数是      &lt;code&gt;netdev_max_backlog&lt;/code&gt;，它表示 linux 内核从网卡驱动中读取报文后可以缓存的报文数量，默认是 1000，可以调大这个值，比如设置成 2000：&lt;/p&gt;    &lt;div&gt;      &lt;div&gt;        &lt;pre&gt;          &lt;code&gt;sudo sysctl -w net.core.netdev_max_backlog=2000&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;    &lt;h3&gt;3.5 、系统负载过高丢包&lt;/h3&gt;    &lt;p&gt;​	系统 CPU、memory、IO 负载过高都有可能导致网络丢包&lt;/p&gt;    &lt;blockquote&gt;      &lt;p&gt;​	比如 CPU 如果负载过高，系统没有时间进行报文的 checksum 计算、复制内存等操作，从而导致网卡或者 socket buffer 处丢包；&lt;/p&gt;      &lt;p&gt;​	memory 负载过高，会应用程序处理过慢，无法及时处理报文；&lt;/p&gt;      &lt;p&gt;​	IO 负载过高，CPU 都用来响应        &lt;code&gt;IO wait&lt;/code&gt;，没有时间处理缓存中的        &lt;code&gt;UDP&lt;/code&gt;报文。&lt;/p&gt;&lt;/blockquote&gt;    &lt;p&gt;      &lt;code&gt;linux&lt;/code&gt;系统本身就是相互关联的系统，任何一个组件出现问题都有可能影响到其他组件的正常运行。对于系统负载过高，要么是应用程序有问题，要么是系统不足。对于前者需要及时发现，debug 和修复；对于后者，也要及时发现并扩容。&lt;/p&gt;    &lt;h3&gt;3.6 、应用丢包&lt;/h3&gt;    &lt;p&gt;​	上面提到系统的      &lt;code&gt;UDP buffer size&lt;/code&gt;，调节的 sysctl 参数只是系统允许的最大值，每个应用程序在创建 socket 时需要设置自己      &lt;code&gt;socket buffer size&lt;/code&gt;的值。&lt;/p&gt;    &lt;p&gt;      &lt;code&gt;linux&lt;/code&gt;系统会把接受到的报文放到      &lt;code&gt;socket&lt;/code&gt;的      &lt;code&gt;buffer&lt;/code&gt;中，应用程序从 buffer 中不断地读取报文。所以这里有两个和应用有关的因素会影响是否会丢包：socket buffer size 大小以及应用程序读取报文的速度。&lt;/p&gt;    &lt;p&gt;​	对于第一个问题，可以在应用程序初始化      &lt;code&gt;socket&lt;/code&gt;的时候设置      &lt;code&gt;socket receive buffer&lt;/code&gt;的大小，比如下面的代码把 socket buffer 设置为 20MB：&lt;/p&gt;    &lt;div&gt;      &lt;div&gt;        &lt;pre&gt;          &lt;code&gt;uint64_t receive_buf_size = 20*1024*1024;  //20 MB
setsockopt(socket_fd, SOL_SOCKET, SO_RCVBUF, &amp;amp;receive_buf_size, sizeof(receive_buf_size));&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;    &lt;p&gt;​	如果不是自己编写和维护的程序，修改应用代码是件不好甚至不太可能的事情。很多应用程序会提供配置参数来调节这个值，请参考对应的官方文档；如果没有可用的配置参数，只能给程序的开发者提 issue 了。很明显，增加应用的 receive buffer 会减少丢包的可能性，但同时会导致应用使用更多的内存，所以需要谨慎使用。另外一个因素是应用读取 buffer 中报文的速度，对于应用程序来说，      &lt;strong&gt;处理报文应该采取异步的方式&lt;/strong&gt;&lt;/p&gt;    &lt;h3&gt;3.7 、包丢在什么地方&lt;/h3&gt;    &lt;p&gt;想要详细了解 linux 系统在执行哪个函数时丢包的话，可以使用      &lt;code&gt;dropwatch&lt;/code&gt;工具，它监听系统丢包信息，并打印出丢包发生的函数地址：&lt;/p&gt;    &lt;div&gt;      &lt;div&gt;        &lt;pre&gt;          &lt;code&gt;# dropwatch -l kas
Initalizing kallsyms db
dropwatch&amp;gt; start
Enabling monitoring...
Kernel monitoring activated.
Issue Ctrl-C to stop monitoring

1 drops at tcp_v4_do_rcv+cd (0xffffffff81799bad)
10 drops at tcp_v4_rcv+80 (0xffffffff8179a620)
1 drops at sk_stream_kill_queues+57 (0xffffffff81729ca7)
4 drops at unix_release_sock+20e (0xffffffff817dc94e)
1 drops at igmp_rcv+e1 (0xffffffff817b4c41)
1 drops at igmp_rcv+e1 (0xffffffff817b4c41)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;    &lt;p&gt;通过这些信息，找到对应的内核代码处，就能知道内核在哪个步骤中把报文丢弃，以及大致的丢包原因。如果      &lt;code&gt;dropwatch&lt;/code&gt;信息输出过多，或者不好用，可以阅读下我的另外两篇博文：      &lt;a href="https://cclinuxer.gitee.io/2020/08/Linux%E5%86%85%E6%A0%B8%E8%B0%83%E8%AF%95%E4%B9%8Biptables%E8%A7%82%E5%AF%9F%E6%95%B0%E6%8D%AE%E5%8C%85%E6%B5%81%E5%90%91/"&gt;iptables观察数据包流向&lt;/a&gt;、      &lt;a href="https://cclinuxer.gitee.io/2020/08/Linux%E5%86%85%E6%A0%B8%E8%B0%83%E8%AF%95%E4%B9%8Bnetfilter%E5%87%BD%E6%95%B0%E5%AE%9A%E4%BD%8D/"&gt;定位netfilter丢包&lt;/a&gt;。这两种方式可以解决绝大部分二三层的数据丢包问题。也可以在      &lt;code&gt;kfree_skb&lt;/code&gt;处编写小工具，实现过滤数据包打印栈回溯信息（ebpf可能是一种实现方式、我自己没有做过尝试，后续有时间会做一个）。&lt;/p&gt;    &lt;p&gt;此外，还可以使用 linux perf 工具监听 kfree_skb（把网络报文丢弃时会调用该函数） 事件的发生：&lt;/p&gt;    &lt;div&gt;      &lt;div&gt;        &lt;pre&gt;          &lt;code&gt;sudo perf record -g -a -e skb:kfree_skb
sudo perf script&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;    &lt;p&gt;关于 perf 命令的使用和解读，网上有很多文章可以参考。&lt;/p&gt;    &lt;h3&gt;3.8 、关于UDP丢包的总结&lt;/h3&gt;    &lt;ul&gt;      &lt;li&gt;UDP 本身就是无连接不可靠的协议，适用于报文偶尔丢失也不影响程序状态的场景，比如视频、音频、游戏、监控等。对报文可靠性要求比较高的应用不要使用 UDP，推荐直接使用 TCP。当然，也可以在应用层做重试、去重保证可靠性&lt;/li&gt;      &lt;li&gt;如果发现服务器丢包，首先通过监控查看系统负载是否过高，先想办法把负载降低再看丢包问题是否消失&lt;/li&gt;      &lt;li&gt;如果系统负载过高，UDP 丢包是没有有效解决方案的。如果是应用异常导致 CPU、memory、IO 过高，请及时定位异常应用并修复；如果是资源不够，监控应该能及时发现并快速扩容&lt;/li&gt;      &lt;li&gt;对于系统大量接收或者发送 UDP 报文的，可以通过调节系统和程序的        &lt;code&gt;socket buffer size&lt;/code&gt;来降低丢包的概率&lt;/li&gt;      &lt;li&gt;应用程序在处理 UDP 报文时，要采用异步方式，在两次接收报文之间不要有太多的处理逻辑&lt;/li&gt;&lt;/ul&gt;    &lt;h3&gt;3.9、防火墙拦截&lt;/h3&gt;    &lt;p&gt;​	服务器端口无法连接，通常就是查看防火墙配置了，虽然这里已经确认同一个出口IP的客户端有的能够正常访问，但也不排除配置了DROP特定端口范围的可能性。如果系统防火墙丢包，表现的行为一般是所有的 UDP 报文都无法正常接收，当然不排除防火墙只 drop 一部分报文的可能性。如果遇到丢包比率非常大的情况，请先检查防火墙规则，保证防火墙没有主动      &lt;code&gt;drop UDP&lt;/code&gt;报文。&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;如何确认&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;查看      &lt;code&gt;iptables filter&lt;/code&gt;表，确认是否有相应规则会导致此丢包行为：&lt;/p&gt;    &lt;div&gt;      &lt;div&gt;        &lt;pre&gt;          &lt;code&gt;$ sudo iptables-save -t filter&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;    &lt;p&gt;这里容易排除防火墙拦截的可能性。      &lt;a href="https://cclinuxer.gitee.io/2020/08/Linux%E5%86%85%E6%A0%B8%E8%B0%83%E8%AF%95%E4%B9%8Biptables%E8%A7%82%E5%AF%9F%E6%95%B0%E6%8D%AE%E5%8C%85%E6%B5%81%E5%90%91/"&gt;iptables观察数据包流向&lt;/a&gt;、      &lt;a href="https://cclinuxer.gitee.io/2020/08/Linux%E5%86%85%E6%A0%B8%E8%B0%83%E8%AF%95%E4%B9%8Bnetfilter%E5%87%BD%E6%95%B0%E5%AE%9A%E4%BD%8D/"&gt;定位netfilter丢包&lt;/a&gt;。&lt;/p&gt;    &lt;h3&gt;3.10、连接跟踪表溢出&lt;/h3&gt;    &lt;p&gt;​		除了防火墙本身配置DROP规则外，与防火墙有关的还有连接跟踪表nf_conntrack，Linux为每个经过内核网络栈的数据包，生成一个新的连接记录项，当服务器处理的连接过多时，连接跟踪表被打满，服务器会丢弃新建连接的数据包。&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;如何确认&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;通过dmesg可以确认是否有该情况发生：&lt;/p&gt;    &lt;div&gt;      &lt;div&gt;        &lt;pre&gt;          &lt;code&gt;$ dmesg |grep nf_conntrack&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;    &lt;p&gt;如果输出值中有“nf_conntrack: table full, dropping packet”，说明服务器nf_conntrack表已经被打满。&lt;/p&gt;    &lt;p&gt;通过/proc文件系统查看nf_conntrack表实时状态：&lt;/p&gt;    &lt;div&gt;      &lt;div&gt;        &lt;pre&gt;          &lt;code&gt;# 查看nf_conntrack表最大连接数
$ cat /proc/sys/net/netfilter/nf_conntrack_max
65536
# 查看nf_conntrack表当前连接数
$ cat /proc/sys/net/netfilter/nf_conntrack_count
7611&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;    &lt;p&gt;当前连接数远没有达到跟踪表最大值，排除这个因素。&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;如何解决&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;如果确认服务器因连接跟踪表溢出而开始丢包，首先需要查看具体连接判断是否正遭受DOS攻击，如果是正常的业务流量造成，可以考虑调整nf_conntrack的参数：&lt;/p&gt;    &lt;p&gt;      &lt;code&gt;nf_conntrack_max&lt;/code&gt;决定连接跟踪表的大小，默认值是65535，可以根据系统内存大小计算一个合理值：      &lt;code&gt;CONNTRACK_MAX = RAMSIZE(in bytes)/16384/(ARCH/32)&lt;/code&gt;，如32G内存可以设置1048576；&lt;/p&gt;    &lt;p&gt;      &lt;code&gt;nf_conntrack_buckets&lt;/code&gt;决定存储      &lt;code&gt;conntrack&lt;/code&gt;条目的哈希表大小，默认值是      &lt;code&gt;nf_conntrack_max&lt;/code&gt;的1/4，延续这种计算方式：      &lt;code&gt;BUCKETS = CONNTRACK_MAX/4&lt;/code&gt;，如32G内存可以设置262144；&lt;/p&gt;    &lt;p&gt;      &lt;code&gt;nf_conntrack_tcp_timeout_established&lt;/code&gt;决定ESTABLISHED状态连接的超时时间，默认值是5天，可以缩短到1小时，即3600。&lt;/p&gt;    &lt;div&gt;      &lt;div&gt;        &lt;pre&gt;          &lt;code&gt;$ sysctl -w net.netfilter.nf_conntrack_max=1048576
$ sysctl -w net.netfilter.nf_conntrack_buckets=262144
$ sysctl -w net.netfilter.nf_conntrack_tcp_timeout_established=3600&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;    &lt;h3&gt;3.11、Ring Buffer溢出&lt;/h3&gt;    &lt;p&gt;排除了防火墙的因素，我们从底向上来看Linux接收数据包的处理过程，首先是网卡驱动层。如下图所示，物理介质上的数据帧到达后首先由NIC（网络适配器）读取，写入设备内部缓冲区Ring Buffer中，再由中断处理程序触发Softirq从中消费，Ring Buffer的大小因网卡设备而异。当网络数据包到达（生产）的速率快于内核处理（消费）的速率时，Ring Buffer很快会被填满，新来的数据包将被丢弃。&lt;/p&gt;    &lt;p&gt;      &lt;img alt="image2" src="https://gitee.com/cclinuxer/blog_image/raw/master/image/2.png"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;如何确认&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;通过ethtool或/proc/net/dev可以查看因Ring Buffer满而丢弃的包统计，在统计项中以fifo标识：&lt;/p&gt;    &lt;div&gt;      &lt;div&gt;        &lt;pre&gt;          &lt;code&gt;$ ethtool -S eth0|grep rx_fifo
rx_fifo_errors: 0
$ cat /proc/net/dev
Inter-|   Receive                                                |  Transmit

 face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
  eth0: 17253386680731 42839525880    0    0    0     0          0 244182022 14879545018057 41657801805    0    0    0     0       0         0&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;    &lt;p&gt;可以看到服务器的接收方向的fifo丢包数并没有增加，这里自然也排除这个原因。&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;如何解决&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;如果发现服务器上某个网卡的fifo数持续增大，可以去确认CPU中断是否分配均匀，也可以尝试增加Ring Buffer的大小，通过ethtool可以查看网卡设备Ring Buffer最大值，修改Ring Buffer当前设置：&lt;/p&gt;    &lt;div&gt;      &lt;div&gt;        &lt;pre&gt;          &lt;code&gt;# 查看eth0网卡Ring Buffer最大值和当前设置
$ ethtool -g eth0
Ring parameters for eth0:

Pre-set maximums:
RX:     4096   
RX Mini:    0
RX Jumbo:   0
TX:     4096   
Current hardware settings:
RX:     1024   
RX Mini:    0
RX Jumbo:   0
TX:     1024   
# 修改网卡eth0接收与发送硬件缓存区大小
$ ethtool -G eth0 rx 4096 tx 4096
Pre-set maximums:
RX:     4096   
RX Mini:    0
RX Jumbo:   0
TX:     4096   
Current hardware settings:
RX:     4096   
RX Mini:    0
RX Jumbo:   0
TX:     4096&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;    &lt;h3&gt;3.12 netdev_max_backlog溢出&lt;/h3&gt;    &lt;p&gt;​      &lt;code&gt;netdev_max_backlog&lt;/code&gt;是内核从NIC收到包后，交由协议栈（如IP、TCP）处理之前的缓冲队列。每个CPU核都有一个      &lt;code&gt;backlog&lt;/code&gt;队列，与      &lt;code&gt;Ring Buffer&lt;/code&gt;同理，当接收包的速率大于内核协议栈处理的速率时，CPU的      &lt;code&gt;backlog&lt;/code&gt;队列不断增长，当达到设定的      &lt;code&gt;netdev_max_backlog&lt;/code&gt;值时，数据包将被丢弃。&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;如何确认&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;通过查看/proc/net/softnet_stat可以确定是否发生了netdev backlog队列溢出：&lt;/p&gt;    &lt;div&gt;      &lt;div&gt;        &lt;pre&gt;          &lt;code&gt;$ cat /proc/net/softnet_stat
01a7b464 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
01d4d71f 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
0349e798 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
017e0826 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;    &lt;p&gt;其中： 每一行代表每个CPU核的状态统计，从CPU0依次往下； 每一列代表一个CPU核的各项统计：第一列代表中断处理程序收到的包总数；第二列即代表由于netdev_max_backlog队列溢出而被丢弃的包总数。 从上面的输出可以看出，这台服务器统计中，并没有因为netdev_max_backlog导致的丢包。&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;如何解决&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;netdev_max_backlog的默认值是1000，在高速链路上，可能会出现上述第二列统计不为0的情况，可以通过修改内核参数net.core.netdev_max_backlog来解决：&lt;/p&gt;    &lt;div&gt;      &lt;div&gt;        &lt;pre&gt;          &lt;code&gt;$ sysctl -w net.core.netdev_max_backlog=2000&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;    &lt;h3&gt;3.13、反向路由过滤&lt;/h3&gt;    &lt;p&gt;反向路由过滤机制是Linux通过反向路由查询，检查收到的数据包源IP是否可路由（Loose mode）、是否最佳路由（Strict mode），如果没有通过验证，则丢弃数据包，设计的目的是防范IP地址欺骗攻击。rp_filter提供了&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;三种模式供配置：&lt;/strong&gt;&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;0 - 不验证&lt;/li&gt;      &lt;li&gt;1 - RFC3704定义的严格模式：对每个收到的数据包，查询反向路由，如果数据包入口和反向路由出口不一致，则不通过&lt;/li&gt;      &lt;li&gt;2 - RFC3704定义的松散模式：对每个收到的数据包，查询反向路由，如果任何接口都不可达，则不通过&lt;/li&gt;&lt;/ul&gt;    &lt;p&gt;      &lt;strong&gt;如何确认&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;查看当前rp_filter策略配置：&lt;/p&gt;    &lt;div&gt;      &lt;div&gt;        &lt;pre&gt;          &lt;code&gt;$ cat /proc/sys/net/ipv4/conf/eth0/rp_filter&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;    &lt;p&gt;如果这里设置为1，就需要查看主机的网络环境和路由策略是否可能会导致客户端的入包无法通过反向路由验证了。&lt;/p&gt;    &lt;p&gt;从原理来看这个机制工作在网络层，因此，如果客户端能够Ping通服务器，就能够排除这个因素了。&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;如何解决&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;根据实际网络环境将rp_filter设置为0或2：&lt;/p&gt;    &lt;div&gt;      &lt;div&gt;        &lt;pre&gt;          &lt;code&gt;$ sysctl -w net.ipv4.conf.all.rp_filter=2&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;    &lt;p&gt;或&lt;/p&gt;    &lt;div&gt;      &lt;div&gt;        &lt;pre&gt;          &lt;code&gt;$ sysctl -w net.ipv4.conf.eth0.rp_filter=2&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;    &lt;h3&gt;3.14 半连接队列溢出&lt;/h3&gt;    &lt;p&gt;​		半连接队列指的是TCP传输中服务器收到SYN包但还未完成三次握手的连接队列，队列大小由内核参数tcp_max_syn_backlog定义。当服务器保持的半连接数量达到      &lt;code&gt;tcp_max_syn_backlog&lt;/code&gt;后，内核将会丢弃新来的SYN包。&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;如何确认&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;通过dmesg可以确认是否有该情况发生：&lt;/p&gt;    &lt;div&gt;      &lt;div&gt;        &lt;pre&gt;          &lt;code&gt;$ dmesg | grep &amp;quot;TCP: drop open request from&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;    &lt;p&gt;半连接队列的连接数量可以通过netstat统计SYN_RECV状态的连接得知&lt;/p&gt;    &lt;div&gt;      &lt;div&gt;        &lt;pre&gt;          &lt;code&gt;$ netstat -ant|grep SYN_RECV|wc -l
0&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;    &lt;p&gt;大多数情况下这个值应该是0或很小，因为半连接状态从第一次握手完成时进入，第三次握手完成后退出，正常的网络环境中这个过程发生很快，如果这个值较大，服务器极有可能受到了SYN Flood攻击。&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;如何解决&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;      &lt;code&gt;tcp_max_syn_backlog&lt;/code&gt;的默认值是256，通常推荐内存大于128MB的服务器可以将该值调高至1024，内存小于32MB的服务器调低到128，同样，该参数通过sysctl修改：&lt;/p&gt;    &lt;div&gt;      &lt;div&gt;        &lt;pre&gt;          &lt;code&gt;$ sysctl -w net.ipv4.tcp_max_syn_backlog=1024&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;    &lt;p&gt;另外，上述行为受到内核参数      &lt;code&gt;tcp_syncookies&lt;/code&gt;的影响，若启用      &lt;code&gt;syncookie&lt;/code&gt;机制，当半连接队列溢出时，并不会直接丢弃SYN包，而是回复带有      &lt;code&gt;syncookie&lt;/code&gt;的SYC+ACK包，设计的目的是防范SYN Flood造成正常请求服务不可用。&lt;/p&gt;    &lt;div&gt;      &lt;div&gt;        &lt;pre&gt;          &lt;code&gt;$ sysctl -w net.ipv4.tcp_syncookies=1
net.ipv4.tcp_syncookies = 1&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;    &lt;h3&gt;3.15 PAWS&lt;/h3&gt;    &lt;p&gt;PAWS全名Protect Againest Wrapped Sequence numbers，目的是解决在高带宽下，TCP序列号在一次会话中可能被重复使用而带来的问题。&lt;/p&gt;    &lt;p&gt;      &lt;img alt="image2" src="https://jermine.vdo.pub/img/linux/3.png"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;如上图所示，客户端发送的序列号为A的数据包A1因某些原因在网络中“迷路”，在一定时间没有到达服务端，客户端超时重传序列号为A的数据包A2，接下来假设带宽足够，传输用尽序列号空间，重新使用A，此时服务端等待的是序列号为A的数据包A3，而恰巧此时前面“迷路”的A1到达服务端，如果服务端仅靠序列号A就判断数据包合法，就会将错误的数据传递到用户态程序，造成程序异常。&lt;/p&gt;    &lt;p&gt;PAWS要解决的就是上述问题，它依赖于timestamp机制，理论依据是：在一条正常的TCP流中，按序接收到的所有TCP数据包中的timestamp都应该是单调非递减的，这样就能判断那些timestamp小于当前TCP流已处理的最大timestamp值的报文是延迟到达的重复报文，可以予以丢弃。在上文的例子中，服务器已经处理数据包Z，而后到来的A1包的timestamp必然小于Z包的timestamp，因此服务端会丢弃迟到的A1包，等待正确的报文到来。&lt;/p&gt;    &lt;p&gt;PAWS机制的实现关键是内核保存了Per-Connection的最近接收时间戳，如果加以改进，就可以用来优化服务器TIME_WAIT状态的快速回收。&lt;/p&gt;    &lt;p&gt;TIME_WAIT状态是TCP四次挥手中主动关闭连接的一方需要进入的最后一个状态，并且通常需要在该状态保持2*MSL（报文最大生存时间），它存在的意义有两个：&lt;/p&gt;    &lt;p&gt;1.可靠地实现TCP全双工连接的关闭：关闭连接的四次挥手过程中，最终的ACK由主动关闭连接的一方（称为A）发出，如果这个ACK丢失，对端（称为B）将重发FIN，如果A不维持连接的TIME_WAIT状态，而是直接进入CLOSED，则无法重传ACK，B端的连接因此不能及时可靠释放。&lt;/p&gt;    &lt;p&gt;2.等待“迷路”的重复数据包在网络中因生存时间到期消失：通信双方A与B，A的数据包因“迷路”没有及时到达B，A会重发数据包，当A与B完成传输并断开连接后，如果A不维持TIME_WAIT状态2      &lt;em&gt;MSL时间，便有可能与B再次建立相同源端口和目的端口的“新连接”，而前一次连接中“迷路”的报文有可能在这时到达，并被B接收处理，造成异常，维持2&lt;/em&gt;MSL的目的就是等待前一次连接的数据包在网络中消失。&lt;/p&gt;    &lt;p&gt;TIME_WAIT状态的连接需要占用服务器内存资源维持，Linux内核提供了一个参数来控制TIME_WAIT状态的快速回收：tcp_tw_recycle，它的理论依据是：&lt;/p&gt;    &lt;p&gt;在PAWS的理论基础上，如果内核保存Per-Host的最近接收时间戳，接收数据包时进行时间戳比对，就能避免TIME_WAIT意图解决的第二个问题：前一个连接的数据包在新连接中被当做有效数据包处理的情况。这样就没有必要维持TIME_WAIT状态2*MSL的时间来等待数据包消失，仅需要等待足够的RTO（超时重传），解决ACK丢失需要重传的情况，来达到快速回收TIME_WAIT状态连接的目的。&lt;/p&gt;    &lt;p&gt;但上述理论在多个客户端使用NAT访问服务器时会产生新的问题：同一个NAT背后的多个客户端时间戳是很难保持一致的（timestamp机制使用的是系统启动相对时间），对于服务器来说，两台客户端主机各自建立的TCP连接表现为同一个对端IP的两个连接，按照Per-Host记录的最近接收时间戳会更新为两台客户端主机中时间戳较大的那个，而时间戳相对较小的客户端发出的所有数据包对服务器来说都是这台主机已过期的重复数据，因此会直接丢弃。&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;如何确认&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;通过netstat可以得到因PAWS机制timestamp验证被丢弃的数据包统计：&lt;/p&gt;    &lt;div&gt;      &lt;div&gt;        &lt;pre&gt;          &lt;code&gt;$ netstat -s |grep -e &amp;quot;passive connections rejected because of time stamp&amp;quot; -e &amp;quot;packets rejects in established connections because of timestamp”
387158 passive connections rejected because of time stamp
825313 packets rejects in established connections because of timestamp&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;    &lt;p&gt;通过sysctl查看是否启用了tcp_tw_recycle及tcp_timestamp:&lt;/p&gt;    &lt;div&gt;      &lt;div&gt;        &lt;pre&gt;          &lt;code&gt;$ sysctl net.ipv4.tcp_tw_recycle
net.ipv4.tcp_tw_recycle = 1
$ sysctl net.ipv4.tcp_timestamps
net.ipv4.tcp_timestamps = 1&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;    &lt;p&gt;这次问题正是因为服务器同时开启了tcp_tw_recycle和timestamps，而客户端正是使用NAT来访问服务器，造成启动时间相对较短的客户端得不到服务器的正常响应。&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;如何解决&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;如果服务器作为服务端提供服务，且明确客户端会通过NAT网络访问，或服务器之前有7层转发设备会替换客户端源IP时，是不应该开启tcp_tw_recycle的，而timestamps除了支持tcp_tw_recycle外还被其他机制依赖，推荐继续开启：&lt;/p&gt;    &lt;div&gt;      &lt;div&gt;        &lt;pre&gt;          &lt;code&gt;$ sysctl -w net.ipv4.tcp_tw_recycle=0
$ sysctl -w net.ipv4.tcp_timestamps=1&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;    &lt;h3&gt;3.16 怎么知道为什么数据包被丢弃&lt;/h3&gt;    &lt;h4&gt;dropwatch&lt;/h4&gt;    &lt;p&gt;通过谷歌搜索，发现一个很酷的工具叫 dropwatch 。x相关知识可以参考      &lt;a href="https://blog.csdn.net/iampisfan/article/details/51099618"&gt;这篇博文&lt;/a&gt;。没有现成的 Ubuntu 安装软件包，但可以通过 github 下载：&lt;/p&gt;    &lt;p&gt;https://github.com/pavel-odintsov/drop_watch&lt;/p&gt;    &lt;p&gt;以下是我可以编译的说明：&lt;/p&gt;    &lt;div&gt;      &lt;div&gt;        &lt;pre&gt;          &lt;code&gt;sudo apt-get install -y libnl-3-dev libnl-genl-3-dev binutils-dev libreadline6-dev
git clone https://github.com/pavel-odintsov/drop_watch.git
cd drop_watch/src
make&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;    &lt;p&gt;这里是输出！ 它告诉我哪个内核函数丢失数据包，酷！&lt;/p&gt;    &lt;div&gt;      &lt;div&gt;        &lt;pre&gt;          &lt;code&gt;sudo ./dropwatch -l kas
Initalizing kallsyms db
dropwatch&amp;gt; start
Enabling monitoring...
Kernel monitoring activated.
Issue Ctrl-C to stop monitoring

1 drops at tcp_v4_do_rcv+cd (0xffffffff81799bad)
10 drops at tcp_v4_rcv+80 (0xffffffff8179a620)
1 drops at sk_stream_kill_queues+57 (0xffffffff81729ca7)
4 drops at unix_release_sock+20e (0xffffffff817dc94e)
1 drops at igmp_rcv+e1 (0xffffffff817b4c41)
1 drops at igmp_rcv+e1 (0xffffffff817b4c41)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;    &lt;h4&gt;perf&lt;/h4&gt;    &lt;p&gt;用perf监控丢弃的数据包&lt;/p&gt;    &lt;p&gt;还有另一个很酷的方法，用来调试发生什么。&lt;/p&gt;    &lt;p&gt;可以使用 perf 监视 kfree_skb 事件，这将告诉你什么时候丢弃数据包（内核堆栈发生的地方）：&lt;/p&gt;    &lt;div&gt;      &lt;div&gt;        &lt;pre&gt;          &lt;code&gt;sudo perf record -g -a -e skb:kfree_skb
sudo perf script&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;    &lt;h2&gt;扩展阅读&lt;/h2&gt;    &lt;p&gt;还有这两个很酷的文章：&lt;/p&gt;    &lt;p&gt;监控和调优Linux网络堆栈：接收数据&lt;/p&gt;    &lt;p&gt;https://blog.packagecloud.io/eng/2016/06/22/monitoring-tuning-linux-networking-stack-receiving-data/&lt;/p&gt;    &lt;p&gt;监控和调优Linux网络堆栈：发送数据&lt;/p&gt;    &lt;p&gt;https://blog.packagecloud.io/eng/2017/02/06/monitoring-tuning-linux-networking-stack-sending-data/&lt;/p&gt;    &lt;h2&gt;结论&lt;/h2&gt;    &lt;p&gt;Linux提供了丰富的内核参数供使用者调整，调整得当可以大幅提高服务器的处理能力，但如果调整不当，就会引进莫名其妙的各种问题，比如这次开启tcp_tw_recycle导致丢包，实际也是为了减少TIME_WAIT连接数量而进行参数调优的结果。我们在做系统优化时，时刻要保持辩证和空杯的心态，不盲目吸收他人的果，而多去追求因，只有知其所以然，才能结合实际业务特点，得出最合理的优化配置。&lt;/p&gt;    &lt;p&gt;https://jermine.vdo.pub/linux/linux%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%A2%E5%8C%85%E6%95%85%E9%9A%9C%E7%9A%84%E8%A7%A3%E5%86%B3/&lt;/p&gt;    &lt;p&gt;https://cizixs.com/2018/01/13/linux-udp-packet-drop-debug/&lt;/p&gt;    &lt;hr&gt;&lt;/hr&gt;    &lt;ul&gt;      &lt;li&gt;        &lt;a href="https://cclinuxer.github.io/2020/10/ebpf%E7%9F%A5%E8%AF%86%E5%A4%A7%E7%BA%B2/" title=""&gt;Previous          &lt;br /&gt;ebpf知识大纲&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;        &lt;a href="https://cclinuxer.github.io/2020/11/Linux%E5%86%85%E5%AD%98%E5%9B%9E%E6%94%B6%E4%B9%8B(%E4%B8%80)-%E4%BA%A4%E6%8D%A2%E5%88%86%E5%8C%BA/" title=""&gt;Next          &lt;br /&gt;Linux内存回收之(一)---交换分区&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;    &lt;div&gt;&lt;/div&gt;&lt;/div&gt;
    &lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/62474-linux-%E4%B8%A2%E5%8C%85-albert</guid>
      <pubDate>Thu, 27 Oct 2022 14:43:39 CST</pubDate>
    </item>
    <item>
      <title>【Linux】解决可恶的 “NIC Link is Down”_从善若水的博客-CSDN博客</title>
      <link>https://itindex.net/detail/62444-linux-nic-link</link>
      <description>&lt;div&gt;    &lt;p&gt;&lt;/p&gt;    &lt;div&gt;      &lt;h3&gt;文章目录&lt;/h3&gt;      &lt;ul&gt;        &lt;li&gt;          &lt;a href="https://blog.csdn.net/qq_31985307/article/details/120277739#_NIC_Link_is_Down_3"&gt;可恶的 “NIC Link is Down”&lt;/a&gt;&lt;/li&gt;        &lt;li&gt;          &lt;a href="https://blog.csdn.net/qq_31985307/article/details/120277739#_NIC_Link_is_Down_22"&gt;怎样解决 “NIC Link is Down”&lt;/a&gt;&lt;/li&gt;        &lt;li&gt;          &lt;ul&gt;            &lt;li&gt;              &lt;a href="https://blog.csdn.net/qq_31985307/article/details/120277739#1__23"&gt;1. 检查网线是否有问题&lt;/a&gt;&lt;/li&gt;            &lt;li&gt;              &lt;a href="https://blog.csdn.net/qq_31985307/article/details/120277739#2__e1000ebug_28"&gt;2. 可能是 e1000e网卡驱动的bug&lt;/a&gt;&lt;/li&gt;            &lt;li&gt;              &lt;a href="https://blog.csdn.net/qq_31985307/article/details/120277739#3_NIC_35"&gt;3. NIC出了问题&lt;/a&gt;&lt;/li&gt;            &lt;li&gt;              &lt;a href="https://blog.csdn.net/qq_31985307/article/details/120277739#4_Switch_Port__40"&gt;4. Switch Port 出了问题&lt;/a&gt;&lt;/li&gt;            &lt;li&gt;              &lt;a href="https://blog.csdn.net/qq_31985307/article/details/120277739#5_BIOS__ASPM_45"&gt;5. 尝试更新你的BIOS &amp;amp;&amp;amp; 开启ASPM模式&lt;/a&gt;&lt;/li&gt;            &lt;li&gt;              &lt;a href="https://blog.csdn.net/qq_31985307/article/details/120277739#6__flow_control_50"&gt;6. 关闭 流控（flow control）&lt;/a&gt;&lt;/li&gt;            &lt;li&gt;              &lt;a href="https://blog.csdn.net/qq_31985307/article/details/120277739#7_CPU_69"&gt;7. 更换主板与板载网卡和CPU🚑&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;    &lt;p&gt;&lt;/p&gt;    &lt;h1&gt;      &lt;a&gt;&lt;/a&gt;可恶的 “NIC Link is Down”&lt;/h1&gt;    &lt;p&gt;       前一段时间调试5G实时视频业务，网卡总是会出现      &lt;em&gt;NIC Link is Down&lt;/em&gt;的错误，一般几秒之后网卡就会恢复。但是也会遇到一些情况网卡发生      &lt;em&gt;NIC Link is Down&lt;/em&gt;之后无法自动恢复，这时候只能重新启动测试PC才能恢复。&lt;/p&gt;    &lt;p&gt;       下面是我通过dmesg抓到的错误信息：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;May2909:10:35 server kernel: e1000e: eth0 NIC Link is Down
May2909:10:35 server kernel: e1000e: eth0 NIC Link is Up1000Mbps Full Duplex, Flow Control: Rx/Tx
May2909:10:35 server kernel: e1000e: eth0 NIC Link is Down
May2909:10:35 server kernel: e1000e: eth0 NIC Link is Up1000Mbps Full Duplex, Flow Control: Rx/Tx
May2909:10:35 server kernel: e1000e: eth0 NIC Link is Down
May2909:10:35 server kernel: e1000e: eth0 NIC Link is Up1000Mbps Full Duplex, Flow Control: Rx/Tx
May2909:10:35 server kernel: e1000e: eth0 NIC Link is Down&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;总的来说错误原因就是      &lt;strong&gt;kernel: e1000e: eth0 NIC Link is Down&lt;/strong&gt;。&lt;/p&gt;    &lt;br /&gt;    &lt;h1&gt;      &lt;a&gt;&lt;/a&gt;怎样解决 “NIC Link is Down”&lt;/h1&gt;    &lt;h2&gt;      &lt;a&gt;&lt;/a&gt;1. 检查网线是否有问题&lt;/h2&gt;    &lt;p&gt;       这是最简单的方式了，只需要替换一根网线，然后继续观察问题是否会再次出现。有些时候有问题的网线会导致这样的错误。&lt;/p&gt;    &lt;br /&gt;    &lt;h2&gt;      &lt;a&gt;&lt;/a&gt;2. 可能是 e1000e网卡驱动的bug&lt;/h2&gt;    &lt;p&gt;       可以尝试更新最新版本的 e1000e 网卡驱动，具体步骤如下：&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;Ubuntu：可以尝试通过这个脚本进行升级【        &lt;a href="https://gist.github.com/tonybruess/8249889519abd93dfba9"&gt;传送门&lt;/a&gt;】&lt;/li&gt;      &lt;li&gt;CentOS、RHEL：尝试通过这个Intel的指南进行升级【        &lt;a href="https://www.intel.com/content/www/us/en/support/articles/000005480/ethernet-products.html#build_e1e"&gt;传送门&lt;/a&gt;】&lt;/li&gt;&lt;/ul&gt;    &lt;br /&gt;    &lt;h2&gt;      &lt;a&gt;&lt;/a&gt;3. NIC出了问题&lt;/h2&gt;    &lt;p&gt;       换一个NIC再进行测试，观察问题是否再次出现。如果NIC是绑定在主板上的，那只能更换一个主板再进行测试了。&lt;/p&gt;    &lt;br /&gt;    &lt;h2&gt;      &lt;a&gt;&lt;/a&gt;4. Switch Port 出了问题&lt;/h2&gt;    &lt;p&gt;       改变 PC/Server 的交换机端口，再进行测试。你可以通过      &lt;strong&gt;ethtool&lt;/strong&gt;命令查看Linux上的网络配置与交换机上的配置是否一致。&lt;/p&gt;    &lt;br /&gt;    &lt;h2&gt;      &lt;a&gt;&lt;/a&gt;5. 尝试更新你的BIOS &amp;amp;&amp;amp; 开启ASPM模式&lt;/h2&gt;    &lt;p&gt;       根据经验如果关闭 ASPM模式也可能导致这样的问题。除此之外，保证你的BIOS版本是最新的，如果不是可以进行更新。&lt;/p&gt;    &lt;br /&gt;    &lt;h2&gt;      &lt;a&gt;&lt;/a&gt;6. 关闭 流控（flow control）&lt;/h2&gt;    &lt;p&gt;       有些时候开启 流控之后会导致一些奇怪的网络错误，可以使用命令将其关闭，并观察问题是否会再次出现，&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;ethtool-A eth0 rx off tx off&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;使用下述命令查看修改是否生效，&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;[root@CSRS:~]thtool -a eth0

Pause parametersforeth0:

Autonegotiate:  on
RX:             off
TX:             off&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;如果看到off，那么流控已经被关闭了。&lt;/p&gt;    &lt;br /&gt;    &lt;h2&gt;      &lt;a&gt;&lt;/a&gt;7. 更换主板与板载网卡和CPU🚑&lt;/h2&gt;    &lt;p&gt;       有一次我发现在 E3-1230v2上持续出现这样的问题，后来我索性将磁盘移植到一块新的 E3-1230v2上，并更换了主板（包括板载NIC）。&lt;/p&gt;    &lt;br /&gt;    &lt;p&gt;   &lt;br /&gt;&lt;/p&gt;&lt;/div&gt;
    &lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/62444-linux-nic-link</guid>
      <pubDate>Sun, 09 Oct 2022 09:52:32 CST</pubDate>
    </item>
    <item>
      <title>高可用的实现（Keepalived + 虚 IP） - schaepher - 博客园</title>
      <link>https://itindex.net/detail/62435-keepalived-ip-schaepher</link>
      <description>&lt;div&gt;    &lt;p&gt;为了避免服务单点，也为了负载均衡，我们会加一层 Nginx 层。这个 Nginx 层要有多于一台机器，不然它自身也成为一个单点。&lt;/p&gt;    &lt;p&gt;最初加 Nginx 层会变成这样：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;schaepher.com
                       +
                       |
               +-------+
               |
               v
           +---+---+          +-------+
           |       |          |       |
           | Nginx |          | Nginx |
           |       |          |       |
           +--+----+          +---+---+
              |                   |
    +---------+---+-------------+-+-----------+
    |             |             |             |
    v             v             v             v
+---+----+    +---+----+    +---+----+    +---+----+
|        |    |        |    |        |    |        |
| Real   |    | Real   |    | Real   |    | Real   |
| Server |    | Server |    | Server |    | Server |
|        |    |        |    |        |    |        |
+--------+    +--------+    +--------+    +--------+&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;如果有一台 Real Server 发生故障，则 Nginx 就不会转发到故障的机器，保证服务正常进行。&lt;/p&gt;    &lt;p&gt;但是如果主 Nginx 故障了呢？&lt;/p&gt;    &lt;h2&gt;故障切换的五种方式&lt;/h2&gt;    &lt;ul&gt;      &lt;li&gt;        &lt;p&gt;客户端自己配置多个 Nginx IP，故障时自己切换。&lt;/p&gt;        &lt;p&gt;优点：&lt;/p&gt;        &lt;ul&gt;          &lt;li&gt;后端不需要做调整&lt;/li&gt;&lt;/ul&gt;        &lt;p&gt;缺点：&lt;/p&gt;        &lt;ul&gt;          &lt;li&gt;客户端要自己维护 IP 列表。&lt;/li&gt;          &lt;li&gt;客户端要实现一套应对故障的逻辑。&lt;/li&gt;          &lt;li&gt;不能用于用户和服务之间，只能用于服务与服务之间。&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;单一服务的情况下，把另一台 Nginx 服务器的 IP 发给用户，让用户访问这个 IP。&lt;/p&gt;        &lt;p&gt;优点：&lt;/p&gt;        &lt;ul&gt;          &lt;li&gt;简单&lt;/li&gt;&lt;/ul&gt;        &lt;p&gt;缺点：&lt;/p&gt;        &lt;ul&gt;          &lt;li&gt;只有内部系统用户才可能接受这种做法。面向外部用户的时候，外部用户不会接受。&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;运维人员手动修改 DNS 解析，将域名解析到另一台 Nginx 服务器。或者程序定期检测，发现有问题就自动发起修改 DNS 解析的请求。&lt;/p&gt;        &lt;p&gt;解决了什么问题？&lt;/p&gt;        &lt;ul&gt;          &lt;li&gt;用户需要手动修改 hosts 或者需要切换 URL 的问题。&lt;/li&gt;&lt;/ul&gt;        &lt;p&gt;没有解决什么问题？&lt;/p&gt;        &lt;ul&gt;          &lt;li&gt;在 DNS 解析生效之前，服务完全不可用。&lt;/li&gt;          &lt;li&gt;客户端会缓存 DNS 解析，也要等客户端缓存过期。&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;将域名解析到所有 Nginx 服务器。程序定期做检测，当发现有问题的时候发起请求，让 DNS 将故障的 IP 移除掉。&lt;/p&gt;        &lt;blockquote&gt;          &lt;p&gt;DNSPod 自带这个功能&lt;/p&gt;&lt;/blockquote&gt;        &lt;p&gt;解决了什么问题？&lt;/p&gt;        &lt;ul&gt;          &lt;li&gt;在 DNS 解析生效之前，服务完全不可用的问题。&lt;/li&gt;&lt;/ul&gt;        &lt;p&gt;没有解决什么问题？&lt;/p&gt;        &lt;ul&gt;          &lt;li&gt;仍然有部分用户无法访问服务。&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;使用虚 IP（Virtual IP Address，以下称为 VIPA）。域名固定解析到这个 IP，当 VIPA 所在服务器故障时，让 VIPA 自动漂移到另一台服务器。&lt;/p&gt;        &lt;p&gt;解决了什么问题？&lt;/p&gt;        &lt;ul&gt;          &lt;li&gt;不需要修改 DNS 解析，秒级别的生效延迟。&lt;/li&gt;          &lt;li&gt;用户无感知。&lt;/li&gt;&lt;/ul&gt;        &lt;p&gt;带来了什么问题？&lt;/p&gt;        &lt;ul&gt;          &lt;li&gt;多了一个故障点，即使得 VIPA 自动漂移的那个程序，如 Keepalived。&lt;/li&gt;          &lt;li&gt;需要额外申请一个 IP 作为 VIPA 。&lt;/li&gt;          &lt;li&gt;涉及存储的时候，由于切换速度很快，可能会导致数据不一致。&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;    &lt;h2&gt;VIP 是什么&lt;/h2&gt;    &lt;p&gt;全称为 VIPA（Virtual IP Address），虚拟 IP 地址。&lt;/p&gt;    &lt;p&gt;通常一个 IP 只能绑定在某台机器的一个网卡上。一旦这台机器故障，根据 IP 找到这台机器的请求就会得不到响应。&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;正常
     schaepher.com
     192.168.1.101
           +
           |
           |
           |
           v

    +---------------+        +---------------+
    |               |        |               |
    | 192.168.1.101 |        | 192.168.1.102 |
    |               |        |               |
    +---------------+        +---------------+

故障
     schaepher.com
     192.168.1.101
           +
           +
             +-+ 不通
           |
           v
          故障
    +---------------+        +---------------+
    |               |        |               |
    | 192.168.1.101 |        | 192.168.1.102 |
    |               |        |               |
    +---------------+        +---------------+&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;而 VIPA 虽然最终也会配置在一台机器上，但一旦这台机器故障，备用机器就会把这个 IP 抢过去配置到网卡上（VIPA 漂移到备机）。这样可以在 IP 不变的情况下，让请求转移到正常的机器，减少服务故障时间。&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;正常
     schaepher.com
     192.168.1.100(VIPA)
           +
           |
           |
           |
           v

    +---------------+        +---------------+
    | 192.168.1.100 |        |               |
    | 192.168.1.101 |        | 192.168.1.102 |
    |               |        |               |
    +---------------+        +---------------+

故障
     schaepher.com
     192.168.1.100(VIPA)
           +
           |
           +-------------------------+
                                     |
                                     v
          故障
    +---------------+        +---------------+
    |               |        | 192.168.1.100 |
    | 192.168.1.101 |        | 192.168.1.102 |
    |               |        |               |
    +---------------+        +---------------+&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;而 Keepalive 则是实现 VIPA 漂移的一种工具。&lt;/p&gt;    &lt;blockquote&gt;      &lt;p&gt;另一种是比较复杂的 Heartbeat。&lt;/p&gt;&lt;/blockquote&gt;    &lt;h2&gt;Keepalived&lt;/h2&gt;    &lt;p&gt;Keepalived 实现 VIPA 漂移的基础是 VRRP 协议。&lt;/p&gt;    &lt;p&gt;VRRP 最早用于路由器，将多台路由器设备虚拟成一台路由器。每台设备都有一个角色。角色有两种 Master 和 Backup。Master 会持有虚 IP。每台设备都有一个权重，权重最高的正常设备会被选举为 Master。&lt;/p&gt;    &lt;p&gt;现在 Keepalived 实现了 VRRP 协议，使得可以将其用在其他设备上。&lt;/p&gt;    &lt;p&gt;将 Keepalived 安装在一组设备上，它们之间会互相通信来检测状态。如果发现 Master 超过一定时间没有反应，则重新选举 Master。&lt;/p&gt;    &lt;p&gt;Master 可能直接故障没有反应，也可能只是服务出现问题。如果是后一种情况，需要主动关闭 Keepalived 进程。&lt;/p&gt;    &lt;p&gt;以下展示配置文件。&lt;/p&gt;    &lt;table&gt;      &lt;tr&gt;        &lt;th&gt;IP&lt;/th&gt;        &lt;th&gt;所属&lt;/th&gt;        &lt;th&gt;角色&lt;/th&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;192.168.1.100&lt;/td&gt;        &lt;td&gt;Master&lt;/td&gt;        &lt;td&gt;&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;192.168.1.101&lt;/td&gt;        &lt;td&gt;主机 A&lt;/td&gt;        &lt;td&gt;Master&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;192.168.1.102&lt;/td&gt;        &lt;td&gt;主机 B&lt;/td&gt;        &lt;td&gt;Backup&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;    &lt;h4&gt;192.168.1.101 - 主机 A - Master&lt;/h4&gt;    &lt;p&gt;      &lt;code&gt;/etc/keepalived/keepalived.conf&lt;/code&gt;&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;! Configuration File for keepalived

global_defs {
    script_user root
    router_id LVS_DEVEL
    vrrp_skip_check_adv_addr
    vrrp_strict     # 严格模式使得无法使用 unicast_peer 配置，好处是无需指定其他机器的 IP
    vrrp_garp_interval 0
    vrrp_gna_interval 0
}

vrrp_script chk_http_port {
    script &amp;quot;/etc/keepalived/chk_nginx.sh&amp;quot;   # 检测当前机器的服务是否故障，如果故障则关闭 keepalived
    interval 2
    weight -5
    fall 2
    rise 1
}

vrrp_instance VI_1 {
    state MASTER    # 主备配置不一致
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass aaaaaaa   # 主备该配置必须一样
    }
    virtual_ipaddress {
        192.168.1.100
    }
    track_script {
        chk_http_port   # 在 vrrp_script 定义的名字
    }
    notify_master &amp;quot;/etc/keepalived/notify.sh 192.168.1.100 master&amp;quot;  # 当这台机器成为 Master 时发送通知
    notify_backup &amp;quot;/etc/keepalived/notify.sh 192.168.1.100 backup&amp;quot;
    notify_fault  &amp;quot;/etc/keepalived/notify.sh 192.168.1.100 fault&amp;quot;
}&lt;/code&gt;&lt;/pre&gt;    &lt;h4&gt;192.168.1.102 - 主机 B - Backup&lt;/h4&gt;    &lt;p&gt;只需改两个配置的值&lt;/p&gt;    &lt;p&gt;      &lt;code&gt;/etc/keepalived/keepalived.conf&lt;/code&gt;&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;! Configuration File for keepalived

global_defs {
    script_user root
    router_id LVS_DEVEL
    vrrp_skip_check_adv_addr
    vrrp_strict
    vrrp_garp_interval 0
    vrrp_gna_interval 0
}

vrrp_script chk_http_port {
    script &amp;quot;/etc/keepalived/chk_nginx.sh&amp;quot;
    interval 2
    weight -5
    fall 2
    rise 1
}

vrrp_instance VI_1 {
    state BACKUP    # 主备配置不一致
    interface eth0
    virtual_router_id 51
    priority 90     # 备机权重比主机低
    advert_int 1
    nopreempt       # 防止争抢 VIPA，只有 state 设置为 BACKUP 才能使用该选项
    authentication {
        auth_type PASS
        auth_pass aaaaaaa
    }
    virtual_ipaddress {
        192.168.1.100
    }
    track_script {
        chk_http_port
    }
    notify_master &amp;quot;/etc/keepalived/notify.sh 192.168.1.100 master&amp;quot;  # 当这台机器成为 Master 时发送通知
    notify_backup &amp;quot;/etc/keepalived/notify.sh 192.168.1.100 backup&amp;quot;
    notify_fault  &amp;quot;/etc/keepalived/notify.sh 192.168.1.100 fault&amp;quot;
}&lt;/code&gt;&lt;/pre&gt;    &lt;h4&gt;/etc/keepalived/chk_nginx.sh&lt;/h4&gt;    &lt;pre&gt;      &lt;code&gt;#!/bin/bash
if [[ -z &amp;quot;$(ps aux | grep &amp;quot;nginx: master process&amp;quot; | grep -v grep)&amp;quot; ]]; then
    systemctl restart nginx # 尝试重启 nginx  
    sleep 5  

    if [[ -z &amp;quot;$(ps aux | grep &amp;quot;nginx: master process&amp;quot; | grep -v grep)&amp;quot; ]]; then
        # 启动失败则关闭 keepalived，触发 VIPA 漂移
        systemctl stop keepalived
    fi
fi&lt;/code&gt;&lt;/pre&gt;    &lt;h4&gt;/etc/keepalived/notify.sh&lt;/h4&gt;    &lt;pre&gt;      &lt;code&gt;#!/bin/bash

# contact=xxx.schaepher.com

notify() {
    vip=$1
    role=$2
    mailSubject=&amp;quot;$(hostname) to be ${role}: ${vip} floating&amp;quot;
    mailBody=&amp;quot;$(date &amp;apos;+%F %H:%M:%S&amp;apos;): vrrp transition, $(hostname changed to be ${role})&amp;quot;
    # echo ${mailBody} | mail -s &amp;quot;${mailSubject}&amp;quot; &amp;quot;${contact}&amp;quot;
    echo ${mailSubject} &amp;gt;&amp;gt; /var/log/keepalived.mail
    echo ${mailBody} &amp;gt;&amp;gt; /var/log/keepalived.mail
    echo &amp;quot;&amp;quot; &amp;gt;&amp;gt; /var/log/keepalived.mail
}

notify $1 $2&lt;/code&gt;&lt;/pre&gt;    &lt;h2&gt;扩展&lt;/h2&gt;    &lt;ul&gt;      &lt;li&gt;        &lt;p&gt;提高利用率          &lt;br /&gt;由于一个 VIPA 只能配置在一台机器上，如果共有两台机器，则浪费了 50% 的资源。          &lt;br /&gt;如果要提高资源的利用率，可以再申请一个 VIPA。把备机配置为 Master，把主机配置为 Backup。&lt;/p&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;VIPA 争抢          &lt;br /&gt;由于 nopreempt 只能配置在 BACKUP 上，如果 state 为 MASTER 的机器故障并恢复，则会把 VIPA 抢过去。          &lt;br /&gt;整个过程是：&lt;/p&gt;        &lt;ol&gt;          &lt;li&gt;主机 A 故障&lt;/li&gt;          &lt;li&gt;VIPA 漂移到主机 B&lt;/li&gt;          &lt;li&gt;主机 A 恢复&lt;/li&gt;          &lt;li&gt;VIPA 漂移到主机 A&lt;/li&gt;&lt;/ol&gt;        &lt;p&gt;这样就会导致第四步多漂移了一次。而漂移可能会对服务有很短暂的影响。如果希望主机 A 恢复后，仍然让主机 B 持有 VIPA，则要在主机的 Keepalived 启动之前修改配置中的 state，改为 BACKUP。&lt;/p&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;避免丢包          &lt;br /&gt;在 VIPA 漂移到备机之间，短暂的时间内数据包仍然会发送到主机。如果主机能够连上，则可以使用防火墙将数据包转发到备机。然后停止 Keepalived 。&lt;/p&gt;        &lt;pre&gt;          &lt;code&gt;iptables -t nat -I PREROUTING -i eth0 -j DNAT --to-destination 192.168.1.102
iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;数据库的问题          &lt;br /&gt;数据库如果使用双主，在 VIPA 切换的时候，数据可能未同步完成，可能会造成自增 ID 冲突。          &lt;br /&gt;可以配置 Keepalived 等一段时间后再发送 ARP 请求，以此等待同步完成。          &lt;br /&gt;配置项是：          &lt;code&gt;vrrp_garp_master_delay 10&lt;/code&gt;表示延迟 10 秒返送。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;    &lt;h2&gt;参考&lt;/h2&gt;    &lt;ul&gt;      &lt;li&gt;        &lt;a href="https://www.linuxprobe.com/keepalived-nginx.html" rel="noopener" target="_blank"&gt;https://www.linuxprobe.com/keepalived-nginx.html&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
    &lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/62435-keepalived-ip-schaepher</guid>
      <pubDate>Mon, 26 Sep 2022 10:56:07 CST</pubDate>
    </item>
    <item>
      <title>想把博客从 hexo 迁移到 Jekyll 了 - V2EX</title>
      <link>https://itindex.net/detail/62428-%E5%8D%9A%E5%AE%A2-hexo-jekyll</link>
      <description>&lt;div&gt;理由：    &lt;br /&gt;    &lt;br /&gt;1 写 hexo 步骤太繁琐了 每次都要写好 md 然后复制到家里的电脑，开着代理，git push ，步骤太多已经让人懒得提交到博客了 甚至有时候写完就放本地了    &lt;br /&gt;    &lt;br /&gt;2 hexo 的环境难跨设备，这次重装系统，老的环境没了，虽然文章内容 md 还在，但是已经没法提交新文章了（工程环境没了，要从头搭建）    &lt;br /&gt;    &lt;br /&gt;3 据说 Jekyll 能达到和 hexo 一样的效果，但是绝对的优势是可以只提交 md ，剩下的事在线生成。也就是说我可以直接在 github 网页端提交 md 文件就能实现文章的更新。我第一次部署好之后，甚至工程环境就可以放心大胆的丢掉了，毕竟平时不需要修改什么，以后只改 md 文件    &lt;br /&gt;    &lt;br /&gt;4 主题也不少看了几个挺满意的    &lt;br /&gt;    &lt;br /&gt;5 还有什么坑是我没考虑到的吗?&lt;/div&gt; &lt;div&gt;  &lt;br /&gt;&lt;/div&gt; &lt;div&gt;  &lt;div&gt;第 1 条附言  ·  161 天前   &lt;div&gt;&lt;/div&gt;   &lt;div&gt;如果我看教程没理解错的话，hexo 每次都要本地环境生成 html 再上传（除非像楼上建议的自己搭建一个自动构建服务，甚至还可能需要服务器），而 jeklly 可以直接修改 md 文件就生效了    &lt;br /&gt;    &lt;br /&gt;这个就是核心优势，能省下使用者对环境、设备同步的顾虑    &lt;br /&gt;    &lt;br /&gt;很多人提到了各种在线构建，谢谢建议    &lt;br /&gt;但是 2022 年了 搭建个好用的博客还需要这么繁琐吗 ？    &lt;br /&gt;“ CloudFlare Pages, Vercel, Netlify, Surge, Render CI/CD ”    &lt;br /&gt;这些东西我没用过，虽然我有信心跟着各位大佬的教程折腾个一下午 /一晚上肯定能搞定，但我的核心目的是写博客，美观、好用就行了，能不去踩的坑就尽量不踩    &lt;br /&gt;省下来的时间多写一篇博客不香吗&lt;/div&gt;&lt;/div&gt;  &lt;div&gt;第 2 条附言  ·  161 天前   &lt;div&gt;&lt;/div&gt;   &lt;div&gt;同时也给后来看到这个帖子的人一些已知的信息吧：    &lt;br /&gt;hexo 可以额外再配合 GitHub Actions ，实现提交之后自动生成 html ，但是需要一个仓库存源码，需要自己研究这个流程    &lt;br /&gt;    &lt;br /&gt;jeklly 更过分，可以直接 fork 别人的模板，然后甚至只需要在线再 github 上改改配置、提交 md 就可以用了&lt;/div&gt;&lt;/div&gt;  &lt;div&gt;第 3 条附言  ·  161 天前   &lt;div&gt;&lt;/div&gt;   &lt;div&gt;最后我 fork 了一个 Jekyll 的主题 （ next ）    &lt;br /&gt;然后改了一些属性，再把文章从网页端提交 就搞定了！    &lt;br /&gt;全程没用命令行 电脑上没配环境 电脑甚至没 git    &lt;br /&gt;全都在网页端操作    &lt;br /&gt;非常方便&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
    &lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/62428-%E5%8D%9A%E5%AE%A2-hexo-jekyll</guid>
      <pubDate>Wed, 21 Sep 2022 17:00:26 CST</pubDate>
    </item>
    <item>
      <title>局域网内搭建浏览器可信任的SSL证书 – 唐玥璨 | 博客</title>
      <link>https://itindex.net/detail/62398-%E5%B1%80%E5%9F%9F%E7%BD%91-%E6%B5%8F%E8%A7%88%E5%99%A8-%E4%BF%A1%E4%BB%BB</link>
      <description>&lt;div&gt;    &lt;p&gt;首先是为什么要干这个事情，你可能会说随便搞个自签名证书难道不能用吗？答案是还真的不能用，的确对于开发来说搞个自签名的证书就行了。但是一旦放到生产环境浏览器对证书有效性进行验证的时候便是不可信状态，这时就必须要用户点击一下继续访问，但是对于我们即将实施项目的自动化要求来说没法这样干。你可能又会说了现在这个环境在阿里云、华为云这些平台上随便申请一个免费的证书难道不行吗？答案是真的不行，因为项目的特殊要求最终我们部署的环境是完全没有外网访问的，就只能在局域网环境下运行及意味着不光是      &lt;code&gt;SSL&lt;/code&gt;证书的问题我们连DNS服务器都要自己建。这时候你可能又要说了那么直接用      &lt;code&gt;http&lt;/code&gt;访问就可以了，干嘛要用      &lt;code&gt;ssl&lt;/code&gt;证书呀？答案是这个项目需要使用      &lt;code&gt;WebRTC&lt;/code&gt;进行音视频多人会议，而WebRTC只能在      &lt;code&gt;https&lt;/code&gt;下运行。&lt;/p&gt;    &lt;p&gt;其实上面的说法有一个点需要更正一下，自签名证书其实也可以但是一旦对超过100个客户端进行分发简直是要命的事情，所以我们通过Windows域控的方式统一对下属计算机进行证书分发保证可用性。&lt;/p&gt;    &lt;h2&gt;1.原理&lt;/h2&gt;    &lt;p&gt;SSL证书的信任机制其实是非常简单的，第一需要一个机构证书，第二是需要服务端证书，一般来说机构证书被称为CA证书，而服务端证书就称为服务器证书吧。那么为啥      &lt;code&gt;https&lt;/code&gt;非常安全呢？答案其实不复杂，下面就是一段逻辑性描述来说明为啥      &lt;code&gt;https&lt;/code&gt;是安全的。&lt;/p&gt;    &lt;p&gt;通常情况下我们在给Nginx、Tomcat、IIS上配置的证书便是服务器证书，那么它是怎么保证客户端访问的地址绝对没有被拦截修改的呢？其实也不复杂，当我们的浏览器发起一个请求的时候到服务端上时，对应web服务器会通过证书的秘钥将http响应值进行一次加密，然后将密文与明文同时返回出来，客户端浏览器接收到响应之后会将密文对称解码然后和明文进行对比，这样一来便可以保证响应值没有被串改。&lt;/p&gt;    &lt;p&gt;这个时候逻辑上稍微厉害一点都会发现一个问题，客户端是怎么解码的？这里的答案就是服务端在响应的时候同时会将证书的公钥也返回，这个公钥只能解码对应私钥加密的信息，同时这个公钥无法加密只能解密，这样一来如果如果某人想要拦截http请求便必须知道对应的私钥才行，否则浏览器一旦发现解密信息对不上便知道了响应数据已经被拦截修改过了。&lt;/p&gt;    &lt;p&gt;如果你反应过来了你会发现一个新的问题，那么假设拦截这自己搞了一对有效的私钥和公钥然后伪装为服务器不就行了，恭喜你盲生发现了华点。这里就需要CA证书来处理了。其实服务器证书的公钥是由CA证书的秘钥配对加密来的，这样一来当请求返回的服务器公钥和通过CA证书进行验证时便会发现这个公钥是不是由机构签发的公钥，一旦对应不上则说明服务器不是原来CA证书签发服务器证书，这就证明你的请求被第三方拦截了。同时CA证书对于浏览器而言只有公钥，也就是说安装证书时本质上就是将CA证书的公钥导入到你的电脑上了，至此除开CA机构的证书发放者没有知道CA证书的秘钥是什么这样一来便可以保证下面几个非常关键的安全性：&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;你请求的服务绝对是官方的服务器，绝对不是黑客自建的服务器。&lt;/li&gt;      &lt;li&gt;服务器响应给你的数据绝对是正确的，期间黑客绝对无法对其进行修改。&lt;/li&gt;&lt;/ul&gt;    &lt;p&gt;证书的结构如下：&lt;/p&gt;    &lt;div&gt;      &lt;img alt="" height="797" src="https://www.tangyuecan.com/wp-content/uploads/2021/12/ssl.jpeg" width="998"&gt;&lt;/img&gt;&lt;/div&gt;    &lt;p&gt;这里还有一个问题便是这些CA证书是哪来的，自己的电脑上又重来没有导入过什么证书。这里便是一个非常无耻躺着赚钱的商业模式了，微软、谷歌、苹果等公司提供了操作系统和浏览器，他们便是第一方的CA机构，他们的系统自己肯定信任自己对吧？所以系统安装的时候他们的CA公钥已经安装到你们的系统里面了，然后这几家巨头合伙说那么这些CA公钥在每种系统都有，然后就是一写第三方公司和这些巨头打成了合作，这些公司的机构证书也被巨头们信任所以理所当然的入库了，这些三方机构便是大名鼎鼎的      &lt;code&gt;Symantec&lt;/code&gt;、      &lt;code&gt;GeoTrust&lt;/code&gt;、      &lt;code&gt;Let&amp;apos;s Encrypt&lt;/code&gt;几个巨头，这些机构一个单域名的签名证书都敢直接拿出来卖，一年好几千，对他们而言无法就是给下发的证书进行一次签名而已，真正的躺着赚钱。&lt;/p&gt;    &lt;h2&gt;2.开始制作证书&lt;/h2&gt;    &lt;p&gt;这里我使用的证书工具是      &lt;code&gt;openssl&lt;/code&gt;，经典工具，坦白的说非常难用。&lt;/p&gt;    &lt;h3&gt;2.1创建CA证书&lt;/h3&gt;    &lt;p&gt;首先第一步肯定是制作一个机构证书也就是CA证书出来，这里有两种方案，第一是直接用      &lt;code&gt;openssl&lt;/code&gt;创建CA证书，另一种是windows域控生成域组织的CA证书，我们分开说。&lt;/p&gt;    &lt;h4&gt;2.1.1通过      &lt;code&gt;openssl&lt;/code&gt;创建CA证书&lt;/h4&gt;    &lt;p&gt;第一步是创建一个秘钥，这个便是CA证书的根本，之后所有的东西都来自这个秘钥：&lt;/p&gt;    &lt;pre&gt;# 通过rsa算法生成2048位长度的秘钥
openssl genrsa -out myCA.key 2048&lt;/pre&gt;    &lt;p&gt;第二步是通过秘钥加密机构信息形成公钥：&lt;/p&gt;    &lt;pre&gt;# 公钥包含了机构信息，在输入下面的指令之后会有一系列的信息输入，这些信息便是机构信息，公司名称地址什么的
# 这里还有一个过期信息，CA证书也会过期，openssl默认是一个月，我们直接搞到100年
openssl req -new -x509 -key myCA.key -out myCA.cer -days 36500&lt;/pre&gt;    &lt;p&gt;这一步需要输入的机构信息有点，分别说一下：&lt;/p&gt;    &lt;table&gt;      &lt;tr&gt;        &lt;th&gt;参数名称&lt;/th&gt;        &lt;th&gt;参数值&lt;/th&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;Country Name&lt;/td&gt;        &lt;td&gt;国家代码，比如中国就是CN&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;State or Province Name&lt;/td&gt;        &lt;td&gt;省名称&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;Locality Name&lt;/td&gt;        &lt;td&gt;城市名称&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;Organization Name&lt;/td&gt;        &lt;td&gt;机构名称&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;Organizational Unit Name&lt;/td&gt;        &lt;td&gt;机构单位名称&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;Common Name&lt;/td&gt;        &lt;td&gt;          &lt;strong&gt;重点参数&lt;/strong&gt;：授权给什么，因为机构是根节点所以是授权给自己&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;Email Address&lt;/td&gt;        &lt;td&gt;邮件地址&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;    &lt;h4&gt;2.1.2通过windows域控创建CA证书&lt;/h4&gt;    &lt;p&gt;这种便是我采用的方案，执行上比直接用      &lt;code&gt;openssl&lt;/code&gt;创建证书复杂多了，但是好处也非常多，一方面域控下级的所有计算机天然对域控服务就是信任状态，第二是域控制器能够通过组策略域内同步CA证书，本质上来讲相对于多了一个CA证书同步与分发的机制。我这边使用的Windows Server 2016，其他版本区别也不大。&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;第一步是在域控上启用证书服务&lt;/strong&gt;&lt;/p&gt;    &lt;div&gt;      &lt;img alt="" height="671" src="https://www.tangyuecan.com/wp-content/uploads/2021/12/installssl1.png" width="1010"&gt;&lt;/img&gt;&lt;/div&gt;    &lt;div&gt;      &lt;img alt="" height="671" src="https://www.tangyuecan.com/wp-content/uploads/2021/12/installssl2.png" width="1010"&gt;&lt;/img&gt;&lt;/div&gt;    &lt;p&gt;      &lt;strong&gt;第二步是安装完毕之后配置证书&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;这里非常简单，我都不想说了，直接根据提示输入相关信息就行了，在过期时间那一步最好将时间拉长，我还是使用的100年。&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;第三步是通过组策略进行分发&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;策略路径是：      &lt;code&gt;计算机策略/Windows设置/安全设置/公钥策略/受信任的根证书颁发机构&lt;/code&gt;和      &lt;code&gt;计算机策略/Windows设置/安全设置/公钥策略/受信任的发布者证书&lt;/code&gt;。将上面创建的证书导出之后，在这里导入即可。&lt;/p&gt;    &lt;h3&gt;2.2创建服务器证书&lt;/h3&gt;    &lt;p&gt;在得到CA证书之后，需要通过      &lt;code&gt;openssl&lt;/code&gt;工具对证书进行转换得到公钥（      &lt;code&gt;.crt文件&lt;/code&gt;）和密钥（      &lt;code&gt;.key文件&lt;/code&gt;），无论CA证书是怎么来的到这里之后就没有任何区别了，服务器证书的制作流程相较CA证书要复杂一点点。&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;第一步通过        &lt;code&gt;openssl&lt;/code&gt;工具创建服务器的秘钥：&lt;/strong&gt;&lt;/p&gt;    &lt;pre&gt;# 通过RSA算法生成长度2048位的秘钥
openssl genrsa -out server.key 2048&lt;/pre&gt;    &lt;p&gt;      &lt;strong&gt;第二步这里是创建一个签名请求&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;需要将服务器信息写入到请求文件之中，然后通过CA机构证书对请求签名形成服务器证书公钥，这一步要复杂一些，很多网上的教程在这里都GG了主要原因没有把原理搞清楚。&lt;/p&gt;    &lt;p&gt;首先      &lt;code&gt;https&lt;/code&gt;证书的公钥不同于自定义情况下的加密证书，这里需要安装浏览器标准进行配置，首先      &lt;code&gt;openssl&lt;/code&gt;默认的证书版本是V1，V1在支持      &lt;code&gt;https&lt;/code&gt;时部分浏览器依旧会认为不安全，所以需要使用V3版本；同时      &lt;code&gt;openssl&lt;/code&gt;即便是使用V3版本依旧没有附带V3的      &lt;code&gt;subjectAltName&lt;/code&gt;字段数据（这里是证书对应的IP地址或者域名，可以用通配符）。但是这些东西命令行没法指定所以需要配置文件，我这里准备了一个：&lt;/p&gt;    &lt;pre&gt;tsa_policy2 = 1.2.3.4.5.6
tsa_policy3 = 1.2.3.4.5.7

[ ca ]
default_ca = CA_default  # The default ca section

[ CA_default ]
dir  = ./demoCA  # Where everything is kept
certs  = $dir/certs  # Where the issued certs are kept
crl_dir  = $dir/crl  # Where the issued crl are kept
database = $dir/index.txt # database index file.
new_certs_dir = $dir/newcerts  # default place for new certs.
certificate = $dir/cacert.pem  # The CA certificate
serial  = $dir/serial   # The current serial number
crlnumber = $dir/crlnumber # the current crl number
crl  = $dir/crl.pem   # The current CRL
private_key = $dir/private/cakey.pem# The private key
RANDFILE = $dir/private/.rand # private random number file
x509_extensions = usr_cert  # The extentions to add to the cert
name_opt  = ca_default  # Subject Name options
cert_opt  = ca_default  # Certificate field options
default_days = 365   # how long to certify for
default_crl_days= 30   # how long before next CRL
default_md = default  # use public key default MD
preserve = no   # keep passed DN ordering
policy  = policy_match

[ policy_match ]
countryName  = match
stateOrProvinceName = match
organizationName = match
organizationalUnitName = optional
commonName  = supplied
emailAddress  = optional

[ policy_anything ]
countryName  = optional
stateOrProvinceName = optional
localityName  = optional
organizationName = optional
organizationalUnitName = optional
commonName  = supplied
emailAddress  = optional

[ req ]
default_bits  = 1024
default_keyfile  = privkey.pem
distinguished_name = req_distinguished_name
attributes  = req_attributes
x509_extensions = v3_ca # The extentions to add to the self signed cert
string_mask = utf8only
req_extensions = v3_req # The extensions to add to a certificate request

[ req_distinguished_name ]
countryName   = Country Name (2 letter code)
countryName_default  = CN
countryName_min   = 2
countryName_max   = 2

stateOrProvinceName  = State or Province Name (full name)
stateOrProvinceName_default = BeiJing

localityName   = Locality Name (eg, city)

0.organizationName  = Organization Name (eg, company)
0.organizationName_default = myca
organizationalUnitName  = Organizational Unit Name (eg, section)
commonName   = Common Name (e.g. server FQDN or YOUR name)
commonName_max   = 64
emailAddress   = Email Address
emailAddress_max  = 64

[ req_attributes ]
challengePassword  = A challenge password
challengePassword_min  = 4
challengePassword_max  = 20
unstructuredName  = An optional company name

[ usr_cert ]
basicConstraints=CA:FALSE
nsCertType = client, email, objsign
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
nsComment   = &amp;quot;OpenSSL Generated Certificate&amp;quot;
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer

[ svr_cert ]
basicConstraints=CA:FALSE
nsCertType   = server
keyUsage = nonRepudiation, digitalSignature, keyEncipherment, dataEncipherment, keyAgreement
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer
extendedKeyUsage = serverAuth,clientAuth

[ v3_req ]
subjectAltName = @alt_names

# 这里是重点，需要将里面配置为最终服务端需要的域名或者IP
# 这里可以写多个，能够自行添加DNS.X = XXXXXX
[ alt_names ]
DNS.1 = xunshi.com
DNS.2 = *.xunshi.com

[ v3_ca ]
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer
basicConstraints = CA:true

[ crl_ext ]
authorityKeyIdentifier=keyid:always

[ proxy_cert_ext ]
basicConstraints=CA:FALSE
nsComment   = &amp;quot;OpenSSL Generated Certificate&amp;quot;
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer
proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo

[ tsa ]
default_tsa = tsa_config1 # the default TSA section

[ tsa_config1 ]
dir  = ./demoCA  # TSA root directory
serial  = $dir/tsaserial # The current serial number (mandatory)
crypto_device = builtin  # OpenSSL engine to use for signing
signer_cert = $dir/tsacert.pem  # The TSA signing certificate
     # (optional)
certs  = $dir/cacert.pem # Certificate chain to include in reply
     # (optional)
signer_key = $dir/private/tsakey.pem # The TSA private key (optional)

default_policy = tsa_policy1  # Policy if request did not specify it
     # (optional)
other_policies = tsa_policy2, tsa_policy3 # acceptable policies (optional)
digests  = md5, sha1  # Acceptable message digests (mandatory)
accuracy = secs:1, millisecs:500, microsecs:100 # (optional)
clock_precision_digits  = 0 # number of digits after dot. (optional)
ordering  = yes # Is ordering defined for timestamps?
    # (optional, default: no)
tsa_name  = yes # Must the TSA name be included in the reply?
    # (optional, default: no)
ess_cert_id_chain = no # Must the ESS cert id chain be included?
    # (optional, default: no)&lt;/pre&gt;    &lt;p&gt;将上面的配置内容保存为      &lt;code&gt;openssl.cnf&lt;/code&gt;放到生成的服务器证书文件的目录下（      &lt;strong&gt;注意&lt;/strong&gt;：修改alt_names里面的域名或者IP为最终部署需要的地址，支持通配符），然后执行创建签名申请文件即可，执行运行：&lt;/p&gt;    &lt;pre&gt;# 和创建CA时一样这里需要输入一堆服务器信息，输入项也是相同的。
# 不过在输入Common Name（CN）最好直接输入服务器的IP地址或者域名。
openssl req -config openssl.cnf -new -out server.req -key server.key&lt;/pre&gt;    &lt;p&gt;      &lt;strong&gt;第三步通过CA机构证书对服务器证书进行签名认证&lt;/strong&gt;&lt;/p&gt;    &lt;pre&gt;# 这里没有什么需要说的，本质上就是将签名请求文件进行签名最终得到服务器的公钥
openssl x509 -req  -extfile openssl.cnf -extensions v3_req -in server.req -out server.cer -CAkey myCA.key -CA myCA.cer -days 36500 -CAcreateserial -CAserial serial&lt;/pre&gt;    &lt;p&gt;      &lt;strong&gt;第四步部署证书&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;这里应该没有什么需要说的了，我们通过Nginx部署，最终得到      &lt;code&gt;server.key&lt;/code&gt;就是秘钥，      &lt;code&gt;server.cer&lt;/code&gt;文件就是公钥只需要配置给Nginx就行了。&lt;/p&gt;    &lt;h2&gt;3.信任CA机构证书&lt;/h2&gt;    &lt;p&gt;如果通过Windows域控创建的CA证书，其证书本身通过组策略便可以给每一个域下计算机添加机构信任。如果你没有域控只是通过      &lt;code&gt;openssl&lt;/code&gt;创建的CA证书也没有关系，只需要将CA证书的公钥（      &lt;code&gt;myCA.cer文件&lt;/code&gt;）导入到系统信任的根证书颁发机构里面就行了：&lt;/p&gt;    &lt;div&gt;      &lt;img alt="" height="603" src="https://www.tangyuecan.com/wp-content/uploads/2021/12/addssltosystem.png" width="592"&gt;&lt;/img&gt;&lt;/div&gt;    &lt;p&gt;这个界面在windows的      &lt;code&gt;internet选型-&amp;gt;内容-&amp;gt;证书&lt;/code&gt;可以打开，导入即可，也可以直接双击      &lt;code&gt;cer&lt;/code&gt;文件进行证书安装，最终不光是windows系统，任何操作系统都可以安装证书来进行对CA机构的进行信任操作。&lt;/p&gt;    &lt;p&gt;在对证书进行信任之后通过https打开浏览器进入内网      &lt;code&gt;DNS&lt;/code&gt;或者      &lt;code&gt;host&lt;/code&gt;配置的域名便可以得到没有任何警告的内容的安全连接：&lt;/p&gt;    &lt;div&gt;      &lt;img alt="" height="320" src="https://www.tangyuecan.com/wp-content/uploads/2021/12/https-1024x320.png" width="1024"&gt;&lt;/img&gt;&lt;/div&gt;    &lt;p&gt;如果是Mac系统访问逻辑也是一样的通过安装CA证书并且在钥匙串内添加信任之后依然可以正常访问：&lt;/p&gt;    &lt;div&gt;      &lt;img alt="" height="296" src="https://www.tangyuecan.com/wp-content/uploads/2021/12/&amp;#24494;&amp;#20449;&amp;#25130;&amp;#22270;_20211217154554.png" width="585"&gt;&lt;/img&gt;&lt;/div&gt;    &lt;p&gt;在Android手机上也是一样，安装并且信任证书之后可以正常访问：&lt;/p&gt;    &lt;div&gt;      &lt;img alt="" height="378" src="https://www.tangyuecan.com/wp-content/uploads/2021/12/&amp;#24494;&amp;#20449;&amp;#25130;&amp;#22270;_20211217155104.png" width="422"&gt;&lt;/img&gt;&lt;/div&gt;    &lt;h2&gt;4.总结&lt;/h2&gt;    &lt;p&gt;本来对我对      &lt;code&gt;https&lt;/code&gt;的认证逻辑其实理解没有多深入，以前也只是用过SSL证书进行TCP传输加密而已，经过对      &lt;code&gt;openssl&lt;/code&gt;的学习现在至少在理解上达到了及格水平，不过这次学习论证与探索的过程我个人极其不愉快，本来这东西在有了理解之后大家都看得出来不是什么很难的东西，事实上我也只用了一天半就搞定了。但是网上充斥大量垃圾内容，不光没有什么正向内容甚至不少内容还TM起了误导的作用，整个中文互联网检索体系下就没有找到一篇文章稍微详细描述整个搭建逻辑与流程，简直了，最终我只能从      &lt;code&gt;https&lt;/code&gt;原理和      &lt;code&gt;openssl&lt;/code&gt;的官方文档开始看起，过于离谱了。基本上可以得到一个结论现在天天写一些所谓干货的博主简直就是滥竽充数，其内容千篇一律大多数也是抄袭来的基本上什么都没有说清楚简直浪费时间。&lt;/p&gt;    &lt;p&gt;最后说一下      &lt;code&gt;https&lt;/code&gt;的原理，在解释清楚之后其实不是绝对上的安全，结合本文各位可以想一下怎样去伪造一个页面出来？假设我是黑客来搞入侵其实只需要一个小小的脚本就可以了，我们自行制作CA和服务证书之后，通过修改HOST文件对域名解析进行劫持将其引导到我们自己的服务器，然后将我们自己制作CA证书注入目标电脑的受信任证书组，这样一来对于被入侵者已经看到是安全连接但是其请求已经被我们拦截了。所以各位不要看到https就以为安全了，一旦你的电脑本身就被入侵了那么      &lt;code&gt;https&lt;/code&gt;也是形同虚设的，所以在执行高风险操作的时候最好还是点开站点的证书看看对应的CA机构是不是被修改过。&lt;/p&gt;&lt;/div&gt;
    &lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/62398-%E5%B1%80%E5%9F%9F%E7%BD%91-%E6%B5%8F%E8%A7%88%E5%99%A8-%E4%BF%A1%E4%BB%BB</guid>
      <pubDate>Fri, 02 Sep 2022 14:55:15 CST</pubDate>
    </item>
    <item>
      <title>Elasticsearch深度应用（上） - 女友在高考 - 博客园</title>
      <link>https://itindex.net/detail/62323-elasticsearch-%E6%B7%B1%E5%BA%A6-%E5%BA%94%E7%94%A8</link>
      <description>&lt;div&gt;    &lt;h3&gt;索引文档写入和近实时搜索原理&lt;/h3&gt;    &lt;p&gt;      &lt;strong&gt;基本概念&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;Segments in Lucene&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;众所周知，Elasticsearch存储的基本单元是shard，ES中一个index可能分为多个shard，事实上每个shard都是一个Lucece的Index，并且每个Lucece Index由多个Segment组成，每个Segment事实上是一些倒排索引的集合，每次创建一个新的Document，都会归属一个新的Segment，而不会去修改原来的Segment。且每次的文档删除操作，仅仅会标记Segment的一个删除状态，而不会真正立马物理删除。所以说ES的Index可以理解为一个抽象的概念。如下图所示：&lt;/p&gt;    &lt;p&gt;      &lt;img alt="" src="https://img2022.cnblogs.com/blog/1178991/202207/1178991-20220705221417374-846917018.png"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;Commits in Lucene&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;Commit操作意味着将Segment合并，并写入磁盘。保证内存数据不丢失。但刷盘是很重的IO操作，所以为了性能不会刷盘那么及时。&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;Translog&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;新文档被索引意味着文档首先写入内存buffer和translog文件。每个shard都对应一个translog文件。&lt;/p&gt;    &lt;p&gt;      &lt;img alt="" src="https://img2022.cnblogs.com/blog/1178991/202207/1178991-20220705222444832-524022514.png"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;Refresh in Elasticsearch&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;在Elasticsearch种，_refresh操作默认每秒执行一次，意味着将内存buffer的数据写入到一个新的Segment中，这个时候索引变成了可被检索的。写入新Segment后会清空内存。&lt;/p&gt;    &lt;p&gt;      &lt;img alt="" src="https://img2022.cnblogs.com/blog/1178991/202207/1178991-20220705222504624-2028885157.png"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;Flush in Elasticsearch&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;Flush操作意味着内存buffer的数据全都写入新的Segment中，并将内存中所有的Segments全部刷盘，并且清空translog日志的过程。&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;近实时搜索&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;提交一个新的段到磁盘需要一个fsync来确保段被物理性的写入磁盘，这样在断电的时候就不会丢数据。但是fsync操作代价很大，如果每次索引一个文档都去执行一次的话就会造成很大的性能问题。&lt;/p&gt;    &lt;p&gt;像之前描述的一样，在内存索引缓冲区中的文档会被写入到一个新的段中。但是这里新段会被先写入到文件系统缓存--这一步代价会比较低，稍后再被刷新到磁盘（这一步代价比较高）。不过只要文件已经在系统缓存中，就可以像其它文件一样被打开和读取了。&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;原理：&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;当一个写请求发送到es后，es将数据写入memory buffer中，并添加事务日志（translog）。如果每次一条数据写入内存后立即写到硬盘文件上，由于写入的数据肯定是离散的，因此写入硬盘的操作也就是随机写入了。硬盘随机写入的效率相当低，会严重降低es的性能。&lt;/p&gt;    &lt;p&gt;因此es在设计时在memory buffer和硬盘间加入了Linux的高速缓存（Filesy stemcache）来提高es的写效率。当写请求发送到es后，es将数据暂时写入memory buffer中，此时写入的数据还不能被查询到。默认设置下，es每1秒钟将memory buffer中的数据refresh到Linux的Filesy stemcache，并清空memory buffer，此时写入的数据就可以被查询到了。&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;Refresh API&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;在Elasticsearch中，写入和打开一个新段的轻量的过程叫做refresh。默认情况下每个分片会每秒自动刷新一次。这就是为什么我们说Elasticsearch是近实时搜索：文档的变化并不是立即对搜索可见，但会在一秒之内变为可见。&lt;/p&gt;    &lt;p&gt;这些行为可能会对新用户造成困惑：他们索引了一个文档然后尝试搜索它，但却没有搜到。这个问题的解决办法是用refresh API执行一次手动刷新:&lt;/p&gt;    &lt;ol&gt;      &lt;li&gt;刷新所有索引&lt;/li&gt;&lt;/ol&gt;    &lt;pre&gt;      &lt;code&gt;POST /_refresh&lt;/code&gt;&lt;/pre&gt;    &lt;ol start="2"&gt;      &lt;li&gt;只刷新某一个索引&lt;/li&gt;&lt;/ol&gt;    &lt;pre&gt;      &lt;code&gt;POST /索引名/_refresh&lt;/code&gt;&lt;/pre&gt;    &lt;ol start="3"&gt;      &lt;li&gt;只刷新某一个文档&lt;/li&gt;&lt;/ol&gt;    &lt;pre&gt;      &lt;code&gt;PUT /索引名/_doc/{id}?refresh
{&amp;quot;test&amp;quot;:&amp;quot;test&amp;quot;}&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;并不是所有的情况都需要每秒刷新。可能你正在使用Elasticsearch索引大量的日志文件，你可能想优化索引速度而不是近实时搜索，可以通过设置refresh_interval，降低每个索引的刷新频率。&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;PUT /my_logs
{ 
&amp;quot;settings&amp;quot;: { &amp;quot;refresh_interval&amp;quot;: &amp;quot;30s&amp;quot; }
}&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;refresh_interval可以在既存索引上进行动态更新。在生产环境中，当你正在建立一个大的新索引时，可以先关闭自动刷新，待开始使用该索引时，再把它们调回来。&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;PUT /my_logs/_settings
{ &amp;quot;refresh_interval&amp;quot;: -1 }&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;      &lt;strong&gt;持久化变更&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;如果没有用fsync把数据从文件系统缓存刷（flush）到硬盘，我们不能保证数据在断电甚至是程序正常退出之后依然存在。为了保证Elasticsearch的可靠性，需要确保数据变化被持久化到磁盘。&lt;/p&gt;    &lt;p&gt;在动态更新索引时，我们说一次完整的提交会将段刷到磁盘，并写入一个包含所有段列表的提交点。Elasticsearch在启动或重新打开一个索引的过程中使用这个提交点来判断哪些段隶属于当前分片。&lt;/p&gt;    &lt;p&gt;即使通过每秒刷新（refresh）实现了近实时搜索，我们仍然需要经常进行完整提交来确保能从失败中恢复。但在两次提交之间发生变化的文档怎么办？我们也不希望丢失掉这些数据。Elasticsearch增加了一个translog，或者叫事务日志，在每一次对Elasticsearch进行操作时均进行了日志记录。&lt;/p&gt;    &lt;p&gt;整个流程如下：&lt;/p&gt;    &lt;ol&gt;      &lt;li&gt;一个文档被索引之后，就会被添加到内存缓冲区，并且追加到了translog。如下图：&lt;/li&gt;&lt;/ol&gt;    &lt;p&gt;      &lt;img alt="" src="https://img2022.cnblogs.com/blog/1178991/202207/1178991-20220705231224141-1280888697.png"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;ol start="2"&gt;      &lt;li&gt;        &lt;p&gt;分片每秒refres一次，refresh完成后，缓存被清空          &lt;br /&gt;          &lt;img alt="" src="https://img2022.cnblogs.com/blog/1178991/202207/1178991-20220705231254521-1711236768.png"&gt;&lt;/img&gt;&lt;/p&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;这个进程继续工作，更多的文档被添加到内存缓冲区和追加到事务日志&lt;/p&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;每隔一段时间--例如translog变得越来越大--索引被刷新（flush）；一个新的translog被创建，并且一个全量提交被执行。&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;    &lt;ul&gt;      &lt;li&gt;所有在内存缓冲区的文档被写入一个新的段&lt;/li&gt;      &lt;li&gt;缓冲区被清空&lt;/li&gt;      &lt;li&gt;一个提交点被写入磁盘&lt;/li&gt;      &lt;li&gt;文件系统缓存通过fsync被刷新（flush）&lt;/li&gt;      &lt;li&gt;老的translog被删除&lt;/li&gt;&lt;/ul&gt;    &lt;p&gt;      &lt;img alt="" src="https://img2022.cnblogs.com/blog/1178991/202207/1178991-20220705231626341-967178992.png"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;translog提供所有还没有被刷到磁盘的操作的一个持久化纪录。当Elasticsearch启动的时候，它会从磁盘中使用最后一个提交点去恢复已知的段，并且会重放translog中所有在最后一次提交后发生的变更操作。&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;Flush API&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;这个执行一个提交并且截断translog的行为在Es中被称为一次flush。分片每30分钟被自动刷新（flush），或者在translog太大的时候也会刷新。&lt;/p&gt;    &lt;p&gt;flush API 可以被用来执行手工的刷新&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;POST /索引名称/_flush

#刷新（flush）所有的索引并且等待所有刷新在返回前完成
POST /_flush?wait_for_ongoin&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;我们知道用fsync把数据从文件系统缓存flush到硬盘是安全的，那么如果我们觉得偶尔丢失几秒数据也没关系，可以启用async。&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;PUT /索引名/_settings {
&amp;quot;index.translog.durability&amp;quot;: &amp;quot;async&amp;quot;,
&amp;quot;index.translog.sync_interval&amp;quot;: &amp;quot;5s&amp;quot;
}&lt;/code&gt;&lt;/pre&gt;    &lt;h3&gt;索引文档存储段合并机制&lt;/h3&gt;    &lt;p&gt;由于自动刷新流程每秒会创建一个新的段，这样会导致短时间内的段数量暴增。而段数目太多会带来较大的麻烦。每一个段都会消耗文件句柄、内存和CPU运行周期。更重要的是，每个搜索请求都必须轮流检查每个段；所以段越多，搜索也就越慢。&lt;/p&gt;    &lt;p&gt;Elasticsearch通过在后台进行段合并来解决这个问题。小的段被合并到大的段，然后这些大的段再被合并到更大的段。段合并的时候会将那些旧的已删除文档从文件系统中清除。被删除的文档（或被更新文档的旧版本）不会被拷贝到新的大段中。&lt;/p&gt;    &lt;p&gt;合并大的段需要消耗大量的I/O和CPU资源，如果任其发展会影响搜索性能。Elasticsearch在默认情况下会对合并流程进行资源限制，所以搜索仍然有足够的资源很好地执行。默认情况下，归并线程的限速配置indices.store.throttle.max_bytes_per_sec是20MB。对于写入量较大，磁盘转速较高，甚至使用SSD盘的服务器来说，这个限速是明显过低的。对于ELKStack应用，建议可以适当调大到100MB或者更高。&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;PUT /_cluster/settings
{
  &amp;quot;persistent&amp;quot; : {
  &amp;quot;indices.store.throttle.max_bytes_per_sec&amp;quot; : &amp;quot;100mb&amp;quot;
  }
}&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;      &lt;strong&gt;归并策略&lt;/strong&gt;&lt;/p&gt;    &lt;blockquote&gt;      &lt;p&gt;归并线程是按照一定的运行策略来挑选 segment 进行归并的。主要有以下几条：&lt;/p&gt;&lt;/blockquote&gt;    &lt;blockquote&gt;      &lt;p&gt;index.merge.policy.floor_segment默认2MB，小于这个大小的segment，优先被归并。&lt;/p&gt;&lt;/blockquote&gt;    &lt;blockquote&gt;      &lt;p&gt;index.merge.policy.max_merge_at_once默认一次最多归并10个segment&lt;/p&gt;&lt;/blockquote&gt;    &lt;blockquote&gt;      &lt;p&gt;index.merge.policy.max_merge_at_once_explicit默认optimize时一次最多归并30个segment。&lt;/p&gt;&lt;/blockquote&gt;    &lt;blockquote&gt;      &lt;p&gt;index.merge.policy.max_merged_segment默认5GB，大于这个大小的segment，不用参与归并。optimize除外&lt;/p&gt;&lt;/blockquote&gt;    &lt;p&gt;      &lt;strong&gt;optimize API&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;optimizeAPI大可看做是强制合并API。它会将一个分片强制合并到max_num_segments参数指定大小的段数目。这样做的意图是减少段的数量（通常减少到一个），来提升搜索性能。&lt;/p&gt;    &lt;p&gt;在特定情况下，使用optimizeAPI颇有益处。例如在日志这种用例下，每天、每周、每月的日志被存储在一个索引中。老的索引实质上是只读的；它们也并不太可能会发生变化。在这种情况下，使用optimize优化老的索引，将每一个分片合并为一个单独的段就很有用了；这样既可以节省资源，也可以使搜索更加快速。&lt;/p&gt;    &lt;p&gt;api:&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;POST /logstash-2014-10/_optimize?max_num_segments=1&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;java api:&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;forceMergeRequest.maxNumSegments(1)&lt;/code&gt;&lt;/pre&gt;    &lt;h3&gt;Es乐观锁&lt;/h3&gt;    &lt;p&gt;Es的后台是多线程异步的，多个请求之间没有顺序，可能后发起修改请求的先被执行。Es的并发是基于自己的_version版本号进行并发控制的。&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;1. 基于seq_no&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;乐观锁示例：&lt;/p&gt;    &lt;p&gt;先新增一条数据&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;PUT /item/_doc/4
{
  &amp;quot;date&amp;quot;:&amp;quot;2022-07-01 01:00:00&amp;quot;,
  &amp;quot;images&amp;quot;:&amp;quot;aaa&amp;quot;,
  &amp;quot;price&amp;quot;:22,
  &amp;quot;title&amp;quot;:&amp;quot;先&amp;quot;
}&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;查询：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;GET /item/_doc/4&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;可以查出我们的seq_no和primary_term&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;{
  &amp;quot;_index&amp;quot; : &amp;quot;item&amp;quot;,
  &amp;quot;_type&amp;quot; : &amp;quot;_doc&amp;quot;,
  &amp;quot;_id&amp;quot; : &amp;quot;4&amp;quot;,
  &amp;quot;_version&amp;quot; : 5,
  &amp;quot;_seq_no&amp;quot; : 12,
  &amp;quot;_primary_term&amp;quot; : 5,
  &amp;quot;found&amp;quot; : true,
  &amp;quot;_source&amp;quot; : {
    &amp;quot;date&amp;quot; : &amp;quot;2022-07-01 01:00:00&amp;quot;,
    &amp;quot;images&amp;quot; : &amp;quot;aaa&amp;quot;,
    &amp;quot;price&amp;quot; : 33,
    &amp;quot;title&amp;quot; : &amp;quot;先&amp;quot;
  }
}&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;然后两个客户端都根据这个seq_no和primary_term去修改数据，会有一个提示异常的。&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;PUT /item/_doc/4?if_seq_no=12&amp;amp;if_primary_term=5
{
  &amp;quot;date&amp;quot;:&amp;quot;2022-07-01 01:00:00&amp;quot;,
  &amp;quot;images&amp;quot;:&amp;quot;aaa&amp;quot;,
  &amp;quot;price&amp;quot;:33,
  &amp;quot;title&amp;quot;:&amp;quot;先&amp;quot;
}&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;      &lt;strong&gt;2. 基于external version&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;es提供了一个功能，不用它内部的_version来进行并发控制，你可以根据你自己维护的版本号进行并发控制。&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;?version=1&amp;amp;version_type=external&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;区别在于，version方式，只有当你提供的version与es中的version一模一样的时候，才可以进行修改，只要不一样，就报错。当version_type=external的时候，只有当你提供的version比es中的_version大的时候，才能完成修改&lt;/p&gt;    &lt;p&gt;示例：&lt;/p&gt;    &lt;p&gt;我先查出目前的version为7&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;{
  &amp;quot;_index&amp;quot; : &amp;quot;item&amp;quot;,
  &amp;quot;_type&amp;quot; : &amp;quot;_doc&amp;quot;,
  &amp;quot;_id&amp;quot; : &amp;quot;4&amp;quot;,
  &amp;quot;_version&amp;quot; : 7,
  &amp;quot;_seq_no&amp;quot; : 14,
  &amp;quot;_primary_term&amp;quot; : 5,
  &amp;quot;found&amp;quot; : true,
  &amp;quot;_source&amp;quot; : {
    &amp;quot;date&amp;quot; : &amp;quot;2022-07-01 01:00:00&amp;quot;,
    &amp;quot;images&amp;quot; : &amp;quot;aaa&amp;quot;,
    &amp;quot;price&amp;quot; : 33,
    &amp;quot;title&amp;quot; : &amp;quot;先&amp;quot;
  }
}&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;只有设置为8才能成功修改了&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;PUT /item/_doc/4?version=8&amp;amp;version_type=external
{
  &amp;quot;title&amp;quot;:&amp;quot;先&amp;quot;
}&lt;/code&gt;&lt;/pre&gt;    &lt;h3&gt;分布式数据一致性如何保证&lt;/h3&gt;    &lt;p&gt;es5.0版本后&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;PUT /test_index/_doc/1?wait_for_active_shards=2&amp;amp;timeout=10s
{
  &amp;quot;name&amp;quot;:&amp;quot;xiao mi&amp;quot;
}&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;这代表着所有的shard中必须要有2个处于active状态才能执行成功，否则10s后超时报错。&lt;/p&gt;&lt;/div&gt;
    &lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/62323-elasticsearch-%E6%B7%B1%E5%BA%A6-%E5%BA%94%E7%94%A8</guid>
      <pubDate>Sat, 09 Jul 2022 14:17:14 CST</pubDate>
    </item>
    <item>
      <title>Elasticsearch深度应用（下） - 女友在高考 - 博客园</title>
      <link>https://itindex.net/detail/62322-elasticsearch-%E6%B7%B1%E5%BA%A6-%E5%BA%94%E7%94%A8</link>
      <description>&lt;div&gt;    &lt;h3&gt;Query文档搜索机制剖析&lt;/h3&gt;    &lt;p&gt;      &lt;strong&gt;1. query then fetch(默认搜索方式)&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;搜索步骤如下：&lt;/p&gt;    &lt;ol&gt;      &lt;li&gt;发送查询到每个shard&lt;/li&gt;      &lt;li&gt;找到所有匹配的文档，并使用本地的Term/Document Frequery信息进行打分&lt;/li&gt;      &lt;li&gt;对结果构建一个优先队列&lt;/li&gt;      &lt;li&gt;返回关于结果的元数据到请求节点。注意，实际文档还没有发送，只是分数&lt;/li&gt;      &lt;li&gt;来自所有shard的分数合并起来，并在请求节点上进行排序，文档被按照查询要去进行选择&lt;/li&gt;      &lt;li&gt;最终，实际文档从它们各自所在的独立的shard上检索出来&lt;/li&gt;      &lt;li&gt;结果被返回给用户&lt;/li&gt;&lt;/ol&gt;    &lt;p&gt;优点：返回的数据量是准确的&lt;/p&gt;    &lt;p&gt;缺点：性能一般，并且数据排名不准确&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;2. dfs query then fetch&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;比前面的方式多了一个DFS步骤。也就是查询之前，先对所有分片发送请求，把所有分片中的词频和文档频率等打分依据全部汇总到一块，再执行后面的操作。&lt;/p&gt;    &lt;p&gt;详细步骤如下：&lt;/p&gt;    &lt;ol&gt;      &lt;li&gt;预查询每个shard，询问Term和Document frequency&lt;/li&gt;      &lt;li&gt;发送查询到每个shard&lt;/li&gt;      &lt;li&gt;找到所有匹配的文档，并使用全局的Term/Document Frequency信息进行打分&lt;/li&gt;      &lt;li&gt;对结果构建一个优先队列&lt;/li&gt;      &lt;li&gt;返回关于结果的元数据到请求节点。注意，实际文档还没有发送，只是分数。&lt;/li&gt;      &lt;li&gt;来自所有shard的分数合并起来，并在请求节点进行排序，文档被按照查询要求进行选择&lt;/li&gt;      &lt;li&gt;最终，实际文档从它们各自所在的独立的shard上检索出来&lt;/li&gt;      &lt;li&gt;结果被返回给用户&lt;/li&gt;&lt;/ol&gt;    &lt;p&gt;优点：返回的数据和数据排名都是准确的&lt;/p&gt;    &lt;p&gt;缺点：性能较差&lt;/p&gt;    &lt;h3&gt;文档增删改和搜索的请求过程&lt;/h3&gt;    &lt;p&gt;      &lt;strong&gt;增删改流程&lt;/strong&gt;&lt;/p&gt;    &lt;ol&gt;      &lt;li&gt;客户端首先会选择一个节点发送请求过去，这个节点可能是协调节点&lt;/li&gt;      &lt;li&gt;协调节点会对document数据进行路由，将请求转发给对应的node&lt;/li&gt;      &lt;li&gt;实际上node的primary shard会处理请求，然后将数据同步到对应的含有replica shard的node上&lt;/li&gt;      &lt;li&gt;协调节点如果发现含有primary shard的节点和含有replica shard的节点的符合要求的数量后，就会将响应结果返回给客户端&lt;/li&gt;&lt;/ol&gt;    &lt;p&gt;      &lt;strong&gt;搜索流程&lt;/strong&gt;&lt;/p&gt;    &lt;ol&gt;      &lt;li&gt;客户端首先会选择一个节点发送请求获取，这个节点可能是协调节点&lt;/li&gt;      &lt;li&gt;协调节点将搜索请求转发到所有shard对应的primary shard或replica shard都可以&lt;/li&gt;      &lt;li&gt;query phase：每个shard将自己搜索结果的元数据发到请求节点（doc id和打分信息），由请求节点进行数据的合并、排序、分页等操作，产出最后结果&lt;/li&gt;      &lt;li&gt;fetch phase：请求节点根据doc id去各个节点上拉取实际的document数据，最终返回给客户端。&lt;/li&gt;&lt;/ol&gt;    &lt;h3&gt;排序详解&lt;/h3&gt;    &lt;p&gt;说到排序，我们必须要说Doc Values这个东西。那么Doc Values是什么呢？又有什么作用？&lt;/p&gt;    &lt;p&gt;我们都知道ES之所以那么快速，归功于他的倒排索引的设计，然而他也不是万能的，倒排索引的检索性能是非常快的，但是在字段值排序时却不是理想的结构。      &lt;br /&gt;      &lt;img alt="" src="https://img2022.cnblogs.com/blog/1178991/202207/1178991-20220707205501496-271284667.png"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;如上表可以看出，他只有词对应的doc，但是并不知道每一个doc中的内容，那么如果想要排序的话每一个doc都去获取一次文档内容岂不非常耗时？Doc Values的出现就是解决这个问题。&lt;/p&gt;    &lt;p&gt;Doc Values是可以根据doc_values属性进行配置的，默认为true。当配置为false时，无法基于该字段排序、聚合、在脚本中访问字段值。&lt;/p&gt;    &lt;p&gt;Doc Values是转置倒排索引和正排索引的关系来解决这个问题。倒排索引将词项映射到包含它们的文档，Doc Values将文档映射到它们包含的词项：&lt;/p&gt;    &lt;p&gt;      &lt;img alt="" src="https://img2022.cnblogs.com/blog/1178991/202207/1178991-20220707212402766-1800355834.png"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;当数据被转置后，想要收集到每个文档行，获取所有的词项就比较简单了。所以搜索使用倒排索引查找文档，聚合操作和排序就要使用Doc Values里面的数据。&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;深入理解Doc Values&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;Doc Values是在索引时与倒排索引同时生成。也就是说Doc Values和倒排索引一样，基于Segement生成并且是不可变的。同时Doc Values和倒排索引一样序列化到磁盘，这样对性能和扩展性有很大帮助。&lt;/p&gt;    &lt;p&gt;Doc Values通过序列化把数据结构持久化到磁盘，我们可以充分利用操作系统的内存，而不是JVM的Heap。当workingset远小于系统的可用内存，系统会自动将Doc Values保存在内存中，使得其读写十分高速；不过，当其远大于可用内存时，操作系统会自动把Doc Values写入磁盘。很显然，这样性能会比在内存中差很多，但是它的大小就不再局限于服务器的内存了。如果是使用JVM的Heap来实现是因为容易OutOfMemory导致程序崩溃了。&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;禁用Doc Values&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;Doc Values默认对所有字段启用，除了analyzed strings。也就是说所有的数字、地理坐标、日志、IP和不分析字符类型都会默认开启。&lt;/p&gt;    &lt;p&gt;analyzed strings暂时不能使用Doc Values，因为分析后会生成大量的Token，这样非常影响性能。虽然Doc Values非常好用，但是如果你存储的数据确实不需要这个特性，就不如禁用他，这样不仅节省磁盘空间，也许会提升索引的速度。&lt;/p&gt;    &lt;p&gt;要禁用Doc Values，在mapping设置即可。示例：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;PUT my_index
{
 &amp;quot;mappings&amp;quot;: {
    &amp;quot;properties&amp;quot;: {
      &amp;quot;session_id&amp;quot;: {
        &amp;quot;type&amp;quot;: &amp;quot;keyword&amp;quot;,
        &amp;quot;doc_values&amp;quot;: false
      }
    }
 }
}&lt;/code&gt;&lt;/pre&gt;    &lt;h3&gt;Filter过滤机制剖析&lt;/h3&gt;    &lt;ol&gt;      &lt;li&gt;在倒排索引中查找搜索串，获取docment list&lt;/li&gt;&lt;/ol&gt;    &lt;p&gt;如下面这个例子，需要过滤date为2020-02-02的数据，去倒排索引中查找，发现2020-02-02对应的document list是doc2、doc3.      &lt;br /&gt;      &lt;img alt="" src="https://img2022.cnblogs.com/blog/1178991/202207/1178991-20220707215059705-1281131994.png"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;ol start="2"&gt;      &lt;li&gt;Filter为每个倒排索引中搜索到的结果，构建一个bitset&lt;/li&gt;&lt;/ol&gt;    &lt;p&gt;如上面的例子，根据document list，构建的bitset是[0,1,1]，1代表匹配，0代表不匹配&lt;/p&gt;    &lt;ol start="3"&gt;      &lt;li&gt;多个过滤条件时，遍历每个过滤条件对应的bitset，优先从最稀疏的开始搜索，查找满足所有条件的document。&lt;/li&gt;&lt;/ol&gt;    &lt;p&gt;另外多个过滤条件时，先过滤比较稀疏的条件，能先过滤掉尽可能多的数据。&lt;/p&gt;    &lt;ol start="4"&gt;      &lt;li&gt;        &lt;p&gt;caching bitset，跟踪query，在最近256个query中超过一定次数的过滤条件，缓存其bitset。对于小的segment（记录数小于1000或小于总大小3%），不缓存。&lt;/p&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;如果document有新增或修改，那么cached bitset会被自动更新&lt;/p&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;filter大部分情况下，在query之前执行，先尽量过滤尽可能多的数据&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;    &lt;h3&gt;控制搜索精准度&lt;/h3&gt;    &lt;p&gt;      &lt;strong&gt;基于boost的权重控制&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;考虑如下场景：      &lt;br /&gt;我们搜索帖子，搜索标题包含java或spark或Hadoop或elasticsearch。但是需要优先输出包含java的，再输出spark的的，再输出Hadoop的，最后输出elasticsearch。&lt;/p&gt;    &lt;p&gt;我们先看如果不考虑优先级时怎么搜索：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;GET /article/_search
{
  &amp;quot;query&amp;quot;: {
    &amp;quot;bool&amp;quot;: {
      &amp;quot;should&amp;quot;: [
        {
          &amp;quot;term&amp;quot;: {
            &amp;quot;title&amp;quot;: {
              &amp;quot;value&amp;quot;: &amp;quot;java&amp;quot;
            }
          }
        },
        {
          &amp;quot;term&amp;quot;: {
            &amp;quot;title&amp;quot;: {
              &amp;quot;value&amp;quot;: &amp;quot;elasticsearch&amp;quot;
            }
          }
        },
       .....省略
      ]
    }
  }
}&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;搜索出来的结果跟我们想要的顺序不一致，那么我们下一步加权重。增加boost&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;GET /article/_search
{
  &amp;quot;query&amp;quot;: {
    &amp;quot;bool&amp;quot;: {
      &amp;quot;should&amp;quot;: [
        {
          &amp;quot;term&amp;quot;: {
            &amp;quot;title&amp;quot;: {
              &amp;quot;value&amp;quot;: &amp;quot;java&amp;quot;,
              &amp;quot;boost&amp;quot;: 5
            }
          }
        },
        {
          &amp;quot;term&amp;quot;: {
            &amp;quot;title&amp;quot;: {
              &amp;quot;value&amp;quot;: &amp;quot;spark&amp;quot;,
              &amp;quot;boost&amp;quot;: 4
            }
          }
        }
      ]
    }
  }
}&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;      &lt;strong&gt;基于dis_max的策略控制&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;dix_max想要解决的是：      &lt;br /&gt;如果我们想要某一个filed中匹配到尽可能多的关键词的被排在前面，而不是在多个filed中重复出现相同的词语的排在前面。&lt;/p&gt;    &lt;p&gt;举例说明：      &lt;br /&gt;      &lt;img alt="" src="https://img2022.cnblogs.com/blog/1178991/202207/1178991-20220708220750471-1739291679.png"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;对于一个文档会将title匹配到的分数和content匹配到的分数相加。所以doc id为2的文档的分数比doc id为4的大。&lt;/p&gt;    &lt;p&gt;dis_max查询：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;GET /article/_search
{
  &amp;quot;query&amp;quot;: {
    &amp;quot;dis_max&amp;quot;: {
      &amp;quot;queries&amp;quot;: [
        {&amp;quot;match&amp;quot;: {&amp;quot;title&amp;quot;: &amp;quot;java&amp;quot;}},
        {&amp;quot;match&amp;quot;:{&amp;quot;content&amp;quot;:&amp;quot;java solution&amp;quot;}}  
        
        ]
    }
  }
}&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;查询到的结果如下：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;{
  &amp;quot;took&amp;quot; : 6,
  &amp;quot;timed_out&amp;quot; : false,
  &amp;quot;_shards&amp;quot; : {
    &amp;quot;total&amp;quot; : 1,
    &amp;quot;successful&amp;quot; : 1,
    &amp;quot;skipped&amp;quot; : 0,
    &amp;quot;failed&amp;quot; : 0
  },
  &amp;quot;hits&amp;quot; : {
    &amp;quot;total&amp;quot; : {
      &amp;quot;value&amp;quot; : 2,
      &amp;quot;relation&amp;quot; : &amp;quot;eq&amp;quot;
    },
    &amp;quot;max_score&amp;quot; : 1.4905943,
    &amp;quot;hits&amp;quot; : [
      {
        &amp;quot;_index&amp;quot; : &amp;quot;article&amp;quot;,
        &amp;quot;_type&amp;quot; : &amp;quot;_doc&amp;quot;,
        &amp;quot;_id&amp;quot; : &amp;quot;4&amp;quot;,
        &amp;quot;_score&amp;quot; : 1.4905943,
        &amp;quot;_source&amp;quot; : {
          &amp;quot;title&amp;quot; : &amp;quot;spark&amp;quot;,
          &amp;quot;content&amp;quot; : &amp;quot;spark is best big data solution based on scala,an programming language similar to java&amp;quot;
        }
      },
      {
        &amp;quot;_index&amp;quot; : &amp;quot;article&amp;quot;,
        &amp;quot;_type&amp;quot; : &amp;quot;_doc&amp;quot;,
        &amp;quot;_id&amp;quot; : &amp;quot;2&amp;quot;,
        &amp;quot;_score&amp;quot; : 1.2039728,
        &amp;quot;_source&amp;quot; : {
          &amp;quot;title&amp;quot; : &amp;quot;java&amp;quot;,
          &amp;quot;content&amp;quot; : &amp;quot;i think java is the best programming language&amp;quot;
        }
      }
    ]
  }
}&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;      &lt;strong&gt;基于function_score自定义相关度分数&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;在用ES进行搜索时，搜索结果默认会以文档的相关度进行排序，而这个&amp;quot;文档的相关度&amp;quot;，是可以通过function_score自定义的。&lt;/p&gt;    &lt;p&gt;function_score提供了几种类型的得分函数：&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;script_score&lt;/li&gt;      &lt;li&gt;weight&lt;/li&gt;      &lt;li&gt;random_score&lt;/li&gt;      &lt;li&gt;field_value_factor&lt;/li&gt;      &lt;li&gt;decay functions:gauss、linear、exp&lt;/li&gt;&lt;/ul&gt;    &lt;p&gt;      &lt;strong&gt;random_score&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;随机打分，也就是每次查询出来的排序都不一样。&lt;/p&gt;    &lt;p&gt;举一个例子：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;GET /article/_search
{
  &amp;quot;query&amp;quot;: {
    &amp;quot;function_score&amp;quot;: {
      &amp;quot;query&amp;quot;: {&amp;quot;match_all&amp;quot;: {}},
       &amp;quot;random_score&amp;quot;: {}
    }
  }
}&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;      &lt;strong&gt;field_value_factor&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;该函数可以根据文档中的字段来计算分数。&lt;/p&gt;    &lt;p&gt;示例：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;GET /item/_search
{
  &amp;quot;query&amp;quot;: {
    &amp;quot;function_score&amp;quot;: {
      &amp;quot;field_value_factor&amp;quot;: {
        &amp;quot;field&amp;quot;: &amp;quot;price&amp;quot;,
        &amp;quot;factor&amp;quot;: 1.2,
        &amp;quot;modifier&amp;quot;: &amp;quot;none&amp;quot;
      }
    }
  }
}&lt;/code&gt;&lt;/pre&gt;    &lt;table&gt;      &lt;tr&gt;        &lt;th&gt;属性&lt;/th&gt;        &lt;th&gt;说明&lt;/th&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;field&lt;/td&gt;        &lt;td&gt;要从文档中提取的字段&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;factor&lt;/td&gt;        &lt;td&gt;字段值乘以的值，默认为1&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;modifier&lt;/td&gt;        &lt;td&gt;应用于字段值的修复符&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;    &lt;p&gt;modifier的取值有如下多种：&lt;/p&gt;    &lt;table&gt;      &lt;tr&gt;        &lt;th&gt;Modifier&lt;/th&gt;        &lt;th&gt;说明&lt;/th&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;none&lt;/td&gt;        &lt;td&gt;不要对字段值应用任何乘数&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;log&lt;/td&gt;        &lt;td&gt;取字段值的常用对数。因为此函数将返回负值并在0到1之间的值上使用时导致错误，所以建议改用log1p&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;log1p&lt;/td&gt;        &lt;td&gt;将字段值上加1并取对数&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;log2p&lt;/td&gt;        &lt;td&gt;将字段值上加2并取对数&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;ln&lt;/td&gt;        &lt;td&gt;取字段值的自然对数。因为此函数将返回负值并在0到1之间的值上使用时引起错误，所以建议改用 ln1p&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;ln1p&lt;/td&gt;        &lt;td&gt;将1加到字段值上并取自然对数&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;ln2p&lt;/td&gt;        &lt;td&gt;将2加到字段值上并取自然对数&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;square&lt;/td&gt;        &lt;td&gt;对字段值求平方&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;sqrt&lt;/td&gt;        &lt;td&gt;取字段值的平方根&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;reciprocal&lt;/td&gt;        &lt;td&gt;交换字段值，与1 / x相同，其中x是字段的值&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;    &lt;blockquote&gt;      &lt;p&gt;field_value_score函数产生的分数必须为非负数，否则将引发错误。如果在0到1之间的值上使用log和ln修饰符将产生负值。请确保使用范围过滤器限制该字段的值以避免这种情况，或者使用log1p和ln1p&lt;/p&gt;&lt;/blockquote&gt;    &lt;h3&gt;分页性能问题&lt;/h3&gt;    &lt;p&gt;在ES中我们一般采用的分页方式是from+size的形式，当数据量比较大时，Es会对分页作出限制，因为此时性能消耗很大。&lt;/p&gt;    &lt;p&gt;举个例子：一个索引分10个shards，然后一个搜索请求，from=990,size=10。      &lt;img alt="" src="https://img2022.cnblogs.com/blog/1178991/202207/1178991-20220708223847593-515560228.png"&gt;&lt;/img&gt;      &lt;br /&gt;此时es会从每个shards上去查询1000条数据，尽管每条数据只有_doc_id和_score，但是经不住它量大啊。如果from是10000呢？就更加耗费资源了。&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;解决方案&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;1. 利用scroll遍历&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;scroll分为初始化和遍历两步。&lt;/p&gt;    &lt;p&gt;步骤1：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;POST /item/_search?scroll=1m&amp;amp;size=2
{
  &amp;quot;query&amp;quot;: { &amp;quot;match_all&amp;quot;: {}}
}&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;步骤2：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;GET /_search/scroll 
{
&amp;quot;scroll&amp;quot;: &amp;quot;1m&amp;quot;,
&amp;quot;scroll_id&amp;quot; : &amp;quot;步骤1中查询出的值&amp;quot;
}&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;      &lt;strong&gt;2. search after方式&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;在ES 5.x后提供的一种，根据上一页的最后一条数据来确定下一页的位置的方式。如果分页请求的过程中，有数据的增删改，也会实时的反映到游标上。这种方式依赖上一页的数据，所以不能跳页。&lt;/p&gt;    &lt;p&gt;步骤1：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;GET /item/_search
{
  &amp;quot;query&amp;quot;: {
    &amp;quot;match_all&amp;quot;: {}
  },
  &amp;quot;size&amp;quot;: 2
  ,&amp;quot;sort&amp;quot;: [
    {
      &amp;quot;_id&amp;quot;: {
        &amp;quot;order&amp;quot;: &amp;quot;desc&amp;quot;
      }
    }
  ]
}&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;查询结果：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;{
  &amp;quot;took&amp;quot; : 0,
  &amp;quot;timed_out&amp;quot; : false,
  &amp;quot;_shards&amp;quot; : {
    &amp;quot;total&amp;quot; : 1,
    &amp;quot;successful&amp;quot; : 1,
    &amp;quot;skipped&amp;quot; : 0,
    &amp;quot;failed&amp;quot; : 0
  },
  &amp;quot;hits&amp;quot; : {
    &amp;quot;total&amp;quot; : {
      &amp;quot;value&amp;quot; : 6,
      &amp;quot;relation&amp;quot; : &amp;quot;eq&amp;quot;
    },
    &amp;quot;max_score&amp;quot; : null,
    &amp;quot;hits&amp;quot; : [
      {
        &amp;quot;_index&amp;quot; : &amp;quot;item&amp;quot;,
        &amp;quot;_type&amp;quot; : &amp;quot;_doc&amp;quot;,
        &amp;quot;_id&amp;quot; : &amp;quot;uL6choEB9TD2fYkcrziw&amp;quot;,
        &amp;quot;_score&amp;quot; : null,
        &amp;quot;_source&amp;quot; : {
          &amp;quot;title&amp;quot; : &amp;quot;小米8手机&amp;quot;,
          &amp;quot;images&amp;quot; : &amp;quot;http://image.lagou.com/12479122.jpg&amp;quot;,
          &amp;quot;price&amp;quot; : 2688,
          &amp;quot;createTime&amp;quot; : &amp;quot;2022-02-02 12:02:02&amp;quot;
        },
        &amp;quot;sort&amp;quot; : [
          &amp;quot;uL6choEB9TD2fYkcrziw&amp;quot;
        ]
      },
      {
        &amp;quot;_index&amp;quot; : &amp;quot;item&amp;quot;,
        &amp;quot;_type&amp;quot; : &amp;quot;_doc&amp;quot;,
        &amp;quot;_id&amp;quot; : &amp;quot;tr6YgYEB9TD2fYkcFzjY&amp;quot;,
        &amp;quot;_score&amp;quot; : null,
        &amp;quot;_source&amp;quot; : {
          &amp;quot;title&amp;quot; : &amp;quot;小米手机&amp;quot;,
          &amp;quot;images&amp;quot; : &amp;quot;http://image.lagou.com/12479122.jpg&amp;quot;,
          &amp;quot;price&amp;quot; : 2688,
          &amp;quot;createTime&amp;quot; : &amp;quot;2022-02-01 12:02:02&amp;quot;
        },
        &amp;quot;sort&amp;quot; : [
          &amp;quot;tr6YgYEB9TD2fYkcFzjY&amp;quot;
        ]
      }
    ]
  }
}&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;步骤2：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;GET /item/_search
{
  &amp;quot;query&amp;quot;: {
    &amp;quot;match_all&amp;quot;: {}
  },
  &amp;quot;size&amp;quot;: 2,
  &amp;quot;search_after&amp;quot;:[&amp;quot;tr6YgYEB9TD2fYkcFzjY&amp;quot;]
  ,&amp;quot;sort&amp;quot;: [
    {
      &amp;quot;_id&amp;quot;: {
        &amp;quot;order&amp;quot;: &amp;quot;desc&amp;quot;
      }
    }
  ]
}&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;总结对比：&lt;/p&gt;    &lt;table&gt;      &lt;tr&gt;        &lt;th&gt;分页方式&lt;/th&gt;        &lt;th&gt;性能&lt;/th&gt;        &lt;th&gt;优点&lt;/th&gt;        &lt;th&gt;缺点&lt;/th&gt;        &lt;th&gt;场景&lt;/th&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;from + size&lt;/td&gt;        &lt;td&gt;低&lt;/td&gt;        &lt;td&gt;灵活性好，实现简单&lt;/td&gt;        &lt;td&gt;深度分页问题&lt;/td&gt;        &lt;td&gt;数据量比较小，能容忍深度分页问题&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;scroll&lt;/td&gt;        &lt;td&gt;中&lt;/td&gt;        &lt;td&gt;解决了深度分页问题&lt;/td&gt;        &lt;td&gt;无法反映数据的实时性（快照版本）维护成本高，需要维护一个scroll_id&lt;/td&gt;        &lt;td&gt;海量数据的导出需要查询海量结果集的数据&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;search_after&lt;/td&gt;        &lt;td&gt;高&lt;/td&gt;        &lt;td&gt;性能最好&lt;/td&gt;        &lt;td&gt;不存在深度分页问题能够反映数据的实时变更实现连续分页的实现会比较复杂，因为每一次查询都需要上次查询的结果&lt;/td&gt;        &lt;td&gt;海量数据的分页&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;
    &lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/62322-elasticsearch-%E6%B7%B1%E5%BA%A6-%E5%BA%94%E7%94%A8</guid>
      <pubDate>Sat, 09 Jul 2022 14:14:38 CST</pubDate>
    </item>
    <item>
      <title>数据库内核的快照技术实现原理 - 吴祖洋的技术博客</title>
      <link>https://itindex.net/detail/62291-%E6%95%B0%E6%8D%AE%E5%BA%93-%E5%86%85%E6%A0%B8-%E6%8A%80%E6%9C%AF</link>
      <description>&lt;div&gt;    &lt;p&gt;&amp;quot;快照(Snapshot)&amp;quot;是数据库领域非常重要的一个概念, 最初是用于数据备份. 如今, 快照技术已经成为数据库内核(引擎)最核心的技术特性之一. 数据库内核的绝大多数操作, 都依赖于快照, 例如,      &lt;a href="https://www.ideawu.net/blog/tag/leveldb"&gt;LevelDB&lt;/a&gt;的每一次读取操作和遍历操作, 其内部都必须创建一个快照, 所以, 对于一个请求量非常大的系统, 数据库内核每秒种就要创建和销毁几十万次快照. 因此, 如何快速地创建和销毁快照, 成为一个数据库内核(引擎)必须要解决的问题.&lt;/p&gt;    &lt;p&gt;本文从源头出发, 逐步推演, 探讨数据库内核是如何实现快照技术的. 数据库内核创建快照, 将使用如下技术:&lt;/p&gt;    &lt;ol&gt;      &lt;li&gt;全量拷贝(Full Clone)&lt;/li&gt;      &lt;li&gt;写时拷贝(Copy On Write)&lt;/li&gt;      &lt;li&gt;分区拷贝(Partitioning)&lt;/li&gt;      &lt;li&gt;多版本(Multi Versioning, Leveling, Zero Copy)&lt;/li&gt;&lt;/ol&gt;    &lt;p&gt;无论何种实现快照的技术, 数据      &lt;strong&gt;拷贝&lt;/strong&gt;都不可避免, 差异点主要是不同的技术拷贝的数据量不同, 以及拷贝的数据含义不同(直接拷贝和间接拷贝). 直接拷贝意味着拷贝数据本身, 间接拷贝则拷贝数据的&amp;quot;指针&amp;quot;.&lt;/p&gt;    &lt;p&gt;拷贝意味着      &lt;strong&gt;互斥, 独占, 加锁&lt;/strong&gt;, 因为拷贝需要保证数据的完整性. 硬盘数据拷贝速度是较慢的, 往往被认为不可接受, 应极力避免. 内存数据拷贝速度较快, 但仍然需要减少拷贝的数据量.      &lt;br /&gt;&lt;/p&gt;    &lt;h3&gt;1: 全量拷贝(Full Clone)&lt;/h3&gt;    &lt;p&gt;全量拷贝技术是创建快照最本能的实现方法, 也是最低效的方法. 因为数据量往往非常多, 而且还常常在硬盘上, 拷贝成本高, 耗时长. 在进行全量拷贝的过程中, 需要排斥写操作, 所以数据库系统是无法提供写服务的.&lt;/p&gt;    &lt;h3&gt;2: 写时拷贝(Copy On Write)&lt;/h3&gt;    &lt;p&gt;全量拷贝低效速度慢, 那么, 一个可能的优化方向是在某些不需要拷贝的场景不做任何拷贝. 在某些场景, 例如读请求, 虽然需要创建一个快照并且去读快照, 但是, 读操作并不会修改快照数据和原来的数据, 如果这时整个系统也正好没有任何写操作请求, 那么, 就没有必要做全量拷贝.&lt;/p&gt;    &lt;p&gt;同时, 为了应对某个时刻收到写操作请求, 需要随时做准备, 一旦有写操作请求时, 再做一次全量拷贝. 写时拷贝技术是一种      &lt;strong&gt;概率优化&lt;/strong&gt;技术, 不像纯朴想法所认为地去优化全量拷贝本身的性能.&lt;/p&gt;    &lt;p&gt;概率优化是一种      &lt;strong&gt;外部优化&lt;/strong&gt;, 依赖于实际使用场景的概率分布, 在遇到 bad cases 时, 因为内部依然非常慢, 所以在 bad cases 场景不起作用. 所以, 仅仅写时拷贝技术并不能从根本上解决问题.&lt;/p&gt;    &lt;p&gt;写时拷贝的关键是引入一个      &lt;strong&gt;单点标记&lt;/strong&gt;和额外的一步      &lt;strong&gt;必要操作路径(单点)&lt;/strong&gt;, 所有的请求都必须走这条路径, 这样才能截获写操作请求, 在写操作请求之前进行数据拷贝.&lt;/p&gt;    &lt;h3&gt;3: 分区拷贝(Partitioning)&lt;/h3&gt;    &lt;p&gt;分区(Partitioning)技术是计算机领域非常重要的技术思想, 有点像&amp;quot;分而治之&amp;quot;思想, 和&amp;quot;并发&amp;quot;技术是统一的. 因为无论针对快照或是原始数据的修改, 在操作过程期间往往只修改很小的一个比例, 例如一个拥有一百万行记录的数据库表, 在创建完快照和销毁快照这段时间内, 也许只修改了两三行记录, 没有必要拷贝整个表.&lt;/p&gt;    &lt;p&gt;分区拷贝将数据拆分为多个部分(Partition), 结合 Copy On Write 技术, 在有必要的时候, 才拷贝被修改的那部分数据. Partitioning 技术在计算机领域应用非常广泛, 像我们常说的&amp;quot;减小锁粒度&amp;quot;, &amp;quot;分布式数据库 Sharding&amp;quot;, &amp;quot;并发&amp;quot;等等, 这些都是 Partitioning.&lt;/p&gt;    &lt;h3&gt;4: 多版本(Multi Versioning)&lt;/h3&gt;    &lt;p&gt;      &lt;a href="https://www.ideawu.net/blog/archives/1143.html"&gt;多版本&lt;/a&gt;技术抛弃了纯朴观念里的&amp;quot;修改&amp;quot;一词, 当想要修改某项数据时, 只是简单地写新数据写到其它地方, 暂时不管旧数据是怎么样的. 然后, 引入一个成本极小的标记, 修改数据的指向(也即将旧数据标记为作废, 将新数据标记为有效). 这个标记和前文介绍写时拷贝技术时提到的&amp;quot;必要路径&amp;quot;是一个意思.&lt;/p&gt;    &lt;p&gt;基于多版本技术, 创建快照时不再拷贝任何原始数据(Zero Copy), 只有成本极小的对标记的修改操作, 所以, 无论数据是在内存还是在极慢的硬盘里, 都不影响创建快照的速度. 如果这个标记是放在内存中的, 那么, 针对1TB的数据库每秒创建百万个快照也没有问题.&lt;/p&gt;    &lt;p&gt;不过, 多版本技术也有缺点. 它虽然不影响创建快照的速度, 也很少影响写操作的速度, 但是, 它严重影响读操作的性能, 因为我们必须读取全部的版本出来, 才能知道哪个版本是我们需要的, 版本越多, 性能就越差. 所以, 使用多版本技术时, 都要结合      &lt;strong&gt;垃圾回收(GC)&lt;/strong&gt;技术, 尽快删除不需要的版本.&lt;/p&gt;    &lt;p&gt;和分区技术不同, 多版本技术的不同版本是指同一个对象, 不是独立的, 可以把版本理解为层(Level), 最终多个层合并(Merge), 形成最终的对象数据. 而分区是独立的, 不需要合并, 只需要连接(Chain)起来.&lt;/p&gt;    &lt;p&gt;在实践中, 多版本技术往往要通过扩大数据对象的粒度来减少版本数量.&lt;/p&gt;&lt;/div&gt;
    &lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/62291-%E6%95%B0%E6%8D%AE%E5%BA%93-%E5%86%85%E6%A0%B8-%E6%8A%80%E6%9C%AF</guid>
      <pubDate>Sun, 05 Jun 2022 21:04:18 CST</pubDate>
    </item>
    <item>
      <title>房地产行业数字化_david_lv的博客-CSDN博客</title>
      <link>https://itindex.net/detail/62287-%E6%88%BF%E5%9C%B0%E4%BA%A7-%E8%A1%8C%E4%B8%9A-%E6%95%B0%E5%AD%97%E5%8C%96</link>
      <description>&lt;div&gt;    &lt;p&gt;      &lt;strong&gt;（1）中国产业演变与数字化&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;上周六，一个做地产SaaS的朋友问我，信息化和数字化到底有啥区别？我就给他拿地产行业管理系统举实例给他讲。      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;我说，数字化的兴起有个大背景，那就是：      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;1、互联网的普及：数字营销、在线协同&lt;/p&gt;    &lt;p&gt;2、电子商务的普及：在线B2C/在线B2B、在线银行/企业支付、在线税务/电子发票&lt;/p&gt;    &lt;p&gt;3、新技术的普及：社会化大数据、人工智能、IoT物联网&lt;/p&gt;    &lt;p&gt;中国在B2C电子商务方面很发达，但是在B2B电子商务方面不发达。这本质和中国的全球产业分工相关。      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;日本和美国从1970年代开始打贸易战，一路打到电信战、汽车战、芯片战、金融战，在1985年最终签订《广场协议》，日本因广场协议因成本，产品被逼转移到东南亚和亚洲四小龙，在1991年苏联解体冷战结束全球大融合之后又转移到中国大陆。日本在1992年开始股市下跌50%，地产下跌50%，日本宣布以人工智能为核心的自主可控第五代计算机体系研发失败。1997年，转移到东南亚和四小龙的日本产业，遭受美国金融巨鳄索罗斯引发的亚洲金融危机，日本海外产业损失折半，日本开始进入失去的二十年。日本开始放弃最终产品，退居到技术门槛高、利润丰厚的上游核心原材料、核心零部件、精密生产设备，日本企业管理从戴明环质量管理持续改善，转移到全球供应链投资和整合运营管理、产品全生命周期质量管理。&lt;/p&gt;    &lt;p&gt;中国目前的产业还处于最终消费品的生产。等中国的产品层次往高端装备设备产品走，等中国的产业环节从集成制造往上游核心零部件走转移的时候，中国的企业对企业业务、B2B电子商务，才能兴旺发达。我预计这个时间是2025年以后，估计是2028年。离现在还有5-6年。&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;（2）以地产数字化实例来说明&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;我给我朋友画了一张图：&lt;/p&gt;    &lt;p&gt;      &lt;img alt="58f3aa1f4b0e55088c3bcee90351ac2c.png" src="https://img-blog.csdnimg.cn/img_convert/58f3aa1f4b0e55088c3bcee90351ac2c.png"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;作为地产管理系统，一般有：采购招投标系统、建造项目管理系统、销售管理系统、物业管理系统、成本核算系统...。过去都是：表单录入、审批工作流引擎、查询统计。那是典型的信息化：在线下完成事情，然后录入到IT系统中。&lt;/p&gt;    &lt;p&gt;现在有了互联网、电子商务的普及，有了新技术的普及，就可以探索在线上直接完成业务，数据就自动沉淀下来。&lt;/p&gt;    &lt;p&gt;设计环节，可以借助互联网，搞社会化在线协同，让设计院、业主方、建筑方在线协同。可以借助社会化数据大融合，来快速生成自己的设计模板。可以借助智能硬件ARMR，快速进行3D仿真体验。      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;在采购招投标环节，可以借助互联网来公开招标，可以借助电子商务来做在线投标、在线保证金订金支付，可以借助电子证照做在线资质审验，可以借助社会化大数据融合来引据采购项、采购成本、采购条款，而不需要自己从零录入、自己凭经验拍脑门制定。过去IT厂商提供的软件就是个空壳子的软件，现在IT厂商提供的SaaS云服务，里面是含有持续不断加工训练的主数据、模板、模型。&lt;/p&gt;    &lt;p&gt;在建造项目管理环节，可以借助互联网搞社会化协同，把设计院、业主方、施工方、监理方、项目管理方，乃至监管方住建委、消防、安监局都卷入进来，进行在线资料报送、在线审批、在线监管。&lt;/p&gt;    &lt;p&gt;在现场管理环节，可以借助电子证照来自动识别、人脸自动识别。可以使用传感器、RFID、二维码、GPS定位、摄像头拍照与监控等等技术手段，来搞：现场施工人员安全监控、施工设备安全监控、现场物料安全监控。&lt;/p&gt;    &lt;p&gt;其他的我就不一一赘述了。大家继续多琢磨我那张图自行理解。      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;（3）最后&lt;/strong&gt;      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;我过去说过三个理论：      &lt;br /&gt;&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;        &lt;p&gt;数字化要点：以机器为主以人为辅          &lt;br /&gt;&lt;/p&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;数字化企业的特征：网络连接、数据智能&lt;/p&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;产业互联网特征：在线业务处理、社会化资源、社会化数据服务、智能调度&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;    &lt;p&gt;很多人看完我上述讲的房地产行业数字化的案例，大多不以为然。觉得这有什么啊，这有什么啊，仍然看不出来数字化和信息化的区别。唉，这就跟我过去干零售业和电子商务业时遇到的问题一样了。我过去参加过一个群，里面都是国内知名零售企业的高管，他们就对电子商务嗤之以鼻，他们认为中国电子商务之流，别看现在蹦跶的欢，其实就是因为电商会融资烧钱、电商会玩网络营销拉流量。等退潮了，还不抵谁没穿裤衩呢。所以这些中国知名零售商的高管们，都在等着看中国电商们的笑话。&lt;/p&gt;    &lt;p&gt;中国知名零售商，他们把电子商务仅仅看做是企业的通路之一。可以线下官方旗舰店直营、可以线下分销、可以线上官方旗舰店直营，不就是通路之一么，电子商务有啥大不了的。&lt;/p&gt;    &lt;p&gt;而他们却忽略了电子商务的天然先进性，我过去已经说过一万遍的电子商务的天然先进性：      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;1、互联网：天生是具有网状、垄断性&lt;/p&gt;    &lt;p&gt;2、直Hold顾客、最短价值链：消费者-电子商务零售商-商品制造商&lt;/p&gt;    &lt;p&gt;3、最大人效：不用销售人员和促销人员，顾客自助挑选自助下单自助支付。而且24x7营业&lt;/p&gt;    &lt;p&gt;4、最大坪效：通过信息流滚动、千人千面、搜索、实时关联推荐，可以做到无限坪效&lt;/p&gt;    &lt;p&gt;5、持续改善：低成本高效率的实时用户行为全过程跟踪，可以持续改进经营&lt;/p&gt;    &lt;p&gt;6、后台大规模作业：自动化大型仓储、智能化仓储调度、智能化物流调度&lt;/p&gt;    &lt;p&gt;我想，过去做信息化的那帮人，看数字化，也和零售人看电子商务一个思维。这有什么呀，这有什么呀。&lt;/p&gt;    &lt;p&gt;   &lt;br /&gt;&lt;/p&gt;&lt;/div&gt;
    &lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/62287-%E6%88%BF%E5%9C%B0%E4%BA%A7-%E8%A1%8C%E4%B8%9A-%E6%95%B0%E5%AD%97%E5%8C%96</guid>
      <pubDate>Tue, 31 May 2022 14:06:18 CST</pubDate>
    </item>
    <item>
      <title>稳态和敏态_david_lv的博客-CSDN博客</title>
      <link>https://itindex.net/detail/62261-%E7%A8%B3%E6%80%81-david-lv</link>
      <description>&lt;div&gt;    &lt;p&gt;      &lt;strong&gt;（1）不稳定环境-敏态&lt;/strong&gt;      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;很多人说：&lt;/p&gt;    &lt;p&gt;信息化是以流程为中心、以功能为中心&lt;/p&gt;    &lt;p&gt;数字化是以场景为中心、以数据为中心&lt;/p&gt;    &lt;p&gt;这都是堆词，玩中文文字游戏。&lt;/p&gt;    &lt;p&gt;如果让我再列举，我还会列举几十条。堆呗，谁不会堆啊。      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;很多人也不明白现在为啥流行那么多新技术：低代码开发平台、RPA、微服务架构、大数据平台...。      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;很多中国企业说我们要微服务，我们要大数据平台。很多中国IT厂商也说自己就是微服务架构，就是大数据平台。但是甲乙双方都不清楚自己为啥需要微服务、为啥需要大数据平台。到底要解决自己啥问题？这些微服务架构技术和大数据平台技术，是否真的能解决自己的问题？全一问三不知。反正就是：有钱、需要。人傻钱多速来。&lt;/p&gt;    &lt;p&gt;只有透过表象才知道这么多表象的关联关系。我随手给大家画了一张图。&lt;/p&gt;    &lt;p&gt;      &lt;img alt="3f9ea2da49f92fd412e53d0279f04fff.png" src="https://img-blog.csdnimg.cn/img_convert/3f9ea2da49f92fd412e53d0279f04fff.png"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;我画完这张图，大家这一下子就明白了这几年横出一道竖出一道新东西，到底是为啥了吧。这就叫逻辑。&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;（2）稳定环境-稳态&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;对于大部分央企国企来说：不求无功但求无过，只要国有资产增值保值就好。      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;他们只需要做好集团统一管控，永续经营就好。      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;中国企业，不管是民企还是国企，都不太注重运营管理，也不设首席运营官COO。所以大部分人也不知道啥叫运营管理。只是嘴里喊着运营管理运营管理，但运营管理为何物，其实一问三不知。&lt;/p&gt;    &lt;p&gt;我给大家介绍两本上世纪六十年代的书。大家看完这两本书就知道啥叫运营管理了，而且知道了运营管理这个体系是怎么一点点发展起来的。&lt;/p&gt;    &lt;p&gt;      &lt;img alt="41b2d4501c755a04a5087fd1fd1f96a3.png" src="https://img-blog.csdnimg.cn/img_convert/41b2d4501c755a04a5087fd1fd1f96a3.png"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;      &lt;img alt="10b0dd56363b3d87973b4740964386e9.png" src="https://img-blog.csdnimg.cn/img_convert/10b0dd56363b3d87973b4740964386e9.png"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;我知道，很多人，我给他推荐了书也不爱看书。所以我给大家随手又画了一张图，把运营管理的核心都一张图看明白：&lt;/p&gt;    &lt;p&gt;      &lt;img alt="b5338f363b00039c1dc0ed8ad5b72960.png" src="https://img-blog.csdnimg.cn/img_convert/b5338f363b00039c1dc0ed8ad5b72960.png"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;这就是运营管理的四个核心方面。其实这和咱们说的管理约束三角一样：效率、质量、成本。只不过外国人更注重计划，而中国人根本不注重计划。&lt;/p&gt;    &lt;p&gt;那很多朋友问了，那稳态企业到底需要啥信息化呢？      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;我跟大家说，还是二十年前老需求：统一管控四大方面：统一财务管控、统一人力管控、统一流程管控、统一数据管控。&lt;/p&gt;    &lt;p&gt;怎么搞？我仍然给大家随手再画一张图，一图胜千言嘛。其实这些东西，我这二十多年已经说过无数遍（应该超过一万遍了吧）。&lt;/p&gt;    &lt;p&gt;      &lt;img alt="7c054d2badaa88ed3f9d72ac9d1993c6.png" src="https://img-blog.csdnimg.cn/img_convert/7c054d2badaa88ed3f9d72ac9d1993c6.png"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;   &lt;br /&gt;&lt;/p&gt;&lt;/div&gt;
    &lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/62261-%E7%A8%B3%E6%80%81-david-lv</guid>
      <pubDate>Tue, 17 May 2022 19:03:30 CST</pubDate>
    </item>
    <item>
      <title>数字化转型，我只推荐看这两本书_david_lv的博客-CSDN博客</title>
      <link>https://itindex.net/detail/62216-%E6%95%B0%E5%AD%97%E5%8C%96-%E8%BD%AC%E5%9E%8B-david</link>
      <description>&lt;div&gt;    &lt;p&gt;信息化这个词是日本人梅棹昭夫在1960年代发明的一个词，后来在1970年代传到西方。其实西方并不用信息化这个词，西方一直用数字化这个词。      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;数字化转型李鬼太多了，可推荐的书不多。截止到目前位置，我能推荐的书目只有两本：&lt;/p&gt;    &lt;p&gt;1、一本是比尔盖茨在1999年写的《未来时速》，虽然过去了20多年，但里面关于数字化转型的真知灼见仍然有效&lt;/p&gt;    &lt;p&gt;2、一本是曾鸣教授在2018年写的《智能商业》，虽然过去了4年多，但里面对企业通过社会化智能化的方式来一步步做数字化转型的路径有最佳的建议&lt;/p&gt;    &lt;p&gt;《未来时速》这本书写于1999年，背景相关信息：&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;        &lt;p&gt;1998年，Google创办&lt;/p&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;1997年，SaaS ERP公司NetSuite创办。1999年，SaaS CRM公司Salesforce创办&lt;/p&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;1997年，Amazon和Yahoo公司上市&lt;/p&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;1996年，《数字化生存》和《失控》这两本书已经出版。如果有人还想对数字化有更多体会和理解，我推荐大家读读这两本20多年前的书&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;    &lt;p&gt;其实《未来时速》这本书的英文名叫：business@ the speed of thought using a digital nervous system，意思就是通过数字神经系统来提高商业速度。&lt;/p&gt;    &lt;p&gt;这本书有个好处就是每一章都用一个鲜活的案例来展示数字化系统的威力。这些鲜活的数字化场景包含：&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;        &lt;p&gt;通用汽车：制造商-经销商&lt;/p&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;微软：微软-经销商-促销活动&lt;/p&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;微软：微软-招聘网站-商旅网站-员工福利保险网站&lt;/p&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;德国银行：银行在线-客户自助&lt;/p&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;美林证券：美林在线-客户自助&lt;/p&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;万豪酒店：万豪在线-客户自助&lt;/p&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;通用汽车：SCADA系统-检测员&lt;/p&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;微软：社会化用工系统-临时合同工&lt;/p&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;儿童医院：CareVision系统-急救中心-医院-康复中心-保险公司&lt;/p&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;政府：政府在线服务-居民&lt;/p&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;海军陆战队：数字地图+GPS实时定位&lt;/p&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;西部高地学区：学校-学生-家长&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;    &lt;p&gt;比尔盖茨举的例子，都涉及到多个利益主体，这些利益主体都不在一个企业组织内部。但是这些利益主体都通过一套中央数据库+软件+互联网络，进行业务协作处理。你根据这些鲜活的案例，你也能体会到啥叫数字化转型。&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;也就是说，美国的数字化转型是从上世纪90年代就开始了。背景就是互联网可以把多个利益主体协同在一起了。&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;第一章、用事实的力量管理企业&lt;/p&gt;    &lt;p&gt;案例：通用汽车&lt;/p&gt;    &lt;p&gt;斯洛恩在1923-1956期间担任通用汽车的CEO时，建立了一套信息神经网络系统。&lt;/p&gt;    &lt;p&gt;用的是人工打电话的形式来采集数据，用纸张的形式来存储数据。有一个专门的团队来进行数据采集、记录、统计。&lt;/p&gt;    &lt;p&gt;这套信息神经网络系统，帮助斯洛恩把通用汽车的技术人员-销售人员-经销商的各种信息，包含运营计划、订单信息、销售分析预测、库存信息、维修技术信息，全都采集了过来。&lt;/p&gt;    &lt;p&gt;而且斯洛恩把这套信息体系全都做了标准化，方便各种维度的汇总统计和横向对比。&lt;/p&gt;    &lt;p&gt;第二章、数字神经系统能办到吗？&lt;/p&gt;    &lt;p&gt;案例：微软&lt;/p&gt;    &lt;p&gt;微软的MS Sales系统是帕克搞出来的。里面有：&lt;/p&gt;    &lt;p&gt;每个城市每家大公司平均雇员人数、每个城市的PC拥有量信息、微软市场份额分析&lt;/p&gt;    &lt;p&gt;每个城市的发布会/促销活动信息&lt;/p&gt;    &lt;p&gt;每个经销商每个产品的销售信息、推销员报酬信息&lt;/p&gt;    &lt;p&gt;供应链管理信息&lt;/p&gt;    &lt;p&gt;结算信息、预算信息&lt;/p&gt;    &lt;p&gt;这些信息用SQLServer中央数据库存储，用EXCEL数据透视表做分析。&lt;/p&gt;    &lt;p&gt;第三章、创建无纸办公室&lt;/p&gt;    &lt;p&gt;案例：微软 人力资源&lt;/p&gt;    &lt;p&gt;盖茨用一个微软假想员工来举例说明：&lt;/p&gt;    &lt;p&gt;从web官方上采集应聘者简历&lt;/p&gt;    &lt;p&gt;使用招聘管理软件来安排求职面试日程&lt;/p&gt;    &lt;p&gt;使用入职管理软件来安排办公室工位、邮箱、办公工具&lt;/p&gt;    &lt;p&gt;使用Payroll软件来让员工自助查询与管理他的薪资情况&lt;/p&gt;    &lt;p&gt;使用商旅报销费控软件来让员工自助预订飞机和宾馆，以及经理审批、报销金额自动转入员工银行卡内&lt;/p&gt;    &lt;p&gt;使用员工福利软件来申请带薪休假、生育医疗报销、员工体检、员工保险&lt;/p&gt;    &lt;p&gt;使用股票期权软件来管理员工的股票期权买入&lt;/p&gt;    &lt;p&gt;使用绩效评价软件来对员工的业绩做评价&lt;/p&gt;    &lt;p&gt;第四章、乘上转折火箭&lt;/p&gt;    &lt;p&gt;案例：德国银行&lt;/p&gt;    &lt;p&gt;盖茨鼓励德国银行要采取网上银行。因为美国一半家庭已经拥有电脑，大学生几乎每个人都有一个自己的电子邮箱账号，在美国网上买书买唱片网上订机票订酒店、网上电子账单已经是很普遍的事情了。&lt;/p&gt;    &lt;p&gt;让消费者在网上自助完成服务将成为未来五年的趋势。&lt;/p&gt;    &lt;p&gt;第五章、中间商必须增加价值&lt;/p&gt;    &lt;p&gt;案例：美林证券&lt;/p&gt;    &lt;p&gt;美林证券准备花费5年时间、投资8.25亿美元，做一套客户可以在线访问的财富管理系统（美林在线）：&lt;/p&gt;    &lt;p&gt;客户能够在线自助访问&lt;/p&gt;    &lt;p&gt;信息和功能要按照客户场景来重新组织&lt;/p&gt;    &lt;p&gt;要有良好的客户体验&lt;/p&gt;    &lt;p&gt;美林证券本来想的是一年发展20万注册客户，但是没想到7个月就达到了这个目标。&lt;/p&gt;    &lt;p&gt;而美林证券的财富管理顾问，现在终于可以后台的用户行为数据来个性化为客户制定他的财富投资计划。&lt;/p&gt;    &lt;p&gt;第六章、接触顾客&lt;/p&gt;    &lt;p&gt;案例：戴尔电脑、万豪酒店&lt;/p&gt;    &lt;p&gt;戴尔公司在2000年前后，50%的销售订单已经来自戴尔官网电子商务商城。&lt;/p&gt;    &lt;p&gt;并且，戴尔公司通过在线支持，减少了50%的电话呼叫中心支持。&lt;/p&gt;    &lt;p&gt;万豪酒店也开通了在线酒店预订，而且还分了商务旅行者、休闲旅行社、会议规划者三个场景。万豪酒店还整合了每个酒店周边的餐饮、旅游景点、路线图等信息，方便商务旅行者、休闲旅行社、会议规划者用于相关性决策。&lt;/p&gt;    &lt;p&gt;万豪酒店还开通了消费者留言评价功能。&lt;/p&gt;    &lt;p&gt;第八章、改变企业的边界&lt;/p&gt;    &lt;p&gt;案例：无&lt;/p&gt;    &lt;p&gt;场景：社会化自由工作，用互联网做协作&lt;/p&gt;    &lt;p&gt;社会化自由工作：&lt;/p&gt;    &lt;p&gt;过去是个体创造型知识者：作家、艺术家、演员&lt;/p&gt;    &lt;p&gt;后来是小团队知识者：律师、会计师、医师、工程师&lt;/p&gt;    &lt;p&gt;现在是项目型知识者：电影拍摄、广告制作&lt;/p&gt;    &lt;p&gt;用互联网做协作：电子邮件、网络会议、电子文档&lt;/p&gt;    &lt;p&gt;第十一章、把坏消息转化为好消息&lt;/p&gt;    &lt;p&gt;案例：普罗米斯连锁酒店&lt;/p&gt;    &lt;p&gt;普罗米斯酒店建立了客户数据库，里面有客户所有过往在各个酒店的入住记录，还有所有的投诉信息。而且还分析了客户行为，如喜欢订双床房、喜欢特殊枕头、喜欢安静、喜欢吸烟等等。&lt;/p&gt;    &lt;p&gt;如果一个客户突然不去普罗米斯连锁酒店中的任何一家店了，普罗米斯连锁酒店会自动发送一份邀请函。&lt;/p&gt;    &lt;p&gt;第十六章、挖掘使人增强力量的过程&lt;/p&gt;    &lt;p&gt;案例：通用汽车萨杜恩品牌公司&lt;/p&gt;    &lt;p&gt;萨杜恩品牌公司有8500名员工，但都分成大约15人规模的小组。一个小组可以雇佣自己的组员，并有权解雇一个总是迟到或干活差劲的组员。小组报酬的20%和销量、质量、客户满意度相关。&lt;/p&gt;    &lt;p&gt;萨杜恩品牌公司有一套SCADA系统，管理着组装工厂。它监测着12万多个独立的数据点，每个装置至少每秒检查一遍。调度员可以在一个屏幕上看到工厂里所有实际运行过程。&lt;/p&gt;    &lt;p&gt;检验员通过无线联网的WinCE手持电脑，配合中央数据库中的信息，结合EXCEL表格，还有汽车三维图，就可以对一台车做逐项的质量检验。&lt;/p&gt;    &lt;p&gt;第十七章、信息技术使业务流程优化成为可能&lt;/p&gt;    &lt;p&gt;案例：微软&lt;/p&gt;    &lt;p&gt;微软有HeadTrax软件来管理临时用工的招聘、签合同、工时计算、薪资核算。也关联着发放进门卡、电话开通、上网开通、电子邮件开通等事宜。当临时合同终止时，这些开通会自动失效。&lt;/p&gt;    &lt;p&gt;HeadTrax把业务部门-人事部门-行政部门-财务部门自动串联了起来。&lt;/p&gt;    &lt;p&gt;第十九章、医疗：任何保健系统都不是孤立的&lt;/p&gt;    &lt;p&gt;案例：微软员工&lt;/p&gt;    &lt;p&gt;病历和账单需要信息化，并且联网共享，以便急救中心-医院-保险公司-康复医院，不用重复做工作。&lt;/p&gt;    &lt;p&gt;CareVision系统，是健康梦幻公司开发的一套患者信息管理软件，医院给患者做的每一次治疗、检测、用药、医疗，都输入到该软件中，信息存储在一个中央大数据库中。因此这套软件还能判断最佳治疗方案、用药配伍禁忌，最佳急救疗法、最佳护理方法。&lt;/p&gt;    &lt;p&gt;第二十章、政府：使政府贴近人民&lt;/p&gt;    &lt;p&gt;案例：无&lt;/p&gt;    &lt;p&gt;政府采购：在线招投标&lt;/p&gt;    &lt;p&gt;政府服务：在线服务、居民电子身份密钥智能卡&lt;/p&gt;    &lt;p&gt;政府文档：电子文档&lt;/p&gt;    &lt;p&gt;第二十一章、军队：应变能力：生死攸关的问题&lt;/p&gt;    &lt;p&gt;案例：美国海军陆战队&lt;/p&gt;    &lt;p&gt;GPS定位、高精度卫星数字地图，关联气象信息，制定飞行计划&lt;/p&gt;    &lt;p&gt;第二十二章、教育：创建一体化的学习社区&lt;/p&gt;    &lt;p&gt;案例：西部高地学区&lt;/p&gt;    &lt;p&gt;一、多媒体教学和远程辅导&lt;/p&gt;    &lt;p&gt;获取信息：通过互联网获取新闻，PPT展示内容&lt;/p&gt;    &lt;p&gt;查阅资料：电子图书馆，可通过互联网络访问&lt;/p&gt;    &lt;p&gt;远程辅导：发家庭电子作业/收家庭作业/判作业、在线辅导/在线问答&lt;/p&gt;    &lt;p&gt;二、家校互动&lt;/p&gt;    &lt;p&gt;通过网页，让家长了解每周课程安排、教学老师、教学方法、家庭作业&lt;/p&gt;    &lt;p&gt;   &lt;br /&gt;&lt;/p&gt;&lt;/div&gt;
    &lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/62216-%E6%95%B0%E5%AD%97%E5%8C%96-%E8%BD%AC%E5%9E%8B-david</guid>
      <pubDate>Mon, 25 Apr 2022 19:44:37 CST</pubDate>
    </item>
    <item>
      <title>Oracle RAC的VIP和SCAN IP - 学海无涯2020 - 博客园</title>
      <link>https://itindex.net/detail/62210-oracle-rac-vip</link>
      <description>&lt;div&gt;  &lt;p&gt;    我们都知道Oracle RAC中每个节点都有一个虚拟IP，简称VIP，与公网IP在同一个网段。&lt;/p&gt;  &lt;p&gt;    没有VIP时，Oracle客户端是靠“TCP/IP协议栈超时”来判断服务器故障。而TCP/IP协议栈是作为OS Kernel的一部分来实现，不同的OS有不同的阀值，用户获悉数据库异常的时间完全取决于OS Kernel的实现，虽然有些OS允许修改这个阀值，但是会对其它程序产生未知影响。因此，oracle RAC引入了VIP，从而避开对TCP协议栈超时的依赖。&lt;/p&gt;  &lt;p&gt;    VIP和IP最主要的不同之处在于：VIP是浮动的，而IP是固定的。在所有节点都正常运行时，每个节点的VIP会被分配到public NIC上；在linux下ifconfig查看，public网卡上是2个IP地址；如果一个节点宕机，这个节点的VIP会被转移到还在运行的节点上。也就是幸存的节点的public NIC这个网卡上，会有3个IP地址。&lt;/p&gt;  &lt;p&gt;当一个节点宕机，这个节点真实IP就连接不上了，但是这个节点的虚拟IP是可以连接的，他会自动把客户端的连接请求转接给存活的节点。   &lt;br /&gt;在tnsname.ora文件里，指定Address列表，客户端会随机选择一个节点来连接数据库，而不是顺序选择的。   &lt;br /&gt;       &lt;br /&gt;VIP特点：   &lt;br /&gt;1 VIP是在clusterware安装最后阶段，通过脚本VIPCA创建的；   &lt;br /&gt;2 VIP作为一个Nodeapps类型的CRS Resource注册到OCR中，并由CRS维护状态；   &lt;br /&gt;3 VIP会绑定到节点的public 网卡上；那么public网卡就有两个地址了；   &lt;br /&gt;4 当某个节点发生故障时，CRS会把故障节点的VIP转移到其他节点上；   &lt;br /&gt;5 每个节点的Listener会同时在public网卡的public IP和VIP两个地址上监听；   &lt;br /&gt;6 客户端的tnsname.ora一般会配置指向节点的VIP；&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;    从上面第6条可以引出一个问题。如果增加一个节点，那么客户端的tnsname.ora需要加入新增节点的VIP。那么想象一下：多个客户端，增加多个节点，那么维护起来特别麻烦。因此到了Oracle11gR2，引入了一个scan的概念。&lt;/p&gt;  &lt;p&gt;    scan,single client access name。简单客户端连接名，这是一个唯一的名称，在整个公司网络内部唯一，并且在DNS中可以解析为三个ip地址，客户端连接的时候只需要知道这个名称，并连接即可， 每个SCAN VIP对应一个scan listener，cluster内部的service在每个scan listener上都有注册，scan listener接受客户端的请求，并foward到不同的Local listener中去，还是由local 的listener提供服务给客户端。   &lt;br /&gt;      &lt;br /&gt;    注意：scan不一定要resolve到三个ip，一个也够了。只不过为了防止scan单点故障而推荐3个。&lt;/p&gt;  &lt;div&gt;   &lt;br /&gt;&lt;/div&gt;&lt;/div&gt; &lt;div&gt;&lt;/div&gt; &lt;div&gt;&lt;/div&gt;
       &lt;div&gt;&lt;/div&gt;
    &lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/62210-oracle-rac-vip</guid>
      <pubDate>Wed, 20 Apr 2022 13:58:27 CST</pubDate>
    </item>
    <item>
      <title>Oracle RAC JDBC connection string - multitude - 博客园</title>
      <link>https://itindex.net/detail/62209-oracle-rac-jdbc</link>
      <description>&lt;p&gt;完全正确&lt;/p&gt; &lt;p&gt;  &lt;a href="https://stackoverflow.com/questions/1646630/what-is-the-correct-jdbc-url-to-connect-to-a-rac-database" rel="noopener"&gt;https://stackoverflow.com/questions/1646630/what-is-the-correct-jdbc-url-to-connect-to-a-rac-database&lt;/a&gt;&lt;/p&gt; &lt;div&gt;  &lt;pre&gt;jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(LOAD_BALANCE=OFF)(FAILOVER=ON)
(ADDRESS=(PROTOCOL=TCP)(HOST=tst-db1.myco.com)(PORT=1604))
(ADDRESS=(PROTOCOL=TCP)(HOST=tst-db2.myco.com)(PORT=1604)))
(CONNECT_DATA=(SERVICE_NAME=mydb1.myco.com)(SERVER=DEDICATED)))&lt;/pre&gt;&lt;/div&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;官方文档, 一如既往地冗长, 可靠&lt;/p&gt; &lt;p&gt;  &lt;a href="https://docs.oracle.com/database/121/HABPT/config_fcf.htm#HABPT5381" rel="noopener"&gt;https://docs.oracle.com/database/121/HABPT/config_fcf.htm#HABPT5381&lt;/a&gt;&lt;/p&gt; &lt;p&gt;  &lt;img alt="" src="https://img2020.cnblogs.com/blog/643298/202004/643298-20200428083728423-1562561604.png"&gt;&lt;/img&gt;&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;div&gt;  &lt;div&gt;   &lt;a title="&amp;#22797;&amp;#21046;&amp;#20195;&amp;#30721;"&gt;    &lt;img alt="&amp;#22797;&amp;#21046;&amp;#20195;&amp;#30721;" src="https://common.cnblogs.com/images/copycode.gif"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/div&gt;  &lt;pre&gt;PoolDataSource pds = PoolDataSourceFactory.getPoolDataSource();
pds.setConnectionFactoryClassName(&amp;quot;oracle.jdbc.pool.OracleDataSource&amp;quot;); pds.setUser(&amp;quot;system&amp;quot;); 
 pds.setPassword(&amp;quot;oracle&amp;quot;); 
 String dbURL = 
 &amp;quot;jdbc:oracle:thin:@&amp;quot; + 
 &amp;quot;(DESCRIPTION=&amp;quot; + 
&amp;quot;(FAILOVER=on)&amp;quot; + 
 &amp;quot;(ADDRESS_LIST=&amp;quot; + 
 &amp;quot;(LOAD_BALANCE=on)&amp;quot; + 
 &amp;quot;(CONNECT_TIMEOUT=3)(RETRY_COUNT=3)&amp;quot; +
 &amp;quot;(ADDRESS=(PROTOCOL=TCP)(HOST=prmy-scan)(PORT=1521))&amp;quot;+     &amp;quot;(ADDRESS=(PROTOCOL=TCP)(HOST= stby-scan)(PORT=1521)))&amp;quot; + 
 &amp;quot;(CONNECT_DATA=(SERVICE_NAME=oltpworkload)))&amp;quot; 
 System.out.println(&amp;quot;Url=&amp;quot; + dbURL); 
 pds.setURL(dbURL); &lt;/pre&gt;  &lt;div&gt;   &lt;a title="&amp;#22797;&amp;#21046;&amp;#20195;&amp;#30721;"&gt;    &lt;img alt="&amp;#22797;&amp;#21046;&amp;#20195;&amp;#30721;" src="https://common.cnblogs.com/images/copycode.gif"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;  &lt;img alt="" src="https://img2020.cnblogs.com/blog/643298/202004/643298-20200428083834453-1551380117.png"&gt;&lt;/img&gt;&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;div&gt;  &lt;div&gt;   &lt;a title="&amp;#22797;&amp;#21046;&amp;#20195;&amp;#30721;"&gt;    &lt;img alt="&amp;#22797;&amp;#21046;&amp;#20195;&amp;#30721;" src="https://common.cnblogs.com/images/copycode.gif"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/div&gt;  &lt;pre&gt;&amp;quot;jdbc:oracle:thin:@&amp;quot; + 
 &amp;quot;(DESCRIPTION=&amp;quot; + 
&amp;quot;(FAILOVER=on)&amp;quot; + 
 &amp;quot;(ADDRESS_LIST=&amp;quot; + 
 &amp;quot;(LOAD_BALANCE=on)&amp;quot; + 
 &amp;quot;(CONNECT_TIMEOUT=3)(RETRY_COUNT=3)&amp;quot; +
 &amp;quot;(ADDRESS=(PROTOCOL=TCP)(HOST=prmy-scan)(PORT=1521))&amp;quot;+     &amp;quot;(ADDRESS=(PROTOCOL=TCP)(HOST= stby-scan)(PORT=1521)))&amp;quot; + 
 &amp;quot;(CONNECT_DATA=(SERVICE_NAME=oltpworkload)))&amp;quot; &lt;/pre&gt;  &lt;div&gt;   &lt;a title="&amp;#22797;&amp;#21046;&amp;#20195;&amp;#30721;"&gt;    &lt;img alt="&amp;#22797;&amp;#21046;&amp;#20195;&amp;#30721;" src="https://common.cnblogs.com/images/copycode.gif"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt; &lt;p&gt; &lt;/p&gt; &lt;div&gt;  &lt;div&gt;   &lt;a title="&amp;#22797;&amp;#21046;&amp;#20195;&amp;#30721;"&gt;    &lt;img alt="&amp;#22797;&amp;#21046;&amp;#20195;&amp;#30721;" src="https://common.cnblogs.com/images/copycode.gif"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/div&gt;  &lt;pre&gt;PoolDataSource pds = PoolDataSourceFactory.getPoolDataSource();
pds.setConnectionFactoryClassName(&amp;quot;oracle.jdbc.pool.OracleDataSource&amp;quot;); pds.setUser(&amp;quot;system&amp;quot;); 
 pds.setPassword(&amp;quot;oracle&amp;quot;); 
 String dbURL = 
 &amp;quot;jdbc:oracle:thin:@&amp;quot; + 
 &amp;quot;(DESCRIPTION_LIST=&amp;quot; + 
 &amp;quot;(LOAD_BALANCE=off)&amp;quot; + 
 &amp;quot;(FAILOVER=on)&amp;quot; + 
 &amp;quot;(DESCRIPTION=&amp;quot; +
 &amp;quot;(CONNECT_TIMEOUT=3)(RETRY_COUNT=3)&amp;quot; +
 &amp;quot;(ADDRESS_LIST=&amp;quot; + 
 &amp;quot;(LOAD_BALANCE=on)&amp;quot; + 
 &amp;quot;(ADDRESS=(PROTOCOL=TCP)(HOST=prmy-scan)(PORT=1521)))&amp;quot; + 
 &amp;quot;(CONNECT_DATA=(SERVICE_NAME=oltpworkload)))&amp;quot; + 
 &amp;quot;(DESCRIPTION=&amp;quot; + 
 &amp;quot;(ADDRESS_LIST=&amp;quot; + 
 &amp;quot;(LOAD_BALANCE=on)&amp;quot; + 
 &amp;quot;(ADDRESS=(PROTOCOL=TCP)(HOST= stby-scan)(PORT=1521)))&amp;quot; + 
 &amp;quot;(CONNECT_DATA=(SERVICE_NAME=oltpworkload))))&amp;quot;; 
 System.out.println(&amp;quot;Url=&amp;quot; + dbURL); 
 pds.setURL(dbURL); &lt;/pre&gt;  &lt;div&gt;   &lt;a title="&amp;#22797;&amp;#21046;&amp;#20195;&amp;#30721;"&gt;    &lt;img alt="&amp;#22797;&amp;#21046;&amp;#20195;&amp;#30721;" src="https://common.cnblogs.com/images/copycode.gif"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;这个第三方总结很简单, 看样子是第三方驱动厂商&lt;/p&gt; &lt;p&gt;  &lt;a href="https://support.tibco.com/s/article/JDBC-dbURL-when-using-failover-servers-with-Oracle" rel="noopener"&gt;https://support.tibco.com/s/article/JDBC-dbURL-when-using-failover-servers-with-Oracle&lt;/a&gt;&lt;/p&gt; &lt;div&gt;  &lt;div&gt;   &lt;div&gt;    &lt;h5&gt;Resolution&lt;/h5&gt;&lt;/div&gt;   &lt;div&gt;    &lt;h5&gt; When creating the bootstrap use the following formats for the JDBC connection string.     &lt;br /&gt;     &lt;br /&gt;Case 1: When using tibcosoftwareinc.jdbc.oracle.OracleDriver driver (Oracle (DataDirect)), JDBC URL field should contain:&lt;/h5&gt;    &lt;pre&gt;jdbc:tibcosoftwareinc:oracle://&amp;lt;myhost1&amp;gt;:&amp;lt;myport1&amp;gt;SID=&amp;lt;myservice1&amp;gt;AlternateServers=(&amp;lt;myhost2&amp;gt;:&amp;lt;myport2&amp;gt;SID=&amp;lt;myservice2&amp;gt;)&lt;/pre&gt;    &lt;h5&gt;Example URL:&lt;/h5&gt;    &lt;pre&gt;jdbc:tibcosoftwareinc:oracle://host1:1521;ServiceName=orcl;AlternateServers=(host2:1521)&lt;/pre&gt;    &lt;h5&gt;Case 2: When using oracle.jdbc.driver.OracleDriver (the native driver form Oracle), the JDBC URL field should contain:&lt;/h5&gt;    &lt;pre&gt;jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=&amp;lt;myhost1&amp;gt;)(PORT=&amp;lt;myport1&amp;gt;))(SERVICE_NAME=&amp;lt;myservice1&amp;gt;))(ADDRESS=(PROTOCOL=TCP)(HOST=&amp;lt;myhost2&amp;gt;)(PORT=&amp;lt;myport2&amp;gt;))(LOAD_BALANCE=yes)(CONNECT_DATA=(SERVICE_NAME=&amp;lt;myservice2&amp;gt;)(FAILOVER_MODE=(TYPE=SELECT)(METHOD=BASIC)(RETRIES=180))))&lt;/pre&gt;    &lt;h5&gt;Example URL:&lt;/h5&gt;    &lt;pre&gt;jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE=on)(ADDRESS=(PROTOCOL=TCP)(HOST=host1) (PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=host2) (PORT=1521))(CONNECT_DATA=(SERVICE_NAME=orcl)))&lt;/pre&gt;    &lt;h5&gt;See more information in      &lt;a href="https://docs.oracle.com/database/121/HABPT/config_fcf.htm#HABPT4967" rel="noopener" target="_blank"&gt;Oracle&amp;apos;s documentation&lt;/a&gt;.&lt;/h5&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt; &lt;div&gt;  &lt;div&gt;   &lt;div&gt;    &lt;h5&gt;Reference&lt;/h5&gt;&lt;/div&gt;   &lt;div&gt;    &lt;h5&gt; Oracle documentation:      &lt;a href="https://docs.oracle.com/database/121/HABPT/config_fcf.htm#HABPT5381" rel="noopener" target="_blank"&gt;Configuring Fast Connection Failover for JDBC Clients&lt;/a&gt;&lt;/h5&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/62209-oracle-rac-jdbc</guid>
      <pubDate>Sun, 17 Apr 2022 21:44:24 CST</pubDate>
    </item>
    <item>
      <title>使用 React 和 Next.js 构建博客</title>
      <link>https://itindex.net/detail/62202-react-next-js</link>
      <description>&lt;div&gt;    &lt;p&gt;      &lt;code&gt;Next.js&lt;/code&gt;是由 Vercel 创建和维护的基于 React 的应用程序框架。本教程将从零开始学习如何使用      &lt;code&gt;Next.js&lt;/code&gt;构建一个小型的博客网站：&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;基本页面创建&lt;/li&gt;      &lt;li&gt;从        &lt;code&gt;Markdown&lt;/code&gt;文件生成的动态路由&lt;/li&gt;      &lt;li&gt;静态生成（在构建时渲染）&lt;/li&gt;      &lt;li&gt;服务器端渲染（在请求时渲染）&lt;/li&gt;&lt;/ul&gt;    &lt;p&gt;文章涉及的代码仓库地址：      &lt;a href="https://github.com/QuintionTang/react-blog" rel="nofollow"&gt;https://github.com/QuintionTang/react-blog&lt;/a&gt;&lt;/p&gt;    &lt;h3&gt;Next.js 适合博客吗？&lt;/h3&gt;    &lt;p&gt;本教程将通过创建一个简单的博客来展示      &lt;code&gt;Next.js&lt;/code&gt;功能，那么      &lt;code&gt;Next.js&lt;/code&gt;适合这样的博客的开发吗？先来了解一下一般博客都需要什么？&lt;/p&gt;    &lt;p&gt;      &lt;img alt="nextjsbanner.png" src="https://s2.51cto.com/images/20220122/1642857332734886.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk="&gt;&lt;/img&gt;&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;        &lt;p&gt;          &lt;a href="https://wordpress.com/zh-cn/" rel="nofollow"&gt;WordPress&lt;/a&gt;是一个内容管理系统 (CMS)，它为三分之一的网站提供支持，通过在每次请求时将可编辑的数据库内容渲染到 PHP 模板中来为页面提供服务。它非常适合定期更新的内容，但性能、安全性和数据备份需要一定的自定义设置。&lt;/p&gt;&lt;/li&gt;      &lt;li&gt;静态站点生成器 (SSG)，例如        &lt;a href="https://www.11ty.dev/" rel="nofollow"&gt;Eleventy&lt;/a&gt;或        &lt;a href="https://www.gatsbyjs.com/" rel="nofollow"&gt;Gatsby&lt;/a&gt;创建预渲染文件，无需服务器端或数据库即可快速构建静态站点，在版本控制、性能和安全性都非常出色，但构建步骤和以开发人员为中心的过程可能会减慢发布速度，尤其是在大型网站上。&lt;/li&gt;&lt;/ul&gt;    &lt;p&gt;      &lt;code&gt;Next.js&lt;/code&gt;是一个基于 React 的应用程序框架，它几乎没有特定于博客功能。但是，它可以提供了一种实现机制：&lt;/p&gt;    &lt;ol&gt;      &lt;li&gt;在可能的情况下，        &lt;code&gt;Next.js&lt;/code&gt;生成静态内容，如 SSG，这些页面加载速度非常快，可以被搜索引擎快速收录，并且可以在任何有或没有 JavaScript 的设备上阅读。&lt;/li&gt;      &lt;li&gt;在第一次加载后，        &lt;code&gt;Next.js&lt;/code&gt;应用程序的行为类似于单页应用程序 (SPA)，后续页面和代码会以渐进式下载，无需刷新整页。&lt;/li&gt;      &lt;li&gt;        &lt;code&gt;Next.js&lt;/code&gt;为每个请求提供服务器端渲染 (SSR)，为个人用户提供实时 CMS 更新或自定义内容变得更加容易。&lt;/li&gt;&lt;/ol&gt;    &lt;p&gt;如果网站可能会从基本博客迭代为更复杂的网站，例如在线商店、新闻聚合服务、社交媒体平台等，可以考虑使用      &lt;code&gt;Next.js&lt;/code&gt;。&lt;/p&gt;    &lt;h3&gt;开始&lt;/h3&gt;    &lt;p&gt;本教程正在构建的内容，可以在 GitHub 上找到完整的代码。可以通过在终端中输入以下命令，在      &lt;code&gt;Windows&lt;/code&gt;、      &lt;code&gt;macOS&lt;/code&gt;或      &lt;code&gt;Linux&lt;/code&gt;上下载、安装和启动它：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;git clone git@github.com:QuintionTang/react-blog.git
cd react-blog
npm i
npm run dev&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;然后在浏览器中输入      &lt;code&gt;localhost:3000&lt;/code&gt;打开主页。&lt;/p&gt;    &lt;h4&gt;从头开始构建&lt;/h4&gt;    &lt;p&gt;      &lt;code&gt;Next.js&lt;/code&gt;提供了一个      &lt;code&gt;create-next-app&lt;/code&gt;工具来快速开始使用应用程序模板。本教程将展示如何从头开始构建站点：如添加静态资源或者页面。&lt;/p&gt;    &lt;h5&gt;安装 Next.js 和 React&lt;/h5&gt;    &lt;p&gt;与其他      &lt;code&gt;Node.js&lt;/code&gt;或者 VUE 项目一样，首先创建一个目录并初始化      &lt;code&gt;package.json&lt;/code&gt;文件：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;mkdir react-blog
cd react-blog
npm init&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;然后安装      &lt;code&gt;Next.js&lt;/code&gt;和      &lt;code&gt;React&lt;/code&gt;作为依赖项：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;npm install next react react-dom --save&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;添加开发构建脚本设置，如下所示，在      &lt;code&gt;package.json&lt;/code&gt;文件的      &lt;code&gt;scripts&lt;/code&gt;属性中添加：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;&amp;quot;scripts&amp;quot;: {
    &amp;quot;dev&amp;quot;: &amp;quot;next dev&amp;quot;,
    &amp;quot;build&amp;quot;: &amp;quot;next build&amp;quot;,
    &amp;quot;start&amp;quot;: &amp;quot;next start&amp;quot;
}&lt;/code&gt;&lt;/pre&gt;    &lt;h5&gt;创建第一个页面&lt;/h5&gt;    &lt;p&gt;      &lt;code&gt;Next.js&lt;/code&gt;有一个基于文件系统的路由器。在项目的      &lt;code&gt;pages&lt;/code&gt;目录中创建的任何 React 组件文件都会自动呈现为一个页面。&lt;/p&gt;    &lt;p&gt;要创建一个页面，需要在      &lt;code&gt;pages&lt;/code&gt;目录中添加一个      &lt;code&gt;index.js&lt;/code&gt;文件。将以下代码添加到      &lt;code&gt;./pages/index.js&lt;/code&gt;文件中，返回      &lt;code&gt;JSX&lt;/code&gt;代码的功能性 React 组件：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;export default function Home() {
    return (
        &amp;lt;&amp;gt;
            Next.js 博客网站
            &amp;lt;p&amp;gt;
                这个博客网站将使用 &amp;lt;a rel=&amp;quot;nofollow&amp;quot; href=&amp;quot;https://nextjs.org/&amp;quot;&amp;gt;Next.js&amp;lt;/a&amp;gt;。
            &amp;lt;/p&amp;gt;
        &amp;lt;/&amp;gt;
    );
}&lt;/code&gt;&lt;/pre&gt;    &lt;blockquote&gt;      &lt;p&gt;JSX 必须在单个包含元素（例如        &lt;code&gt;&amp;amp;lt;div&amp;amp;gt;&lt;/code&gt;）中返回。        &lt;code&gt;&amp;amp;lt;&amp;amp;gt; ... &amp;amp;lt;/&amp;amp;gt;&lt;/code&gt;表示法定义了一个文档片段，因此不需要额外的容器。&lt;/p&gt;&lt;/blockquote&gt;    &lt;p&gt;要启动      &lt;code&gt;Next.js&lt;/code&gt;开发服务器，从项目根目录在终端中运行      &lt;code&gt;npm run dev&lt;/code&gt;（可以使用      &lt;code&gt;npx next dev&lt;/code&gt;），然后在浏览器中打开      &lt;code&gt;http://localhost:3000/&lt;/code&gt;：&lt;/p&gt;    &lt;p&gt;      &lt;img alt="WechatIMG119622222.png" src="https://s2.51cto.com/images/20220122/1642857395215612.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk="&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;      &lt;code&gt;Next.js&lt;/code&gt;已经确定页面可以预渲染，所以它在开发模式下显示一个      &lt;strong&gt;闪电图标&lt;/strong&gt;。&lt;/p&gt;    &lt;p&gt;可以在自动路由的页面目录中创建类似的文件，如下：&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;        &lt;code&gt;pages/index.js&lt;/code&gt;用于呈现博客主要&lt;/li&gt;      &lt;li&gt;        &lt;code&gt;pages/about.js&lt;/code&gt;呈现一个        &lt;code&gt;/about&lt;/code&gt;页面&lt;/li&gt;&lt;/ul&gt;    &lt;h5&gt;增加链接&lt;/h5&gt;    &lt;p&gt;在 JSX 代码中使用标准 HTML      &lt;code&gt;&amp;amp;lt;a&amp;amp;gt;&lt;/code&gt;标签创建指向另一个页面的超链接。如果该页面位于同一个      &lt;code&gt;Next.js&lt;/code&gt;站点内，浏览器将会刷新整个页面。可以使用      &lt;code&gt;next/link&lt;/code&gt;中的      &lt;code&gt;&amp;amp;lt;Link&amp;amp;gt;&lt;/code&gt;组件实现页面跳转。在根页面      &lt;code&gt;/index.js&lt;/code&gt;上创建指向      &lt;code&gt;/about&lt;/code&gt;页面的链接，代码如下：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;import Link from &amp;quot;next/link&amp;quot;;
export default function Home() {
    return (
        &amp;lt;&amp;gt;
            Next.js 博客网站
            &amp;lt;p&amp;gt;
                这个博客网站将使用 &amp;lt;a rel=&amp;quot;nofollow&amp;quot; href=&amp;quot;https://nextjs.org/&amp;quot;&amp;gt;Next.js&amp;lt;/a&amp;gt;。
            &amp;lt;/p&amp;gt;
            &amp;lt;p&amp;gt;
                更多内容请点击{&amp;quot; &amp;quot;}
                &amp;lt;Link href=&amp;quot;/about&amp;quot;&amp;gt;
                    &amp;lt;a&amp;gt;关于我们...&amp;lt;/a&amp;gt;
                &amp;lt;/Link&amp;gt;
            &amp;lt;/p&amp;gt;
        &amp;lt;/&amp;gt;
    );
}&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;当点击      &lt;code&gt;关于我们...&lt;/code&gt;链接时，      &lt;code&gt;Next.js&lt;/code&gt;将使用      &lt;code&gt;Ajax&lt;/code&gt;请求下载      &lt;code&gt;/about&lt;/code&gt;的内容一次并缓存，然后再页面中呈现。&lt;/p&gt;    &lt;h5&gt;增加 &amp;lt;head&amp;gt; 元素&lt;/h5&gt;    &lt;p&gt;可以使用      &lt;code&gt;next/head&lt;/code&gt;中的      &lt;code&gt;&amp;amp;lt;Head&amp;amp;gt;&lt;/code&gt;组件来更改页面标题和元标记，如下：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;import Head from &amp;quot;next/head&amp;quot;;
import Link from &amp;quot;next/link&amp;quot;;
export default function Home() {
    return (
        &amp;lt;&amp;gt;
            &amp;lt;Head&amp;gt;
                &amp;lt;title&amp;gt;Next.js网站&amp;lt;/title&amp;gt;
                &amp;lt;meta
                    name=&amp;quot;description&amp;quot;
                    content=&amp;quot;这是一个由 Next.js 驱动的网站&amp;quot;
                /&amp;gt;
            &amp;lt;/Head&amp;gt;
            Next.js 博客网站
            &amp;lt;p&amp;gt;
                这个博客网站将使用 &amp;lt;a rel=&amp;quot;nofollow&amp;quot; href=&amp;quot;https://nextjs.org/&amp;quot;&amp;gt;Next.js&amp;lt;/a&amp;gt;。
            &amp;lt;/p&amp;gt;
            &amp;lt;p&amp;gt;
                更多内容请点击{&amp;quot; &amp;quot;}
                &amp;lt;Link href=&amp;quot;/about&amp;quot;&amp;gt;
                    &amp;lt;a&amp;gt;关于我们...&amp;lt;/a&amp;gt;
                &amp;lt;/Link&amp;gt;
            &amp;lt;/p&amp;gt;
        &amp;lt;/&amp;gt;
    );
}&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;点击浏览器查看源代码，可以看到相关 HTML 标签。&lt;/p&gt;    &lt;h5&gt;增加静态资源&lt;/h5&gt;    &lt;p&gt;      &lt;code&gt;public&lt;/code&gt;目录用于存放静态资源，如图标、      &lt;code&gt;robots.txt&lt;/code&gt;或其它更新频率低的文件。可以增加自己的文件或从初始项目存储库复制      &lt;code&gt;favicon.ico&lt;/code&gt;和图像子目录。&lt;/p&gt;    &lt;h5&gt;创建模板&lt;/h5&gt;    &lt;p&gt;      &lt;code&gt;Next.js&lt;/code&gt;使用 React 组件来实现模板化，接下来项目根目录下创建一个新的      &lt;code&gt;components&lt;/code&gt;文件夹，然后添加      &lt;code&gt;layout.js&lt;/code&gt;来定义一个新的      &lt;code&gt;&amp;amp;lt;Layout&amp;amp;gt;&lt;/code&gt;组件：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;import Header from &amp;quot;./header&amp;quot;;
import Footer from &amp;quot;./footer&amp;quot;;

export default function Layout({ children, title }) {
    return (
        &amp;lt;&amp;gt;
            &amp;lt;Header title={title} /&amp;gt;
            &amp;lt;main&amp;gt;{children}&amp;lt;/main&amp;gt;
            &amp;lt;Footer /&amp;gt;
        &amp;lt;/&amp;gt;
    );
}&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;任何使用此组件的页面都会传递一个      &lt;code&gt;props&lt;/code&gt;对象，该对象包含作为子值      &lt;code&gt;children&lt;/code&gt;的内容。      &lt;code&gt;&amp;amp;lt;Layout&amp;amp;gt;&lt;/code&gt;还将引用了另外两个组件，分别是      &lt;code&gt;component/header.js&lt;/code&gt;中的      &lt;code&gt;&amp;amp;lt;Header&amp;amp;gt;&lt;/code&gt;，主要呈现一个      &lt;code&gt;&amp;amp;lt;header&amp;amp;gt;&lt;/code&gt;，包含主页链接、内联 SVG Logo和 默认为      &lt;code&gt;/images/header.jpg&lt;/code&gt;的图像：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;import Link from &amp;quot;next/link&amp;quot;;

export default function Header({ title }) {
    const headerImg = &amp;quot;/images/&amp;quot; + (title || &amp;quot;header.jpg&amp;quot;);

    return (
        &amp;lt;header&amp;gt;
            &amp;lt;p className=&amp;quot;logo&amp;quot;&amp;gt;
                &amp;lt;Link href=&amp;quot;/&amp;quot;&amp;gt;
                    &amp;lt;a&amp;gt;
                        &amp;lt;svg
                            xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot;
                            viewBox=&amp;quot;0 0 20 20&amp;quot;
                            width=&amp;quot;50&amp;quot;
                            height=&amp;quot;50&amp;quot;
                        &amp;gt;
                            &amp;lt;path d=&amp;quot;M10.394 2.08a1 1 0 00-.788 0l-7 3a1 1 0 000 1.84L5.25 8.051a.999.999 0 01.356-.257l4-1.714a1 1 0 11.788 1.838L7.667 9.088l1.94.831a1 1 0 00.787 0l7-3a1 1 0 000-1.838l-7-3zM3.31 9.397L5 10.12v4.102a8.969 8.969 0 00-1.05-.174 1 1 0 01-.89-.89 11.115 11.115 0 01.25-3.762zM9.3 16.573A9.026 9.026 0 007 14.935v-3.957l1.818.78a3 3 0 002.364 0l5.508-2.361a11.026 11.026 0 01.25 3.762 1 1 0 01-.89.89 8.968 8.968 0 00-5.35 2.524 1 1 0 01-1.4 0zM6 18a1 1 0 001-1v-2.065a8.935 8.935 0 00-2-.712V17a1 1 0 001 1z&amp;quot;&amp;gt;&amp;lt;/path&amp;gt;
                        &amp;lt;/svg&amp;gt;
                        Next.js 博客
                    &amp;lt;/a&amp;gt;
                &amp;lt;/Link&amp;gt;
            &amp;lt;/p&amp;gt;

            &amp;lt;figure&amp;gt;
                &amp;lt;img
                    src={headerImg}
                    height=&amp;quot;80&amp;quot;
                    alt=&amp;quot;decoration&amp;quot;
                /&amp;gt;
            &amp;lt;/figure&amp;gt;
        &amp;lt;/header&amp;gt;
    );
}&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;第二个组件是      &lt;code&gt;component/footer.js&lt;/code&gt;中的      &lt;code&gt;&amp;amp;lt;Footer&amp;amp;gt;&lt;/code&gt;，呈现      &lt;code&gt;&amp;amp;lt;footer&amp;amp;gt;&lt;/code&gt;内容，其中包含指向 GitHub 存储库和内联 SVG 的链接：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;export default function Footer() {
    return (
        &amp;lt;footer&amp;gt;
            &amp;lt;p className=&amp;quot;github&amp;quot;&amp;gt;
                &amp;lt;a rel=&amp;quot;nofollow&amp;quot; href=&amp;quot;https://github.com/QuintionTang/react-blog&amp;quot;&amp;gt;
                    &amp;lt;svg
                        xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot;
                        viewBox=&amp;quot;0 0 512 512&amp;quot;
                        width=&amp;quot;50&amp;quot;
                        height=&amp;quot;50&amp;quot;
                    &amp;gt;
                        &amp;lt;path d=&amp;quot;M256 32C132.3 32 32 134.9 32 261.7a229.3 229.3 0 00153.2 217.9 17.6 17.6 0 003.8.4c8.3 0 11.5-6.1 11.5-11.4l-.3-39.1a102.4 102.4 0 01-22.6 2.7c-43.1 0-52.9-33.5-52.9-33.5-10.2-26.5-24.9-33.6-24.9-33.6-19.5-13.7-.1-14.1 1.4-14.1h.1c22.5 2 34.3 23.8 34.3 23.8 11.2 19.6 26.2 25.1 39.6 25.1a63 63 0 0025.6-6c2-14.8 7.8-24.9 14.2-30.7-49.7-5.8-102-25.5-102-113.5 0-25.1 8.7-45.6 23-61.6a84.6 84.6 0 012.2-60.8 18.6 18.6 0 015-.5c8.1 0 26.4 3.1 56.6 24.1a208.2 208.2 0 01112.2 0c30.2-21 48.5-24.1 56.6-24.1a18.6 18.6 0 015 .5 84.6 84.6 0 012.2 60.8 90.3 90.3 0 0123 61.6c0 88.2-52.4 107.6-102.3 113.3 8 7.1 15.2 21.1 15.2 42.5 0 30.7-.3 55.5-.3 63 0 5.4 3.1 11.5 11.4 11.5a19.4 19.4 0 004-.4A229.2 229.2 0 00480 261.7C480 134.9 379.7 32 256 32z&amp;quot; /&amp;gt;
                    &amp;lt;/svg&amp;gt;
                    https://github.com/QuintionTang/react-blog
                &amp;lt;/a&amp;gt;
            &amp;lt;/p&amp;gt;
        &amp;lt;/footer&amp;gt;
    );
}&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;接下来更新      &lt;code&gt;pages/index.js&lt;/code&gt;，将使用自定义的      &lt;code&gt;&amp;amp;lt;Layout&amp;amp;gt;&lt;/code&gt;组件：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;import Layout from &amp;quot;../components/layout&amp;quot;;
import Head from &amp;quot;next/head&amp;quot;;
import Link from &amp;quot;next/link&amp;quot;;
export default function Home() {
    return (
        &amp;lt;Layout&amp;gt;
            &amp;lt;Head&amp;gt;
                &amp;lt;title&amp;gt;Next.js网站&amp;lt;/title&amp;gt;
                &amp;lt;meta
                    name=&amp;quot;description&amp;quot;
                    content=&amp;quot;这是一个由 Next.js 驱动的网站&amp;quot;
                /&amp;gt;
            &amp;lt;/Head&amp;gt;
            Next.js 博客网站
            &amp;lt;p&amp;gt;
                这个博客网站将使用 &amp;lt;a rel=&amp;quot;nofollow&amp;quot; href=&amp;quot;https://nextjs.org/&amp;quot;&amp;gt;Next.js&amp;lt;/a&amp;gt;。
            &amp;lt;/p&amp;gt;
            &amp;lt;p&amp;gt;
                更多内容请点击{&amp;quot; &amp;quot;}
                &amp;lt;Link href=&amp;quot;/about&amp;quot;&amp;gt;
                    &amp;lt;a&amp;gt;关于我们...&amp;lt;/a&amp;gt;
                &amp;lt;/Link&amp;gt;
            &amp;lt;/p&amp;gt;
        &amp;lt;/Layout&amp;gt;
    );
}&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;然后对      &lt;code&gt;pages/about.js&lt;/code&gt;和创建的任何其他页面执行相同操作。&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;import Layout from &amp;quot;../components/layout&amp;quot;;
import Head from &amp;quot;next/head&amp;quot;;

export default function Home() {
    return (
        &amp;lt;Layout title=&amp;quot;share.png&amp;quot;&amp;gt;
            &amp;lt;Head&amp;gt;
                &amp;lt;title&amp;gt;关于我们&amp;lt;/title&amp;gt;
            &amp;lt;/Head&amp;gt;

            关于我们
            &amp;lt;p&amp;gt;
                DevPoint 是 WEB
                开发的分享中心，用自己的热情来分享互联网的点滴，以此激励自己加强学习提升自我。
            &amp;lt;/p&amp;gt;
        &amp;lt;/Layout&amp;gt;
    );
}&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;更新后的效果如下：&lt;/p&gt;    &lt;p&gt;      &lt;img alt="1642841913123.jpg" src="https://s2.51cto.com/images/20220122/1642857420341193.jpg?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk="&gt;&lt;/img&gt;&lt;/p&gt;    &lt;h5&gt;使用动态路由查看博客内容&lt;/h5&gt;    &lt;p&gt;使用 JSX 创建内容并不是特别实用，尤其是对于常规博客文章，对于开发者比较喜欢 Markdown 的方式写博客。Next.js 可以使用任何来源创建页面。这些可以在构建时静态生成，并使用动态路由将数据映射到 URL。&lt;/p&gt;    &lt;p&gt;在继续之前，先来创建一个文章目录，用于存放博客的 Markdown 文件。例如：      &lt;code&gt;articles/article-01.md&lt;/code&gt;：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;---
title: 使用 React 和 Next.js 构建博客
description: Next.js 是由 Vercel 创建和维护的基于 React 的应用程序框架。本教程将从零开始学习如何使用 Next.js 构建一个小型的博客网站。
date: 2022-01-22
tags:
    - HTML
    - CSS
    - REACT
---

使用 React 和 Next.js 构建博客

## 摘要

Next.js 是由 Vercel 创建和维护的基于 React 的应用程序框架。本教程将从零开始学习如何使用 Next.js 构建一个小型的博客网站。

本教程将通过创建一个简单的博客来展示 Next.js 功能，那么 Next.js 适合这样的博客的开发吗？先来了解一下一般博客都需要什么？

-   WordPress 是一个内容管理系统 (CMS)，它为三分之一的网站提供支持，通过在每次请求时将可编辑的数据库内容渲染到 PHP 模板中来为页面提供服务。它非常适合定期更新的内容，但性能、安全性和数据备份需要一定的自定义设置。
-   静态站点生成器 (SSG)，例如 Eleventy 或 Gatsby 创建预渲染文件，无需服务器端或数据库即可快速构建静态站点，在版本控制、性能和安全性都非常出色，但构建步骤和以开发人员为中心的过程可能会减慢发布速度，尤其是在大型网站上。

Next.js 是一个基于 React 的应用程序框架，它几乎没有特定于博客功能。但是，它可以提供了一种实现机制：

1. 在可能的情况下，Next.js 生成静态内容，如 SSG，这些页面加载速度非常快，可以被搜索引擎快速收录，并且可以在任何有或没有 JavaScript 的设备上阅读。
2. 在第一次加载后，Next.js 应用程序的行为类似于单页应用程序 (SPA)，后续页面和代码会以渐进式下载，无需刷新整页。
3. Next.js 为每个请求提供服务器端渲染 (SSR)，为个人用户提供实时 CMS 更新或自定义内容变得更加容易。
   如果网站可能会从基本博客迭代为更复杂的网站，例如在线商店、新闻聚合服务、社交媒体平台等，可以考虑使用 Next.js。&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;内容的模板以      &lt;code&gt;---&lt;/code&gt;来定义博客的标题、发布时间等元数据，      &lt;code&gt;---&lt;/code&gt;后面的为博客的正文。接下来需要安装解析内容的依赖，包括：      &lt;code&gt;front-matter&lt;/code&gt;、      &lt;code&gt;remark&lt;/code&gt;和      &lt;code&gt;remark-html&lt;/code&gt;，执行一下命令：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;npm install front-matter remark remark-html --save&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;要读取和解析 Markdown 文件，需要添加相关逻辑，代码所在文件      &lt;code&gt;libs/posts-md.js&lt;/code&gt;。&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;import { promises as fsp } from &amp;quot;fs&amp;quot;;
import path from &amp;quot;path&amp;quot;;
import fm from &amp;quot;front-matter&amp;quot;;
import { remark } from &amp;quot;remark&amp;quot;;
import remarkhtml from &amp;quot;remark-html&amp;quot;;
import * as dateformat from &amp;quot;./dateformat&amp;quot;;

const fileExt = &amp;quot;md&amp;quot;;

// 获取文件夹相对路径
function absPath(dir) {
    return path.isAbsolute(dir) ? dir : path.resolve(process.cwd(), dir);
}

/**
 * 获取文件夹中 Markdown 文件名列表，以数组形式返回
 * @param {*} dir
 * @returns
 */
export async function getFileIds(dir = &amp;quot;./&amp;quot;) {
    const loc = absPath(dir);
    const files = await fsp.readdir(loc);

    return files
        .filter((fn) =&amp;gt; path.extname(fn) === `.${fileExt}`)
        .map((fn) =&amp;gt; path.basename(fn, path.extname(fn)));
}

/**
 * 获取单个 Markdown 文件的内容
 * @param {*} dir
 * @param {*} id
 * @returns
 */
export async function getFileData(dir = &amp;quot;./&amp;quot;, id) {
    const file = path.join(absPath(dir), `${id}.${fileExt}`),
        stat = await fsp.stat(file),
        data = await fsp.readFile(file, &amp;quot;utf8&amp;quot;),
        matter = fm(data),
        html = (await remark().use(remarkhtml).process(matter.body)).toString();

    // 日期格式化
    const date = matter.attributes.date || stat.ctime;
    matter.attributes.date = date.toUTCString();
    matter.attributes.dateYMD = dateformat.ymd(date);
    matter.attributes.dateFriendly = dateformat.friendly(date);

    // 计数
    const roundTo = 10,
        readPerMin = 200,
        numFormat = new Intl.NumberFormat(&amp;quot;en&amp;quot;),
        count = matter.body
            .replace(/\W/g, &amp;quot; &amp;quot;)
            .replace(/\s+/g, &amp;quot; &amp;quot;)
            .split(&amp;quot; &amp;quot;).length,
        words = Math.ceil(count / roundTo) * roundTo,
        mins = Math.ceil(count / readPerMin);

    matter.attributes.wordcount = `${numFormat.format(
        words
    )} words, ${numFormat.format(mins)}-minute read`;

    return {
        id,
        html,
        ...matter.attributes,
    };
}&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;以上代码涉及日期格式化代码，文件路径      &lt;code&gt;libs/dateformat.js&lt;/code&gt;。&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;// 时间格式化
const toMonth = new Intl.DateTimeFormat(&amp;quot;en&amp;quot;, { month: &amp;quot;long&amp;quot; });

// 格式化为 YYYY-MM-DD
export function ymd(date) {
    return date instanceof Date
        ? `${date.getUTCFullYear()}-${String(date.getUTCMonth() + 1).padStart(
              2,
              &amp;quot;0&amp;quot;
          )}-${String(date.getUTCDate()).padStart(2, &amp;quot;0&amp;quot;)}`
        : &amp;quot;&amp;quot;;
}

// 格式化为 DD MMMM, YYYY
export function friendly(date) {
    return date instanceof Date
        ? `${date.getUTCDate()} ${toMonth.format(
              date
          )}, ${date.getUTCFullYear()}`
        : &amp;quot;&amp;quot;;
}&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;Next.js 使用包含在      &lt;code&gt;[&lt;/code&gt;id      &lt;code&gt;]&lt;/code&gt;中的标识符的文件名来识别动态（生成）路由。创建一个名为      &lt;code&gt;pages/articles/[id].js&lt;/code&gt;的文件：      &lt;code&gt;Next.js&lt;/code&gt;将使用      &lt;code&gt;id&lt;/code&gt;作为参数在      &lt;code&gt;/articles/article-01&lt;/code&gt;等路由处生成页面，即博客的详情页路由。&lt;/p&gt;    &lt;p&gt;      &lt;code&gt;pages/articles/[id].js&lt;/code&gt;中定义函数      &lt;code&gt;getStaticPaths&lt;/code&gt;，该函数返回构建时要呈现的路径信息。&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;/**
 * 获取博客路径信息
 * @returns [ { params: { id: &amp;apos;article-01&amp;apos; } } ]
 */
export async function getStaticPaths() {
    const paths = (await getFileIds(postsDir)).map((id) =&amp;gt; {
        return { params: { id } };
    });
    console.log(paths);
    return {
        paths,
        fallback: false,
    };
}&lt;/code&gt;&lt;/pre&gt;    &lt;blockquote&gt;      &lt;p&gt;设置        &lt;code&gt;fallback: false&lt;/code&gt;会在找不到路径时出现 404 页面。&lt;/p&gt;&lt;/blockquote&gt;    &lt;p&gt;接下来创建函数      &lt;code&gt;getStaticProps&lt;/code&gt;，函数在构建时获取特定 ID 的数据以进行静态生成。它在      &lt;code&gt;params&lt;/code&gt;对象中传递了一个      &lt;code&gt;id&lt;/code&gt;属性，调用      &lt;code&gt;libs/posts-md.js&lt;/code&gt;中的      &lt;code&gt;getFileData()&lt;/code&gt;函数解析 Markdown 文件。&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;/**
 * 解析路由获取详细内容
 * @param {*} param0
 * @returns
 */
export async function getStaticProps({ params }) {
    return {
        props: {
            postData: await getFileData(postsDir, params.id),
        },
    };
}&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;      &lt;code&gt;pages/articles/[id].js&lt;/code&gt;除了解析博客内容外，还需将内容导出为一个 React 组件，组件将      &lt;code&gt;postData&lt;/code&gt;渲染到前面创建的模板中：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;export default function Article({ postData }) {
    // 解析markdown内容
    const html = `
    ${postData.title}
    &amp;lt;p class=&amp;quot;time&amp;quot;&amp;gt;&amp;lt;time datetime=&amp;quot;${postData.dateYMD}&amp;quot;&amp;gt;${postData.dateFriendly}&amp;lt;/time&amp;gt;&amp;lt;/p&amp;gt;
    &amp;lt;p class=&amp;quot;words&amp;quot;&amp;gt;${postData.wordcount}&amp;lt;/p&amp;gt;
    ${postData.html}
  `;

    return (
        &amp;lt;Layout title=&amp;quot;share.png&amp;quot;&amp;gt;
            &amp;lt;Head&amp;gt;
                &amp;lt;title&amp;gt;{postData.title}&amp;lt;/title&amp;gt;
                &amp;lt;meta name=&amp;quot;description&amp;quot; content={postData.description} /&amp;gt;
            &amp;lt;/Head&amp;gt;

            &amp;lt;article dangerouslySetInnerHTML={{ __html: html }} /&amp;gt;
        &amp;lt;/Layout&amp;gt;
    );
}&lt;/code&gt;&lt;/pre&gt;    &lt;blockquote&gt;      &lt;p&gt;        &lt;code&gt;dangerouslySetInnerHTML&lt;/code&gt;属性确保 HTML 不被编码。&lt;/p&gt;&lt;/blockquote&gt;    &lt;h5&gt;创建博客列表页&lt;/h5&gt;    &lt;p&gt;创建文件      &lt;code&gt;pages/articles/index.js&lt;/code&gt;，这个页面需要实现的功能是解析博客列表，并返回为一个 React 组件。在实现这个页面功能之前，先来创建一个链接组件      &lt;code&gt;Pagelink&lt;/code&gt;。&lt;/p&gt;    &lt;p&gt;      &lt;code&gt;Pagelink&lt;/code&gt;组件实现博客列表中单篇博客的布局，创建文件      &lt;code&gt;components/pagelink.js&lt;/code&gt;，代码如下：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;import Link from &amp;quot;next/link&amp;quot;;

export default function Pagelink(props) {
    const link = `/${props.postsdir}/${props.id}`;

    return (
        &amp;lt;article&amp;gt;
            &amp;lt;h2&amp;gt;
                &amp;lt;Link href={link}&amp;gt;
                    &amp;lt;a&amp;gt;{props.title}&amp;lt;/a&amp;gt;
                &amp;lt;/Link&amp;gt;
            &amp;lt;/h2&amp;gt;
            &amp;lt;p className=&amp;quot;time&amp;quot;&amp;gt;
                发布时间：
                &amp;lt;time dateTime={props.datefriendly}&amp;gt;{props.dateymd}&amp;lt;/time&amp;gt;
            &amp;lt;/p&amp;gt;
            &amp;lt;p&amp;gt;{props.description}&amp;lt;/p&amp;gt;
        &amp;lt;/article&amp;gt;
    );
}&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;完成单个博客布局后，来看看博客列表页，代码如下：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;import { getAllFiles } from &amp;quot;../../libs/posts-md&amp;quot;;
import Layout from &amp;quot;../../components/layout&amp;quot;;
import Pagelink from &amp;quot;../../components/pagelink&amp;quot;;
import Head from &amp;quot;next/head&amp;quot;;

const postsDir = &amp;quot;articles&amp;quot;;

export default function ArticleIndex({ postData }) {
    return (
        &amp;lt;Layout title=&amp;quot;share.png&amp;quot;&amp;gt;
            &amp;lt;Head&amp;gt;
                &amp;lt;title&amp;gt;博客列表&amp;lt;/title&amp;gt;
                &amp;lt;meta
                    name=&amp;quot;description&amp;quot;
                    content=&amp;quot;A list of articles published on this site.&amp;quot;
                /&amp;gt;
            &amp;lt;/Head&amp;gt;

            博客列表

            &amp;lt;aside className=&amp;quot;pagelist&amp;quot;&amp;gt;
                {postData.map((post) =&amp;gt; (
                    &amp;lt;Pagelink
                        key={post.id}
                        postsdir={postsDir}
                        id={post.id}
                        title={post.title}
                        description={post.description}
                        dateymd={post.dateYMD}
                        datefriendly={post.dateFriendly}
                    /&amp;gt;
                ))}
            &amp;lt;/aside&amp;gt;
        &amp;lt;/Layout&amp;gt;
    );
}

/**
 * 获取所有文章文章的数组
 * @returns
 */
export async function getStaticProps() {
    return {
        props: {
            postData: await getAllFiles(postsDir),
        },
    };
}&lt;/code&gt;&lt;/pre&gt;    &lt;h5&gt;创建导航&lt;/h5&gt;    &lt;p&gt;一个完整的博客站点，需要一个导航菜单，方便内容切换。接下来创建一个导航组件，创建文件      &lt;code&gt;components/navs.js&lt;/code&gt;，导出一个      &lt;code&gt;&amp;amp;lt;Navs&amp;amp;gt;&lt;/code&gt;组件，代码如下：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;import { useRouter } from &amp;quot;next/router&amp;quot;;
import Link from &amp;quot;next/link&amp;quot;;

// menu name and link
const menu = [
    { text: &amp;quot;网站首页&amp;quot;, link: &amp;quot;/&amp;quot; },
    { text: &amp;quot;关于我们&amp;quot;, link: &amp;quot;/about&amp;quot; },
    { text: &amp;quot;博客列表&amp;quot;, link: &amp;quot;/articles&amp;quot; },
];

export default function Navs() {
    const router = useRouter(),
        currentPage = router.pathname;

    return (
        &amp;lt;nav&amp;gt;
            &amp;lt;ul&amp;gt;
                {menu.map((item) =&amp;gt; (
                    &amp;lt;NavItem
                        key={item.link}
                        text={item.text}
                        link={item.link}
                        currentpage={currentPage}
                    /&amp;gt;
                ))}
            &amp;lt;/ul&amp;gt;
        &amp;lt;/nav&amp;gt;
    );
}

function NavItem({ text, link, currentpage }) {
    if (link === currentpage) {
        return (
            &amp;lt;li className=&amp;quot;active&amp;quot;&amp;gt;
                &amp;lt;strong&amp;gt;{text}&amp;lt;/strong&amp;gt;
            &amp;lt;/li&amp;gt;
        );
    } else {
        return (
            &amp;lt;li&amp;gt;
                &amp;lt;Link href={link}&amp;gt;
                    &amp;lt;a&amp;gt;{text}&amp;lt;/a&amp;gt;
                &amp;lt;/Link&amp;gt;
            &amp;lt;/li&amp;gt;
        );
    }
}&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;下面将      &lt;code&gt;Navs&lt;/code&gt;组件加入到组件 Header 中，代码如下：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;import Link from &amp;quot;next/link&amp;quot;;
import Navs from &amp;quot;./navs&amp;quot;;  // 导航菜单

export default function Header({ title }) {
    const headerImg = &amp;quot;/images/&amp;quot; + (title || &amp;quot;cover.png&amp;quot;);

    return (
        &amp;lt;header&amp;gt;
            &amp;lt;p className=&amp;quot;logo&amp;quot;&amp;gt;
                &amp;lt;Link href=&amp;quot;/&amp;quot;&amp;gt;
                    &amp;lt;a&amp;gt;
                        &amp;lt;svg
                            xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot;
                            viewBox=&amp;quot;0 0 20 20&amp;quot;
                            width=&amp;quot;50&amp;quot;
                            height=&amp;quot;50&amp;quot;
                        &amp;gt;
                            &amp;lt;path d=&amp;quot;M10.394 2.08a1 1 0 00-.788 0l-7 3a1 1 0 000 1.84L5.25 8.051a.999.999 0 01.356-.257l4-1.714a1 1 0 11.788 1.838L7.667 9.088l1.94.831a1 1 0 00.787 0l7-3a1 1 0 000-1.838l-7-3zM3.31 9.397L5 10.12v4.102a8.969 8.969 0 00-1.05-.174 1 1 0 01-.89-.89 11.115 11.115 0 01.25-3.762zM9.3 16.573A9.026 9.026 0 007 14.935v-3.957l1.818.78a3 3 0 002.364 0l5.508-2.361a11.026 11.026 0 01.25 3.762 1 1 0 01-.89.89 8.968 8.968 0 00-5.35 2.524 1 1 0 01-1.4 0zM6 18a1 1 0 001-1v-2.065a8.935 8.935 0 00-2-.712V17a1 1 0 001 1z&amp;quot;&amp;gt;&amp;lt;/path&amp;gt;
                        &amp;lt;/svg&amp;gt;
                        Next.js 博客
                    &amp;lt;/a&amp;gt;
                &amp;lt;/Link&amp;gt;
            &amp;lt;/p&amp;gt;
            &amp;lt;Navs /&amp;gt;
            &amp;lt;figure&amp;gt;
                &amp;lt;img src={headerImg} width=&amp;quot;400&amp;quot; alt=&amp;quot;decoration&amp;quot; /&amp;gt;
            &amp;lt;/figure&amp;gt;
        &amp;lt;/header&amp;gt;
    );
}&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;到此一个简单的博客站点功能已经实现。&lt;/p&gt;    &lt;h5&gt;添加样式&lt;/h5&gt;    &lt;p&gt;Next.js 提供了一系列样式选项，包括 Sass、Less、PostCSS、Styled JSX、CSS 模块和普通的CSS。 Sass 易于使用，因为不需要任何配置，按照依赖：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;npm install sass --save&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;根目录下创建文件夹      &lt;code&gt;styles&lt;/code&gt;，所有的样式文件都放在这个文件夹下。样式的入口未见为      &lt;code&gt;master.scss&lt;/code&gt;。&lt;/p&gt;    &lt;p&gt;然后在文件夹      &lt;code&gt;pages&lt;/code&gt;下创建文件      &lt;code&gt;_app.js&lt;/code&gt;，将样式文件导入，完整代码如下：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;import &amp;quot;../styles/master.scss&amp;quot;;

export default function App({ Component, pageProps }) {
    return &amp;lt;Component {...pageProps} /&amp;gt;;
}&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;最终效果如下：&lt;/p&gt;    &lt;p&gt;      &lt;img alt="1642841802979.jpg" src="https://s2.51cto.com/images/20220122/1642857455278949.jpg?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk="&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;      &lt;img alt="1642843191606222.jpg" src="https://s2.51cto.com/images/20220122/1642857464397349.jpg?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk="&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;      &lt;img alt="1642843232898333.jpg" src="https://s2.51cto.com/images/20220122/1642857472261777.jpg?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk="&gt;&lt;/img&gt;&lt;/p&gt;&lt;/div&gt;
    &lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/62202-react-next-js</guid>
      <pubDate>Mon, 11 Apr 2022 16:27:03 CST</pubDate>
    </item>
    <item>
      <title>中文文本纠错模型_卓寿杰SoulJoy的博客-CSDN博客</title>
      <link>https://itindex.net/detail/62172-%E4%B8%AD%E6%96%87-%E6%96%87%E6%9C%AC-%E6%A8%A1%E5%9E%8B</link>
      <description>&lt;div&gt;    &lt;p&gt;中文文本纠错任务是一项NLP基础任务，其输入是一个可能含有语法错误的中文句子，输出是一个正确的中文句子。语法错误类型很多，有多字、少字、错别字等，目前最常见的错误类型是错别字。&lt;/p&gt;    &lt;h1&gt;      &lt;a&gt;&lt;/a&gt;1. SoftMaskedBert4CSC&lt;/h1&gt;    &lt;ul&gt;      &lt;li&gt;        &lt;p&gt;论文 【ACL 2020】《Spelling Error Correction with Soft-Masked BERT》https://arxiv.org/abs/2005.07421          &lt;br /&gt;          &lt;img alt="&amp;#22312;&amp;#36825;&amp;#37324;&amp;#25554;&amp;#20837;&amp;#22270;&amp;#29255;&amp;#25551;&amp;#36848;" src="https://img-blog.csdnimg.cn/b0b39ac14a674213af279b343ae6bfdb.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Y2T5a-_5p2wU291bEpveQ==,size_20,color_FFFFFF,t_70,g_se,x_16"&gt;&lt;/img&gt;&lt;/p&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;Detection          &lt;br /&gt;首先，模型的输入是n个中文字符X=(x1，x2，… ，xn)经过embeddings得到的E = (e1，e2，…，en),该embeding是word embeding+position embeding+segment embeding，经过Bi-GRU得到各个字符错误的概率G = (g1，g2，…，gn)，其中g在0-1之间，越靠近1表示该字符错误的概率越大，其损失函数为：          &lt;br /&gt;          &lt;img alt="&amp;#22312;&amp;#36825;&amp;#37324;&amp;#25554;&amp;#20837;&amp;#22270;&amp;#29255;&amp;#25551;&amp;#36848;" src="https://img-blog.csdnimg.cn/a97f56f2debd437bb869c98296ebe7dc.png"&gt;&lt;/img&gt;&lt;/p&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;soft-masked          &lt;br /&gt;作者认为只hard-mask了15%字符的Bert不完全具备纠错的能力（至于为啥不具备，作者也没讲清楚，我觉得这里有些牵强），所以作者提出了soft-mask，大致的思路就是利用Detection输出的得分来引导Bert输入的mask，使得得分高(错误概率高)的地方更大概率被mask，公式如下：          &lt;br /&gt;          &lt;img alt="&amp;#22312;&amp;#36825;&amp;#37324;&amp;#25554;&amp;#20837;&amp;#22270;&amp;#29255;&amp;#25551;&amp;#36848;" src="https://img-blog.csdnimg.cn/b470fe2b082249999aaacd6a3b3ad967.png"&gt;&lt;/img&gt;&lt;/p&gt;&lt;/li&gt;      &lt;li&gt;        &lt;p&gt;Correction          &lt;br /&gt;Correction的输入是经过soft-masked的embeding，输出的是生成的字符，损失函数是：          &lt;br /&gt;          &lt;img alt="&amp;#22312;&amp;#36825;&amp;#37324;&amp;#25554;&amp;#20837;&amp;#22270;&amp;#29255;&amp;#25551;&amp;#36848;" src="https://img-blog.csdnimg.cn/587cbe6a662e4f288aa7df62035aab7b.png"&gt;&lt;/img&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;    &lt;p&gt;&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;Loss        &lt;br /&gt;模型没有分阶段训练，而是直接end-to-end，使用Bert的per-trained模型，损失函数由Detection和Correction线性组合，如下：        &lt;br /&gt;        &lt;img alt="&amp;#22312;&amp;#36825;&amp;#37324;&amp;#25554;&amp;#20837;&amp;#22270;&amp;#29255;&amp;#25551;&amp;#36848;" src="https://img-blog.csdnimg.cn/9812c98cc33346d79961a0725c750d77.png"&gt;&lt;/img&gt;&lt;/li&gt;&lt;/ul&gt;    &lt;h1&gt;      &lt;a&gt;&lt;/a&gt;2. MacBert4CSC&lt;/h1&gt;    &lt;p&gt;MacBert 可以参阅 ：https://blog.csdn.net/u011239443/article/details/121820752?spm=1001.2014.3001.5502&lt;/p&gt;    &lt;p&gt;MacBert4CSC：https://github.com/shibing624/pycorrector/blob/master/pycorrector/macbert/README.md&lt;/p&gt;    &lt;blockquote&gt;      &lt;p&gt;本项目是 MacBERT 改变网络结构的中文文本纠错模型，可支持 BERT 类模型为 backbone。&lt;/p&gt;      &lt;p&gt;在通常 BERT 模型上进行了魔改，追加了一个全连接层作为错误检测即 detection， 与 SoftMaskedBERT 模型不同点在于，本项目中的 MacBERT 中，只是利用 detection 层和 correction 层的 loss 加权得到最终的 loss。不像 SoftmaskedBERT 中需要利用 detection 层的置信概率来作为 correction 的输入权重。        &lt;br /&gt;        &lt;img alt="&amp;#22312;&amp;#36825;&amp;#37324;&amp;#25554;&amp;#20837;&amp;#22270;&amp;#29255;&amp;#25551;&amp;#36848;" src="https://img-blog.csdnimg.cn/4199854dc4f942d6a224e370d7a95095.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Y2T5a-_5p2wU291bEpveQ==,size_20,color_FFFFFF,t_70,g_se,x_16"&gt;&lt;/img&gt;&lt;/p&gt;&lt;/blockquote&gt;    &lt;h1&gt;      &lt;a&gt;&lt;/a&gt;3. ErnieCSC&lt;/h1&gt;    &lt;p&gt;Ernie参阅：https://blog.csdn.net/u011239443/article/details/121820752?spm=1001.2014.3001.5502&lt;/p&gt;    &lt;p&gt;ErnieCSC PaddleNLP模型库实现了百度在ACL 2021上提出结合拼音特征的Softmask策略的中文错别字纠错的下游任务网络，并提供预训练模型，模型结构如下：&lt;/p&gt;    &lt;p&gt;      &lt;img alt="&amp;#22312;&amp;#36825;&amp;#37324;&amp;#25554;&amp;#20837;&amp;#22270;&amp;#29255;&amp;#25551;&amp;#36848;" src="https://img-blog.csdnimg.cn/513c1f889d4d4b878037ab5f28487f09.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Y2T5a-_5p2wU291bEpveQ==,size_16,color_FFFFFF,t_70,g_se,x_16"&gt;&lt;/img&gt;      &lt;br /&gt;PyTorch实现版本：https://github.com/orangetwo/ernie-csc&lt;/p&gt;&lt;/div&gt;
    &lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/62172-%E4%B8%AD%E6%96%87-%E6%96%87%E6%9C%AC-%E6%A8%A1%E5%9E%8B</guid>
      <pubDate>Wed, 30 Mar 2022 07:28:44 CST</pubDate>
    </item>
    <item>
      <title>数仓建模—ID Mapping - 大数据技术派 - 博客园</title>
      <link>https://itindex.net/detail/62145-%E5%BB%BA%E6%A8%A1-id-mapping</link>
      <description>&lt;div&gt;    &lt;p&gt;早晨起床的时候，发现自己尿分叉，我没有多想，简单洗洗就匆忙出门。路过早餐店，我看到师傅熟练的拉扯一小块面团，拉至细长条，然后放入油锅中，不一会功夫，一根屎黄色的油条便出锅了，卖相不错。我在想，小到炸屎黄色的油条，大到学习，其实都是一个熟能生巧的过程。&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;数据仓库系列文章(持续更新)&lt;/strong&gt;&lt;/p&gt;    &lt;ol&gt;      &lt;li&gt;        &lt;a href="https://www.ikeguang.com/?p=1582" rel="noopener" target="_blank"&gt;数仓架构发展史&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;        &lt;a href="https://www.ikeguang.com/?p=1551" rel="noopener" target="_blank"&gt;数仓建模方法论&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;        &lt;a href="https://www.ikeguang.com/?p=1559" rel="noopener" target="_blank"&gt;数仓建模分层理论&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;        &lt;a href="https://www.ikeguang.com/?p=1954" rel="noopener" target="_blank"&gt;数仓建模—宽表的设计&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;        &lt;a href="https://www.ikeguang.com/?p=1957" rel="noopener" target="_blank"&gt;数仓建模—指标体系&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;        &lt;a href="https://www.ikeguang.com/?p=1587" rel="noopener" target="_blank"&gt;数据仓库之拉链表&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;数仓—数据集成&lt;/li&gt;      &lt;li&gt;        &lt;a href="https://www.ikeguang.com/?p=2007" rel="noopener" target="_blank"&gt;数仓—数据集市&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;数仓—商业智能系统&lt;/li&gt;      &lt;li&gt;        &lt;a href="https://www.ikeguang.com/?p=2008" rel="noopener" target="_blank"&gt;数仓—埋点设计与管理&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;数仓—ID Mapping&lt;/li&gt;      &lt;li&gt;数仓—OneID&lt;/li&gt;      &lt;li&gt;数仓—AARRR海盗模型&lt;/li&gt;      &lt;li&gt;数仓—总线矩阵&lt;/li&gt;      &lt;li&gt;数仓—数据安全&lt;/li&gt;      &lt;li&gt;数仓—数据质量&lt;/li&gt;      &lt;li&gt;数仓—数仓建模和业务建模&lt;/li&gt;&lt;/ol&gt;    &lt;blockquote&gt;      &lt;p&gt;关注        &lt;code&gt;大数据技术派&lt;/code&gt;，回复:        &lt;code&gt;资料&lt;/code&gt;，领取        &lt;code&gt;1024G&lt;/code&gt;资料。&lt;/p&gt;&lt;/blockquote&gt;    &lt;p&gt;顾名思义我们知道ID Mapping 的操作对象是ID，目标或者是动作是Mapping，也就是说我们要做的事情其实就是想把不同平台不同设备上的ID 打通，从而更好的去刻画用户，也就是说我们希望能打通用户各个维度的数据，从而更好的去服务业务服务用户&lt;/p&gt;    &lt;p&gt;通常公司有产品矩阵，而每个产品都有自己的注册账号产生的用户ID。从公司全局，整合用户表，用户行为数据来看，确定不同产品的用户ID是相同一个人非常重要, 选取合适的用户标识对于提高用户行为分析的准确性有非常大的影响，尤其是对用户画像、推荐、漏斗、留存、Session 等用户相关的分析功能。&lt;/p&gt;    &lt;p&gt;其实对于任何分析都是一样的，如果我们不能准确标识一个用户，那么我们的计算结果就没有准确性可言，其实对于数据服务方而言，数据的准确性是我们的第一要务，      &lt;strong&gt;我们宁愿不出数据，也不要出错误的数据&lt;/strong&gt;。&lt;/p&gt;    &lt;h3&gt;ID Mapping 的背景&lt;/h3&gt;    &lt;p&gt;      &lt;strong&gt;网络身份证&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;假如没有网络身份证，那么每个商家（App）只能基于自己的账号体系标识用户，并记录用户的行为。而有了统一的网络身份证之后，各个商家之间的数据就可以打通了，天猫不仅知道用户A在淘宝系的购物数据，也能了解到该用户在社交网络的行为，以及旅游的喜好，等等。&lt;/p&gt;    &lt;p&gt;在现实的数据中，由于，用户可能使用各种各样的设备，有着各种各样的前端入口，甚至同一个用户拥有多个设备以及使用多种前端入口，就会导致，日志数据中对同一个人，不同时间段所收集到的日志数据中，可能取到的标识个数、种类各不相同；&lt;/p&gt;    &lt;p&gt;比如用户可能使用各种各样的设备，其次是不同设备有不同的操作系统，设置是软件本身的版本也会影响我们对用户的标识，&lt;/p&gt;    &lt;ol&gt;      &lt;li&gt;手机、平板电脑、PC&lt;/li&gt;      &lt;li&gt;安卓手机、ios手机、winphone手机&lt;/li&gt;      &lt;li&gt;安卓系统有各种版本 （ 5.0 6.0 7.0 8.0 9.0 ）&lt;/li&gt;      &lt;li&gt;ios系统也有各种版本（3.x 4.x 5.x 6.x 7.x … 12.x ）&lt;/li&gt;&lt;/ol&gt;    &lt;p&gt;      &lt;strong&gt;存在的问题&lt;/strong&gt;&lt;/p&gt;    &lt;ol&gt;      &lt;li&gt;用户设备的标识，没办法轻易定制一个规则来取某个作为唯一标识：&lt;/li&gt;      &lt;li&gt;mac地址：手机网卡物理地址， 若干早期版本的ios，winphone，android可取到&lt;/li&gt;      &lt;li&gt;imei(入网许可证序号)：安卓系统可取到，若干早期版本的ios，winphone可取到，运营商可取到&lt;/li&gt;      &lt;li&gt;imsi(手机SIM卡序号)：安卓系统可取到，若干早期版本的ios，winphone可取到，运营商可取到&lt;/li&gt;      &lt;li&gt;androidid ：安卓系统id&lt;/li&gt;      &lt;li&gt;openuuid(app自己生成的序号) ：卸载重装app就会变更&lt;/li&gt;      &lt;li&gt;IDFA(广告跟踪码)&lt;/li&gt;&lt;/ol&gt;    &lt;p&gt;      &lt;strong&gt;扩展 IDFA&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;IDFA，英文全称 Identifier for Advertising ，可以理解为广告id，苹果公司提供的用于追踪用户的广告标识符，可以用来打通不同app之间的广告。      &lt;strong&gt;每个设备只有一个IDFA&lt;/strong&gt;，不同APP在同一设备上获取IDFA的结果是一样的&lt;/p&gt;    &lt;p&gt;苹果为了保护用户隐私，早在2012年就不再允许其生态中的玩家获取用户的唯一标识符，但是商家在移动端打广告的时候又希望能监控到每一次广告投放的效果，因此，苹果想出了折中的办法，就是提供另外一套和硬件无关的标识符，用于给商家监测广告效果，同时用户可以在设置里改变这串字符，导致商家没有办法长期跟踪用户行为。这个就叫做广告标识符（IDFA），设置路径是“设置-&amp;gt;隐私-&amp;gt;广告-&amp;gt;还原广告标识符”，如下图所示（iOS9）&lt;/p&gt;    &lt;p&gt;      &lt;img alt="img" src="https://kingcall.oss-cn-hangzhou.aliyuncs.com/blog/img/v2-045a372ba062e8215e46f360f681582c_1440w.jpg"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;h3&gt;常见的标识&lt;/h3&gt;    &lt;h4&gt;设备 ID&lt;/h4&gt;    &lt;p&gt;需要注意的是，设备 ID 并不一定是设备的唯一标识。例如 Web 端的 Cookies 有可能被清空（例如各种安全卫士），而 iOS 端的 IDFV( Identifier For Vendor)在不同厂商的 App 间是不同的,而且重新安装IDFV会被重置。&lt;/p&gt;    &lt;table&gt;      &lt;tr&gt;        &lt;th&gt;设备&lt;/th&gt;        &lt;th&gt;规则&lt;/th&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;Android&lt;/td&gt;        &lt;td&gt;1.10.5 之前版本，默认使用 UUID（例如：550e8400-e29b-41d4-a716-446655440000），App 卸载重装 UUID 会变，为了保证设备 ID 不变，可以通过配置使用 AndroidId（例如：774d56d682e549c3）；1.10.5 及之后的版本 SDK 默认使用 AndroidId 作为设备 ID，如果 AndroidId 获取不到则获取随机的 UUID。&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;iOS&lt;/td&gt;        &lt;td&gt;1.10.18 及之后版本，如果 App 引入了 AdSupport 库，SDK 默认使用 IDFA 作为匿名 ID。1.10.18 之前版本，可以优先使用 IDFV（例如：1E2DFA10-236A-47UD-6641-AB1FC4E6483F），如果 IDFV 获取失败，则使用随机的 UUID（例如：550e8400-e29b-41d4-a716-446655440000），一般情况下都能够获取到 IDFV。如果使用 IDFV 或 UUID ，当用户卸载重装 App 时设备 ID 会变。也可以通过配置使用 IDFA（例如：1E2DFA89-496A-47FD-9941-DF1FC4E6484A），如果开启 IDFA ，可以优先获取 IDFA，如果获取失败再尝试获取 IDFV。使用 IDFA 能避免用户在重装 App 后设备 ID 发生变化的情况，需要注意的是IDFA 也是可以被重置的&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;    &lt;h4&gt;登录 ID&lt;/h4&gt;    &lt;p&gt;登录 ID 通常是业务数据库里的主键或其它唯一标识。所以 登录 ID，相对来说更精确更持久。但是，用户在使用时不一定注册或者登录，而这个时候是没有      &lt;em&gt;        &lt;strong&gt;登录 ID&lt;/strong&gt;&lt;/em&gt;的。&lt;/p&gt;    &lt;h4&gt;平台 ID&lt;/h4&gt;    &lt;table&gt;      &lt;tr&gt;        &lt;th&gt;设备&lt;/th&gt;        &lt;th&gt;规则&lt;/th&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;JavaScript&lt;/td&gt;        &lt;td&gt;默认情况下使用 cookie_id（例如：15ffdb0a3f898-02045d1cb7be78-31126a5d-250125-15ffdb0a3fa40a），cookie_id 存贮在浏览器的 cookie 中，依然有被重置的风险          &lt;br /&gt;这里还有一个问题，就是 cookie 只能隶属于同一个域名，也就是说你访问邮箱的 cookie ，与百度广的 cookie 并不是同一个，所以在网站与网站也要做 ID Mapping ，这就是为什么你在百度上搜索了“养生”，到购物网站上就会给你推荐“枸杞”。&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;微信小程序&lt;/td&gt;        &lt;td&gt;默认情况下使用 UUID（例如：1558509239724-9278730-00c1875d5f63f8-41373096），但是删除小程序，UUID 会变。为了保证设备 ID 不变，建议获取并使用 openid（例如：oWDMZ0WHqfsjIz7A9B2XNQOWmN3E）。 如果选择使用 openid 的话，请注意【操作暂存】，由于获取 openid 是一个异步的操作，但是冷启动事件等会先发生，这时候这个冷启动事件的 distinct_id 就不对了。所以我们会把先发生的操作，暂存起来，等获取到 openid 等后调用 sa.init() 后才会发送数据。 openid 的获取和操作暂存的方法。&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;    &lt;p&gt;其实这里的平台指的一些大的生态系统，例如微信的生态、今日头条等，我们很多依赖这些平台的应用就可以使用用户在这些平台上的用户标识作为标识,当然我们也可以在此基础上为我们自己平台上的用户创建属于本平台的用户表示，往往就是用户的      &lt;strong&gt;登录ID&lt;/strong&gt;&lt;/p&gt;    &lt;h3&gt;方案详解&lt;/h3&gt;    &lt;p&gt;因此，我们在进行任何数据接入之前，都应当先确定如何来标识用户。下面会介绍几种用户标识方案的原理，以及几种典型情况下的用户标识方案。&lt;/p&gt;    &lt;h4&gt;方案一：只使用设备 ID&lt;/h4&gt;    &lt;p&gt;适合没有用户注册体系，或者极少数用户会进行多设备登录的产品，如工具类产品、搜索引擎、部分电商等。这也是绝大多数其它数据分析产品唯一提供的方案。&lt;/p&gt;    &lt;h5&gt;局限性&lt;/h5&gt;    &lt;ul&gt;      &lt;li&gt;同一用户在不同设备使用会被认为不同的用户，对后续的分析统计有影响。&lt;/li&gt;      &lt;li&gt;不同用户在相同设备使用会被认为是一个用户，也对后续的分析统计有影响。&lt;/li&gt;      &lt;li&gt;但如果        &lt;strong&gt;用户跨设备使用或者多用户共用设备不是产品的常见场景的话&lt;/strong&gt;，可以忽略上述问题。&lt;/li&gt;&lt;/ul&gt;    &lt;h4&gt;方案二：关联设备 ID 和登录 ID（一对一）&lt;/h4&gt;    &lt;p&gt;仅使用 设备 ID 标识用户虽然简单，但是对于某些应用场景这种方式不够准确，因此我们可以采用 设备 ID 和 登录 ID 的方案，在一定程度上融合 设备 ID 和 登录 ID，从而实现更准确的用户追踪。&lt;/p&gt;    &lt;p&gt;成功关联设备 ID 和登录 ID 之后，      &lt;strong&gt;用户在该设备 ID 上或该登录 ID 下的行为就会贯通&lt;/strong&gt;，被认为是一个用户 ID 发生的。在进行事件、漏斗、留存等用户相关分析时也会算作一个用户。&lt;/p&gt;    &lt;p&gt;关联设备 ID 和登录 ID 的方法虽然实现了更准确的用户追踪，但是也会增加埋点接入的复杂度。所以一般来说，我们建议只有当同时满足以下条件时，才考虑进行 ID 关联：&lt;/p&gt;    &lt;ol&gt;      &lt;li&gt;需要贯通一个用户在一个设备上注册前后的行为。&lt;/li&gt;      &lt;li&gt;需要贯通一个注册用户在不同设备上登录之后的行为。&lt;/li&gt;&lt;/ol&gt;    &lt;h5&gt;局限性&lt;/h5&gt;    &lt;ul&gt;      &lt;li&gt;一个设备 ID 只能和一个登录 ID 关联，而事实上一台设备可能有多个用户使用。&lt;/li&gt;      &lt;li&gt;一个登录 ID 只能和一个设备 ID 关联，而事实上一个用户可能用一个登录 ID 在多台设备上登录。&lt;/li&gt;&lt;/ul&gt;    &lt;h4&gt;方案三：关联设备 ID 和登录 ID（多对一）&lt;/h4&gt;    &lt;p&gt;      &lt;strong&gt;关联设备 ID 和登录 ID（一对一）虽然已经实现了跨设备的用户贯通，但是对于某些应用场景还是不够准确，因此这里提供一个新的关联方案，支持一个登录 ID 绑定多个设备 ID 的方案，从而实现更准确的用户追踪&lt;/strong&gt;。&lt;/p&gt;    &lt;p&gt;也就是跨端，其实这是非常常见的一种场景，例如你在PC 端和 移动端使用同一个产品。&lt;/p&gt;    &lt;p&gt;一个用户在多个设备上进行登录是一种比较常见的场景，比如 Web 端和 App 端可能都需要进行登录。支持一个登录 ID 下关联多设备 ID 之后，用户在多设备下的行为就会贯通，被认为是一个ID 发生的。&lt;/p&gt;    &lt;h5&gt;局限性&lt;/h5&gt;    &lt;ul&gt;      &lt;li&gt;一个设备 ID 只能和一个登录 ID 关联，而事实上        &lt;strong&gt;一台设备可能有多个用户使用&lt;/strong&gt;多用户使用同一个设备这个问题是无解的。&lt;/li&gt;      &lt;li&gt;一个设备 ID 一旦跟某个登录 ID 关联或者一个登录 ID 和一个设备 ID 关联，就不能解除（自动解除）。而事实上，设备 ID 和登录 ID 的动态关联才应该是更合理的。&lt;/li&gt;&lt;/ul&gt;    &lt;h3&gt;方案对比&lt;/h3&gt;    &lt;p&gt;将上述三个方案放到一起，可以明显看到三种方案的区别，如下表所示：&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;方案一：仅使用设备 ID，不管用户是谁，只要设备未变，设备ID 就不变，即使多人使用同一个设备，也会被识别为同一个用户。&lt;/li&gt;      &lt;li&gt;方案二：关联设备 ID 和登录 ID（一对一），        &lt;ul&gt;          &lt;li&gt;当用户换手机后，登录账号之后的行为与换手机之前的行为贯通了，但是在新设备上首次登录之前的行为仍没法贯通，仍被识别为新的用户的行为。&lt;/li&gt;          &lt;li&gt;当用户把旧手机送给朋友之后，由于旧手机已被关联到自己的登录 ID 了，无法再与朋友的登录 ID 关联。后续使用这台旧手机的用户们，若不登录就操作，则都会被识别为同一个用户。&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;      &lt;li&gt;方案三：关联设备 ID 和登录 ID（多对一）        &lt;ul&gt;          &lt;li&gt;当用户把旧手机送给朋友之后，由于旧手机已被关联到自己的登录 ID 了，无法再与朋友的登录 ID 关联。后续使用这台旧手机的用户们，若不登录就操作，则都会被识别为同一个用户）。&lt;/li&gt;          &lt;li&gt;而事实上，旧手机上后续的匿名登录很难识别到底是谁，可能归为匿名登录之前最近一次登录的用户会更合理一些。&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;    &lt;p&gt;其实，三种方案没有对与错，我们应该结合自己的业务场景以及埋点复杂度来选择合适的方案。&lt;/p&gt;    &lt;h2&gt;总结&lt;/h2&gt;    &lt;p&gt;ID Mapping 就如同它的名字一样，我们要做的就是将一系列的ID 关联起来，一些列的ID 可能是用户在不同平台上的标识，也可能是用户在不同设备上的标识，也可能是用户在不同状态下的标识，总之我们就是要将这一系列的ID 关联起来，尽可能地将用户的数据打通，从而提供更加全面准确的分析。&lt;/p&gt;    &lt;p&gt;我们知道只有打破数据孤岛数据才能发挥更大的价值，可能很多人都知道数据仓库的数据集成环节其实就是为了打破数据孤岛，其实我们的ID Mapping 也是为了打破数据孤岛，其实ID Mapping 就两个使命 1. 多端数据的识别；2. 多源数据的打通，其他的都是基于ID Mapping 的应用&lt;/p&gt;&lt;/div&gt;
    &lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/62145-%E5%BB%BA%E6%A8%A1-id-mapping</guid>
      <pubDate>Sat, 05 Mar 2022 19:54:24 CST</pubDate>
    </item>
    <item>
      <title>nginx配置反向代理或跳转出现400问题处理记录 - AllEmpty - 博客园</title>
      <link>https://itindex.net/detail/62057-nginx-%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86-%E9%97%AE%E9%A2%98</link>
      <description>&lt;div&gt;    &lt;p&gt;　　午休完上班后，同事说测试站点访问接口出现400 Bad Request  Request Header Or Cookie Too Large提示，心想还好是测试服务器出现问题，影响不大，不过也赶紧上服务器进行测试查看，打开nginx与ugwsi日志与配置，发现后端服务日志记录正常，而测试站点的访问日志有7百多M（才运行两三天没几个访问，几M的话才是正常现象），在浏览器里直接访问后端服务接口也正常没有问题（我们的服务器软件架构是微服务架构，将很多模块分拆后分别部署，前端是一个纯HTML站点，通过AJAX访问后端各个服务，由于访问量不大，所以前端站点的nginx配置时，做了反向代理访问后端其他服务，这样就不会出现跨域和需要处理多子域名事情——即访问不同的服务时，只需要使用当前域名就可以了，这样前端开发人员不必要知道后端挂载了多少服务需要使用什么对应的域名访问）。访问这台服务器上的其他站点都能正常访问，而问题站点的html页面也能正常打开......在测试过程中发现，每访问一下问题接口，访问日志就增加30多M，刷了几次，nginx日志大小直线上升......&lt;/p&gt;    &lt;p&gt;　　由于日志比较大，只能使用tail -n 5000 xxx_access.log &amp;gt;&amp;gt; xxx.log截取一下最新的日志记录下载下来，打开一看发现同一时间一个访问，生产了2000多条重复循环的访问记录，而日志尾部$http_x_forwarded_for部分，有规律的存储了相同的由多到少的IP字串，即：最后一条有一个IP字串（真实IP），倒数第二条有两个IP字串（真实IP + 服务器本地IP），倒数第三条有三个IP字串（真实IP + 两个服务器本地IP），以至类推&lt;/p&gt;    &lt;p&gt;　　百度了一下“400 Bad Request  Request Header Or Cookie Too Large”，查找出来的几乎都是说“nginx 400 Bad request是request header过大所引起，request过大，通常是由于cookie中写入了较大的值所引起。在nginx.conf中，将client_header_buffer_size和large_client_header_buffers都调大后可解决”，一看就知道这肯定不是我这种情况的解决办法，这是由于不知道什么原因引起的死循环将IP地址串写入请求头，直到缓存爆了才返回400，如果将缓存设置更大，只会造成日志增加速度变大而已。从分析来看应该是nginx出现的问题。&lt;/p&gt;    &lt;p&gt;　　没有办法只能在打开nginx配置文件分析，问题站点的配置文件，如下图，并没有发现什么问题&lt;/p&gt;    &lt;p&gt;      &lt;img alt="" height="312" src="https://images2015.cnblogs.com/blog/129385/201701/129385-20170105181133316-1012300003.png" width="518"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;　　打开nginx.conf进行慢慢研究，发现多了几行代码&lt;/p&gt;    &lt;div&gt;      &lt;pre&gt;proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;&lt;/pre&gt;&lt;/div&gt;    &lt;p&gt;　　这是用来将当前访问用户的IP传给后端服务器用的，将它们删除重新启动一下服务器nginx后测试了一下，发现能正常访问了...o my god，再将它放回去，重启，访问，挂了，去掉，重启，访问，正常......重试了好几次，终于确定就是突然多出来的几行代码引起的。（后来问了一下同事才知道是他进服务器添加的）&lt;/p&gt;    &lt;p&gt;　　难道真的是不能使用吗？记得以前用过还是正常的。尝试访问预生产环境接口，正常。打开预生产环境的nginx配置，包函有这三行代码，如下图&lt;/p&gt;    &lt;p&gt;      &lt;img alt="" height="381" src="https://images2015.cnblogs.com/blog/129385/201701/129385-20170105182346862-199170644.png" width="559"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;　　全面对比后发现，生产环境用的nginx配置是域名，而预生产环境用的是IP+端口，除此之外没有任何区别，使用跳转方式与反向代码方式测试，结果都是一样，添加port_in_redirect、server_name_in_redirect配置也没能解决&lt;/p&gt;    &lt;p&gt;　　综合分析，应该是nginx在使用proxy_pass做跳转时，如果直接使用域名，且需要向后端提交当前访问的IP地址时，引发nginx的bug造成死循环，不知道大家有没有遇到过这种情况。&lt;/p&gt;    &lt;div&gt;      &lt;pre&gt;# 使用反向代理方式        &lt;br /&gt;# 正常的配置
upstream xxx{
    server127.0.0.1:23456;
}
upstream yyy {
    server127.0.0.1:123455;
}
# 异常配置
upstream xxx1{
    server xx.xxx.com;
}
upstream yyy2 {
    server  yyy.xxx.com;
}&lt;/pre&gt;&lt;/div&gt;    &lt;div&gt;      &lt;pre&gt;# 使用跳转方式
# 正常配置
proxy_pass   http://127.0.0.1:23456;# 异常配置
proxy_pass   http://xx.xxx.com;&lt;/pre&gt;&lt;/div&gt;    &lt;p&gt; &lt;/p&gt;    &lt;p&gt; &lt;/p&gt;&lt;/div&gt;
    &lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/62057-nginx-%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86-%E9%97%AE%E9%A2%98</guid>
      <pubDate>Tue, 25 Jan 2022 14:59:18 CST</pubDate>
    </item>
    <item>
      <title>实践k8s istio熔断 - fat_girl_spring - 博客园</title>
      <link>https://itindex.net/detail/62040-%E5%AE%9E%E8%B7%B5-k8s-istio</link>
      <description>&lt;div&gt;    &lt;p&gt;熔断主要是无感的处理服务异常并保证不会发生级联甚至雪崩的服务异常。在微服务方面体现是对异常的服务情况进行快速失败，它对已经调用失败的服务不再会继续调用，如果仍需要调用此异常服务，它将立刻返回失败。与此同时，它一直监控服务的健康状况，一旦服务恢复正常，则立刻恢复对此服务的正常访问。这样的快速失败策略可以降低服务负载压力，很好地保护服务免受高负载的影响。&lt;/p&gt;    &lt;p&gt;一个熔断器可以有三种状态：关闭、打开和半开，默认情况下处于关闭状态。在关闭状态下，无论请求成功或失败，到达预先设定的故障数量阈值前，都不会触发熔断。而当达到阈值时，熔断器就会打开。当调用处于打开状态的服务时，熔断器将断开请求，这意味着它会直接返回一个错误，而不去执行调用。通过在客户端断开下游请求的方式，可以在生产环境中防止级联故障的发生。在经过事先配置的超时时长后，熔断器进入半开状态，这种状态下故障服务有时间从其中断的行为中恢复。如果请求在这种状态下继续失败，则熔断器将再次打开并继续阻断请求。否则熔断器将关闭，服务将被允许再次处理请求。&lt;/p&gt;    &lt;p&gt;      &lt;img alt="" src="https://img2020.cnblogs.com/blog/1411165/202108/1411165-20210824162648597-47614637.png"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;h2&gt;熔断器对比 Hystrix vs Istio&lt;/h2&gt;    &lt;p&gt;      &lt;img alt="" src="https://img2020.cnblogs.com/blog/1411165/202108/1411165-20210824162124660-1772707330.png"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;Hystrix是Netflix OSS的一部分，是微服务领域的领先的熔断工具。Hystrix可以被视为白盒监控工具，而Istio可以被视为黑盒监控工具，主要是因为Istio从外部监控系统并且不知道系统内部如何工作。另一方面，每个服务中有Hystrix来获取所需的数据。      &lt;br /&gt;Istio是无缝衔接服务，istio可以在不更改应用程序代码的情况下配置和使用。Hystrix的使用需要更改每个服务来引入Hystrix libraries。      &lt;br /&gt;Istio提高了网格中服务的可靠性和可用性。但是，应用程序需要处理错误并有一定的fall 
back行为。例如当负载平衡池中的所有服务实例都出现异常时，Envoy将返回HTTP 503。当上游服务返回 HTTP 503 
错误，则应用程序需要采取回退逻辑。与此同时，Hystrix也提供了可靠的fall back实现。它允许拥有所有不同类型的fall 
backs：单一的默认值、缓存或者去调用其他服务。&lt;/p&gt;    &lt;p&gt;envoy对应用程序来说几乎完全无感和透明。Hystrix则必须在每个服务调用中嵌入Hystrix库。      &lt;br /&gt;Istio的熔断应用几乎无语言限制，但Hystrix主要针对的是Java应用程序。&lt;/p&gt;    &lt;p&gt;Istio是使用了黑盒方式来作为一种代理管理工具。它实现起来很简单，不依赖于底层技术栈，而且可以在部署后也可以进行配置和修改。Hystrix需要在代码级别处理断路器，可以设置级联和一些附加功能，它需要在开发阶段时做出降级决策，后期优化配置成本高。&lt;/p&gt;    &lt;h2&gt;      &lt;strong&gt;Istio限流&lt;/strong&gt;&lt;/h2&gt;    &lt;p&gt;Istio无需对代码进行任何更改就可以为应用增加熔断和限流功能。Istio中熔断和限流在DestinationRule的CRD资源的TrafficPolicy中设置，一般设置连接池（ConnectionPool）限流方式和异常检测（outlierDetection）熔断方式。两者ConnectionPool和outlierDetection各自配置部分参数，其中参数有可能存在对方的功能，并没有很严格的区分出来，如主要进行限流设置的ConnectionPool中的maxPendingRequests参数，最大等待请求数，如果超过则也会暂时的熔断。&lt;/p&gt;    &lt;p&gt;连接池（ConnectionPool）设置      &lt;br /&gt;ConnectionPool可以对上游服务的并发连接数和请求数进行限制，适用于TCP和HTTP。ConnectionPool又称之是限流。&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;官方定义的属性&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;        &lt;img alt="" src="https://img2020.cnblogs.com/blog/1411165/202108/1411165-20210824162152138-985829071.png"&gt;&lt;/img&gt;&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt; 设置在DestinationRule中的配置如下图：&lt;/p&gt;    &lt;p&gt;      &lt;img alt="" src="https://img2020.cnblogs.com/blog/1411165/202108/1411165-20210824162216802-852746037.png"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;连接池相关参数解析&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;TCP设置&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;Tcp连接池设置http和tcp上游连接的设置。相关参数设置如下：&lt;/p&gt;    &lt;p&gt;      &lt;img alt="" src="https://img2020.cnblogs.com/blog/1411165/202108/1411165-20210824162236174-173517709.png"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;maxConnections：到目标主机的HTTP1/TCP最大连接数量，只作用于http1.1，不作用于http2，因为后者只建立一次连接。&lt;/p&gt;    &lt;p&gt;connectTimeout：tcp连接超时时间，默认单位秒。也可以写其他单位，如ms。&lt;/p&gt;    &lt;p&gt;tcpKeepalive：如果在套接字上设置SO_KEEPALIVE可以确保TCP 存活&lt;/p&gt;    &lt;p&gt;TCP的TcpKeepalive设置：&lt;/p&gt;    &lt;p&gt;Probes：在确定连接已死之前，在没有响应的情况下发送的keepalive探测的最大数量。默认值是使用系统级别的配置(除非写词参数覆盖，Linux默认值为9)。&lt;/p&gt;    &lt;p&gt;Time：发送keep-alive探测前连接存在的空闲时间。默认值是使用系统的配置(除非写此参数，Linux默认值为7200s(即2小时)。&lt;/p&gt;    &lt;p&gt;interval：探测活动之间的时间间隔。默认值是使用系统的配置(除非被覆盖，Linux默认值为75秒)。&lt;/p&gt;    &lt;p&gt;HTTP设置&lt;/p&gt;    &lt;p&gt;http连接池设置用于http1.1/HTTP2/GRPC连接。&lt;/p&gt;    &lt;p&gt;http1MaxPendingRequests：http请求pending状态的最大请求数，从应用容器发来的HTTP请求的最大等待转发数，默认是1024。&lt;/p&gt;    &lt;p&gt;http2MaxRequests：后端请求的最大数量，默认是1024。&lt;/p&gt;    &lt;p&gt;maxRequestsPerConnection：在一定时间内限制对后端服务发起的最大请求数，如果超过了这个限制，就会开启限流。如果将这一参数设置为 1 则会禁止 keepalive 特性；&lt;/p&gt;    &lt;p&gt;idleTimeout：上游连接池连接的空闲超时。空闲超时被定义为没有活动请求的时间段。如果未设置，则没有空闲超时。当达到空闲超时时，连接将被关闭。注意，基于请求的超时意味着HTTP/2ping将无法保持有效连接。适用于HTTP1.1和HTTP2连接；&lt;/p&gt;    &lt;p&gt;maxRetries：在给定时间内，集群中所有主机都可以执行的最大重试次数。默认为3。&lt;/p&gt;    &lt;h3&gt;与Envoy参数对比&lt;/h3&gt;    &lt;p&gt;熔断和限流是分布式系统的重要组成部分，优点是快速失败并迅速向下游反馈。      &lt;a href="http://www.alauda.cn" rel="nofollow" target="_blank"&gt;Istio&lt;/a&gt;是通过Envoy Proxy 来实现熔断和限流机制的，Envoy 强制在网络层面配置熔断和限流策略，这样就不必为每个应用程序单独配置或重新编程。Envoy支持各种类型的全分布式(不协调)限流。&lt;/p&gt;    &lt;p&gt;IstioConnectionPool与 Envoy 的限流参数对照表：&lt;/p&gt;    &lt;div&gt;      &lt;pre&gt;Envoy paramether
Envoy  upon object
Istio parameter
Istio  upon ojbect
max_connections
cluster.circuit_breakers
maxConnections
TCPSettings
max_pending_requests
cluster.circuit_breakers
http1MaxPendingRequests
HTTPSettings
max_requests
cluster.circuit_breakers
http2MaxRequests
HTTPSettings
max_retries
cluster.circuit_breakers
maxRetries
HTTPSettings
connect_timeout_ms
cluster
connectTimeout
TCPSettings
max_requests_per_connection
cluster
maxRequestsPerConnection
HTTPSettings&lt;/pre&gt;&lt;/div&gt;    &lt;p&gt;maxConnections: 表示在任何给定时间内，Envoy 与上游集群建立的最大连接数，限制对后端服务发起的 HTTP/1.1 连接数。该配置仅适用于 HTTP/1.1 协议，因为HTTP/2 协议可以在同一个 TCP 连接中发送多个请求，而 HTTP/1.1 协议在同一个连接中只能处理一个请求。如果超过了这个限制（即断路器溢出），集群的upstream_cx_overflow计数器就会增加。&lt;/p&gt;    &lt;p&gt;maxPendingRequests: 表示待处理请求队列的长度，如果超过了这个限制，就会开启限流。因为HTTP/2 是通过单个连接并发处理多个请求的，因此该策略仅在创建初始 HTTP/2 连接时有用，之后的请求将会在同一个 TCP 连接上多路复用。对于HTTP/1.1 协议，只要没有足够的上游连接可用于立即分派请求，就会将请求添加到待处理请求队列中，因此该断路器将在该进程的生命周期内保持有效。如果该断路器溢出，集群的upstream_rq_pending_overflow计数器就会增加。&lt;/p&gt;    &lt;p&gt;maxRequestsPerConnection: 表示在任何给定时间内，上游集群中主机可以处理的最大请求数，限制对后端服务发起的HTTP/2 请求数。实际上，这适用于仅 HTTP/2 集群，因为 HTTP/1.1 集群由最大连接数断路器控制。如果该断路器溢出，集群的upstream_rq_pending_overflow 计数器就会递增。&lt;/p&gt;    &lt;p&gt;maxRetries:在任何给定时间内，集群中所有主机都可以执行的最大重试次数。一般情况下，建议对偶尔的故障积极地进行断路重试，因为总体重试容量不会爆炸并导致大规模级联故障。如果这个断路器溢出，则集群的upstream_rq_retry_overflow计数器将增加。&lt;/p&gt;    &lt;p&gt;envoy新加参数（后期istio可能会增加）&lt;/p&gt;    &lt;p&gt;maximumconcurrent connection pools：可以并发实例化的连接池的最大数量。一些特性，比如Original SrcListener Filter，可以创建无限数量的连接池。当集群耗尽其并发连接池时将会回收空闲连接。如果不能回收，断路器就会溢出。这与连接池中的集群最大连接不同，连接池中的连接通常不会超时。Connections自动清理;连接池不需要。注意，为了使连接池发挥作用，它至少需要一个上游连接，因此这个值应该小于集群最大连接。&lt;/p&gt;    &lt;p&gt;在上游集群和优先级上针对不同的组件，都可以分别进行单独的配置参数进行请求限制。通过统计可以观察到这些断路器的状态，包括断路器打开前剩余数量的断路器。注意，在HTTP请求下将会重新设置路由过滤器的x-envoy-overloaded报头。&lt;/p&gt;    &lt;h2&gt;Istio中的熔断&lt;/h2&gt;    &lt;p&gt;Istio的 熔断 可以在 流量策略 中配置。Istio的 自定义资源Destination Rule里，TrafficPolicy字段下有两个和熔断相关的配置：ConnectionPoolSettings 和 OutlierDetection。      &lt;br /&gt;ConnectionPoolSettings可以为服务配置连接的数量。OutlierDetection用来控制从负载均衡池中剔除不健康的实例。      &lt;br /&gt;例如，ConnectionPoolSettings控制请求的最大数量，挂起请求，重试或者超时；OutlierDetection 设置服务被从连接池剔除时发生错误的请求数，可以设置最小逐出时间和最大逐出百分比。有关完整的字段列表，请参考文档&lt;/p&gt;    &lt;p&gt;启动      &lt;a href="https://github.com/istio/istio/tree/master/samples/httpbin" rel="noopener" target="_blank"&gt;Httpbin&lt;/a&gt;样例程序。&lt;/p&gt;    &lt;p&gt;如果您启用了      &lt;a href="https://preliminary.istio.io/latest/zh/docs/setup/additional-setup/sidecar-injection/#automatic-sidecar-injection"&gt;Sidecar 自动注入&lt;/a&gt;，通过以下命令部署      &lt;code&gt;httpbin&lt;/code&gt;服务：&lt;/p&gt;    &lt;div&gt;      &lt;pre&gt;kubectl apply -f samples/httpbin/httpbin.yaml&lt;/pre&gt;&lt;/div&gt;    &lt;h2&gt;配置熔断器&lt;/h2&gt;    &lt;p&gt;创建一个      &lt;a href="https://preliminary.istio.io/latest/zh/docs/reference/config/networking/destination-rule/"&gt;目标规则&lt;/a&gt;，在调用      &lt;code&gt;httpbin&lt;/code&gt;服务时应用熔断设置：&lt;/p&gt;    &lt;div&gt;      &lt;div&gt;        &lt;div&gt;          &lt;pre&gt;kubectl apply -f - &amp;lt;&amp;lt;EOF
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: httpbin
spec:
  host: httpbin
  trafficPolicy:
    connectionPool:
      tcp:
        maxConnections:1http:
        http1MaxPendingRequests:1maxRequestsPerConnection:1outlierDetection:
      consecutiveErrors:1interval: 1s
      baseEjectionTime: 3m
      maxEjectionPercent:100EOF&lt;/pre&gt;&lt;/div&gt;        &lt;p&gt;验证目标规则是否已正确创建：&lt;/p&gt;        &lt;div&gt;          &lt;pre&gt;kubectl get destinationrule httpbin -o yaml
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: httpbin
  ...
spec:
  host: httpbin
  trafficPolicy:
    connectionPool:
      http:
        http1MaxPendingRequests:1maxRequestsPerConnection:1tcp:
        maxConnections:1outlierDetection:
      baseEjectionTime:180.000s
      consecutiveErrors:1interval:1.000s
      maxEjectionPercent:100&lt;/pre&gt;&lt;/div&gt;        &lt;p&gt;使用ConnectionPoolSettings字段中的这些设置，在给定的时间内只能和notifications 服务建立一个连接：每个连接最多只能有一个挂起的请求。如果达到阈值，熔断器将开始阻断请求。          &lt;br /&gt;OutlierDetection部分的设置用来检查每秒调用服务是否有错误发生。如果有，则将服务从负载均衡池中逐出至少三分钟（100%最大弹出百分比表示，如果需要，所有的服务实例都可以同时被逐出）。&lt;/p&gt;        &lt;pre&gt;          &lt;strong&gt;在手动创建Destination Rule资源时有一件事需要特别注意，那就是是否为该服务启用了mTLS。如果是的话，还需要在Destination Rule中设置如下字段，否则当调用movies服务时，调用方可能会收到503错误：&lt;/strong&gt;          &lt;br /&gt;          &lt;br /&gt;          &lt;strong&gt;    trafficPolicy:&lt;/strong&gt;          &lt;br /&gt;          &lt;strong&gt;       tls:&lt;/strong&gt;          &lt;br /&gt;          &lt;strong&gt;      mode: ISTIO_MUTUAL&lt;/strong&gt;          &lt;br /&gt;          &lt;br /&gt;          &lt;strong&gt;还可以为特定namespace 或特定服务启用全局的mTLS。你应该了解这些设置以便确定是否把trafficPolicy.tls.mode设置为 ISTIO_MUTUAL。更重要的是，当你试图配置一个完全不同的功能（例如熔断）时，很容易忘记设置此字段。&lt;/strong&gt;          &lt;br /&gt;          &lt;br /&gt;          &lt;strong&gt;    提示：在创建Destination Rule前总是考虑mTLS！&lt;/strong&gt;&lt;/pre&gt;        &lt;p&gt;为了触发熔断，让我们同时从两个连接来调用 notifications服务。maxConnections字段被设置为1。这时应该会看到503与200的响应同时到达。          &lt;br /&gt;当一个服务从客户端接收到的负载大于它所能处理的负载（如熔断器中配置的那样），它会在调用之前返回503错误。这是防止错误级联的一种方法。&lt;/p&gt;        &lt;h2&gt;增加一个客户端&lt;/h2&gt;        &lt;p&gt;创建客户端程序以发送流量到          &lt;code&gt;httpbin&lt;/code&gt;服务。这是一个名为          &lt;a href="https://github.com/istio/fortio" rel="noopener" target="_blank"&gt;Fortio&lt;/a&gt;的负载测试客户端，它可以控制连接数、并发数及发送 HTTP 请求的延迟。通过 Fortio 能够有效的触发前面 在          &lt;code&gt;DestinationRule&lt;/code&gt;中设置的熔断策略。&lt;/p&gt;        &lt;p&gt;向客户端注入 Istio Sidecar 代理，以便 Istio 对其网络交互进行管理：&lt;/p&gt;        &lt;div&gt;          &lt;pre&gt;kubectl apply -f samples/httpbin/sample-client/fortio-deploy.yaml&lt;/pre&gt;&lt;/div&gt;        &lt;p&gt;登入客户端 Pod 并使用 Fortio 工具调用          &lt;code&gt;httpbin&lt;/code&gt;服务。          &lt;code&gt;-curl&lt;/code&gt;参数表明发送一次调用：&lt;/p&gt;&lt;/div&gt;      &lt;div&gt;        &lt;div&gt;          &lt;pre&gt;$ export FORTIO_POD=$(kubectl get pods -l app=fortio -o &amp;apos;jsonpath={.items[0].metadata.name}&amp;apos;)
$ kubectl exec&amp;quot;$FORTIO_POD&amp;quot; -c fortio -- /usr/bin/fortio curl -quiet http://httpbin:8000/getHTTP/1.1 200OK
server: envoy
date: Tue,25 Feb 2020 20:25:52GMT
content-type: application/json
content-length: 586access-control-allow-origin: *access-control-allow-credentials:truex-envoy-upstream-service-time: 36{&amp;quot;args&amp;quot;: {},&amp;quot;headers&amp;quot;: {&amp;quot;Content-Length&amp;quot;: &amp;quot;0&amp;quot;,&amp;quot;Host&amp;quot;: &amp;quot;httpbin:8000&amp;quot;,&amp;quot;User-Agent&amp;quot;: &amp;quot;fortio.org/fortio-1.3.1&amp;quot;,&amp;quot;X-B3-Parentspanid&amp;quot;: &amp;quot;8fc453fb1dec2c22&amp;quot;,&amp;quot;X-B3-Sampled&amp;quot;: &amp;quot;1&amp;quot;,&amp;quot;X-B3-Spanid&amp;quot;: &amp;quot;071d7f06bc94943c&amp;quot;,&amp;quot;X-B3-Traceid&amp;quot;: &amp;quot;86a929a0e76cda378fc453fb1dec2c22&amp;quot;,&amp;quot;X-Forwarded-Client-Cert&amp;quot;: &amp;quot;By=spiffe://cluster.local/ns/default/sa/httpbin;Hash=68bbaedefe01ef4cb99e17358ff63e92d04a4ce831a35ab9a31d3c8e06adb038;Subject=\&amp;quot;\&amp;quot;;URI=spiffe://cluster.local/ns/default/sa/default&amp;quot;},&amp;quot;origin&amp;quot;: &amp;quot;127.0.0.1&amp;quot;,&amp;quot;url&amp;quot;: &amp;quot;http://httpbin:8000/get&amp;quot;}&lt;/pre&gt;&lt;/div&gt;        &lt;p&gt;可以看到调用后端服务的请求已经成功！接下来，可以测试熔断。&lt;/p&gt;        &lt;h2&gt;触发熔断器&lt;/h2&gt;        &lt;p&gt;在          &lt;code&gt;DestinationRule&lt;/code&gt;配置中，您定义了          &lt;code&gt;maxConnections: 1&lt;/code&gt;和          &lt;code&gt;http1MaxPendingRequests: 1&lt;/code&gt;。 这些规则意味着，如果并发的连接和请求数超过一个，在          &lt;code&gt;istio-proxy&lt;/code&gt;进行进一步的请求和连接时，后续请求或 连接将被阻止。&lt;/p&gt;        &lt;p&gt;发送并发数为 2 的连接（          &lt;code&gt;-c 2&lt;/code&gt;），请求 20 次（          &lt;code&gt;-n 20&lt;/code&gt;）：&lt;/p&gt;        &lt;div&gt;          &lt;pre&gt;kubectl exec -it $FORTIO_POD  -c fortio -- /usr/bin/fortio load -c 2 -qps 0 -n 20 -loglevel Warning http://httpbin:8000/getFortio 0.6.2 running at 0 queries per second, 2-&amp;gt;2 procs,for5s: http://httpbin:8000/getStarting at max qps with 2 thread(s) [gomax 2]forexactly 20 calls (10 per thread + 0)23:51:10 W http.go:617&amp;gt; Parsed non ok code 503 (HTTP/1.1 503)
Ended after106.474079ms : 20 calls. qps=187.84Aggregated Function Time : count20 avg 0.010215375 +/- 0.003604 min 0.005172024 max 0.019434859 sum 0.204307492# range, mid point, percentile, count&amp;gt;= 0.00517202 &amp;lt;= 0.006 , 0.00558601 , 5.00, 1
&amp;gt; 0.006 &amp;lt;= 0.007 , 0.0065 , 20.00, 3
&amp;gt; 0.007 &amp;lt;= 0.008 , 0.0075 , 30.00, 2
&amp;gt; 0.008 &amp;lt;= 0.009 , 0.0085 , 40.00, 2
&amp;gt; 0.009 &amp;lt;= 0.01 , 0.0095 , 60.00, 4
&amp;gt; 0.01 &amp;lt;= 0.011 , 0.0105 , 70.00, 2
&amp;gt; 0.011 &amp;lt;= 0.012 , 0.0115 , 75.00, 1
&amp;gt; 0.012 &amp;lt;= 0.014 , 0.013 , 90.00, 3
&amp;gt; 0.016 &amp;lt;= 0.018 , 0.017 , 95.00, 1
&amp;gt; 0.018 &amp;lt;= 0.0194349 , 0.0187174 , 100.00, 1# target50% 0.0095# target75% 0.012# target99% 0.0191479# target99.9% 0.0194062Code200 : 19 (95.0 %)
Code503 : 1 (5.0 %)
Response Header Sizes : count20 avg 218.85 +/- 50.21 min 0 max 231 sum 4377Response Body/Total Sizes : count 20 avg 652.45 +/- 99.9 min 217 max 676 sum 13049All done20 calls (plus 0 warmup) 10.215 ms avg, 187.8 qps&lt;/pre&gt;&lt;/div&gt;        &lt;p&gt;有趣的是，几乎所有的请求都完成了！          &lt;code&gt;istio-proxy&lt;/code&gt;确实允许存在一些误差。&lt;/p&gt;        &lt;div&gt;          &lt;pre&gt;Code 200 : 19 (95.0 %)
Code503 : 1 (5.0 %)&lt;/pre&gt;&lt;/div&gt;        &lt;p&gt;将并发连接数提高到 3 个：&lt;/p&gt;        &lt;div&gt;          &lt;pre&gt;kubectl exec -it $FORTIO_POD  -c fortio -- /usr/bin/fortio load -c 3 -qps 0 -n 30 -loglevel Warning http://httpbin:8000/getFortio 0.6.2 running at 0 queries per second, 2-&amp;gt;2 procs,for5s: http://httpbin:8000/getStarting at max qps with 3 thread(s) [gomax 2]forexactly 30 calls (10 per thread + 0)23:51:51 W http.go:617&amp;gt; Parsed non ok code 503 (HTTP/1.1 503)23:51:51 W http.go:617&amp;gt; Parsed non ok code 503 (HTTP/1.1 503)23:51:51 W http.go:617&amp;gt; Parsed non ok code 503 (HTTP/1.1 503)23:51:51 W http.go:617&amp;gt; Parsed non ok code 503 (HTTP/1.1 503)23:51:51 W http.go:617&amp;gt; Parsed non ok code 503 (HTTP/1.1 503)23:51:51 W http.go:617&amp;gt; Parsed non ok code 503 (HTTP/1.1 503)23:51:51 W http.go:617&amp;gt; Parsed non ok code 503 (HTTP/1.1 503)23:51:51 W http.go:617&amp;gt; Parsed non ok code 503 (HTTP/1.1 503)23:51:51 W http.go:617&amp;gt; Parsed non ok code 503 (HTTP/1.1 503)23:51:51 W http.go:617&amp;gt; Parsed non ok code 503 (HTTP/1.1 503)23:51:51 W http.go:617&amp;gt; Parsed non ok code 503 (HTTP/1.1 503)
Ended after71.05365ms : 30 calls. qps=422.22Aggregated Function Time : count30 avg 0.0053360199 +/- 0.004219 min 0.000487853 max 0.018906468 sum 0.160080597# range, mid point, percentile, count&amp;gt;= 0.000487853 &amp;lt;= 0.001 , 0.000743926 , 10.00, 3
&amp;gt; 0.001 &amp;lt;= 0.002 , 0.0015 , 30.00, 6
&amp;gt; 0.002 &amp;lt;= 0.003 , 0.0025 , 33.33, 1
&amp;gt; 0.003 &amp;lt;= 0.004 , 0.0035 , 40.00, 2
&amp;gt; 0.004 &amp;lt;= 0.005 , 0.0045 , 46.67, 2
&amp;gt; 0.005 &amp;lt;= 0.006 , 0.0055 , 60.00, 4
&amp;gt; 0.006 &amp;lt;= 0.007 , 0.0065 , 73.33, 4
&amp;gt; 0.007 &amp;lt;= 0.008 , 0.0075 , 80.00, 2
&amp;gt; 0.008 &amp;lt;= 0.009 , 0.0085 , 86.67, 2
&amp;gt; 0.009 &amp;lt;= 0.01 , 0.0095 , 93.33, 2
&amp;gt; 0.014 &amp;lt;= 0.016 , 0.015 , 96.67, 1
&amp;gt; 0.018 &amp;lt;= 0.0189065 , 0.0184532 , 100.00, 1# target50% 0.00525# target75% 0.00725# target99% 0.0186345# target99.9% 0.0188793Code200 : 19 (63.3 %)
Code503 : 11 (36.7 %)
Response Header Sizes : count30 avg 145.73333 +/- 110.9 min 0 max 231 sum 4372Response Body/Total Sizes : count 30 avg 507.13333 +/- 220.8 min 217 max 676 sum 15214All done30 calls (plus 0 warmup) 5.336 ms avg, 422.2 qps&lt;/pre&gt;&lt;/div&gt;        &lt;p&gt;现在，您将开始看到预期的熔断行为，只有 63.3% 的请求成功，其余的均被熔断器拦截：&lt;/p&gt;        &lt;div&gt;          &lt;pre&gt;Code 200 : 19 (63.3 %)
Code503 : 11 (36.7 %)&lt;/pre&gt;&lt;/div&gt;        &lt;p&gt;查询          &lt;code&gt;istio-proxy&lt;/code&gt;状态以了解更多熔断详情:&lt;/p&gt;        &lt;div&gt;          &lt;pre&gt;kubectl exec $FORTIO_POD -c istio-proxy -- pilot-agent request GET stats | grep httpbin |grep pending
cluster.outbound|80||httpbin.springistio.svc.cluster.local.upstream_rq_pending_active: 0cluster.outbound|80||httpbin.springistio.svc.cluster.local.upstream_rq_pending_failure_eject: 0cluster.outbound|80||httpbin.springistio.svc.cluster.local.upstream_rq_pending_overflow: 12cluster.outbound|80||httpbin.springistio.svc.cluster.local.upstream_rq_pending_total: 39&lt;/pre&gt;&lt;/div&gt;        &lt;p&gt;可以看到          &lt;code&gt;upstream_rq_pending_overflow&lt;/code&gt;值          &lt;code&gt;12&lt;/code&gt;，这意味着，目前为止已有 12 个调用被标记为熔断&lt;/p&gt;        &lt;p&gt;参考：&lt;/p&gt;        &lt;p&gt;https://blog.csdn.net/weixin_38754564/article/details/102386272&lt;/p&gt;        &lt;p&gt;https://preliminary.istio.io/latest/zh/docs/tasks/traffic-management/circuit-breaking/&lt;/p&gt;        &lt;p&gt;https://www.kubernetes.org.cn/5556.html&lt;/p&gt;        &lt;p&gt;          &lt;a name="t5"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
    &lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/62040-%E5%AE%9E%E8%B7%B5-k8s-istio</guid>
      <pubDate>Mon, 17 Jan 2022 11:23:03 CST</pubDate>
    </item>
    <item>
      <title>DDD术语-聚合(Aggregate)、聚合根(AggregateRoot) - Louis军 - 博客园</title>
      <link>https://itindex.net/detail/62001-ddd-%E6%9C%AF%E8%AF%AD-%E8%81%9A%E5%90%88</link>
      <description>&lt;div&gt;    &lt;p&gt;在事件风暴中，我们会根据一些业务操作和行为找出实体（Entity）或值对象（ValueObject），进而将业务关联紧密的实体和值对象进行组合，构成聚合，再根据业务语义将多个聚合划定到同一个限界上下文（Bounded Context）中，并在限界上下文内完成领域建模。&lt;/p&gt;    &lt;p&gt;那你知道为什么要在限界上下文和实体之间增加聚合和聚合根这两个概念吗？它们的作用是什么？怎么设计聚合？&lt;/p&gt;    &lt;h2&gt;聚合&lt;/h2&gt;    &lt;p&gt;在 DDD 中，实体和值对象是很基础的领域对象。实体一般对应业务对象，它具有业务属性和业务行为；而值对象主要是属性集合，对实体的状态和特征进行描述。但实体和值对象都只是个体化的对象，它们的行为表现出来的是个体的能力。&lt;/p&gt;    &lt;h2&gt;那聚合在其中起什么作用呢？&lt;/h2&gt;    &lt;p&gt;举个例子。社会是由一个个的个体组成的，象征着我们每一个人。随着社会的发展，慢慢出现了社团、机构、部门等组织，我们开始从个人变成了组织的一员，大家可以协同一致的工作，朝着一个最大的目标前进，发挥出更大的力量。&lt;/p&gt;    &lt;p&gt;领域模型内的实体和值对象就好比个体，而能让实体和值对象协同工作的组织就是聚合，它用来确保这些领域对象在实现共同的业务逻辑时，能保证数据的一致性。&lt;/p&gt;    &lt;p&gt;你可以这么理解，聚合就是由业务和逻辑紧密关联的实体和值对象组合而成的，聚合是数据修改和持久化的基本单元，每一个聚合对应一个仓储，实现数据的持久化。&lt;/p&gt;    &lt;p&gt;聚合有一个聚合根和上下文边界，这个边界根据业务单一职责和高内聚原则，定义了聚合内部应该包含哪些实体和值对象，而聚合之间的边界是松耦合的。按照这种方式设计出来的微服务很自然就是“高内聚、低耦合”的。&lt;/p&gt;    &lt;p&gt;聚合在 DDD 分层架构里属于领域层，领域层包含了多个聚合，共同实现核心业务逻辑。聚合内实体以充血模型实现个体业务能力，以及业务逻辑的高内聚。跨多个实体的业务逻辑通过领域服务来实现，跨多个聚合的业务逻辑通过应用服务来实现。比如有的业务场景需要同一个聚合的 A 和 B 两个实体来共同完成，我们就可以将这段业务逻辑用领域服务来实现；而有的业务逻辑需要聚合 C 和聚合 D 中的两个服务共同完成，这时你就可以用应用服务来组合这两个服务。&lt;/p&gt;    &lt;h2&gt;聚合根&lt;/h2&gt;    &lt;p&gt;聚合根的主要目的是为了避免由于复杂数据模型缺少统一的业务规则控制，而导致聚合、实体之间数据不一致性的问题。&lt;/p&gt;    &lt;p&gt;传统数据模型中的每一个实体都是对等的，如果任由实体进行无控制地调用和数据修改，很可能会导致实体之间数据逻辑的不一致。而如果采用锁的方式则会增加软件的复杂度，也会降低系统的性能。&lt;/p&gt;    &lt;p&gt;如果把聚合比作组织，那聚合根就是这个组织的负责人。聚合根也称为根实体，它不仅是实体，还是聚合的管理者。&lt;/p&gt;    &lt;p&gt;首先它作为实体本身，拥有实体的属性和业务行为，实现自身的业务逻辑。&lt;/p&gt;    &lt;p&gt;其次它作为聚合的管理者，在聚合内部负责协调实体和值对象按照固定的业务规则协同完成共同的业务逻辑。&lt;/p&gt;    &lt;p&gt;最后在聚合之间，它还是聚合对外的接口人，以聚合根 ID 关联的方式接受外部任务和请求，在上下文内实现聚合之间的业务协同。也就是说，聚合之间通过聚合根 ID 关联引用，如果需要访问其它聚合的实体，就要先访问聚合根，再导航到聚合内部实体，外部对象不能直接访问聚合内实体。&lt;/p&gt;    &lt;h2&gt;怎样设计聚合？&lt;/h2&gt;    &lt;p&gt;DDD 领域建模通常采用事件风暴，它通常采用用例分析、场景分析和用户旅程分析等方法，通过头脑风暴列出所有可能的业务行为和事件，然后找出产生这些行为的领域对象，并梳理领域对象之间的关系，找出聚合根，找出与聚合根业务紧密关联的实体和值对象，再将聚合根、实体和值对象组合，构建聚合。&lt;/p&gt;    &lt;p&gt;下面我们以保险的投保业务场景为例，看一下聚合的构建过程主要都包括哪些步骤。&lt;/p&gt;    &lt;p&gt;      &lt;img alt="" src="https://img2020.cnblogs.com/blog/140052/202009/140052-20200916230244538-189434576.png"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;   &lt;img src="data:image/png;base64,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OLLjpK1EQASKkQA7SqolONQG4hccud6DYvxM0jWJgAiIgAiIgAhEIiDBEQmfdhYBEUg0gVw7VNpeIqSY20C2ERT52i4qy0R/+OjkRUAEREAEREAECkFAgqMQVHVMERCBZBCI2sHS/hIeagPxtYFkfMroLEVABERABERABIaRgATHMMLWW4mACIwwAuqcxtc5FXuxj9oGRtjHiU5HBERABERABEQgfgISHPHfA52BCIhAXASidrC0vzrpagPxtYG4Pjf0viIgAiIgAiIgAiOWgATHiL01OjEREIGCE1DnNL7OqdiLfdQ2UPAPCL2BCIiACIiACIhA0ghIcCTtjul8RUAE8kcgagdL+6uTrjYQXxvI3yeBjiQCIiACIiACIlAkBCQ4iuRG6jJEQAQegoA6p/F1TsVe7KO2gYf4L69dREAEREAEREAEipuABEdx319dnQiIwGAEonawtL866WoD8bWBwf5v6zUREAEREAEREIGSJCDBUZK3XRctAiLgCKhzGl/nVOzFPmob0MeYCIiACIiACIiACAQEJDgCIFoVAREoIQJRO1jaX510tYH42kAJfVTpUkVABERABERABLIjIMGRHSdtJQIiUIwE1DmNr3Mq9mIftQ0U42eSrkkEREAEREAERCASAQmOSPi0swiIQKIJRO1gaX910tUG4msDif7w0cmLgAiIgAiIgAgUgsD/ABCR4tHJG926AAAAAElFTkSuQmCC"&gt;&lt;/img&gt;   &lt;br /&gt;&lt;/p&gt;    &lt;p&gt; &lt;/p&gt;    &lt;p&gt; &lt;/p&gt;    &lt;p&gt;第 1 步：采用事件风暴，根据业务行为，梳理出在投保过程中发生这些行为的所有的实体和值对象，比如投保单、标的、客户、被保人等等。&lt;/p&gt;    &lt;p&gt;第 2 步：从众多实体中选出适合作为对象管理者的根实体，也就是聚合根。判断一个实体是否是聚合根，你可以结合以下场景分析：是否有独立的生命周期？是否有全局唯一 ID？是否可以创建或修改其它对象？是否有专门的模块来管这个实体。图中的聚合根分别是投保单和客户实体。&lt;/p&gt;    &lt;p&gt;第 3 步：根据业务单一职责和高内聚原则，找出与聚合根关联的所有紧密依赖的实体和值对象。构建出 1 个包含聚合根（唯一）、多个实体和值对象的对象集合，这个集合就是聚合。在图中我们构建了客户和投保这两个聚合。&lt;/p&gt;    &lt;p&gt;第 4 步：在聚合内根据聚合根、实体和值对象的依赖关系，画出对象的引用和依赖模型。这里我需要说明一下：投保人和被保人的数据，是通过关联客户 ID 从客户聚合中获取的，在投保聚合里它们是投保单的值对象，这些值对象的数据是客户的冗余数据，即使未来客户聚合的数据发生了变更，也不会影响投保单的值对象数据。从图中我们还可以看出实体之间的引用关系，比如在投保聚合里投保单聚合根引用了报价单实体，报价单实体则引用了报价规则子实体。&lt;/p&gt;    &lt;p&gt;第 5 步：多个聚合根据业务语义和上下文一起划分到同一个限界上下文内。&lt;/p&gt;    &lt;p&gt;这就是一个聚合诞生的完整过程了。&lt;/p&gt;    &lt;h2&gt;聚合的一些设计原则&lt;/h2&gt;    &lt;p&gt;1. 在一致性边界内建模真正的不变条件。聚合用来封装真正的不变性，而不是简单地将对象组合在一起。聚合内有一套不变的业务规则，各实体和值对象按照统一的业务规则运行，实现对象数据的一致性，边界之外的任何东西都与该聚合无关，这就是聚合能实现业务高内聚的原因。&lt;/p&gt;    &lt;p&gt;2. 设计小聚合。如果聚合设计得过大，聚合会因为包含过多的实体，导致实体之间的管理过于复杂，高频操作时会出现并发冲突或者数据库锁，最终导致系统可用性变差。而小聚合设计则可以降低由于业务过大导致聚合重构的可能性，让领域模型更能适应业务的变化。&lt;/p&gt;    &lt;p&gt;3. 通过唯一标识引用其它聚合。聚合之间是通过关联外部聚合根 ID 的方式引用，而不是直接对象引用的方式。外部聚合的对象放在聚合边界内管理，容易导致聚合的边界不清晰，也会增加聚合之间的耦合度。&lt;/p&gt;    &lt;p&gt;4. 在边界之外使用最终一致性。聚合内数据强一致性，而聚合之间数据最终一致性。在一次事务中，最多只能更改一个聚合的状态。如果一次业务操作涉及多个聚合状态的更改，应采用领域事件的方式异步修改相关的聚合，实现聚合之间的解耦。&lt;/p&gt;    &lt;p&gt;5. 通过应用层实现跨聚合的服务调用。为实现微服务内聚合之间的解耦，以及未来以聚合为单位的微服务组合和拆分，应避免跨聚合的领域服务调用和跨聚合的数据库表关联。&lt;/p&gt;    &lt;p&gt;上面的这些原则是 DDD 的一些通用的设计原则，还是那句话：“适合自己的才是最好的。”&lt;/p&gt;    &lt;h2&gt;总结&lt;/h2&gt;    &lt;p&gt;我们总结下聚合、聚合根、实体和值对象它们之间的联系和区别。&lt;/p&gt;    &lt;p&gt;聚合的特点：高内聚、低耦合，它是领域模型中最底层的边界，可以作为拆分微服务的最小单位，但我不建议你对微服务过度拆分。但在对性能有极致要求的场景中，聚合可以独立作为一个微服务，以满足版本的高频发布和极致的弹性伸缩能力。&lt;/p&gt;    &lt;p&gt;一个微服务可以包含多个聚合，聚合之间的边界是微服务内天然的逻辑边界。有了这个逻辑边界，在微服务架构演进时就可以以聚合为单位进行拆分和组合了，微服务的架构演进也就不再是一件难事了。&lt;/p&gt;    &lt;p&gt;聚合根的特点：聚合根是实体，有实体的特点，具有全局唯一标识，有独立的生命周期。一个聚合只有一个聚合根，聚合根在聚合内对实体和值对象采用直接对象引用的方式进行组织和协调，聚合根与聚合根之间通过 ID 关联的方式实现聚合之间的协同。&lt;/p&gt;    &lt;p&gt;实体的特点：有 ID 标识，通过 ID 判断相等性，ID 在聚合内唯一即可。状态可变，它依附于聚合根，其生命周期由聚合根管理。实体一般会持久化，但与数据库持久化对象不一定是一对一的关系。实体可以引用聚合内的聚合根、实体和值对象。&lt;/p&gt;    &lt;p&gt;值对象的特点：无 ID，不可变，无生命周期，用完即扔。值对象之间通过属性值判断相等性。它的核心本质是值，是一组概念完整的属性组成的集合，用于描述实体的状态和特征。值对象尽量只引用值对象。&lt;/p&gt;&lt;/div&gt;
    &lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/62001-ddd-%E6%9C%AF%E8%AF%AD-%E8%81%9A%E5%90%88</guid>
      <pubDate>Tue, 04 Jan 2022 19:13:54 CST</pubDate>
    </item>
    <item>
      <title>关于 Spring-WebFlux 的一些想法 - 干货满满张哈希 - 博客园</title>
      <link>https://itindex.net/detail/61997-spring-webflux-%E6%83%B3%E6%B3%95</link>
      <description>&lt;div&gt;    &lt;blockquote&gt;      &lt;p&gt;本文是本人在知乎提问        &lt;a href="https://www.zhihu.com/question/508036565" target="_blank"&gt;spring webflux现在看来是否成功？&lt;/a&gt;下的回答，其他回答也很精彩，如果感兴趣可以查看&lt;/p&gt;&lt;/blockquote&gt;    &lt;p&gt;现在基于 spring web 的同步微服务有一个非常大的缺陷就是：相对于基于 spring-webflux 的异步微服务，基于 spring-web 的同步微服务没有很好的处理客户端有请求超时配置的情况。当客户端请求超时时，客户端会直接返回超时异常，但是调用的服务端任务，在基于 spring-web 的同步微服务并没有被取消，基于 spring-webflux 的异步微服务是会被取消的。目前，还没有很好的办法在同步环境中可以取消这些已经超时的任务。&lt;/p&gt;    &lt;p&gt;Spring-weflux 目前最大的问题，在于很多框架，包括 JDK 本身，有很多      &lt;strong&gt;基于 Thread 的 Context&lt;/strong&gt;，例如 Thread local 这种。还有就是 Java Log 框架的 MDC 的实现，一般都是基于 ThreadLocal 的 Map.还有就是像 redisson 的分布式锁，它让每个线程生成唯一id并和线程绑定，解锁的时候会检查。 但是这种设计，与 Spring-Webflux 的 Context 很难兼容。可以看看 Spring cloud sleuth 在 Spring-Webflux 中加入链路信息上下文，并保持，有多麻烦，而且，还有不少的 bug 和漏掉的点，参考：&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;        &lt;a href="https://zhuanlan.zhihu.com/p/413589417" target="_blank"&gt;Spring Cloud Gateway 没有链路信息，我 TM 人傻了（上）&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;        &lt;a href="https://zhuanlan.zhihu.com/p/413883594" target="_blank"&gt;Spring Cloud Gateway 没有链路信息，我 TM 人傻了（中）&lt;/a&gt;&lt;/li&gt;      &lt;li&gt;        &lt;a href="https://zhuanlan.zhihu.com/p/414298933" target="_blank"&gt;Spring Cloud Gateway 没有链路信息，我 TM 人傻了（下）&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;    &lt;p&gt;还有一点比较麻烦，就是和      &lt;strong&gt;现有的各种阻塞锁的设计，不兼容&lt;/strong&gt;，因为响应式编程需要非阻塞。这需要重构成队列排序消费来解决并发竞争，工作量也很大。&lt;/p&gt;    &lt;p&gt;然后就是      &lt;strong&gt;官方数据库 IO 库，不是 NIO&lt;/strong&gt;这个问题。不论是Java自带的Future框架，还是 Spring WebFlux，还是 Vert.x，他们都是一种非阻塞的基于Ractor模型的框架（后两个框架都是利用netty实现）。在阻塞编程模式里，任何一个请求，都需要一个线程去处理，如果io阻塞了，那么这个线程也会阻塞在那。但是在非阻塞编程里面，基于响应式的编程，线程不会被阻塞，还可以处理其他请求。举一个简单例子：假设只有一个线程池，请求来的时候，线程池处理，需要读取数据库 IO，这个 IO 是 NIO 非阻塞 IO，那么就将请求数据写入数据库连接，直接返回。之后数据库返回数据，这个链接的 Selector 会有 Read 事件准备就绪，这时候，再通过这个线程池去读取数据处理（相当于回调），这时候用的线程和之前不一定是同一个线程。这样的话，线程就不用等待数据库返回，而是直接处理其他请求。这样情况下，即使某个业务 SQL 的执行时间长，也不会影响其他业务的执行。但是，这一切的基础，是 IO 必须是非阻塞 IO，也就是 NIO（或者 AIO）。官方JDBC没有 NIO，只有 BIO 实现。这样无法让线程将请求写入链接之后直接返回，必须等待响应。但是也就解决方案，就是通过其他线程池，专门处理数据库请求并等待返回进行回调，也就是业务线程池 A 将数据库 BIO 请求交给线程池B处理，读取完数据之后，再交给 A 执行剩下的业务逻辑。这样A也不用阻塞，可以处理其他请求。但是，这样还是有因为某个业务 SQL 的执行时间长，导致B所有线程被阻塞住队列也满了从而A的请求也被阻塞的情况，这是不完美的实现。真正完美的，需要 JDBC 实现 NIO。当然，也可以使用其他异步响应式的三方库，但是非官方的，兼容性以及是否更新及时，还有使用限制什么的也很麻烦。&lt;/p&gt;    &lt;p&gt;最后，提一下 Java 本身的 Project Loom，我简单研究过他的实现原理：&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;        &lt;a href="https://zhuanlan.zhihu.com/p/375161275" target="_blank"&gt;JEP 尝鲜系列 3 - 使用虚线程进行同步网络 IO 的不阻塞原理&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;    &lt;p&gt;简单总结即：在虚拟线程中运行的 Java 同步网络 API 会将底层原生 Socket 切换到非阻塞模式。当 Java 代码启用一个 I/O 请求并且这个请求没有立即完成（原生 socket 返回 EAGAIN - 代表&amp;quot;未就绪&amp;quot;/&amp;quot;会阻塞&amp;quot;）的时候，这个底层 socket 会被注册到一个 JVM 内部事件通知机制(Poller)，并且虚拟线程会被 parked。当底层 I/O 操作就绪的时候（有相关事件会到达 Poller），虚拟线程会 unparked 并且底层的 Socket 操作会被重试处理。同步 Java 网络 API 已经被重新实现，相关的 JEP 包括 JEP 353 和 JEP 373. 在虚拟线程中运行时，不能立即完成的 I/O 操作将导致虚拟线程被 parked 。当 I/O 就绪时，虚拟线程将被 unparked。这个实现相对于当前的异步非阻塞 I/O 实现代码来看，更加简单易用，隐藏了很多业务不关心的实现细节。&lt;/p&gt;    &lt;p&gt;Project Loom 解决了主要的网络 IO 阻塞问题，并且基本不用改现有代码就能实现纤程，用阻塞的代码风格实现非阻塞的代码（而且和现在的基于 Thread 的上下文框架兼容）。是目前的 Java 架构师 Goetz 最看重的特性之一，目前 Java 17 的很多新特性其实就是为这个 Project Loom 的发布铺路，可以看看 Nicolai 和 Goetz 大神的这个视频，从 19:17 秒开始：&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;        &lt;a href="https://mp.weixin.qq.com/s?__biz=MzI2MTUwMDUxOQ==&amp;mid=2247484913&amp;idx=2&amp;sn=919eb1ea700fe33bb8e47af7e887a3d7&amp;chksm=ea583ef9dd2fb7effc6c2fc2eaddb2ae1c5fd8093495485b8d9463cba90ccc0f6e86a15be303&amp;token=2009695787&amp;lang=zh_CN#rd" target="_blank"&gt;Nicolai 与 Goetz 关于 Java AMA 的讨论&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;    &lt;p&gt;Brian Goetz: &amp;quot;I think Project Loom is going to kill Reactive Programming&amp;quot;(哈哈，有点过于乐观带节奏了，不过值得观望)&lt;/p&gt;    &lt;p&gt;不过，虽然期望中是仅需要下面这种代码就可以把现有的线程和线程池替换成虚拟线程：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;Thread thread = Thread.ofVirtual().name(&amp;quot;duke&amp;quot;).unstarted(runnable);
ThreadFactory factory = Thread.ofVirtual().factory();

ExecutorService b = Executors.newVirtualThreadPool();&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;但是还有很多问题需要解决：&lt;/p&gt;    &lt;ol&gt;      &lt;li&gt;ThreadLocal 相关的类，由于虚拟线程会无限制的生成，ThreadLocal 的生成也需要重新设计：首先是很多 JDK 中的框架基于 ThreadLocal 的 Probe 实现，例如 ThreadLocalRandom 的初始 Seed。第二是 ThreadLocal 的使用可能会导致 GC 压力增大，因为虚拟线程可以无限制的生成。&lt;/li&gt;      &lt;li&gt;依然阻塞实际线程的地方：在同步锁的阻塞还是会阻塞实际的线程，还有文件 IO 等。&lt;/li&gt;      &lt;li&gt;修改以上带来的 bug 以及安全问题，由于这些修改动了 JDK 的一些框架的根本，没有经过实际线上应用之前，仅凭单元测试和压测可能很难发现一些细节问题。&lt;/li&gt;&lt;/ol&gt;    &lt;p&gt;不过，现在的 Java 已经在为 Project loom 铺路了，例如：&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;Java 13 中的        &lt;a href="https://openjdk.java.net/jeps/353" target="_blank"&gt;Reimplement the Legacy Socket API&lt;/a&gt;以及 Java 15 中的        &lt;a href="https://openjdk.java.net/jeps/373" target="_blank"&gt;Reimplement the Legacy DatagramSocket API&lt;/a&gt;也是为了优化 Project Loom 对于 网络 IO 的兼容&lt;/li&gt;      &lt;li&gt;Java 18 中的        &lt;a href="https://openjdk.java.net/jeps/416" target="_blank"&gt;JEP 416: Reimplement Core Reflection with Method Handles&lt;/a&gt;使用句柄重构反射，减少 Loom 虚拟线程对于 native 栈帧的调用（因为虚拟线程会非常大量，如果每个都访问 native 线程栈则性能有严重问题）&lt;/li&gt;      &lt;li&gt;Java 18 中的        &lt;a href="https://openjdk.java.net/jeps/418" target="_blank"&gt;JEP 418: Internet-Address Resolution SPI&lt;/a&gt;为了解决 DNS 解析时阻塞虚拟线程的实际负载线程的问题&lt;/li&gt;      &lt;li&gt;其他还有        &lt;a href="https://openjdk.java.net/jeps/8263012" target="_blank"&gt;JEP draft: Scope Locals&lt;/a&gt;为了归一化区域本地变量（例如 ThreadLocal），这样一部分目标也是为了 Loom 的实现&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
    &lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/61997-spring-webflux-%E6%83%B3%E6%B3%95</guid>
      <pubDate>Mon, 03 Jan 2022 21:10:24 CST</pubDate>
    </item>
    <item>
      <title>Apache Log4j2 远程代码执行漏洞处置手册 – 绿盟科技技术博客</title>
      <link>https://itindex.net/detail/61950-apache-log4j2-%E4%BB%A3%E7%A0%81</link>
      <description>&lt;div&gt;    &lt;div&gt;阅读：1,642&lt;/div&gt;    &lt;h2&gt;一、漏洞概述&lt;/h2&gt;    &lt;p&gt;12月9日，绿盟科技CERT监测到网上披露Apache Log4j2 远程代码执行漏洞，由于Apache Log4j2某些功能存在递归解析功能，未经身份验证的攻击者通过发送特别构造的数据请求包，可在目标服务器上执行任意代码。漏洞PoC已在网上公开，默认配置即可进行利用，该漏洞影响范围极广，建议相关用户尽快采取措施进行排查与防护。&lt;/p&gt;    &lt;p&gt;12月10日，绿盟科技CERT发现Apache Log4j 2.15.0-rc1 版本仅修复LDAP和增加了host白名单，可以被绕过利用，官方发布了Apache Log4j 2.15.0-rc2版本进行修复，增加了对urI异常的处理。&lt;/p&gt;    &lt;p&gt;Apache Log4j2是一款开源的Java日志框架，被广泛地应用在中间件、开发框架与Web应用中，用来记录日志信息。&lt;/p&gt;    &lt;p&gt;漏洞成功复现截图：&lt;/p&gt;    &lt;div&gt;      &lt;img alt="" height="368" src="http://blog.nsfocus.net/wp-content/uploads/2021/12/image-25.png" width="886"&gt;&lt;/img&gt;&lt;/div&gt;    &lt;p&gt;2.15.0-rc1绕过复现截图：&lt;/p&gt;    &lt;div&gt;      &lt;img alt="" height="530" src="http://blog.nsfocus.net/wp-content/uploads/2021/12/image-26.png" width="886"&gt;&lt;/img&gt;&lt;/div&gt;    &lt;table&gt;      &lt;tr&gt;        &lt;td&gt;          &lt;strong&gt;漏洞细节&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;          &lt;strong&gt;漏洞PoC&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;          &lt;strong&gt;漏洞EXP&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;          &lt;strong&gt;在野利用&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;已公开&lt;/td&gt;        &lt;td&gt;已公开&lt;/td&gt;        &lt;td&gt;已公开&lt;/td&gt;        &lt;td&gt;存在&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;    &lt;p&gt;参考链接：      &lt;a href="https://issues.apache.org/jira/projects/LOG4J2/issues/LOG4J2-3201?filter=allissues"&gt;https://issues.apache.org/jira/projects/LOG4J2/issues/LOG4J2-3201?filter=allissues&lt;/a&gt;&lt;/p&gt;    &lt;h2&gt;二、影响范围&lt;/h2&gt;    &lt;p&gt;      &lt;strong&gt;受影响版本&lt;/strong&gt;&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;2.0 &amp;lt;= Apache Log4j &amp;lt;= 2.15.0-rc1&lt;/li&gt;&lt;/ul&gt;    &lt;p&gt;      &lt;strong&gt;注：&lt;/strong&gt;使用Apache Log4j 1.X版本的应用，若开发者对JMS Appender利用不当，可对应用产生潜在的安全影响。&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;供应链影响范围：&lt;/strong&gt;      &lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;已知受影响应用及组件：&lt;/p&gt;    &lt;p&gt;Apache Solr&lt;/p&gt;    &lt;p&gt;Apache Struts2&lt;/p&gt;    &lt;p&gt;Apache Flink&lt;/p&gt;    &lt;p&gt;Apache Druid&lt;/p&gt;    &lt;p&gt;spring-boot-strater-log4j2&lt;/p&gt;    &lt;p&gt;更多组件可参考如下链接：&lt;/p&gt;    &lt;p&gt;      &lt;a href="https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core/usages?p=1"&gt;https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core/usages?p=1&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;不受影响版本&lt;/strong&gt;&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;Apache log4j-2.15.0-rc2（与官网的2.15.0稳定版相同）&lt;/li&gt;&lt;/ul&gt;    &lt;h2&gt;三、漏洞检测&lt;/h2&gt;    &lt;h3&gt;3.1 人工检测&lt;/h3&gt;    &lt;p&gt;1、相关用户可根据Java jar解压后是否存在org/apache/logging/log4j相关路径结构，判断是否使用了存在漏洞的组件，若存在相关Java程序包，则很可能存在该漏洞。&lt;/p&gt;    &lt;div&gt;      &lt;img alt="" height="680" src="http://blog.nsfocus.net/wp-content/uploads/2021/12/image-38.png" width="865"&gt;&lt;/img&gt;&lt;/div&gt;    &lt;p&gt;2、若程序使用Maven打包，查看项目的pom.xml文件中是否存在下图所示的相关字段，若版本号为小于2.15.0-rc2，则存在该漏洞。&lt;/p&gt;    &lt;div&gt;      &lt;img alt="" height="697" src="http://blog.nsfocus.net/wp-content/uploads/2021/12/image-37.png" width="865"&gt;&lt;/img&gt;&lt;/div&gt;    &lt;p&gt;3、若程序使用gradle打包，可查看build.gradle编译配置文件，若在dependencies部分存在org.apache.logging.log4j相关字段，且版本号为小于2.15.0-rc2，则存在该漏洞。&lt;/p&gt;    &lt;div&gt;      &lt;img alt="" height="123" src="http://blog.nsfocus.net/wp-content/uploads/2021/12/image-36.png" width="866"&gt;&lt;/img&gt;&lt;/div&gt;    &lt;h3&gt;3.2 攻击排查&lt;/h3&gt;    &lt;p&gt;1、攻击者在利用前通常采用dnslog方式进行扫描、探测，常见的漏洞利用方式可通过应用系统报错日志中的”javax.naming.CommunicationException”、”javax.naming.NamingException: problem generating object using object factory”、”Error looking up JNDI resource”关键字进行排查。&lt;/p&gt;    &lt;div&gt;      &lt;img alt="" height="308" src="http://blog.nsfocus.net/wp-content/uploads/2021/12/image-35.png" width="865"&gt;&lt;/img&gt;&lt;/div&gt;    &lt;p&gt;2、攻击者发送的数据包中可能存在”${jndi:}” 字样，推荐使用全流量或WAF设备进行检索排查。&lt;/p&gt;    &lt;div&gt;      &lt;img alt="" height="284" src="http://blog.nsfocus.net/wp-content/uploads/2021/12/image-34.png" width="886"&gt;&lt;/img&gt;&lt;/div&gt;    &lt;h3&gt;3.3 产品检测&lt;/h3&gt;    &lt;p&gt;绿盟科技远程安全评估系统（RSAS）与WEB应用漏洞扫描系统(WVSS)、网络入侵检测系统（IDS）、综合威胁探针（UTS）已具备对该漏洞的扫描与检测能力，请有部署以上设备的用户升级至最新版本。&lt;/p&gt;    &lt;div&gt;      &lt;img alt="" height="672" src="http://blog.nsfocus.net/wp-content/uploads/2021/12/image-33.png" width="965"&gt;&lt;/img&gt;&lt;/div&gt;    &lt;p&gt;关于RSAS的升级配置指导，请参考如下链接：&lt;/p&gt;    &lt;p&gt;      &lt;a href="https://mp.weixin.qq.com/s/SgOaCZeKrNn-4uR8Yj_C3Q"&gt;https://mp.weixin.qq.com/s/SgOaCZeKrNn-4uR8Yj_C3Q&lt;/a&gt;&lt;/p&gt;    &lt;h3&gt;3.4 申请云检测&lt;/h3&gt;    &lt;p&gt;绿盟科技面向用户提供远程检测服务，因该漏洞的检测存在一定风险，相关客户如需要申请云检测，请联系销售或项目经理沟通，或用个人的公司邮箱发邮件至rs@nsfocus.com，在正文中提供需要扫描的资产清单，可以扫描的时间，联系方式，服务人员会与您联系。&lt;/p&gt;    &lt;p&gt;7x24h客服咨询热线：      &lt;a href="tel:4008186868"&gt;400-818-6868&lt;/a&gt;转2&lt;/p&gt;    &lt;h2&gt;四、漏洞防护&lt;/h2&gt;    &lt;h3&gt;4.1 官方升级&lt;/h3&gt;    &lt;p&gt;目前官方已发布log4j-2.15.0-rc2测试版本与apache-log4j-2.15.0稳定版修复该漏洞，受影响用户可先将Apache Log4j2所有相关应用到以上版本，下载链接：https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc2或https://logging.apache.org/log4j/2.x/download.html&lt;/p&gt;    &lt;p&gt;注：可能出现不稳定的情况，建议用户在备份数据后再进行升级。&lt;/p&gt;    &lt;p&gt;升级供应链中已知受影响的应用及组件：Apache Solr、Apache Struts2、Apache Flink、Apache Druid、spring-boot-strater-log4j2&lt;/p&gt;    &lt;h3&gt;4.2 产品防护&lt;/h3&gt;    &lt;p&gt;针对此漏洞，绿盟科技WEB应用防护系统(WAF)与网络入侵防护系统(IPS)已发布规则升级包，请相关用户升级规则，以形成安全产品防护能力。安全防护产品规则版本号如下：&lt;/p&gt;    &lt;div&gt;      &lt;img alt="" height="472" src="http://blog.nsfocus.net/wp-content/uploads/2021/12/image-32-1024x472.png" width="1024"&gt;&lt;/img&gt;&lt;/div&gt;    &lt;p&gt;产品规则升级的操作步骤详见如下链接：&lt;/p&gt;    &lt;p&gt;IPS：https://mp.weixin.qq.com/s/DxQ3aaap8aujqZf-3VbNJg&lt;/p&gt;    &lt;p&gt;WAF：https://mp.weixin.qq.com/s/7F8WCzWsuJ5T2E9e01wNog&lt;/p&gt;    &lt;h3&gt;4.3 临时防护措施&lt;/h3&gt;    &lt;p&gt;若相关用户暂时无法进行升级操作，可先用下列措施进行临时缓解：&lt;/p&gt;    &lt;p&gt;1、添加jvm启动参数:-Dlog4j2.formatMsgNoLookups=true&lt;/p&gt;    &lt;div&gt;      &lt;img alt="" height="41" src="http://blog.nsfocus.net/wp-content/uploads/2021/12/image-31.png" width="875"&gt;&lt;/img&gt;&lt;/div&gt;    &lt;p&gt;2、在应用classpath下添加log4j2.component.properties配置文件，文件内容为：log4j2.formatMsgNoLookups=true&lt;/p&gt;    &lt;div&gt;      &lt;img alt="" height="302" src="http://blog.nsfocus.net/wp-content/uploads/2021/12/image-30.png" width="875"&gt;&lt;/img&gt;&lt;/div&gt;    &lt;p&gt;3、建议JDK使用11.0.1、8u191、7u201、6u211及以上的高版本&lt;/p&gt;    &lt;p&gt;4、限制受影响应用对外访问互联网，并在边界对dnslog相关域名访问进行检测。&lt;/p&gt;    &lt;p&gt;部分公共dnslog平台如下：&lt;/p&gt;    &lt;p&gt;ceye.io&lt;/p&gt;    &lt;p&gt;dnslog.link&lt;/p&gt;    &lt;p&gt;dnslog.cn&lt;/p&gt;    &lt;p&gt;dnslog.io&lt;/p&gt;    &lt;p&gt;tu4.org&lt;/p&gt;    &lt;p&gt;burpcollaborator.net&lt;/p&gt;    &lt;p&gt;s0x.cn&lt;/p&gt;    &lt;h3&gt;4.4 平台监测&lt;/h3&gt;    &lt;p&gt;绿盟企业安全平台（ESP-H）与绿盟智能安全运营平台（ISOP）已经具备针对此漏洞的检测能力，部署有绿盟科技平台类产品的用户，可实现对漏洞的平台监测能力。&lt;/p&gt;    &lt;table&gt;      &lt;tr&gt;        &lt;td&gt;          &lt;strong&gt;安全平台&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;          &lt;strong&gt;升级包/规则版本号&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;ESP-H（绿盟企业安全平台）          &lt;strong&gt;&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;使用最新规则升级包 vulnDict-2021121001.dat&lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;        &lt;td&gt;ISOP（绿盟智能安全运营平台）          &lt;strong&gt;&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;升级攻击识别规则包至最新 attack_rule.1.0.0.1.1048648.dat&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;    &lt;p&gt;      &lt;strong&gt;声明&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;本安全公告仅用来描述可能存在的安全问题，绿盟科技不为此安全公告提供任何保证或承诺。由于传播、利用此安全公告所提供的信息而造成的任何直接或者间接的后果及损失，均由使用者本人负责，绿盟科技以及安全公告作者不为此承担任何责任。&lt;/p&gt;    &lt;p&gt;绿盟科技拥有对此安全公告的修改和解释权。如欲转载或传播此安全公告，必须保证此安全公告的完整性，包括版权声明等全部内容。未经绿盟科技允许，不得任意修改或者增减此安全公告内容，不得以任何方式将其用于商业目的。&lt;/p&gt;&lt;/div&gt;
    &lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/61950-apache-log4j2-%E4%BB%A3%E7%A0%81</guid>
      <pubDate>Sat, 11 Dec 2021 09:40:45 CST</pubDate>
    </item>
    <item>
      <title>Spring Cloud Alibaba：支持的几种服务消费方式（RestTemplate、WebClient、Feign）_饭团小哥哥iop的博客-CSDN博客</title>
      <link>https://itindex.net/detail/61945-spring-cloud-alibaba</link>
      <description>&lt;div&gt;概述&lt;/div&gt; &lt;div&gt;关于消费者通过Nacos来消费注册的服务时可以使用RestTemplate、WebClient、Feign等方式，他们之间有什么不一样？&lt;/div&gt; &lt;div&gt;  &lt;br /&gt;&lt;/div&gt; &lt;div&gt;使用RestTemplate&lt;/div&gt; &lt;div&gt;RestTemplate来向服务的某个具体实例发起HTTP请求，但是具体的请求路径是通过拼接完成的，对于开发体验并不好。但是，实际上，在Spring Cloud中对RestTemplate做了增强，只需要稍加配置，就能简化之前的调用方式。&lt;/div&gt; &lt;div&gt;  &lt;br /&gt;&lt;/div&gt; &lt;div&gt;@EnableDiscoveryClient&lt;/div&gt; &lt;div&gt;@SpringBootApplication&lt;/div&gt; &lt;div&gt;public class TestApplication {&lt;/div&gt; &lt;div&gt;  &lt;br /&gt;&lt;/div&gt; &lt;div&gt;    public static void main(String[] args) {&lt;/div&gt; &lt;div&gt;        SpringApplication.run(TestApplication.class, args);&lt;/div&gt; &lt;div&gt;    }&lt;/div&gt; &lt;div&gt;  &lt;br /&gt;&lt;/div&gt; &lt;div&gt;    @Slf4j&lt;/div&gt; &lt;div&gt;    @RestController&lt;/div&gt; &lt;div&gt;    static class TestController {&lt;/div&gt; &lt;div&gt;  &lt;br /&gt;&lt;/div&gt; &lt;div&gt;        @Autowired&lt;/div&gt; &lt;div&gt;        RestTemplate restTemplate;&lt;/div&gt; &lt;div&gt;  &lt;br /&gt;&lt;/div&gt; &lt;div&gt;        @GetMapping(&amp;quot;/test&amp;quot;)&lt;/div&gt; &lt;div&gt;        public String test() {&lt;/div&gt; &lt;div&gt;            String result = restTemplate.getForObject(&amp;quot;http://alibaba-nacos-discovery-server/hello?name=didi&amp;quot;, String.class);&lt;/div&gt; &lt;div&gt;            return &amp;quot;Return : &amp;quot; + result;&lt;/div&gt; &lt;div&gt;        }&lt;/div&gt; &lt;div&gt;    }&lt;/div&gt; &lt;div&gt;  &lt;br /&gt;&lt;/div&gt; &lt;div&gt;    @Bean&lt;/div&gt; &lt;div&gt;    @LoadBalanced&lt;/div&gt; &lt;div&gt;    public RestTemplate restTemplate() {&lt;/div&gt; &lt;div&gt;        return new RestTemplate();&lt;/div&gt; &lt;div&gt;    }&lt;/div&gt; &lt;div&gt;  &lt;br /&gt;&lt;/div&gt; &lt;div&gt;}&lt;/div&gt; &lt;div&gt;  &lt;br /&gt;&lt;/div&gt; &lt;div&gt;在定义RestTemplate的时候，增加了@LoadBalanced注解，而在真正调用服务接口的时候，原来host部分是通过手工拼接ip和端口的，直接采用服务名的时候来写请求路径即可&lt;/div&gt; &lt;div&gt;@LoadBalanced : 是在通过注册中心拿到服务提供者应用名，通过负载均衡器选出节点，并替换服务名部分为具体的ip和端口，从而实现基于服务名的负载均衡调用。&lt;/div&gt; &lt;div&gt;  &lt;br /&gt;&lt;/div&gt; &lt;div&gt;使用WebClient&lt;/div&gt; &lt;div&gt;WebClient是Spring 5中最新引入的，可以将其理解为reactive版的RestTemplate。下面举个具体的例子，它将实现与上面RestTemplate一样的请求调用：&lt;/div&gt; &lt;div&gt;  &lt;br /&gt;&lt;/div&gt; &lt;div&gt;@EnableDiscoveryClient&lt;/div&gt; &lt;div&gt;@SpringBootApplication&lt;/div&gt; &lt;div&gt;public class TestApplication {&lt;/div&gt; &lt;div&gt;  &lt;br /&gt;&lt;/div&gt; &lt;div&gt;    public static void main(String[] args) {&lt;/div&gt; &lt;div&gt;        SpringApplication.run(TestApplication.class, args);&lt;/div&gt; &lt;div&gt;    }&lt;/div&gt; &lt;div&gt;  &lt;br /&gt;&lt;/div&gt; &lt;div&gt;    @Slf4j&lt;/div&gt; &lt;div&gt;    @RestController&lt;/div&gt; &lt;div&gt;    static class TestController {&lt;/div&gt; &lt;div&gt;  &lt;br /&gt;&lt;/div&gt; &lt;div&gt;        @Autowired&lt;/div&gt; &lt;div&gt;        private WebClient.Builder webClientBuilder;&lt;/div&gt; &lt;div&gt;  &lt;br /&gt;&lt;/div&gt; &lt;div&gt;        @GetMapping(&amp;quot;/test&amp;quot;)&lt;/div&gt; &lt;div&gt;        public Mono&amp;lt;String&amp;gt; test() {&lt;/div&gt; &lt;div&gt;            Mono&amp;lt;String&amp;gt; result = webClientBuilder.build()&lt;/div&gt; &lt;div&gt;                    .get()&lt;/div&gt; &lt;div&gt;                    .uri(&amp;quot;http://alibaba-nacos-discovery-server/hello?name=didi&amp;quot;)&lt;/div&gt; &lt;div&gt;                    .retrieve()&lt;/div&gt; &lt;div&gt;                    .bodyToMono(String.class);&lt;/div&gt; &lt;div&gt;            return result;&lt;/div&gt; &lt;div&gt;        }&lt;/div&gt; &lt;div&gt;    }&lt;/div&gt; &lt;div&gt;  &lt;br /&gt;&lt;/div&gt; &lt;div&gt;    @Bean&lt;/div&gt; &lt;div&gt;    @LoadBalanced&lt;/div&gt; &lt;div&gt;    public WebClient.Builder loadBalancedWebClientBuilder() {&lt;/div&gt; &lt;div&gt;        return WebClient.builder();&lt;/div&gt; &lt;div&gt;    }&lt;/div&gt; &lt;div&gt;  &lt;br /&gt;&lt;/div&gt; &lt;div&gt;}&lt;/div&gt; &lt;div&gt;  &lt;br /&gt;&lt;/div&gt; &lt;div&gt;在定义WebClient.Builder的时候，也增加了@LoadBalanced注解，其原理与之前的RestTemplate时一样的。&lt;/div&gt; &lt;div&gt;  &lt;br /&gt;&lt;/div&gt; &lt;div&gt;使用Feign&lt;/div&gt; &lt;div&gt;第一步：在pom.xml中增加openfeign的依赖：&lt;/div&gt; &lt;div&gt;  &lt;br /&gt;&lt;/div&gt; &lt;div&gt;&amp;lt;dependency&amp;gt;&lt;/div&gt; &lt;div&gt;    &amp;lt;groupId&amp;gt;org.springframework.cloud&amp;lt;/groupId&amp;gt;&lt;/div&gt; &lt;div&gt;    &amp;lt;artifactId&amp;gt;spring-cloud-starter-openfeign&amp;lt;/artifactId&amp;gt;&lt;/div&gt; &lt;div&gt;&amp;lt;/dependency&amp;gt;&lt;/div&gt; &lt;div&gt;  &lt;br /&gt;&lt;/div&gt; &lt;div&gt;  &lt;br /&gt;&lt;/div&gt; &lt;div&gt;第二步：定义Feign客户端和使用Feign客户端：&lt;/div&gt; &lt;div&gt;  &lt;br /&gt;&lt;/div&gt; &lt;div&gt;@EnableDiscoveryClient&lt;/div&gt; &lt;div&gt;@SpringBootApplication&lt;/div&gt; &lt;div&gt;@EnableFeignClients //开启扫描Spring Cloud Feign客户端的功能&lt;/div&gt; &lt;div&gt;public class TestApplication {&lt;/div&gt; &lt;div&gt;  &lt;br /&gt;&lt;/div&gt; &lt;div&gt;    public static void main(String[] args) {&lt;/div&gt; &lt;div&gt;        SpringApplication.run(TestApplication.class, args);&lt;/div&gt; &lt;div&gt;    }&lt;/div&gt; &lt;div&gt;  &lt;br /&gt;&lt;/div&gt; &lt;div&gt;    @Slf4j&lt;/div&gt; &lt;div&gt;    @RestController&lt;/div&gt; &lt;div&gt;    static class TestController {&lt;/div&gt; &lt;div&gt;  &lt;br /&gt;&lt;/div&gt; &lt;div&gt;        @Autowired&lt;/div&gt; &lt;div&gt;        Client client;&lt;/div&gt; &lt;div&gt;  &lt;br /&gt;&lt;/div&gt; &lt;div&gt;        @GetMapping(&amp;quot;/test&amp;quot;)&lt;/div&gt; &lt;div&gt;        public String test() {&lt;/div&gt; &lt;div&gt;            String result = client.hello(&amp;quot;didi&amp;quot;);&lt;/div&gt; &lt;div&gt;            return &amp;quot;Return : &amp;quot; + result;&lt;/div&gt; &lt;div&gt;        }&lt;/div&gt; &lt;div&gt;    }&lt;/div&gt; &lt;div&gt;  &lt;br /&gt;&lt;/div&gt; &lt;div&gt;  &lt;br /&gt;&lt;/div&gt; &lt;div&gt;    @FeignClient(&amp;quot;alibaba-nacos-discovery-server&amp;quot;) //指定这个接口所要调用的服务名称，接口中定义的各个函数使用Spring MVC的注解就可以来绑定服务提供方的REST接口&lt;/div&gt; &lt;div&gt;    interface Client {&lt;/div&gt; &lt;div&gt;  &lt;br /&gt;&lt;/div&gt; &lt;div&gt;        @GetMapping(&amp;quot;/hello&amp;quot;)&lt;/div&gt; &lt;div&gt;        String hello(@RequestParam(name = &amp;quot;name&amp;quot;) String name);&lt;/div&gt; &lt;div&gt;  &lt;br /&gt;&lt;/div&gt; &lt;div&gt;    }&lt;/div&gt; &lt;div&gt;  &lt;br /&gt;&lt;/div&gt; &lt;div&gt;}&lt;/div&gt; &lt;div&gt;  &lt;br /&gt;&lt;/div&gt; &lt;div&gt;  &lt;br /&gt;&lt;/div&gt; &lt;div&gt;  &lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/61945-spring-cloud-alibaba</guid>
      <pubDate>Thu, 09 Dec 2021 17:46:02 CST</pubDate>
    </item>
    <item>
      <title>学习 kubernetes 的10个技巧或建议_科技D人生-CSDN博客</title>
      <link>https://itindex.net/detail/61944-%E5%AD%A6%E4%B9%A0-kubernetes-%E6%8A%80%E5%B7%A7</link>
      <description>&lt;div&gt;    &lt;h2&gt;      &lt;strong&gt;一、学 GO 语言&lt;/strong&gt;&lt;/h2&gt;    &lt;p&gt;Kubernetes是基于 GO 编写的，所有的组件都是基于 GO 编写的，kubernetes甚至使用GO编写了一个客户端。学习使用 GO 语言编写的 Kubernetes 客户端并在 Kubernetes 中使用它，这是我对所以使用 Kubernetes 集群的朋友提出的最大的建议。&lt;/p&gt;    &lt;h2&gt;      &lt;strong&gt;二、使用探针来检测应用的状态&lt;/strong&gt;&lt;/h2&gt;    &lt;p&gt;在Kubernetes中支持配置探针。kubelet使用探针来确定pod和应用程序是否健康。这里提供了两种类型来实现这一功能，Readiness探针和Liveiness探针。Readiness探针用于确定容器何时准备好接收流量。Liveiness探针用于确定容器是健康的还是需要重新启动。在deployment 的yaml中，可以直接定义Readiness 探针和Liveiness探针，还可以设置超时、重试和延迟等参数。&lt;/p&gt;    &lt;h2&gt;      &lt;strong&gt;三、充分利用Label标签&lt;/strong&gt;&lt;/h2&gt;    &lt;p&gt;标签是Kubernetes的基础配置之一。它允许进群内资源与资源之间松散耦合，还允许基于标签进行查询。你甚至可以使用Kubernetes go客户端，根据标签查看事件。你几乎可以使用标签做任何事情，一个典型的例子是是同一个集群中存在多个环境。假设开发和QA使用相同的集群。这意味着你的集群可能同时进行QA和开发。要以一种简单的方式实现这一点，你必须使用服务对象，一个服务对象在app上执行标签select: app-a以及environment: dev，另一个服务对象在app上打上:app-a标签，但将环境从dev切换到QA。这将为您提供两个相同的应用程序，每个应用程序具有不同的端点，允许同时进行测试。&lt;/p&gt;    &lt;h2&gt;      &lt;strong&gt;四、随时记得回收废弃的资源&lt;/strong&gt;&lt;/h2&gt;    &lt;p&gt;Kubernetes是一个非常强大的系统，但是就像任何系统一样，它也会出现阻塞。只有一个不连接其他任何服务的服务才不会让系统陷入停滞。当kubernetes规模较小时，几台或者几十台，可能不会有任何问题。但如果把服务扩大到上万，kubelet就会可是出现阻塞。因为Kubelet不仅会对你发出的指令进行校验，同时还要做内部检查。因此，切记，从现在开始，养成习惯。如果你需要删除deployment(或相关的任何内容)，请确保用它清理了所有其他内容，比如service，volume等等，避免日后影响kubelet的查询效率。&lt;/p&gt;    &lt;h2&gt;      &lt;strong&gt;五、充分利用PodDisruptionBudget控制器&lt;/strong&gt;&lt;/h2&gt;    &lt;p&gt;如何保证在kubernetes集群中的应用程序总能正常运行?答案是使用PodDisruptionBudget控制器。在进行kubectl drain操作时，kubernetes会根据PodDisruptionBudget控制器判断应用POD集群数量，进而保证在业务不中断或业务SLA不降级的情况下进行应用POD销毁。PDB(PodDisruptionBudget)应该放在每个拥有一个以上实例的deployment上。我们可以使用简单yaml为集群创建PDB，并使用标签选择器确定PDB应该作用在哪些带有标签的资源上。注意:PDB只考虑主动中断，硬件故障之类的情况不在PDB考虑范围内。PDB可以参考如下例子：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;apiVersion: policy/v1beta1 
 kind: PodDisruptionBudget 
 metadata: 
 name: app-a-pdb 
 spec: 
 minAvailable: 2 
 selector: 
 matchLabels: 
 app: app-a&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;在众多配置中，我们最需要关注两个选项是matchlabel和minAvailable部分。匹配标签是kubernetes查看部署是否附加到PDB。例如:如果我有一个带有标签app: app-a的部署和一个带有标签app: app-b的部署，那么示例PDB将只应用于第一个部署。minAvailable会在kubernetes在执行类似 kubectl drain      &lt;a href="https://www.zhihu.com/search?q=kubectl+drain&amp;search_source=Entity&amp;hybrid_search_source=Entity&amp;hybrid_search_extra=%7B%22sourceType%22%3A%22article%22%2C%22sourceId%22%3A81666500%7D" title=""&gt;&lt;/a&gt;的操作时起作用。假设app-a正在节点1上运行，如果在节点1上执行drain，那么它将只驱逐app-a，即当前至少有2个app在运行。这让你可以控制在给定时间需要运行多少实例。&lt;/p&gt;    &lt;h2&gt;      &lt;strong&gt;六、使用Bash完成kubectl命令&lt;/strong&gt;&lt;/h2&gt;    &lt;p&gt;这可能是最简单也是使用Kubernetes时最有帮助的方法之一。要添加自动完成(如果使用bash)，只需运行以下命令:&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;echo “source &amp;lt;(kubectl completion bash)” &amp;gt;&amp;gt; ~/.bashrc&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;这将在.bashrc中添加自动完成功能，这样无论何时打开shell，它都会启用它。你将会发现使用自动补全功能对于输入长指令来说是尤为方便的，尤其是当需要指定命名空间时。&lt;/p&gt;    &lt;h1&gt;      &lt;strong&gt;七、向命名空间添加默认内存限制和cpu限制&lt;/strong&gt;&lt;/h1&gt;    &lt;p&gt;人们总会犯错，这是常有的事。如果有人编写了一个应用程序，比方说，每秒打开一个数据库的连接，但是从来没有关闭它，这时就会导致在集群上的应用程序中出现内存泄漏。如果将它们部署到没有设置限制的集群中，则可能导致节点崩溃。为了防止这种情况，Kubernetes允许根据每个命名空间设置默认限制。要做到这一点，只需创建一个yaml来限制范围并将其应用于这个命名空间。下面是yaml的一个例子：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;apiVersion: v1 
 kind: LimitRange 
 metadata: 
 name: mem-limit-range 
 spec: 
 limits: 
 - default: 
 memory: 512Mi 
 defaultRequest: 
 memory: 256Mi 
 type: Container&lt;/code&gt;&lt;/pre&gt;    &lt;h1&gt;八、      &lt;strong&gt;用Kubelet辅助清理docker镜像&lt;/strong&gt;&lt;/h1&gt;    &lt;p&gt;kubelet默认情况下已经做到了这一点。如果在启动kubelet时没有设置任何标志，那么当var/lib/docker达到90%的容量时，它将启动垃圾收集。这一功能非常贴心，但请注意，kubelet并没有为node节点设置默认阈值(在Kubernetes 1.7之前)。试想这种情况，你的/var/lib/docker可能只占用了50%的磁盘空间，但此时全部的物理机磁盘空间已经被占满。这会给你的容器服务带来很多问题。如果您目前正在使用的kubelet版本是1.4-1.6，那么你必须显式为kubelet添加如下标志。&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;--eviction-hard=memory.available&amp;lt;100Mi,nodefs.available&amp;lt;10%,nodefs.inodesFree&amp;lt;5%&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;这些配置在1.7或更高版本时是默认配置项。1.6版本默认情况下不监视 node 节点的资源利用率，因此添加该标志将解决这个问题。&lt;/p&gt;    &lt;h1&gt;      &lt;strong&gt;九、Minikube ——迷你但功能强大&lt;/strong&gt;&lt;/h1&gt;    &lt;p&gt;Minikube绝对是本地运行Kubernetes集群最简单的方法了。一旦一切都安装好了，简单的命令就能运行它。&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;minikube start&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;这时我们将在本地运行一个 K8S 集群。当你想要在本地构建一个应用程序并在本地运行它时，这是有个技巧需要注意。如果你没有运行其他命令，当你执行docker build时，仍然会在物理机上构建一个映像。要让你的docker build将镜像push到本地kubernetes集群，你需要使用以下命令:&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;eval $(minikube docker-env)&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;这能让你在本地kubernetes集群上构建应用程序。&lt;/p&gt;    &lt;h1&gt;      &lt;strong&gt;十、不要把kubectl权限开放给所有人&lt;/strong&gt;&lt;/h1&gt;    &lt;p&gt;这可能说起来很简单，但是当多个团队部署应用到一个 kubernetes 集群时，情况就可能变得很复杂。切记不要把 kubectl 权限开放给每个人。个人建议是，根据命名空间来区分隔离每个团队，然后使用RBAC策略只允许各自团队访问各自的命名空间。如果我们把kubectl权限开放给每个人，那么在pod级上进行读取、创建和删除访问时，可能让人抓狂，因为误操作的情况会经常发生。为此，我们应该只允许管理员有权访问，从而将管理集群和部署集群的人员权限区分开。&lt;/p&gt;&lt;/div&gt;
    &lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/61944-%E5%AD%A6%E4%B9%A0-kubernetes-%E6%8A%80%E5%B7%A7</guid>
      <pubDate>Thu, 09 Dec 2021 14:11:14 CST</pubDate>
    </item>
    <item>
      <title>千万不要用新技术重新开发一次啊_阿朱=行业趋势+开发管理+架构-CSDN博客</title>
      <link>https://itindex.net/detail/61932-%E5%8D%83%E4%B8%87-%E6%8A%80%E6%9C%AF-%E5%BC%80%E5%8F%91</link>
      <description>&lt;div&gt;    &lt;p&gt;      &lt;strong&gt;（1）在基础设施上做事&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;我个人有个洞察：2023年，中国云计算技术开始成熟，可依赖使用了。也就是说你过去是买它的云服务器，然后在服务器里安装自己的东西。但2023年以后，你不需要这么搞了，它上面有啥数据库&amp;amp;数据湖仓、中间件、运维&amp;amp;安全等等你都可以直接使用了，你不需要为你的应用基础做思考，你只关注你的应用就行了。      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;也就是说，你以后的工作基础是在以下这些基础设施之上工作的：&lt;/p&gt;    &lt;p&gt;1、应用基础设施层：&lt;/p&gt;    &lt;p&gt;电子签章、在线支付、电子发票、电子档案、银企联云、税企联云；&lt;/p&gt;    &lt;p&gt;      &lt;br /&gt;多端协同门户、统一身份认证管理、审批工作流引擎、IM消息&lt;/p&gt;    &lt;p&gt;低代码开发平台、RPA、Open API开放平台、应用商店      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;2、中间件层：&lt;/p&gt;    &lt;p&gt;多媒体处理中间件服务：音视频处理、视频直播中间件、云呼叫中心VOIP...      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;AI处理服务：视觉识别、OCR识别；语音识别；NLP；数据挖掘      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;IoT处理服务：IoT接入平台      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;3、数据层：&lt;/p&gt;    &lt;p&gt;NewSQL、NoSQL；主数据管理；数据仓库；数字孪生、报表图表      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;4、IaaS层：      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;IaaS云原生（容器、CI/CD、多中心部署/多云部署、灰度发布）      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;Devops运维、安全&lt;/p&gt;    &lt;p&gt;我看现在政府、央企大型国企，都在建设自己的政务云、国资云，而且都先从IaaS云原生开始建起，往上搭大数据平台，再搭企业协同平台，接下来才是在这个基础之上一块块搭应用。&lt;/p&gt;    &lt;p&gt;你想想你如果在这样的基础设施之上做应用，你会怎么做应用？&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;（2）应用生态合作&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;即使你做应用，我也建议你不要自己全干应用，而是分层找生态合作。&lt;/p&gt;    &lt;p&gt;1、个性化应用层：找外包开发公司即可。尤其是在上述的基础设施之上开发，比过去容易的多      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;2、行业业务应用层：找行业ISV即可，他们做的行业业务应用，挺专业      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;3、价值链应用：&lt;/p&gt;    &lt;p&gt;研发设计管理-供应链管理-生产制造管理-销售管理-售后管理，这条价值链的应用找ERP厂商即可。      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;但研发设计工具、供应链在线采购交易、生产制造控制、营销与销售、售后维修维保，这条价值链应用，你得找不同的专业厂商来搞，这不是管理，这是真正拿工具来开展业务，没这么工具，业务都开展不了。这是很多人分不清业务工具和管控工具的。&lt;/p&gt;    &lt;p&gt;4、职能应用：&lt;/p&gt;    &lt;p&gt;财务、法务、人力属于职能应用。但人力也有人力管理和人力在线服务两种类别，如招聘管理是人力管理，但招聘本身是人力在线服务。学习管理系统是人力管理，但在线学习平台/知识付费平台是人力在线服务。      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;企业支付管理这是很多人不熟悉的。它有很多分支，如企业营销物料采购（营销部是Onwer、企业采购部是执行或管控）、企业MRO易耗品采购（生产资料部是Onwer、企业采购部是执行或管控）、员工商旅采购（行政部是Onwer、企业采购部或财务部是执行或管控）、员工福利采购（行政部是Onwer、企业采购部或行政部是执行或管控）、临时用工采购（人力部是Onwer、企业采购部是执行或管控）。这么多分枝，估计你得寻找不同的供应商采购一一针对性搞定。&lt;/p&gt;    &lt;p&gt;不管是财务、人力，都直接找最专业的厂商分别搞定即可。&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;（3）应用分类处理&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;Gartner在2015年提出过敏态和稳态两种应用分类。&lt;/p&gt;    &lt;p&gt;      &lt;br /&gt;我个人理解，敏态偏外部开放性协作、快聚快散，而稳态偏内部封闭管控。用稳态架构做敏态、用敏态架构做稳态，都是找死。&lt;/p&gt;    &lt;p&gt;即使是过去做企业内部管控系统，我过去都是应用分类处理，如&lt;/p&gt;    &lt;p&gt;信息记录类应用&lt;/p&gt;    &lt;p&gt;信息追溯类应用&lt;/p&gt;    &lt;p&gt;高性能高精确计费收费交易类应用&lt;/p&gt;    &lt;p&gt;流程勾稽关联协作类应用&lt;/p&gt;    &lt;p&gt;预测推理、洞察决策类应用      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;我过去都是不同分类的应用，都有专门的架构设计。      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;（4）技术驱动产品设计&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;从2015年以来，出现了许多新技术。我们可以基于这些新技术，重新考虑应用应该如何设计。      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;一、数据采集环节&lt;/p&gt;    &lt;p&gt;1、优先用AIoT技术做数据自动采集&lt;/p&gt;    &lt;p&gt;2、其次用客户在线自助、上下游在线协同做数据自动采集&lt;/p&gt;    &lt;p&gt;3、最后不得不员工录入时，优先用移动App进行限制性录入&lt;/p&gt;    &lt;p&gt;4、最后不得不员工录入时，其次分场景分角色分工作流程阶段进行分段录入&lt;/p&gt;    &lt;p&gt;二、业务过程处理环节&lt;/p&gt;    &lt;p&gt;1、业务流程，主要通过数智化技术进行自动的、智能的：计划编制、资源调度、消息推送&lt;/p&gt;    &lt;p&gt;2、优先用专业的单点应用，单点应用之间用协同平台、RPA平台、OpenAPI平台联动在一起&lt;/p&gt;    &lt;p&gt;3、业务追溯，可尝试使用区块链技术      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;三、数据输出环节&lt;/p&gt;    &lt;p&gt;可以使用搜索、推荐技术，而非过去的查询方法&lt;/p&gt;    &lt;p&gt;可以使用人工智能的问答会话技术、Data2Text技术，而非过去的查询技术&lt;/p&gt;    &lt;p&gt;可以使用数字孪生/BIM/GIS技术，而非过去的报表和图表&lt;/p&gt;    &lt;p&gt;四、我建议做好用户体验全程管理&lt;/p&gt;    &lt;p&gt;如用户画像、用户行为跟踪、AB测试，根据用户的行为观察来持续改进应用。而非自己拍脑门、做需求调研。&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;（5）模块分离&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;80%人用的20%功能，持续优化。&lt;/p&gt;    &lt;p&gt;20%人用的各色特殊80%碎片功能，全部剥离到应用商店&lt;/p&gt;    &lt;p&gt;这是以后做应用的设计原则。&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;（6）交付简化&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;企业软件交付是个最头疼的事情，经常涉及的配置有：主数据、业务参数、权限/流程、模板。&lt;/p&gt;    &lt;p&gt;一、主数据&lt;/p&gt;    &lt;p&gt;采取产业主数据服务，而非自己录入主数据&lt;/p&gt;    &lt;p&gt;在主数据平台维护信息及标签图谱，而非在各个基础数据维护模块维护主数据&lt;/p&gt;    &lt;p&gt;二、模板&lt;/p&gt;    &lt;p&gt;采取模板应用商店+模板配置。我举个例子，如各种报销单，这典型是模板要搞定的事，而非系统要搞定的事&lt;/p&gt;    &lt;p&gt;三、功能&lt;/p&gt;    &lt;p&gt;采取插件应用商店+插件配置。我举个例子，如各种营销促销玩法，这典型是插件要搞定d 事，而非系统要搞定的事&lt;/p&gt;    &lt;p&gt;四、权限&lt;/p&gt;    &lt;p&gt;采取人员-岗位标签方式、并且内置岗位权限模板，而不是给每个员工设置详细权限&lt;/p&gt;    &lt;p&gt;   &lt;br /&gt;&lt;/p&gt;&lt;/div&gt;
    &lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/61932-%E5%8D%83%E4%B8%87-%E6%8A%80%E6%9C%AF-%E5%BC%80%E5%8F%91</guid>
      <pubDate>Sun, 05 Dec 2021 08:02:02 CST</pubDate>
    </item>
    <item>
      <title>spring cloud kubernetes在pod模式下服务调用源码解析_水中加点糖-CSDN博客</title>
      <link>https://itindex.net/detail/61925-spring-cloud-kubernetes</link>
      <description>&lt;div&gt;    &lt;p&gt;之所以只看pod模式下的服务调用链路，是因为在service模式下不会走缓存，效率低，并且负载均衡模式不能由spring cloud框架所控制，不太灵活&lt;/p&gt;    &lt;hr&gt;&lt;/hr&gt;    &lt;p&gt;需要关注的几个类：&lt;/p&gt;    &lt;p&gt;DiscoveryClient&lt;/p&gt;    &lt;p&gt;org.springframework.cloud.loadbalancer.blocking.client.BlockingLoadBalancerClient&lt;/p&gt;    &lt;p&gt;org.springframework.cloud.loadbalancer.blocking.client.BlockingLoadBalancerClient#choose(java.lang.String, org.springframework.cloud.client.loadbalancer.Request)&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;public&amp;lt;T&amp;gt;ServiceInstancechoose(StringserviceId,Request&amp;lt;T&amp;gt;request){ReactiveLoadBalancer&amp;lt;ServiceInstance&amp;gt;loadBalancer=this.loadBalancerClientFactory.getInstance(serviceId);if(loadBalancer==null){returnnull;}else{Response&amp;lt;ServiceInstance&amp;gt;loadBalancerResponse=(Response)Mono.from(loadBalancer.choose(request)).block();returnloadBalancerResponse==null?null:(ServiceInstance)loadBalancerResponse.getServer();}}&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory#getInstance&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;publicReactiveLoadBalancer&amp;lt;ServiceInstance&amp;gt;getInstance(StringserviceId){return(ReactiveLoadBalancer)this.getInstance(serviceId,ReactorServiceInstanceLoadBalancer.class);}&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;feign调用      &lt;br /&gt;implements ReactorServiceInstanceLoadBalancer&lt;/p&gt;    &lt;p&gt;feign调用时用的org.springframework.cloud.openfeign.loadbalancer.FeignBlockingLoadBalancerClient中的execute方法调用的。      &lt;br /&gt;其中获取服务列表的代码为：ServiceInstance instance = loadBalancerClient.choose(serviceId, lbRequest);      &lt;br /&gt;也就是org.springframework.cloud.loadbalancer.blocking.client.BlockingLoadBalancerClient#choose(java.lang.String, org.springframework.cloud.client.loadbalancer.Request)这个方法,其中用的此方法：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;ReactiveLoadBalancer&amp;lt;ServiceInstance&amp;gt; loadBalancer = this.loadBalancerClientFactory.getInstance(serviceId);&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;其中的loadBalancerClientFactory字段是在BlockingLoadBalancerClient初始化时设置的。需要看一下loadBalancerClientFactory传入的地方。      &lt;br /&gt;也就是org.springframework.cloud.openfeign.loadbalancer.FeignBlockingLoadBalancerClient类初始化时LoadBalancerClient注入进去的是哪个类。      &lt;br /&gt;这个类的属于commons的包里，看一下其中loadbalancer中关于初始化的地方。&lt;/p&gt;    &lt;p&gt;代码在此处:      &lt;br /&gt;org.springframework.cloud.loadbalancer.config.BlockingLoadBalancerClientAutoConfiguration#blockingLoadBalancerClient&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;@Bean
	@ConditionalOnBean(LoadBalancerClientFactory.class)
	@ConditionalOnMissingBean
	public LoadBalancerClient blockingLoadBalancerClient(LoadBalancerClientFactory loadBalancerClientFactory) {
		return new BlockingLoadBalancerClient(loadBalancerClientFactory);
	}&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;这里注入了一个LoadBalancerClientFactory，这经的注入代码在此处:org.springframework.cloud.loadbalancer.config.LoadBalancerAutoConfiguration#loadBalancerClientFactory&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;@ConditionalOnMissingBean
	@Bean
	public LoadBalancerClientFactory loadBalancerClientFactory(LoadBalancerClientsProperties properties) {
		LoadBalancerClientFactory clientFactory = new LoadBalancerClientFactory(properties);
		clientFactory.setConfigurations(this.configurations.getIfAvailable(Collections::emptyList));
		return clientFactory;
	}&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;这个factory的代码中的getInstance方法：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;@Override
	public ReactiveLoadBalancer&amp;lt;ServiceInstance&amp;gt; getInstance(String serviceId) {
		return getInstance(serviceId, ReactorServiceInstanceLoadBalancer.class);
	}&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;获取的是ReactorServiceInstanceLoadBalancer.class&lt;/p&gt;    &lt;p&gt;则需要找到ReactorServiceInstanceLoadBalancer的实现类:      &lt;br /&gt;org.springframework.cloud.loadbalancer.annotation.LoadBalancerClientConfiguration#reactorServiceInstanceLoadBalancer&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;@Bean
	@ConditionalOnMissingBean
	public ReactorLoadBalancer&amp;lt;ServiceInstance&amp;gt; reactorServiceInstanceLoadBalancer(Environment environment,
			LoadBalancerClientFactory loadBalancerClientFactory) {
		String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
		return new RoundRobinLoadBalancer(
				loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);
	}&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;其中用懒加载获取的ServiceInstanceListSupplier的bean。&lt;/p&gt;    &lt;p&gt;那么如果是service模式下,其中的ServiceInstanceListSupplier的实现类为：org.springframework.cloud.kubernetes.client.loadbalancer.KubernetesClientServicesListSupplier，其初始化代码为：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;@Bean
	@ConditionalOnProperty(name = &amp;quot;spring.cloud.kubernetes.loadbalancer.mode&amp;quot;, havingValue = &amp;quot;SERVICE&amp;quot;)
	KubernetesServicesListSupplier kubernetesServicesListSupplier(Environment environment, CoreV1Api coreV1Api,
			KubernetesClientServiceInstanceMapper mapper, KubernetesDiscoveryProperties discoveryProperties,
			KubernetesNamespaceProvider kubernetesNamespaceProvider) {
		return new KubernetesClientServicesListSupplier(environment, mapper, discoveryProperties, coreV1Api,
				kubernetesNamespaceProvider);
	}&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;如果是pod模式，则使用的默认的初始化代码:org.springframework.cloud.loadbalancer.annotation.LoadBalancerClientConfiguration.ReactiveSupportConfiguration#discoveryClientServiceInstanceListSupplier      &lt;br /&gt;其代码为：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;@Bean
		@ConditionalOnBean(ReactiveDiscoveryClient.class)
		@ConditionalOnMissingBean
		@Conditional(DefaultConfigurationCondition.class)
		public ServiceInstanceListSupplier discoveryClientServiceInstanceListSupplier(
				ConfigurableApplicationContext context) {
			return ServiceInstanceListSupplier.builder().withDiscoveryClient().withCaching().build(context);
		}&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;其中withDiscoveryClient方法：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;/**
	 * Sets a {@link ReactiveDiscoveryClient}-based
	 * {@link DiscoveryClientServiceInstanceListSupplier} as a base
	 * {@link ServiceInstanceListSupplier} in the hierarchy.
	 * @return the {@link ServiceInstanceListSupplierBuilder} object
	 */
	public ServiceInstanceListSupplierBuilder withDiscoveryClient() {
		if (baseCreator != null &amp;amp;&amp;amp; LOG.isWarnEnabled()) {
			LOG.warn(&amp;quot;Overriding a previously set baseCreator with a ReactiveDiscoveryClient baseCreator.&amp;quot;);
		}
		this.baseCreator = context -&amp;gt; {
			ReactiveDiscoveryClient discoveryClient = context.getBean(ReactiveDiscoveryClient.class);

			return new DiscoveryClientServiceInstanceListSupplier(discoveryClient, context.getEnvironment());
		};
		return this;
	}&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;其中ReactiveDiscoveryClient的bean为：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;@Bean
	@ConditionalOnMissingBean
	public KubernetesInformerReactiveDiscoveryClient kubernetesReactiveDiscoveryClient(
			KubernetesNamespaceProvider kubernetesNamespaceProvider, SharedInformerFactory sharedInformerFactory,
			Lister&amp;lt;V1Service&amp;gt; serviceLister, Lister&amp;lt;V1Endpoints&amp;gt; endpointsLister,
			SharedInformer&amp;lt;V1Service&amp;gt; serviceInformer, SharedInformer&amp;lt;V1Endpoints&amp;gt; endpointsInformer,
			KubernetesDiscoveryProperties properties) {
		return new KubernetesInformerReactiveDiscoveryClient(kubernetesNamespaceProvider, sharedInformerFactory,
				serviceLister, endpointsLister, serviceInformer, endpointsInformer, properties);
	}&lt;/code&gt;&lt;/pre&gt;    &lt;blockquote&gt;      &lt;p&gt;public class KubernetesInformerReactiveDiscoveryClient implements ReactiveDiscoveryClient&lt;/p&gt;&lt;/blockquote&gt;    &lt;p&gt;所以由此可以看出，k8s中pod模式下用的是KubernetesInformerReactiveDiscoveryClient。      &lt;br /&gt;所以如果想要到达k8s模式下的个性化定制，可以参考官方文档https://docs.spring.io/spring-cloud-commons/docs/current/reference/html/#hints-based-loadbalancing，      &lt;br /&gt;参考代码：      &lt;br /&gt;org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplierBuilder#withHints&lt;/p&gt;&lt;/div&gt;
    &lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/61925-spring-cloud-kubernetes</guid>
      <pubDate>Wed, 01 Dec 2021 07:34:35 CST</pubDate>
    </item>
    <item>
      <title>基于 Istio 的全链路灰度方案探索和实践 - 阿里巴巴云原生 - 博客园</title>
      <link>https://itindex.net/detail/61878-istio-%E7%81%B0%E5%BA%A6-%E5%AE%9E%E8%B7%B5</link>
      <description>&lt;div&gt;    &lt;p&gt;      &lt;em&gt;作者｜曾宇星（宇曾）&lt;/em&gt;      &lt;br /&gt;      &lt;em&gt;审核&amp;amp;校对：曾宇星（宇曾）&lt;/em&gt;      &lt;br /&gt;      &lt;em&gt;编辑&amp;amp;排版：雯燕&lt;/em&gt;&lt;/p&gt;    &lt;h1&gt;背景&lt;/h1&gt;    &lt;p&gt;微服务软件架构下，业务新功能上线前搭建完整的一套测试系统进行验证是相当费人费时的事，随着所拆分出微服务数量的不断增大其难度也愈大。这一整套测试系统所需付出的机器成本往往也不低，为了保证应用新版本上线前的功能正确性验证效率，这套系统还必须一直单独维护好。当业务变得庞大且复杂时，往往还得准备多套，这是整个行业共同面临且难解的成本和效率挑战。如果能在同一套生产系统中完成新版本上线前的功能验证的话，所节约的人力和财力是相当可观的。&lt;/p&gt;    &lt;p&gt;除了开发阶段的功能验证，生产环境中引入灰度发布才能更好地控制新版本软件上线的风险和爆炸半径。灰度发布是将具有一定特征或者比例的生产流量分配到需要被验证的服务版本中，以观察新版本上线后的运行状态是否符合预期。&lt;/p&gt;    &lt;p&gt;阿里云 ASM Pro（相关链接请见文末）基于 Service Mesh 所构建的全链路灰度方案，能很好帮助解决以上两个场景的问题。&lt;/p&gt;    &lt;p&gt;ASM Pro 产品功能架构图：&lt;/p&gt;    &lt;p&gt;      &lt;img alt="1.png" src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/bc34227715634cfca7ae4ece81a4386c~tplv-k3u1fbpfcp-zoom-1.image"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;核心能力使用的就是上图扩展的流量打标和按标路由以及流量 Fallback 的能力，下面详细介绍说明。&lt;/p&gt;    &lt;h1&gt;场景说明&lt;/h1&gt;    &lt;p&gt;全链路灰度发布的常见场景如下：&lt;/p&gt;    &lt;p&gt;      &lt;img alt="2.png" src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/20da98e0b1db43019051908e8e915b25~tplv-k3u1fbpfcp-zoom-1.image"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;以 Bookinfo 为例，入口流量会带上期望的 tag 分组，sidecar 通过获取请求上下文（Header 或 Context) 中的期望 tag，将流量路由分发到对应 tag 分组，若对应 tag 分组不存在，默认会 fallback 路由到 base 分组，具体 fallback 策略可配置。接下来详细描述具体的实现细节。&lt;/p&gt;    &lt;p&gt;入口流量的 tag 标签，一般是在网关层面基于类似 tag 插件的方式，将请求流量进行打标。 比如将 userid 处于一定范围的打上代表灰度的 tag，考虑到实际环境网关的选择和实现的多样性，网关这块实现不在本文讨论的范围内。&lt;/p&gt;    &lt;p&gt;下面我们着重讨论基于 ASM Pro 如何做到全链路流量打标和实现全链路灰度。&lt;/p&gt;    &lt;h1&gt;实现原理&lt;/h1&gt;    &lt;p&gt;      &lt;img alt="3.png" src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/afad4ac551844b589df65f5df5b743d6~tplv-k3u1fbpfcp-zoom-1.image"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;Inbound 是指请求发到 App 的入口流量，Outbond 是指 App 向外发起请求的出口流量。&lt;/p&gt;    &lt;p&gt;上图是一个业务应用在开启 mesh 后典型流量路径：业务 App 接收到一个外部请求  p1，接着调用背后所依赖的另一个服务的接口。此时，请求的流量路径是 p1-&amp;gt;p2-&amp;gt;p3-&amp;gt;p4，其中 p2 是 Sidecar 对 p1 的转发，p4 是 Sidecar 对 p3 的转发。为了实现全链路灰度，p3 和 p4 都需要获取到 p1 进来的流量标签，才能将请求路由到标签所对应的后端服务实例，且 p3 和 p4 也要带上同样的标签。关键在于，如何让标签的传递对于应用完全无感，从而实现全链路的标签透传，这是全链路灰度的关键技术。ASM Pro 的实现是基于分布式链路追踪技术（比如，OpenTracing、OpenTelemetry 等）中的 traceId 来实现这一功能。&lt;/p&gt;    &lt;p&gt;在分布式链路追踪技术中，traceId 被用于唯一地标识一个完整的调用链，链路上的每一个应用所发出的扇出（fanout）调用，都会通过分布式链路追踪的 SDK 将源头的 traceId 给带上。ASM Pro 全链路灰度解决方案的实现正是建立在这一分布式应用架构所广泛采纳的实践之上的。&lt;/p&gt;    &lt;p&gt;上图中，Sidecar 本来所看到的 inbound 和 outbound 流量是完全独立的，无法感知两者的对应关系，也不清楚一个 inbound 请求是否导致了多个 outbound 请求的发生。换句话说，图中 p1 和 p3 两个请求之间是否有对应关系 Sidecar 并不知情。&lt;/p&gt;    &lt;p&gt;在 ASM Pro 全链路灰度解决方案中，通过 traceId 将 p1 和 p3 两个请求做关联，具体说来依赖了 Sidecar 中的 x-request-id 这个 trace header。Sidecar 内部维护了一张映射表，其中记录了 traceId 和标签的对应关系。当 Sidecar 收到 p1 请求时，将请求中的 traceId 和标签存储到这张表中。当收到 p3 请求时，从映射表中查询获得 traceId 所对应的标签并将这一标签加入到 p4 请求中，从而实现全链路的打标和按标路由。下图大致示例了这一实现原理。&lt;/p&gt;    &lt;p&gt;      &lt;img alt="4.png" src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/3a461a10645f4fa7ad50f18b139a6471~tplv-k3u1fbpfcp-zoom-1.image"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;换句话说，ASM Pro 的全链路灰度功能需要应用使用分布式链路追踪技术。如果想运用这一技术的应用没有使用分布式链路追踪技术的话不可避免地涉及到一定的改造工作。对于 Java 应用来说，仍可以考虑采用 Java Agent 以 AOP 的方式让业务无需改造地实现 traceId 在 inbound 和 outbound 之间透传。&lt;/p&gt;    &lt;h1&gt;实现流量打标&lt;/h1&gt;    &lt;p&gt;ASM Pro 中引入了全新的 TrafficLabel CRD 用于定义 Sidecar 所需透传的流量标签从哪里获取。下面所例举的 YAML 文件中，定义了流量标签来源和需要将标签存储 OpenTracing 中（具体是 x-trace 头）。其中流量标的名为 trafficLabel，取值依次从 $getContext(x-request-id) 到最后从本地环境的$(localLabel)中获取。&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;apiVersion: istio.alibabacloud.com/v1beta1
kind: TrafficLabel
metadata:
  name: default
spec:
  rules:
  - labels:
      - name: trafficLabel
        valueFrom:
        - $getContext(x-request-id)  //若使用aliyun arms,对应为x-b3-traceid
        - $(localLabel)
    attachTo:
    - opentracing
    # 表示生效的协议，空为都不生效，*为都生效
    protocols: &amp;quot;*&amp;quot;&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;CR 定义包含两块，即标签的获取和存储。&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;获取逻辑：先根据协议上下文或者头（Header 部分）中的定义的字段获取流量标签，如果没有，会根据 traceId 通过 Sidecar 本地记录的 map 获取, 该 map 表中保存了 traceId 对应流量标识的映射。若 map 表中找到对应映射，会将该流量打上对应的流量标，若获取不到，会将流量标取值为本地部署对应环境的 localLabel。localLabel 对应本地部署的关联 label，label 名为 ASM_TRAFFIC_TAG。&lt;/li&gt;&lt;/ul&gt;    &lt;p&gt;本地部署对应环境的标签名为&amp;quot;ASM_TRAFFIC_TAG&amp;quot;，实际部署可以结合 CI/CD 系统来关联。&lt;/p&gt;    &lt;p&gt;      &lt;img alt="5.png" src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/fc42eded4f6447369c25cb99032e3b5f~tplv-k3u1fbpfcp-zoom-1.image"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;存储逻辑：attachTo 指定存储在协议上下文的对应字段，比如 HTTP 对应 Header 字段，Dubbo 对应 rpc context 部分，具体存储到哪一个字段中可配置。&lt;/li&gt;&lt;/ul&gt;    &lt;p&gt;有了TrafficLabel 的定义，我们知道如何将流量打标和传递标签，但光有这个还不足以做到全链路灰度，我们还需要一个可以基于 trafficLabel 流量标识来做路由的功能，也就是“按标路由”，以及路由 fallback 等逻辑，以便当路由的目的地不存在时，可以实现降级的功能。&lt;/p&gt;    &lt;h1&gt;按流量标签路由&lt;/h1&gt;    &lt;p&gt;这一功能的实现扩展了 Istio 的 VirtualService 和 DestinationRule。&lt;/p&gt;    &lt;h3&gt;在 DestinationRule 中定义 Subset&lt;/h3&gt;    &lt;p&gt;自定义分组 subset 对应的是 trafficLabel 的 value&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: myapp
spec:
  host: myapp/*
  subsets:
  - name: myproject            # 项目环境
    labels:
      env: abc
  - name: isolation            # 隔离环境
    labels:
      env: xxx                 # 机器分组
  - name: testing-trunk        # 主干环境
    labels:
      env: yyy
  - name: testing              # 日常环境
    labels:
      env: zzz
---
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: myapp
spec:
  hosts: 
        - myapp/*
  ports:
  - number: 12200
    name: http
    protocol: HTTP
    endpoints:
      - address: 0.0.0.0
        labels:
            env: abc
      - address: 1.1.1.1
        labels:
            env: xxx
      - address: 2.2.2.2
        labels:
            env: zzz
      - address: 3.3.3.3
        labels:
            env: yyy&lt;/code&gt;&lt;/pre&gt;    &lt;p&gt;Subset 支持两种指定形式：&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;labels 用于匹配应用中带特定标记的节点（endpoint）；&lt;/li&gt;      &lt;li&gt;通过 ServiceEntry 用于指定属于特定 subset 的 IP 地址，注意这种方式与labels指定逻辑不同，它们可以不是从注册中心（K8s 或者其他）拿到的地址，直接通过配置的方式指定。适用于 Mock 环境，这个环境下的节点并没有向服务注册中心注册。&lt;/li&gt;&lt;/ul&gt;    &lt;h3&gt;在 VirtualService 中基于 subset&lt;/h3&gt;    &lt;h4&gt;1）全局默认配置&lt;/h4&gt;    &lt;ul&gt;      &lt;li&gt;route 部分可以按顺序指定多个 destination，多个 destination 之间按照 weight 值的比例来分配流量。&lt;/li&gt;      &lt;li&gt;每个 destination 下可以指定 fallback 策略，case 标识在什么情况下执行 fallback，取值：noinstances（无服务资源）、noavailabled（有服务资源但是服务不可用），target 指定 fallback 的目标环境。如果不指定 fallback，则强制在该 destination 的环境下执行。&lt;/li&gt;      &lt;li&gt;按标路由逻辑，我们通过改造 VirtualService，让 subset 支持占位符  $trafficLabel, 该占位符 $trafficLabel 表示从请求流量标中获取目标环境， 对应 TrafficLabel CR 中的定义。&lt;/li&gt;&lt;/ul&gt;    &lt;p&gt;全局默认模式对应泳道，也就是单个环境内封闭，同时指定了环境级别的 fallback 策略。自定义分组 subset 对应的是 trafficLabel 的 value&lt;/p&gt;    &lt;p&gt;配置样例如下：&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: default-route
spec:
  hosts:                     # 对所有应用生效
  - */*
  http:
  - name: default-route
    route:
    - destination:
        subset: $trafficLabel
      weight: 100
      fallback:
         case: noinstances
         target: testing-trunk
    - destination:
            host: */*
        subset: testing-trunk    # 主干环境
      weight: 0
      fallback:
        case: noavailabled
        target: testing
    - destination:
        subset: testing          # 日常环境
      weight: 0
      fallback:
        case: noavailabled
        target: mock
    - destination:
            host: */*
        subset: mock             # Mock中心
       weight: 0&lt;/code&gt;&lt;/pre&gt;    &lt;h4&gt;2）个人开发环境定制&lt;/h4&gt;    &lt;ul&gt;      &lt;li&gt;先打到日常环境，当日常环境没有服务资源时，再打到主干环境。&lt;/li&gt;&lt;/ul&gt;    &lt;pre&gt;      &lt;code&gt;apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: projectx-route
spec:
  hosts:                   # 只对myapp生效
  - myapp/*
  http:
  - name: dev-x-route
    match:
      trafficLabel:
      - exact: dev-x       # dev环境: x
    route:
    - destination:
            host: myapp/*
        subset: testing          # 日常环境
      weight: 100
      fallback:
        case: noinstances
        target: testing-trunk
    - destination:
            host: myapp/*
        subset: testing-trunk    # 主干环境
      weight: 0&lt;/code&gt;&lt;/pre&gt;    &lt;h4&gt;3） 支持权重配置&lt;/h4&gt;    &lt;p&gt;将打了主干环境标并且本机环境是 dev-x 的流量，80% 打到主干环境，20% 打到日常环境。当主干环境没有可用的服务资源时，流量打到日常。&lt;/p&gt;    &lt;p&gt;sourceLabels 为本地 workload 对应的 label&lt;/p&gt;    &lt;pre&gt;      &lt;code&gt;apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: dev-x-route
spec:
  hosts:                   # 对哪些应用生效（不支持多应用配置）
  - myapp/*
  http:
  - name: dev-x-route
    match:
      trafficLabel:
      - exact: testing-trunk # 主干环境标
      sourceLabels:
      - exact: dev-x  # 流量来自某个项目环境
    route:
    - destination:
            host: myapp/*
        subset: testing-trunk # 80%流量打向主干环境
      weight: 80
      fallback:
        case: noavailabled
        target: testing
    - destination：
            host: myapp/*
        subset: testing       # 20%流量打向日常环境
      weight: 20&lt;/code&gt;&lt;/pre&gt;    &lt;h1&gt;按（环境）标路由&lt;/h1&gt;    &lt;p&gt;该方案依赖业务部署应用时带上相关标识（例子中对应 label 为 ASM_TRAFFIC_TAG: xxx），常见为环境标识，标识可以理解是服务部署的相关元信息，这个依赖上游部署系统 CI/CD 系统的串联，大概示意图如下：&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;K8s 场景，通过业务部署时自动带上对应环境/分组 label 标识即可，也就是采用K8s 本身作为元数据管理中心。&lt;/li&gt;      &lt;li&gt;非 K8s 场景，可以通过微服务已集成的服务注册中心或者元数据配置管理服务（metadata server）来集成实现。&lt;/li&gt;&lt;/ul&gt;    &lt;p&gt;      &lt;img alt="6.png" src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/7e6a1236e01e42ca955195684486b3c8~tplv-k3u1fbpfcp-zoom-1.image"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;p&gt;注：ASM Pro 自研开发了ServiceDiretory 组件（可以参看 ASM Pro 产品功能架构图），实现了多注册中心对接以及部署元信息的动态获取；&lt;/p&gt;    &lt;h1&gt;应用场景延伸&lt;/h1&gt;    &lt;p&gt;下面是典型的一个基于流量打标和按标路由实现的多套开发环境治理功能；每个开发者对应的 Dev X 环境只需部署有版本更新的服务即可；如果需要和其他开发者联调，可以通过配置 fallback 将服务请求 fallback 流转到对应开发环境即可。如下图的 Dev Y 环境的B -&amp;gt; Dev X 环境的 C。&lt;/p&gt;    &lt;p&gt;同理，将 Dev X 环境等同于线上灰度版本环境也是可以的，对应可以解决线上环境的全链路灰度发布问题。&lt;/p&gt;    &lt;p&gt;      &lt;img alt="7.png" src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/52cc3dc0d1434dad9c958ccd9ec47e77~tplv-k3u1fbpfcp-zoom-1.image"&gt;&lt;/img&gt;&lt;/p&gt;    &lt;h1&gt;总结&lt;/h1&gt;    &lt;p&gt;本文介绍的基于“流量打标”和“按标路由” 能力是一个通用方案，基于此可以较好地解决测试环境治理、线上全链路灰度发布等相关问题，基于服务网格技术做到与开发语言无关。同时，该方案适应于不同的7层协议，当前已支持 HTTP/gRpc 和 Dubbo 协议。&lt;/p&gt;    &lt;p&gt;对应全链路灰度，其他厂商也有一些方案，对比其他方案 ASM Pro 的解决方案的优点是：&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;支持多语言、多协议。&lt;/li&gt;      &lt;li&gt;统一配置模板 TrafficLabel， 配置简单且灵活，支持多级别的配置（全局、namespace 、pod 级别）。&lt;/li&gt;      &lt;li&gt;支持路由 fallback 实现降级。&lt;/li&gt;&lt;/ul&gt;    &lt;p&gt;基于“流量打标” 和 “按标路由”能力还可以用于其他相关场景：&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;大促前的性能压测。在线上压测的场景中，为了让压测数据和正式的线上数据实现隔离，常用的方法是对于消息队列，缓存，数据库使用影子的方式。这就需要流量打标的技术，通过 tag 区分请求是测试流量还是生产流量。当然，这需要 Sidecar 对中间件比如 Redis、RocketMQ 等进行支持。&lt;/li&gt;      &lt;li&gt;单元化路由。常见的单元化路由场景，可能是需要根据请求流量中的某些元信息比如 uid，然后通过配置得出对应所属的单元。在这个场景中，我们可以通过扩展 TrafficLabel 定义获取“单元标”的函数来给流量打上“单元标”，然后基于“单元标”将流量路由到对应的服务单元。&lt;/li&gt;&lt;/ul&gt;    &lt;p&gt;相关链接：&lt;/p&gt;    &lt;p&gt;1）阿里云 ASM Pro：      &lt;br /&gt;      &lt;a href="https://servicemesh.console.aliyun.com/" target="_blank"&gt;https://servicemesh.console.aliyun.com/&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
    &lt;div&gt; &lt;a href="https://itindex.net/"  title="IT 资讯"&gt;&lt;img src="https://itindex.net/images/iconWarning.gif" title="IT 资讯" border="0"/&gt; &lt;/a&gt;</description>
      <category />
      <guid isPermaLink="true">https://itindex.net/detail/61878-istio-%E7%81%B0%E5%BA%A6-%E5%AE%9E%E8%B7%B5</guid>
      <pubDate>Sun, 07 Nov 2021 07:30:48 CST</pubDate>
    </item>
  </channel>
</rss>

