Congratulations!

[Valid RSS] This is a valid RSS feed.

Recommendations

This feed is valid, but interoperability with the widest range of feed readers could be improved by implementing the following recommendations.

Source: http://itindex.net/feed.jsp

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <?xml-stylesheet href="/rss.xsl" type="text/xsl"?>
  3. <rss version="2.0">
  4.  <channel>
  5.    <title>IT社区推荐资讯 - ITIndex.net</title>
  6.    <link>https://itindex.net/</link>
  7.    <description>IT社区推荐资讯 - ITIndex.net</description>
  8.    <language>zh</language>
  9.    <copyright>https://itindex.net/</copyright>
  10.    <generator>https://itindex.net/</generator>
  11.    <docs>http://backend.userland.com/rss</docs>
  12.    <image>
  13.      <url>https://itindex.net/images/logo.gif</url>
  14.      <title>IT社区推荐资讯 - ITIndex.net</title>
  15.      <link>https://itindex.net/</link>
  16.    </image>
  17.    <item>
  18.      <title>开源大模型Llama 3王者归来!最大底牌4000亿参数,性能直逼GPT-4</title>
  19.      <link>https://itindex.net/detail/62921-%E5%BC%80%E6%BA%90-%E6%A8%A1%E5%9E%8B-llama</link>
  20.      <description>&lt;p&gt;ChatGPT 拉开了大模型竞赛的序幕,Meta 似乎要后来居上了。&lt;/p&gt;&lt;p&gt;本周四,AI 领域迎来重大消息,Meta 正式发布了人们等待已久的开源大模型 Llama 3。&lt;/p&gt;&lt;p&gt;&lt;img data-imgfileid="503431385" data-ratio="1.5636363636363637" data-s="300,640" data-src="https://mmbiz.qpic.cn/sz_mmbiz_gif/KmXPKA19gW9PvzPEMQhGfSIOSSwN4yPqh1yMMh8iayRKcibrNIkjnpf3zkMxB3OnQdwhhDFhqOLSzuTwuEpUhKXQ/640?wx_fmt=gif&amp;from=appmsg" data-type="gif" data-w="275" data-original-style="" data-index="2" src="https://image.jiqizhixin.com/uploads/editor/376afc1a-4e27-465d-896f-a47af32d74ee/640.gif" alt="图片" data-fail="0" class="fr-fic fr-dib" style="width: 400px;"&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;扎克伯格在 Facebook 上发帖:Big AI news today.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;与此同时,扎克伯格宣布:基于最新的 Llama 3 模型,Meta 的 AI 助手现在已经覆盖 Instagram、WhatsApp、Facebook 等全系应用,并单独开启了网站。另外还有一个&lt;mark data-type=tech_tasks data-id=ba1ea8a1-a705-4f89-8348-ec71bae840dc&gt;图像生成&lt;/mark&gt;器,可根据自然语言提示词生成图片。&lt;/p&gt;&lt;p&gt;Meta AI 网址:https://www.meta.ai/&lt;/p&gt;&lt;p&gt;&lt;img data-imgfileid="503431386" data-ratio="0.725925925925926" data-s="300,640" data-src="https://mmbiz.qpic.cn/sz_mmbiz_jpg/KmXPKA19gW9PvzPEMQhGfSIOSSwN4yPqQiadhel7RFMuYpdicC9lavU1hkmfIG1AAwMDFW4tsR4Is2cibglzic8MSw/640?wx_fmt=jpeg&amp;from=appmsg" data-type="jpeg" data-w="1080" data-original-style="" data-index="3" src="https://image.jiqizhixin.com/uploads/editor/b0dd9f20-2a9b-41b8-8ca5-848b36d970cd/640.png" alt="图片" data-fail="0" class="fr-fic fr-dib" style="width: 700px;"&gt;&lt;/p&gt;&lt;p&gt;扎克伯格表示,Meta 提供的生成式 AI 能力在免费产品中性能是最强大的。&lt;/p&gt;&lt;p&gt;在 Facebook、Instagram、WhatsApp 和 Messenger 上,用户现在可以借助 Meta AI 进行搜索,无需在应用程序之间切换:&lt;/p&gt;&lt;p&gt;&lt;a href="https://mp.weixin.qq.com/s?__biz=MzA3MzI4MjgzMw==&amp;mid=2650915060&amp;idx=1&amp;sn=9c3ab9e18ada10478e1f1797bab1e909&amp;chksm=84e4048ab3938d9c339c4662d202df4a7f18df48a0c57aa6de95912b29e0ac5c308da6c6634f&amp;token=1540783293&amp;lang=zh_CN#rd"&gt;&lt;img src="https://image.jiqizhixin.com/uploads/editor/e5a368cb-4f2c-41ef-af7e-58e5d5d3c3b3/1713465606983.png" style="width: 700px;" class="fr-fic fr-dib"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;当你浏览信息流的时候,还可以直接从帖子中向 Meta AI 询问更多信息:&lt;/p&gt;&lt;section&gt;&lt;span allowfullscreen="" data-cover="http%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FKmXPKA19gW9PvzPEMQhGfSIOSSwN4yPq5VUCVXr7qA56nGCFKzQR31WNfRBXDg91AL4v2HW4zoZCD4t8kuRibbg%2F0%3Fwx_fmt%3Djpeg" data-mpvid="wxv_3420383226664091651" data-ratio="1.1472222222222221" data-src="https://mp.weixin.qq.com/mp/readtemplate?t=pages/video_player_tmpl&amp;auto=0&amp;vid=wxv_3420383226664091651" data-vh="507.75" data-vidtype="2" data-vw="677" data-w="826" frameborder="0" height="520" scrolling="no" width="677"&gt;&lt;div data-key="wxv_3420383226664091651"&gt;&lt;div data-v-c4b95c15=""&gt;&lt;div data-v-054d777f="" data-v-c4b95c15=""&gt;&lt;div data-v-054d777f=""&gt;&lt;p data-v-054d777f=""&gt;&lt;a href="https://mp.weixin.qq.com/s?__biz=MzA3MzI4MjgzMw==&amp;mid=2650915060&amp;idx=1&amp;sn=9c3ab9e18ada10478e1f1797bab1e909&amp;chksm=84e4048ab3938d9c339c4662d202df4a7f18df48a0c57aa6de95912b29e0ac5c308da6c6634f&amp;token=1540783293&amp;lang=zh_CN#rd"&gt;&lt;img src="https://image.jiqizhixin.com/uploads/editor/813906df-91d1-40b8-832b-517ff50b04c2/1713465625645.png" style="width: 700px;" class="fr-fic fr-dib"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/section&gt;&lt;p&gt;&lt;mark data-type=tech_tasks data-id=ba1ea8a1-a705-4f89-8348-ec71bae840dc&gt;图像生成&lt;/mark&gt;器带来的玩法更加有趣,Imagine 功能带来了从文本实时创建图像。这一功能的测试版从今天开始在美国的 WhatsApp 和 Meta AI 网络体验上推出。&lt;/p&gt;&lt;p&gt;开始打字时,你会看到一个图像出现,每多输入几个字母,图像都会发生变化:&lt;br&gt;&lt;a href="https://mp.weixin.qq.com/s?__biz=MzA3MzI4MjgzMw==&amp;mid=2650915060&amp;idx=1&amp;sn=9c3ab9e18ada10478e1f1797bab1e909&amp;chksm=84e4048ab3938d9c339c4662d202df4a7f18df48a0c57aa6de95912b29e0ac5c308da6c6634f&amp;token=1540783293&amp;lang=zh_CN#rd"&gt;&lt;img src="https://image.jiqizhixin.com/uploads/editor/2b600d83-c4ed-4529-bb44-d7e4bde6ee2b/1713465644187.png" style="width: 700px;" class="fr-fic fr-dib"&gt;&lt;/a&gt;&lt;/p&gt;&lt;section&gt;&lt;span allowfullscreen="" data-cover="http%3A%2F%2Fmmbiz.qpic.cn%2Fsz_mmbiz_jpg%2FKmXPKA19gW9PvzPEMQhGfSIOSSwN4yPqaNAgAdrUKRvSu7v4bh36YnGODOh5VUBQV0w8daPwteicVZAm1G6pnkQ%2F0%3Fwx_fmt%3Djpeg" data-mpvid="wxv_3420384983758700546" data-ratio="1.1472222222222221" data-src="https://mp.weixin.qq.com/mp/readtemplate?t=pages/video_player_tmpl&amp;auto=0&amp;vid=wxv_3420384983758700546" data-vh="507.75" data-vidtype="2" data-vw="677" data-w="826" frameborder="0" height="520" scrolling="no" width="677"&gt;&lt;div data-key="wxv_3420384983758700546"&gt;&lt;div data-v-c4b95c15=""&gt;&lt;div data-v-054d777f="" data-v-c4b95c15=""&gt;&lt;div data-v-054d777f=""&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/section&gt;&lt;p&gt;Meta 表示,Llama 3 在多个关键的&lt;mark data-type=concepts data-id=308c3a45-0fee-4ec6-858e-85b15f440fc0&gt;基准&lt;/mark&gt;测试中性能优于业界先进同类模型,其在代码生成等任务上实现了全面领先,能够进行复杂的推理,可以更遵循指令,能够可视化想法并解决很多微妙的问题。&lt;/p&gt;&lt;p&gt;简而言之,Llama 3 的主要亮点包括:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;基于超过 15T token 训练,相当于 Llama 2 数据集的 7 倍还多;&lt;/li&gt;&lt;li&gt;支持 8K 长文本,改进的 tokenizer 具有 128K token 的词汇量,可实现更好的性能;&lt;/li&gt;&lt;li&gt;在大量重要&lt;mark data-type=concepts data-id=308c3a45-0fee-4ec6-858e-85b15f440fc0&gt;基准&lt;/mark&gt;中均具有最先进性能;&lt;/li&gt;&lt;li&gt;新能力范畴,包括增强的推理和代码能力;&lt;/li&gt;&lt;li&gt;训练效率比 Llama 2 高 3 倍;&lt;/li&gt;&lt;li&gt;带有 Llama Guard 2、Code Shield 和 CyberSec Eval 2 的新版信任和安全工具。&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;刚刚发布的 8B 和 70B 版本 Llama 3 模型已用于 Meta AI 助手,同时也面向开发者进行了开源,包括预训练和微调版本:&lt;/p&gt;&lt;p&gt;下载链接:https://llama.meta.com/llama-downloads/&lt;/p&gt;&lt;p&gt;Github:https://github.com/meta-llama/&lt;/p&gt;&lt;p&gt;&lt;img data-imgfileid="503431388" data-ratio="1" data-s="300,640" data-src="https://mmbiz.qpic.cn/sz_mmbiz_gif/KmXPKA19gW9PvzPEMQhGfSIOSSwN4yPqTF4FfdXOXnPZtfcF35ulXZkmbYOg0cPRCbW60BxTf5s4KibexamrwVg/640?wx_fmt=gif&amp;from=appmsg" data-type="gif" data-w="600" data-original-style="width: 328px;height: 328px;" data-index="4" src="https://image.jiqizhixin.com/uploads/editor/0a592a8f-93de-4bc3-99f5-3f21933c60a2/640.gif" alt="图片" data-fail="0" class="fr-fic fr-dib" style="width: 700px;"&gt;&lt;/p&gt;&lt;p&gt;体量更大的多模态版本将在未来几个月内推出。Meta 称,目前正在开发的最大模型是 400B+ &lt;mark data-type=concepts data-id=2e982b73-88e2-41e8-a430-f7ae5a9af4bf&gt;参数&lt;/mark&gt;。&lt;/p&gt;&lt;p&gt;Meta 研究科学家 Aston Zhang 在大模型发布后表示,在 Llama 3 的研发过程中,研究团队一起应对了预训练和人类数据、预训练扩展、长上下文、后训练和评估方面的诸多挑战。这是一段艰难而又激动人心的旅程。&lt;/p&gt;&lt;p&gt;更加激动人心的内容即将到来:Meta 的研究者现在准备推出系列视频,帮助人们深入了解 Llama 3 背后的技术。此外 Llama 3 的相关研究论文也将放出。&lt;/p&gt;&lt;h3&gt;&lt;strong&gt;Llama 3,性能重回王座&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;最新发布的 8B 和 70B &lt;mark data-type=concepts data-id=2e982b73-88e2-41e8-a430-f7ae5a9af4bf&gt;参数&lt;/mark&gt;的 Llama 3 模型可以说是 Llama 2 的重大飞跃,由于预训练和后训练(Post-training)的改进,本次发布的预训练和指令微调模型是当今 8B 和 70B &lt;mark data-type=concepts data-id=2e982b73-88e2-41e8-a430-f7ae5a9af4bf&gt;参数&lt;/mark&gt;规模中的最佳模型。与此同时,后训练过程的改进大大降低了模型出错率,进一步改善了一致性,并增加了模型响应的多样性。&amp;nbsp;&lt;/p&gt;&lt;p&gt;Llama 3 将数据和规模提升到新的高度。Meta 表示,Llama 3 是在两个定制的 24K GPU 集群上、基于超过 15T token 的数据上进行了训练 &amp;mdash;&amp;mdash; 相当于 Llama 2 数据集的 7 倍还多,代码数据相当于 Llama 2 的 4 倍。从而产生了迄今为止最强大的 Llama 模型,Llama 3 支持 8K 上下文长度,是 Llama 2 容量的两倍。&lt;/p&gt;&lt;p&gt;&lt;img data-imgfileid="503431389" data-ratio="0.5824074074074074" data-s="300,640" data-src="https://mmbiz.qpic.cn/sz_mmbiz_png/KmXPKA19gW9PvzPEMQhGfSIOSSwN4yPq1dDBTXwD9FnoicjsicuSKibiczlCmgPD9eLAUoUweYQmzKAQ05uWHhAbbQ/640?wx_fmt=png&amp;from=appmsg" data-type="png" data-w="1080" data-original-style="" data-index="5" src="https://image.jiqizhixin.com/uploads/editor/76eec839-245e-467c-99b0-8c697fc2a152/640.png" alt="图片" data-fail="0" class="fr-fic fr-dib" style="width: 700px;"&gt;&lt;/p&gt;&lt;p&gt;此外,Meta 还开发了一套新的高质量人类评估数据集。该评估集包含 1800 个提示,涵盖 12 个关键用例:寻求建议、头脑风暴、分类、封闭式问答、编码、创意写作、提取、塑造角色、开放式问答、推理、重写和总结。为了防止 Llama 3 在此评估集上出现过度拟合,Meta 表示他们自己的团队也无法访问该数据集。下图显示了针对 Claude Sonnet、Mistral Medium 和 GPT-3.5 对这些类别和提示进行人工评估的汇总结果。&lt;/p&gt;&lt;p&gt;&lt;img data-galleryid="" data-imgfileid="503431391" data-ratio="0.6268518518518519" data-s="300,640" data-src="https://mmbiz.qpic.cn/sz_mmbiz_png/KmXPKA19gW9PvzPEMQhGfSIOSSwN4yPqxLOF1qbLMfHqDWqABLOicfd5jK3RcsBBukJk4icGRrPwojBYjG9X9VJQ/640?wx_fmt=png&amp;from=appmsg" data-type="png" data-w="1080" data-original-style="" data-index="6" src="https://image.jiqizhixin.com/uploads/editor/9d8d937a-0395-4b11-9b04-cd3ebee93260/640.png" alt="图片" data-fail="0" class="fr-fic fr-dib" style="width: 700px;"&gt;下图是 Llama 3 预训练模型和其他同等规模模型的比较,前者表现出 SOTA 水平。&lt;/p&gt;&lt;p&gt;&lt;img data-imgfileid="503431392" data-ratio="0.562962962962963" data-s="300,640" data-src="https://mmbiz.qpic.cn/sz_mmbiz_png/KmXPKA19gW9PvzPEMQhGfSIOSSwN4yPqlYXObzhicMldaOvaTfvfYxO8FQxjj0uUfHHXKgr2DNSqtH1sRZ0MQ4Q/640?wx_fmt=png&amp;from=appmsg" data-type="png" data-w="1080" data-original-style="" data-index="7" src="https://image.jiqizhixin.com/uploads/editor/8d254dd9-4599-411b-bcbb-8a3489439b4a/640.png" alt="图片" data-fail="0" class="fr-fic fr-dib" style="width: 700px;"&gt;&lt;/p&gt;&lt;p&gt;为了开发出出色的&lt;mark data-type=tech_tasks data-id=fee178e8-ee20-42fc-8f8f-1d41c1f34e8f&gt;语言模型&lt;/mark&gt;,Meta 认为创新、扩展和优化是非常重要的。因而在 Llama 3 的研发中 Meta 采用了这一设计理念,重点关注四个关键要素:模型架构、预训练数据、扩展预训练和指令微调。&lt;/p&gt;&lt;h3&gt;&lt;strong&gt;模型架构&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;Llama 3 选择了相对标准的纯解码器 Transformer 架构。与 Llama 2 相比,Llama 3 做了几个关键的改进,包括:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Llama 3 使用具有 128K token 词汇表的 tokenizer,可以更有效地对语言进行编码,从而显著提高模型性能;&lt;/li&gt;&lt;li&gt;为了提高 Llama 3 模型的推理效率,研究团队在 8B 和 70B 大小的模型上采用了分组查询注意力 (GQA);&lt;/li&gt;&lt;li&gt;在 8192 个 token 的序列上训练模型,使用掩码确保&lt;mark data-type=concepts data-id=2ad7abdc-bbaa-4a33-b3ce-53f4fa019fdd&gt;自注意力&lt;/mark&gt;不会跨越文档边界。&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;&lt;strong&gt;训练数据&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;&lt;img data-imgfileid="503431393" data-ratio="0.12777777777777777" data-s="300,640" data-src="https://mmbiz.qpic.cn/sz_mmbiz_png/KmXPKA19gW9PvzPEMQhGfSIOSSwN4yPqNSuwkrrv14SCJSlnaM06JoTWEYGZiaaqpyEuePWb5I7jbEkw7aF5S3w/640?wx_fmt=png&amp;from=appmsg" data-type="png" data-w="1080" data-original-style="" data-index="8" src="https://image.jiqizhixin.com/uploads/editor/0651addf-7535-4595-8fe0-477b41fc65e3/640.png" alt="图片" data-fail="0" class="fr-fic fr-dib" style="width: 700px;"&gt;&lt;/p&gt;&lt;p&gt;为了训练最好的&lt;mark data-type=tech_tasks data-id=fee178e8-ee20-42fc-8f8f-1d41c1f34e8f&gt;语言模型&lt;/mark&gt;,管理大型、高质量的训练数据集至关重要。Meta 在预训练数据上投入了大量成本。Llama 3 使用超过 15T 的 token 进行了预训练,这些 token 都是从公开来源收集的。总体上讲,Llama 3 的训练数据集是 Llama 2 使用的数据集的七倍多,并且包含四倍多的代码。为了为即将到来的多语言用例做好准备,超过 5% 的 Llama 3 预训练数据集由涵盖 30 多种语言的高质量非英语数据组成。但是,Llama 3 在这些语言上的性能水平预计不会与英语相同。&lt;/p&gt;&lt;p&gt;为了确保 Llama 3 接受最高质量数据的训练,研究团队开发了一系列数据过滤 pipeline,包括使用启发式过滤器(filter)、NSFW 过滤器、语义重复数据删除方法和&lt;mark data-type=tech_tasks data-id=3fe4290f-6dd3-43ed-9324-cf23aa588830&gt;文本分类&lt;/mark&gt;器来预测数据质量。&lt;/p&gt;&lt;p&gt;研究团队发现前几代 Llama 非常擅长识别高质量数据,因此 Meta 使用 Llama 2 为给 Llama 3 提供支持的文本质量分类器生成训练数据。&lt;/p&gt;&lt;p&gt;研究团队还进行了广泛的实验,以评估出在最终预训练数据集中不同来源数据的最佳混合方式,最终确保 Llama 3 在各种用例(包括日常问题、STEM、编码、历史知识等)中表现良好。&lt;/p&gt;&lt;h3&gt;&lt;strong&gt;扩展预训练&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;为了有效利用 Llama 3 模型的预训练数据,Meta 投入了大量精力来扩展预训练。&lt;/p&gt;&lt;p&gt;具体来说,Meta 为下游&lt;mark data-type=concepts data-id=308c3a45-0fee-4ec6-858e-85b15f440fc0&gt;基准&lt;/mark&gt;评估制定了一系列详细的扩展法则。这些扩展法则使 Meta 能够选择最佳的数据组合,并就如何最好地使用训练计算做出明智的决策。&lt;/p&gt;&lt;p&gt;重要的是,扩展法则使 Meta 能够在实际训练模型之前预测最大模型在关键任务上的性能(例如,在 HumanEval &lt;mark data-type=concepts data-id=308c3a45-0fee-4ec6-858e-85b15f440fc0&gt;基准&lt;/mark&gt;上评估的代码生成性能)。这有助于确保最终模型在各种用例和功能上都具有强大的性能。&lt;/p&gt;&lt;p&gt;在 Llama 3 的开发过程中,Meta 对扩展行为进行了一些新的观察。例如,虽然 8B &lt;mark data-type=concepts data-id=2e982b73-88e2-41e8-a430-f7ae5a9af4bf&gt;参数&lt;/mark&gt;模型的 Chinchilla 最佳训练计算量对应约 200B token,但 Meta 发现即使在模型接受了两个数量级以上的数据训练之后,模型性能仍在继续提高。&lt;/p&gt;&lt;p&gt;在对多达 15T token 进行训练后,8B 和 70B &lt;mark data-type=concepts data-id=2e982b73-88e2-41e8-a430-f7ae5a9af4bf&gt;参数&lt;/mark&gt;的模型都继续以对数线性的方式提升性能。较大的模型可以用较少的训练计算来匹配较小模型的性能,但较小的模型通常是首选,因为它们在推理过程中效率更高。&lt;/p&gt;&lt;p&gt;&lt;img data-imgfileid="503431394" data-ratio="0.23478260869565218" data-s="300,640" data-src="https://mmbiz.qpic.cn/sz_mmbiz_png/KmXPKA19gW9PvzPEMQhGfSIOSSwN4yPq9oJxRxjr0fYic7DYO6C7Q2Mkzjhkmg99sG8UsYelYet6micFfLVlwBfg/640?wx_fmt=png&amp;from=appmsg" data-type="png" data-w="1035" data-original-style="" data-index="9" src="https://image.jiqizhixin.com/uploads/editor/3240540c-6af8-478f-8b76-291d681c5c79/640.png" alt="图片" data-fail="0" class="fr-fic fr-dib" style="width: 700px;"&gt;&lt;/p&gt;&lt;p&gt;Meta 透露,它们使用自定义训练库、Meta 的超级集群和生产集群预训练 Llama3。微调、注释和评估在第三方&lt;mark data-type=tech_methods data-id=8a8d6b30-a68e-4d9f-a413-6e83dad9cbbd&gt;云计算&lt;/mark&gt;上进行。&lt;/p&gt;&lt;p&gt;预训练是在 H100-80GB 类型的硬件(TDP 为 700W)上累计 770 万个 GPU 小时的计算。&lt;/p&gt;&lt;p&gt;为了训练最大的 Llama 3 模型,Meta 结合了三种类型的并行化:数据并行化、模型并行化和管道并行化。&lt;/p&gt;&lt;p&gt;当同时在 16K GPU 上进行训练时,Meta 最高可实现每个 GPU 超过 400 TFLOPS 的计算利用率。Llama3 是在两个定制的 24K GPU 集群上进行了训练。为了最大限度地延长 GPU 的正常运行时间,Meta 开发了一种先进的新训练堆栈,可以自动执行错误检测、处理和维护。Meta 还极大地改进了硬件可靠性和静默数据损坏检测机制,并且开发了新的可扩展存储系统,以减少检查点和回滚的开销。&lt;/p&gt;&lt;p&gt;这些改进使总体有效训练时间超过 95%。&lt;/p&gt;&lt;p&gt;综合起来,这些改进使 Llama 3 的训练效率比 Llama 2 提高了约三倍。&lt;/p&gt;&lt;h3&gt;&lt;strong&gt;指令微调&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;为了充分释放预训练模型在聊天场景中的潜力,Meta 还对指令微调方法进行了创新。Llama 3 后训练方法用的是有监督微调(SFT)、&lt;mark data-type=tech_methods data-id=c84b6d7e-447f-4bcb-b4a5-c807d7b8a5f7&gt;拒绝采样&lt;/mark&gt;、近端策略优化(PPO)和直接策略优化(DPO)的组合。SFT 中使用的 prompt 质量以及 PPO 和 DPO 中使用的偏好排序对模型对齐有着巨大的影响。&lt;/p&gt;&lt;p&gt;此次模型质量的最大改进,来自于仔细整理数据以及对人类注释者提供的注释进行多轮质量保证。&lt;/p&gt;&lt;p&gt;通过 PPO 和 DPO 从偏好排序中学习,也极大地提高了 Llama 3 在推理和编码任务上的性能。Meta 发现,如果你向模型提出一个它难以回答的推理问题,该模型有时会产生正确的推理轨迹:模型知道如何产生正确的答案,但不知道如何选择它。对偏好排序的训练使模型能够学习如何选择正确答案。&lt;/p&gt;&lt;h3&gt;&lt;strong&gt;使用 Llama 3&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;在此版本中,Meta 提供了新的信任与安全工具,包括 Llama Guard 2 和 Cybersec Eval 2 的更新组件,并引入了 Code Shield&amp;mdash;&amp;mdash; 一种过滤大模型生成的不安全代码的防护栏。&lt;/p&gt;&lt;p&gt;Meta 还用 torchtune 开发了 Llama 3。torchtune 是新的 PyTorch 原生库,可以轻松地使用 LLM 进行创作、微调和实验。&lt;/p&gt;&lt;p&gt;torchtune 提供完全用 PyTorch 编写的内存高效且可破解的训练方法。该库与 Hugging Face、Weights &amp;amp; Biases 和 EleutherAI 等知名平台集成,甚至支持 Executorch,以便在各种移动和边缘设备上运行高效推理。&lt;/p&gt;&lt;p&gt;从快速工程到将 Llama 3 与 LangChain 结合使用,Meta 提供了全面的入门指南,指导开发者进行大规模部署。&lt;/p&gt;&lt;h3&gt;&lt;strong&gt;安全改进&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;Meta 采用了一种新的、系统级的方法来负责任地开发和部署 Llama,将 Llama 模型视为更广泛系统的一部分,让开发者掌握主导权。Llama 模型将作为系统的基础部分,由开发人员根据其独特的最终目标进行设计。&lt;/p&gt;&lt;p&gt;&lt;img data-imgfileid="503431395" data-ratio="0.39814814814814814" data-s="300,640" data-src="https://mmbiz.qpic.cn/sz_mmbiz_png/KmXPKA19gW9PvzPEMQhGfSIOSSwN4yPqNKHovjDHTNkZJROibEiaHUhyaWh3NLNh1iasBWJvAl2SCeDr4GwTH7t8g/640?wx_fmt=png&amp;from=appmsg" data-type="png" data-w="1080" data-original-style="" data-index="10" src="https://image.jiqizhixin.com/uploads/editor/99192aa7-4cea-41ad-bc1a-0bd4ab500d35/640.png" alt="图片" data-fail="0" class="fr-fic fr-dib" style="width: 700px;"&gt;&lt;/p&gt;&lt;p&gt;指令微调在确保模型安全性方面也发挥了重要作用。经过内部和外部的共同努力,Meta 对经过指令微调的模型进行了安全红队(测试)。&lt;/p&gt;&lt;p&gt;「红队」方法利用人类专家和自动化方法&lt;mark data-type=tech_tasks data-id=d8e9b7d5-cd62-415a-8a1f-03328af9b808&gt;生成对抗&lt;/mark&gt;性提示,试图诱发有问题的反应。例如,采用综合测试来评估与化学、生物、网络安全和其他风险领域有关的滥用风险。所有这些工作都是反复进行的,并用于对发布的模型进行安全微调。&lt;/p&gt;&lt;p&gt;Llama Guard 模型旨在为及时响应安全奠定基础,并可根据应用需求轻松微调以创建新的分类标准。作为起点,新版 Llama Guard 2 采用了最近公布的 MLCommons 分类标准。此外,CyberSecEval 2 在其前身的基础上进行了扩展,增加了对 LLM 允许滥用其代码解释器的倾向、攻击性网络安全能力以及对提示注入攻击的易感性的测量。最后,Meta 将推出代码盾(Code Shield),它增加了对 LLM 生成的不安全代码进行推理时过滤的支持。这可以降低不安全代码建议、代码解释器滥用预防和安全命令执行方面的风险。&lt;/p&gt;&lt;p&gt;随着生成式&lt;mark data-type=concepts data-id=2d28aa9c-942d-471d-bd96-8bfefb7144e0&gt;人工智能&lt;/mark&gt;领域的快速发展,开源将是将生态系统整合在一起并减少这些潜在危害的重要途径。&lt;/p&gt;&lt;p&gt;为此,Meta 持续更新《负责任使用指南》(RUG),该指南为负责任地使用 LLM 进行开发提供了全面指导。比如像指南中所概述的那样,所有输入和输出都应根据适合应用的内容指南进行检查和过滤。此外,许多云服务提供商都提供了用于负责任部署的内容审核 API 和其他工具,开发人员也被建议考虑使用这些选项。&lt;/p&gt;&lt;h3&gt;&lt;strong&gt;大规模部署 Llama 3&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;Llama 3 即将在所有主要平台上推出,包括云提供商、模型 API 提供商等。&lt;/p&gt;&lt;p&gt;&lt;mark data-type=concepts data-id=308c3a45-0fee-4ec6-858e-85b15f440fc0&gt;基准&lt;/mark&gt;测试表明,tokenizer 提高了 token 化效率,与 Llama 2 相比,token 生成量最多可减少 15%。此外,组查询关注(GQA)现在也被添加到了 Llama 3 8B。&lt;/p&gt;&lt;p&gt;因此,尽管与 Llama 2 7B 相比,该模型多了 1B 个&lt;mark data-type=concepts data-id=2e982b73-88e2-41e8-a430-f7ae5a9af4bf&gt;参数&lt;/mark&gt;,但 tokenizer 效率和 GQA 的改进有助于保持与 Llama 2 7B 相当的推理效率。&lt;/p&gt;&lt;p&gt;在 Llama Recipes(https://github.com/meta-llama/llama-recipes)中,介绍了有关如何利用所有这些功能的示例,其中包含所有的开放源代码,可用于从微调、部署到模型评估的所有工作。&lt;/p&gt;&lt;h3&gt;&lt;strong&gt;下一步是什么?&lt;/strong&gt;&lt;/h3&gt;&lt;p&gt;8B 和 70B 两个型号的模型,标志着 Llama 3 系列的开端,下一步还会有更多。&lt;/p&gt;&lt;p&gt;Meta 表示, 「最大的 Llama 3」&lt;mark data-type=concepts data-id=2e982b73-88e2-41e8-a430-f7ae5a9af4bf&gt;参数&lt;/mark&gt;超过 400B,虽然这些机型仍在训练中,但在接下来的几个月中也将陆续发布,新功能包括多模态、多语言对话能力、更长的上下文窗口以及更强的整体能力。&lt;/p&gt;&lt;p&gt;一旦完成 Llama 3 的训练,Meta 还将发表一篇详细的研究论文。&lt;/p&gt;&lt;p&gt;&lt;img data-imgfileid="503431396" data-ratio="0.562962962962963" data-s="300,640" data-src="https://mmbiz.qpic.cn/sz_mmbiz_png/KmXPKA19gW9PvzPEMQhGfSIOSSwN4yPqyTTyjUrVd3icq2nGHdywmHXpYFA8QJxhUibyNmbT8zWnerdLSKTbhK8A/640?wx_fmt=png&amp;from=appmsg" data-type="png" data-w="1080" data-original-style="" data-index="11" src="https://image.jiqizhixin.com/uploads/editor/ffdd6143-175b-40eb-a599-d23da2057f0b/640.png" alt="图片" data-fail="0" class="fr-fic fr-dib" style="width: 700px;"&gt;&lt;/p&gt;&lt;p&gt;Llama 3 还未到来的 400B+ 版本会有多强?它一旦发布是不是意味着开源社区就将迎来 GPT-4 级大模型?&lt;/p&gt;&lt;p&gt;&lt;img data-imgfileid="503431397" data-ratio="1.1087314662273475" data-s="300,640" data-src="https://mmbiz.qpic.cn/sz_mmbiz_png/KmXPKA19gW9PvzPEMQhGfSIOSSwN4yPqCEib9PqdpHhhLCywzHYqkicrrJ706qo0UUIGXwvq4ROics3jhpy4HlB6w/640?wx_fmt=png&amp;from=appmsg" data-type="png" data-w="607" data-original-style="" data-index="12" src="https://image.jiqizhixin.com/uploads/editor/404d2c9f-dbe7-417e-aaad-aff7925f40b7/640.png" alt="图片" data-fail="0" class="fr-fic fr-dib" style="width: 700px;"&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;Jim Fan 整理的 Llama3 400B 与 GPT-4 等模型的比分。&lt;/em&gt;&lt;/p&gt;&lt;p&gt;也许只有 OpenAI 的 GPT-5 才能压下开源模型了。&lt;/p&gt;&lt;p&gt;参考内容:&lt;/p&gt;&lt;p&gt;&lt;em&gt;https://llama.meta.com/llama3/&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;https://www.facebook.com/4/videos/377361005296904/&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;https://www.reuters.com/technology/meta-releases-early-versions-its-llama-3-ai-model-2024-04-18/&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;https://www.theverge.com/2024/4/18/24133808/meta-ai-assistant-llama-3-chatgpt-openai-rival&lt;/em&gt;&lt;/p&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>
  21.      <category />
  22.      <guid isPermaLink="true">https://itindex.net/detail/62921-%E5%BC%80%E6%BA%90-%E6%A8%A1%E5%9E%8B-llama</guid>
  23.      <pubDate>Fri, 19 Apr 2024 02:44:39 CST</pubDate>
  24.    </item>
  25.    <item>
  26.      <title>丰田雷凌双擎驾驶体验总结</title>
  27.      <link>https://itindex.net/detail/62920-%E4%B8%B0%E7%94%B0-%E9%A9%BE%E9%A9%B6-%E4%BD%93%E9%AA%8C</link>
  28.      <description>&lt;div&gt;  &lt;p&gt;第一幕 视觉:&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;A柱,倾斜度比较大,对视线有干扰,拐弯的时候得多留神。左右后视镜视野还算ok,但并线啥的还得多看看,一慢二看三通过是必须的。&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;img alt="" height="423" src="https://twm.autohome.com.cn/cjh.autoimg.cn/youchuang/g23/M14/56/F5/752x0_q100_autohomecar__wKgFV1bBWBmAGpo3AAbJjIpPZr8894.jpg?text/54ix5p6B5a6i/fontSize/13" width="752"&gt;&lt;/img&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;第二幕 听觉:&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;喇叭:&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;声音比较尖,有点像青春期倒仓的孩子,无厚重感,如果你和我一样不喜欢这种声音的话,可以换个更好听的。&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;噪音:&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;60(72),80(74),100(75),120(77),噪音都过了70,这和是否发动机启动关系不大,而是整车隔音做的不好,喜欢安静的就自己整隔音吧。&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;img alt="" height="423" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAApJREFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=" width="752"&gt;&lt;/img&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;第三幕 嗅觉:&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;我们实测甲醛浓度为0.05mg/m3,符合《乘用车内空气质量评价指南》中甲醛浓度低于0.1的国家标准。最近没有重型雾霾袭京,所以没法给大家测试自带的pm2.5滤芯效果,有机会再和大家说这事吧。&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;img alt="" height="423" src="https://twm.autohome.com.cn/cjh.autoimg.cn/youchuang/g23/M07/56/F3/752x0_q100_autohomecar__wKgFV1bBWAGASwWAAAWrOyIGBHQ399.jpg?text/54ix5p6B5a6i/fontSize/13" width="752"&gt;&lt;/img&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;第四幕 体感:&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;座椅的事我不多说了,这些日子,我的腰基本快废了,可能是我身体太矫情了。方向精准度很好,悬挂设定舒适有韧性。它的Q度非常明显,谈Q度,不谈软硬,是因为每个人对软硬理解不同,但一套悬挂的质感如果很Q,那毫无疑问就是一套好悬挂,是一个车厂真正的经验和能力的体现。过弯的横向支撑上,也出乎我的意料,跑山路是没啥问题。但唯一的遗憾还是侧面弹簧实在太高、不和谐。&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;img alt="" height="423" src="https://twm.autohome.com.cn/cjh.autoimg.cn/youchuang/g23/M06/56/BB/752x0_q100_autohomecar__wKjBwFbBWAOAb3irAAcLTd8yYEE133.jpg?text/54ix5p6B5a6i/fontSize/13" width="752"&gt;&lt;/img&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;踏板:&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;硬,给你的力反馈非常大;高,可能会是你开过的踏板最高的车。两个踏板间隔比较远,以脚后跟为轴会很累。按普遍的开车鞋理解,薄底会更适合开车,但在混雷上可就完全不是了。踏板硬,薄底鞋硌脚,踏板高,薄底鞋撑不住。曾经让我开车无法忍受的慢跑鞋、户外鞋,在混雷上却成了最合适的鞋。刹车和油门并不是点一下就有,厚底鞋也不会影响灵敏度。厚底比薄底舒服,这真是个很奇葩的事儿。&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;img alt="" height="423" src="https://twm.autohome.com.cn/cjh.autoimg.cn/youchuang/g23/M14/56/BC/752x0_q100_autohomecar__wKjBwFbBWB2AVjTBAAYiYN-r1rI521.jpg?text/54ix5p6B5a6i/fontSize/13" width="752"&gt;&lt;/img&gt;&lt;/div&gt; &lt;div&gt;  &lt;img alt="" height="423" src="https://twm.autohome.com.cn/cjh.autoimg.cn/youchuang/g23/M01/56/F6/752x0_q100_autohomecar__wKgFV1bBWB6AEPwnAAWbSpsgdGo072.jpg?text/54ix5p6B5a6i/fontSize/13" width="752"&gt;&lt;/img&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;第五幕 心得:&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;1 油门四段位:&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;油门分四段:1)无反应;2)纯电;3)正常输出;4)地板油注:这里我说的纯电,是油门控制的纯电行驶,并非EV驾驶模式,通篇均如此。&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;之所以有第一阶段的无反应,就是为了帮助电脑做出动能回收和节油的判断,如果太过灵敏,就需要往外输出动力。另一方面因为油门踏板高你就想把油门往下踩,让脚能舒服点,这也符合第一段无反应的设定。纯电的油门宽容度很低,可开合角度很窄,相比2.5L的丰田混动要小得多,所以控制的时候需要些练习,我们后面再谈。后两种就很正常了,不再多说。&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;img alt="" height="423" src="https://twm.autohome.com.cn/cjh.autoimg.cn/youchuang/g23/M04/56/BB/752x0_q100_autohomecar__wKjBwFbBWAWABflXAAVLAyMEf_s023.jpg?text/54ix5p6B5a6i/fontSize/13" width="752"&gt;&lt;/img&gt;&lt;/div&gt; &lt;div&gt;  &lt;img alt="" height="423" src="https://twm.autohome.com.cn/cjh.autoimg.cn/youchuang/g23/M0A/56/F4/752x0_q100_autohomecar__wKgFV1bBWAaAJr3OAAVqez544WM904.jpg?text/54ix5p6B5a6i/fontSize/13" width="752"&gt;&lt;/img&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;2 刹车:&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;刹车行程分两段,第一阶段是动能回收,第二阶段是正常的盘片摩擦。低速时的动能回收阶段会有一种把脚往前吸的感觉,你以为你踹到了一面墙,其实你一脚踹在了果冻上,有不安全感,得多适应。所以我说薄底鞋不合适呢,因为脚后跟抠不住地板,这种吸入感会带着你的脚往前走。低速刹停推头的现象也要比自动挡汽油车严重些。在高速时,低速时的果冻吸入感就没有了,更接近刹车盘的脚感,比较踏实。低速的感觉是往前踹,高速的感觉才是往下踩。刹车电流声,我觉着挺爽,有种高科技的赶脚。不喜欢的话,开着音乐就不容易听到了。刹车距离:(汽车之家数据)39.83米,能进40,对这个级别来说就是优秀的成绩。&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;img alt="" height="423" src="https://twm.autohome.com.cn/cjh.autoimg.cn/youchuang/g23/M01/57/19/752x0_q100_autohomecar__wKgFXFbBWAiAPTd6AAVromXYBBc288.jpg?text/54ix5p6B5a6i/fontSize/13" width="752"&gt;&lt;/img&gt;&lt;/div&gt; &lt;div&gt;  &lt;img alt="" height="423" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAApJREFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=" width="752"&gt;&lt;/img&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;3 发动机启动与动能回收:&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;行进中的发动机启动是能感觉到的,像是有人轻踹了你一下,但要比发动机启停那个破烂玩意更能让人接受的多得多,如果我给混雷打6分,那自动启停这东西我的打分就是负分滚粗。&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;丢油门:自动挡汽油车挂D挡,即使丢油门,车也会有动力输出向前跑,而混雷则完全不一样,它会没有任何动力输出,因为丢油门后开始滑行状态的动能回收,减速感觉很像手动挡车。时速100松油门,它会一直往下减速,我尝试过一直减速到30多,然后遇到了上坡,系统不会在这个时候给你启动电机或发动机,来提供继续行驶的能力,换句话说,想前进是不可以丢掉油门的。高速丢油门,活塞空转,不喷油,再给油就是那种顺畅连接带入感。低速丢油门,发动机会停,再启动就有被轻踹的感觉;两种状态的分界线是车速80。&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;img alt="" height="423" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAApJREFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=" width="752"&gt;&lt;/img&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;4 动力:&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;低速:从静止到60,符合你的心理预期,就像官方说的“20-50km/h的中段加速为3.1秒,这是日常驾驶中最常见的加速区间”实际开起来也确实会有如此感受。&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;提速:系统第一反应是混动输出,随着提速时间的长短,电机会选择停止在发动机可以稳定输出的阶段。&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;高速:80以上的提速比较差,100以后的加速感更是绵软无力,说的夸张点,有点像QQ的感觉。声浪从车后方过来了,还挺好听,然后你就开始等,这个等待时间会超过你的加速预期,内心潜台词就是:等了那么久,你变了没有。&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;弱项:上坡,比如在环路,一上坡,力就掉了,就得把油门深踩。上坡前记得不能收油,也不要试图使用电动爬坡,踩着油门过,这段路才顺当。&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;img alt="" height="423" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAApJREFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=" width="752"&gt;&lt;/img&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;5 四种驾驶模式:&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;EV:时速超过30,就会自动解除EV模式;无论时速多少,稍微深踩油门,也会解除,油门宽容度非常低。三格以下的低电量,无法开启EV模式。电池电量只能在这个模式下行驶不到2公里,光靠动能回收充不了多少电。再加上各种条件限制无法启动EV模式,会让你更烦躁。走走停停用用还可以,但如果是还能往前溜达着,就尽量不要使用EV模式了。&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;img alt="" height="423" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAApJREFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=" width="752"&gt;&lt;/img&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;ECO,POWER的不同就是油门响应程度的区别。&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;ECO,正常踩油门对应的就是仪表盘上的ECO行驶状态,脚就像陷进了泥里,挺难受的。相比普通模式,ECO对纯电行驶时的油门开合角度的宽容度要更好些。但长时间驾驶会让你更累,因为ECO状态下的油门实在是太沉了。我建议大家在不堵车的时候不要使用这个模式,会非常难开。&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;POWER,油门会变得异常灵敏,轻轻一点,就会到POWER行驶状态,二者也是一个对应关系。而且这个感觉是很机械的,它没有过度,完全跳过ECO状态直接到POWER,这种灵敏度对于日常驾驶是不舒服的。当然超车啊、急加速啊之类的也可以用,但不如直接一脚地板油来得痛快和省时间。油门到底对于任何模式下的动力输出都是一样的。&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;ECO和POWER模式都可以叠加EV模式,EV模式优先运行。&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;普通模式就是以上三种全都不按,对于这台车来说,就是在各方面最佳的驾驶状态。或者从懒人的角度想,我什么都不想动,就是开门打火挂档走人,到地停车摘挡锁门。什么都别让我干,这才是自动挡。&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;img alt="" height="423" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAApJREFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=" width="752"&gt;&lt;/img&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;6 S挡及换挡拨片:&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;混雷上用S挡取代了普锐斯等车型上的B挡(发动机制动挡),一方面S挡在国内被接受程度高,另一方面,它和换挡拨片放在一起更容易被国人理解。S+换挡拨片在混雷上就相当于手挡,意思就是让你控制发动机制动,用挡位锁定行驶转速,达到控制车速的目的,这对于山路或者下坡道路的行驶安全非常重要,如果只依靠刹车制动,容易造成过热带来安全隐患,这就是混雷全系标配换挡拨片的原因。在驾驶中,因为ECVT无级变速的特性,换挡非常平顺,还是虚拟档位,换挡拨片无法给你带来该有的驾驶体验和加速感受。它没有转速表,只能靠听,换挡拨片在混雷上的驾驶乐趣不是很大。盘桥、上下坡、进出地库等使用环境,请开启S挡。D挡虽然也可以激活减挡,但不能锁定挡位,只能短暂使用。开着混雷下山的时候,一直用的都是S挡,档位选择合适的话,除了胳膊肘弯儿,基本不需要踩刹车,而且这时候的动能回收非常明显,但有一点不好的是,换挡拨片在方向盘上,打方向的时候就不方便操作了。&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;img alt="" height="423" src="https://twm.autohome.com.cn/cjh.autoimg.cn/youchuang/g21/M0D/55/FD/752x0_q100_autohomecar__wKgFVVbBWCWAKOnQAAXSO1lZ66k634.jpg?text/54ix5p6B5a6i/fontSize/13" width="752"&gt;&lt;/img&gt;&lt;/div&gt; &lt;div&gt;  &lt;img alt="" height="423" src="https://twm.autohome.com.cn/cjh.autoimg.cn/youchuang/g21/M01/56/0E/752x0_q100_autohomecar__wKgFWlbBWCeATxx6AAYFQe5GyC4603.jpg?text/54ix5p6B5a6i/fontSize/13" width="752"&gt;&lt;/img&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;7 纯电行驶技巧:&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;我这里说的纯电行驶是一种通杀状态,是通过你对油门的掌控来实现。纯电行驶有最高时速限制,车速超过70发动机就会强行介入。我们之前讲了油门的四种开合角度,第二个就是它的纯电行驶状态,纯电行驶的最简单的方法不是一点点的踩到纯电油门阶段,而是做一个先放再收的动作,也就是说,先多踩一点,然后再收到纯电油门,因为这个开合角度很窄,想直接踩到位很容易错过。一开始这个位置找起来需要习惯和肌肉记忆,时间长了就能运用自如了。最佳的车速保持区是60公里每小时,可以给自己更大的迂回区间。如果这么开,一定不要占用环路的最内侧车道,我们要做有素质的车主。&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;img alt="" height="423" src="https://twm.autohome.com.cn/cjh.autoimg.cn/youchuang/g21/M04/56/0E/752x0_q100_autohomecar__wKgFWlbBWCiAU7lMAAU885pPAKU534.jpg?text/54ix5p6B5a6i/fontSize/13" width="752"&gt;&lt;/img&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;8 遗失的不美好:&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;以雷凌双擎的特性来说,它缺少了一个非常重要的功能,AutoHold,当然跟成本也有很大关系,连电子手刹都没有看到,AutoHold自然也是不会有了。但对于这套系统,如果此功能不是标配的话,就有点暴殄天物了。停车,无动力输出,我直接抬脚,不需做任何摘挡拉手刹的动作,这才该是丰田混动的正解。&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;img alt="" height="423" src="https://twm.autohome.com.cn/cjh.autoimg.cn/youchuang/g21/M05/55/EB/752x0_q100_autohomecar__wKjBwlbBWCqAQmvlAAWTwTPmooI515.jpg?text/54ix5p6B5a6i/fontSize/13" width="752"&gt;&lt;/img&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;9 三箱油耗:&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;第一箱油,因为新车的缘故,油耗偏高属正常。第二箱油,我尽可能的用油门控制纯电,开了半箱后,我其实就想放弃了,真的太折磨自己了。第三箱油里面,有1/3的里程跑了高速,车上是四个人,在跑高速前,我的开法是堵车用ECO,不堵车用普通模式,偶尔搭配EV,开出的油耗是5.0(电脑显示),跑高速后,油耗提升到了5.2(电脑显示),我算完后的油耗是5.6,80km/h,市区巡航车速,瞬时油耗不到5升,100-120高速巡航,5-5.5之间,这台发动机确实很省油。&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;堵车,怠速;起步,停车,走停;巡航,跺刹车,从低速再到巡航,这些都是费油阶段,丰田混动省油的很大意义就是踩刹车不费油。如果想开的更低,驾驶习惯是需要培养的,但这种改变并不是每个人都能接受,无论是身体还是精神,比如我这种性格的,真的太难了。&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;从三箱油耗的对比以及我的个人感受中,频繁的切换驾驶模式,不如你能精准的把控好油门来的实际。雷凌双擎的灵魂就是油门,把这个控制好了,才是真正的省油,相信自己的神之右脚,其它三种驾驶模式,都可以play egg go!&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;第四箱油,我采取随心所欲流,这箱还没跑完,目前显示在4.8左右,然后我进了趟山,因为上坡是混雷的软肋,油耗也长到了6升,但下山的时候就有意思了,一滴油没费,那种感觉真的很神奇,车内也挺安静,60分贝以内,徜徉在山间,很惬意,这时候如果有发动机的存在,反而倒觉得多余了。出了山,发现油耗又降回来了,那一刹那,我的语言匮乏了。&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;img alt="" height="423" src="https://twm.autohome.com.cn/cjh.autoimg.cn/youchuang/g23/M0B/56/BB/752x0_q100_autohomecar__wKjBwFbBWBCAFrEAAAOIM2GlucQ710.jpg?text/54ix5p6B5a6i/fontSize/13" width="752"&gt;&lt;/img&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;10 购车成本&amp;amp;节油成本:&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;你到底是想花小钱买辆车,还是想买车后用车成本低;这是两个不同的出发点。如果是前者,那你完全没必要关注雷凌双擎,比它便宜的车多了,外观比它好的车多了,内饰比它好的车多了,动力比它好的车多了,能买的车太多了。雷凌双擎,或者说丰田双擎的所有车型都不适合你;如果是后者,那你选对了。&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;大家不要本着我要用开多少年,才能用油钱把这车价给补回来这么一个观念来看待丰田混动,如果你本就看上了雷凌,资金也够,那混动多出的两万块钱你带来了什么呢?它有比普雷更好的外观,更省油,你还能体验科技的魅力。想以后用车更省心,少去几次加油站,堵车的时候不用因油耗的增加而烦躁,这才是买它的原因,而不是这两万块钱我要多久才能省出来。说简单点,这和你买数码产品一样,你就是要为科技买单。什么时候科技能变成白菜价?永远不会,因为变成白菜就注定离被淘汰不远了。&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;img alt="" height="423" src="https://twm.autohome.com.cn/cjh.autoimg.cn/youchuang/g21/M0C/55/EB/752x0_q100_autohomecar__wKjBwlbBWC2AK1KOAAY2mMdEr1c568.jpg?text/54ix5p6B5a6i/fontSize/13" width="752"&gt;&lt;/img&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;11 不适合雷凌双擎的人:&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;1不在乎油耗的人,我的建议是没必要考虑雷凌双擎或是丰田混动,你可以去找一辆更贴近自己喜好的车。&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;2特别在乎油耗的人,也没必要考虑雷凌双擎或是丰田混动。劳驾去买纯电动车,为油耗担心的死去活来,不如去交电费。&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;3受不了外观内饰做工等,那可以往上看看雷克萨斯,或许可以满足你。&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;4性子急,这辆车给不了你暴走的状态,你急也没用。&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;img alt="" height="423" src="https://twm.autohome.com.cn/cjh.autoimg.cn/youchuang/g21/M09/55/FE/752x0_q100_autohomecar__wKgFVVbBWC-AO2GwAAapiUMkhC0697.jpg?text/54ix5p6B5a6i/fontSize/13" width="752"&gt;&lt;/img&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;12 丰田混动的好处:&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;1省油,这是毫无疑问的;2少了超速的罚单:多用纯电行驶,速度只能60,避免超速风险;3心态好 别人的费油阶段在你这就显得很从容,为构建社会主义和谐社会做贡献;4装:混动,时尚最时尚;5指标:比如天津、广州,可获得指标;6外型:审美因人而异,但对比普雷,混雷毫无疑问更漂亮;7磨性子:脾气不好也不能乱来,不是想节油吗,就不能深踩。还并线,并啥线啊,守着一个道老老实实开,对性格有非常好的重塑作用。&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;13 对于丰田混动的感受:&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;能在将近20年前整出这么一套东西,那时候有句话怎么说来着:世界上有两种混动,一种是丰田,一种是其他。虽然放现在这话有些过了,但我依然对其刮目相看。它和插电式混动是完全不同的概念,丰田混动的目的是节油,不是不用油。这套系统非常优秀,用起来根本不用人操心,我为你点赞!&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;img alt="" height="423" src="https://twm.autohome.com.cn/cjh.autoimg.cn/youchuang/g21/M15/55/FE/752x0_q100_autohomecar__wKgFVVbBWDGAUlkXAAnDT1soVDY272.jpg?text/54ix5p6B5a6i/fontSize/13" width="752"&gt;&lt;/img&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;总结:&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;p&gt;雷凌双擎,这辆车的各个方面,和大家聊了不少。是时候做个阶段性总结了:外观耐看,内饰完蛋,座椅毁腰,驾感不赖;低速是龙,高速是虫,配置中庸,油耗拉轰。&lt;/p&gt;&lt;/div&gt; &lt;div&gt;  &lt;img alt="" height="423" src="https://twm.autohome.com.cn/cjh.autoimg.cn/youchuang/g21/M08/55/EB/752x0_q100_autohomecar__wKjBwlbBWDWAWMr7AAcIeHeBC3A566.jpg?text/54ix5p6B5a6i/fontSize/13" width="752"&gt;&lt;/img&gt;&lt;/div&gt; &lt;div&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>
  29.      <category />
  30.      <guid isPermaLink="true">https://itindex.net/detail/62920-%E4%B8%B0%E7%94%B0-%E9%A9%BE%E9%A9%B6-%E4%BD%93%E9%AA%8C</guid>
  31.      <pubDate>Thu, 11 Apr 2024 09:25:22 CST</pubDate>
  32.    </item>
  33.    <item>
  34.      <title>一个从事10年二手车经营的人来告诉你不能买的二手车有哪些</title>
  35.      <link>https://itindex.net/detail/62919-%E4%BB%8E%E4%BA%8B-%E4%BA%8C%E6%89%8B-%E7%BB%8F%E8%90%A5</link>
  36.      <description>&lt;p&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;我从事二手车经营已经有10年之久了,从刚开始的下线车,到后来的滨州直播卖车,直播卖车滨州是最早的城市,但是刚开始管理不严格,一些不良车商的中介做了一些不当得利,对滨州的二手车市场影响很大,滨州成了当时与宁波枣庄齐名的不良的二手车城市。&lt;/p&gt;  &lt;p&gt;    &lt;br /&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;br /&gt;&lt;/p&gt;  &lt;p&gt;那么我就跟大家说一下哪些二手车尽量不要碰,当然火烧泡水事故的没手续的抵押的肯定是不能碰的,这次不包含这些车。&lt;/p&gt;  &lt;p&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;第一:10年以上的当时购车10万以下的包括国产和合资车型。&lt;/p&gt;  &lt;p&gt;这是因为这些车最大的一个通病就是生锈,当然也会有个别好的品牌或者车型能够处理的不错,便是2015年之前的10年多的车生锈是一个比较普遍的现象。&lt;/p&gt;  &lt;div&gt;    &lt;img src="https://p3-dcd-sign.byteimg.com/tos-cn-i-twdt4qpehh/f9c37abe29fd4b8eb08c33e41643ed74~noop.webp?lk3s=125a4689&amp;x-expires=1715390636&amp;x-signature=o90rwgnkrXth5QFOfl5VMvL8rR8%3D"&gt;&lt;/img&gt;    &lt;p&gt;&lt;/p&gt;&lt;/div&gt;  &lt;p&gt;这儿我可能会直接说出品牌但并不是黑谁或者针对哪个品牌,我只是实事求是的说一下,2010年前后生产的奇瑞的汽车,主要是旗云二车型,门框,下边梁都容易生锈。当然还有同时期的比亚迪F3和吉利的自由舰,长安悦翔,长城C30等。这些车型现在也比较少了,但是市场上还是有的,价格几千块钱,好的不过万,尽量不要入手。&lt;/p&gt;  &lt;p&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;当然还有同期的合资车型,捷达生锈也比较厉害,最快的6年就生锈。还有本田的同时期的锋范等车型,也是会生锈,但是    &lt;a href="https://www.dongchedi.com/auto/series/283" target="_blank" title=""&gt;飞度&lt;/a&gt;(    &lt;a href="https://www.dongchedi.com/auto/series/283/images-wg" target="_blank" title=""&gt;图片&lt;/a&gt;|    &lt;a href="https://www.dongchedi.com/auto/params-carIds-96146-88508-89224-81402-81403-88507" target="_blank" title=""&gt;配置&lt;/a&gt;|    &lt;a href="https://www.dongchedi.com/dealer/283?zt=dcd_pc_page_pgc_article_detail_words_guide_ask_floor_price&amp;link_source=dcd_pc_page_pgc_article_detail" target="_blank" title=""&gt;询价&lt;/a&gt;)生锈的较少,还有大众的    &lt;a href="https://www.dongchedi.com/auto/series/391" target="_blank" title=""&gt;POLO&lt;/a&gt;(    &lt;a href="https://www.dongchedi.com/auto/series/391/images-wg" target="_blank" title=""&gt;图片&lt;/a&gt;|    &lt;a href="https://www.dongchedi.com/auto/params-carIds-89670-88033-89671-88245-89672" target="_blank" title=""&gt;配置&lt;/a&gt;|    &lt;a href="https://www.dongchedi.com/dealer/391?zt=dcd_pc_page_pgc_article_detail_words_guide_ask_floor_price&amp;link_source=dcd_pc_page_pgc_article_detail" target="_blank" title=""&gt;询价&lt;/a&gt;)生锈的也少。&lt;/p&gt;  &lt;p&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;第二:就是10年以上的老豪车&lt;/p&gt;  &lt;p&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;奔驰宝马沃尔沃以及路虎等,特别的德系的或者欧美的这些豪车,排量比较大油耗也高,排量大部分是3.0以上,或者3.5的。养车成本就相对要高,3.5的排量的在我们这边一年的车船使用税是3000元,并且每次保养的成本也高,机油换一次大部分的6L左右,机油滤芯空气滤芯价格也高。&lt;/p&gt;  &lt;div&gt;    &lt;img src="https://p6-dcd-sign.byteimg.com/tos-cn-i-twdt4qpehh/52b03bf43b4b419e8b63ea7d77c482be~noop.webp?lk3s=125a4689&amp;x-expires=1715390636&amp;x-signature=PMuFAdacKYwu4oWXA3SWDZ1rIM8%3D"&gt;&lt;/img&gt;    &lt;p&gt;&lt;/p&gt;&lt;/div&gt;  &lt;p&gt;再一个就是故障率比较高,由于年限较长,特别的德系的设计理念是追去卓越的动力性能和操控,发动机的正常工作温度要比日系的车高,所以橡胶件的老化更为严重,造成漏油漏水现象比较严重,而且较高的工作环境,缸壁和活塞的磨损也会更加厉害,所以也会有烧机油拉缸现象。&lt;/p&gt;  &lt;p&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;而且如果维修的话费用就比较高,更换配件的成本也高,你像现在买一台2010年左右的宝马3系可能都不用3万块钱,如果修复原状的话估计买车的价格都不一定够,当然如果能捡漏一台里程小的车况好的话,也许不用修复,但是这种几率太小,因为二手车贩都很难捡漏现在。&lt;/p&gt;  &lt;p&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;div&gt;    &lt;img src="https://p9-dcd-sign.byteimg.com/tos-cn-i-twdt4qpehh/37d3e92a39dd4bd484db17a6b4eee24b~noop.webp?lk3s=125a4689&amp;x-expires=1715390636&amp;x-signature=hN60nSXcWbRI9tEUEps1sAc41zo%3D"&gt;&lt;/img&gt;    &lt;p&gt;&lt;/p&gt;&lt;/div&gt;  &lt;p&gt;还有现在的沃尔沃XC60,11-12年的车根据车况现在的价格5-7万不等。当时落地四五十万的车现在也这么便宜,它的配件就比较贵而且维修费用也高,并且这个车很多有拉缸烧机油的现象,大家买的时候一定得注意,没必要尽量不要买。&lt;/p&gt;  &lt;p&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;第三:装配一二代大众EA888的车型&lt;/p&gt;  &lt;p&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;这个大家都知道,圈内流行说:EA888谁修谁发家,也就是16年前的大众帕萨特迈腾还有奥迪车型很多都装配的老款的EA888发动机,我曾开过一辆1.8T帕萨特,1000公里烧1L机油,真的是后备箱里得备一小桶机油,看看机油尺蘸不着了就得加,当然也有的看到故障灯着了再加的。&lt;/p&gt;  &lt;div&gt;    &lt;img src="https://p9-dcd-sign.byteimg.com/tos-cn-i-twdt4qpehh/0c16fd190c174772aa36533aea661a76~noop.webp?lk3s=125a4689&amp;x-expires=1715390636&amp;x-signature=ygyrcM5QEiNtxYVmwKAFWFqJm%2FA%3D"&gt;&lt;/img&gt;    &lt;p&gt;&lt;/p&gt;&lt;/div&gt;  &lt;p&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;但是EA888的发动机有一件好处就是能修好,我一朋友一台老途观也是买的二手,车很好开就是烧机油,500来公里1L,这个更严重,最后一生气直接大修发动机,7000元搞定,恢复原车状态,并且真的不烧机油的,开起来还是挺香的。&lt;/p&gt;  &lt;p&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;第四:就是市场保有量少的小众品牌&lt;/p&gt;  &lt;p&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;我一朋友曾弄了一台克莱斯勒漫步者,外形非常有个性,后来出了故障,不好修,然后也出不了手,最后只能不到3000块钱报废了。这里再说一下克莱斯勒300C,这个车呢很重实,开起来感觉也好,曾经路上也能见到,但是二手车也很便宜,排量大油耗高,这个工薪阶层最好也别买。&lt;/p&gt;  &lt;p&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;第五:我再详细的说几个车型大家买的时候也要注意一下&lt;/p&gt;  &lt;p&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;年限长点的雪佛兰科鲁兹,别克英朗,还有福特福克斯,它们装有同样的发动机,通用的1.6的,这个车呢里程大了会有缸盖漏水水泵或者节温器座漏水的情况,基本属于一个通病,当然也能解决,换一个铝缸盖就能解决。也会有水温高的情况。如果买的话尽量买里程小的或者是年限短的改款了的。&lt;/p&gt;  &lt;p&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;还有一款是本田凌派1.0T的油浸正时皮带的那款车,由于正时皮带浸在油里,会有皮带的磨损物在里边,这个车我接触过好几个,正常的是5万公里左右就会出毛病,买二手车时一定也要注意。&lt;/p&gt;  &lt;p&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;还有日产的轩逸早期的,1.6自然吸气的,自动挡的,也有的车会出现烧机油的现象,而且变速箱故障率也比较高,到时候也得注意。&lt;/p&gt;  &lt;p&gt;    &lt;br /&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;br /&gt;&lt;/p&gt;  &lt;p&gt;第一:先说一下比较小的车型&lt;/p&gt;  &lt;p&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;大众的POLO,本田的飞度,丰田的致炫,丰田的威驰这些小车都可以买,只要车况没有什么问题,里程不是太大。这些车的发动机质量都比较稳定,经济省油,当然没有太好的舒适性和操控性,代步就绝对没问题的。当然也得注意POLO应该也有一批是会生锈的。&lt;/p&gt;  &lt;p&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;大众POLO的发动机1.4的或者1.6的居多后期也有1.5的,基本是早期的ea111或者后期的ea211发动机都用的自吸的,质量非常稳定耐用而且油耗也不高。本田飞度也是一代神车,这个车基本没发现生锈现象,发动机性能稳定省油。而且车小但是空间特别好。丰田致炫呢,搭配1.3或者1.5自然吸气发动机,早期匹配的4AT变速箱,并且是正时链条的机器,油耗5-6个油,质量非常稳定,而且后排座椅也能放倒,拉货拉人都方便。&lt;/p&gt;  &lt;p&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;第二:紧凑级的车&lt;/p&gt;  &lt;p&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;大众的宝来朗逸速腾,最值得一提的是大众的高尔夫车型,高尔夫是大众的经典车型,性能和质量都可圈可点。本田思域型格,丰田的卡罗拉,后期日产的轩逸,骐达等质量都不错,很稳定。这里重点讲一下大众,大众宝来朗逸速腾装配的早期是ea111后来是ea211的1.4T或者1.6自吸的发动机,匹配7速双离合或者爱信6AT的变速箱。大众ea111或才ea211是大众用得最多的非常成熟的发动机,油耗不高性能稳定,并且1.4T是不烧机油的,当然个别个人使用不当除外。&lt;/p&gt;  &lt;div&gt;    &lt;img src="https://p6-dcd-sign.byteimg.com/tos-cn-i-twdt4qpehh/2309eb1548ab46fbb4414636f9b0d4f8~noop.webp?lk3s=125a4689&amp;x-expires=1715390636&amp;x-signature=H2oHIL25Q98cR0YO7QOpbqeFnqg%3D"&gt;&lt;/img&gt;    &lt;p&gt;&lt;/p&gt;&lt;/div&gt;  &lt;p&gt;第三:B级车&lt;/p&gt;  &lt;p&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;B级车的话首选是丰田的凯美瑞,毕竟是全球销量榜首,丰田的发动机是非常稳定的正常保养的话跑50万公里以上的很多。当然很多是换车才卖的,同样的本田的雅阁和思铂睿质量也是非常不错的。本田以发动机的性能质量著称。还有日产天籁,也是一款畅销车型。但是这些车型的老车油耗相对来说较高。&lt;/p&gt;  &lt;div&gt;    &lt;img src="https://p3-dcd-sign.byteimg.com/tos-cn-i-twdt4qpehh/556bdc74a37c4a99847dc6fc79471b25~noop.webp?lk3s=125a4689&amp;x-expires=1715390636&amp;x-signature=Kq5zyX1o6KtUSymXesGB2PuqiQY%3D"&gt;&lt;/img&gt;    &lt;p&gt;&lt;/p&gt;&lt;/div&gt;  &lt;p&gt;日系呢还有一款比较良心的车,但是近日也停产了,就是马自达,马自达的车是可以放心买的,自然吸气的发动机还有6MT或者6AT的变速箱性能和质量都不错。&lt;/p&gt;  &lt;p&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;还有斯巴鲁,是以进口方式引进国内的,质量也不错,特别是它的水平对置发动机和四驱系统操控稳定,但是后期的维修保养价格可能较高,而且个别车型使用久了也会出现机油损耗较大的现象,这个购买时视自己的情况而定。&lt;/p&gt;  &lt;p&gt;大众呢就得买第三代的ea888发动机的机型了,改款后的就不烧机油了。也可以放心购买了,但是年限都比较短车的价格略高。&lt;/p&gt;  &lt;p&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;第三:SUV车型&lt;/p&gt;  &lt;p&gt;丰田荣放,本田CRV,日产奇骏,大众的新SUV都可以,当然奔驰宝马年限近的也可以但是价格要高些了。&lt;/p&gt;  &lt;div&gt;    &lt;img src="https://p9-dcd-sign.byteimg.com/tos-cn-i-twdt4qpehh/55277b7af5244ac7a08109793d730fbb~noop.webp?lk3s=125a4689&amp;x-expires=1715390636&amp;x-signature=3kEPSyzC5OxPq2CiXtGEsC7JFG4%3D"&gt;&lt;/img&gt;    &lt;p&gt;&lt;/p&gt;&lt;/div&gt;  &lt;p&gt;第四:MPV车型&lt;/p&gt;  &lt;p&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;MPV车型呢当属别克GL8了,它是国内销量最好的MPV车型,空间大,当然油耗也高些,并且GL8涵盖市场区间也大,你真不知道它会是哪个价位的车。当然本田奥德赛艾力绅也不错,再好的一点丰田的塞纳确是一款不错的MPV,或者起亚的嘉华,但是起亚在国内销量是真的不好。当然现在国内的MPV车型也更有性价比,东风的瑞风的还有广汽的和大通的,现在的选择性也特别多。&lt;/p&gt;  &lt;div&gt;    &lt;img src="https://p3-dcd-sign.byteimg.com/tos-cn-i-twdt4qpehh/5cbfe645e21842ebbeb773965a88cc04~noop.webp?lk3s=125a4689&amp;x-expires=1715390636&amp;x-signature=UPkbe%2BKjr6vo3SK0xuBodlXedw0%3D"&gt;&lt;/img&gt;    &lt;p&gt;&lt;/p&gt;&lt;/div&gt;  &lt;p&gt;    &lt;br /&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;br /&gt;&lt;/p&gt;  &lt;p&gt;当然预算充足的话最好是买新车,新车毕竟性能更好配置更高而且也更省心。而且开起来心里也舒服,毕竟是自己的一手,有些有心理洁癖的朋友就是不喜欢用二手的,用二手的会有心理阴影,那么咱就买全新车,因人而异。大家有什么不同意见,可以在评论区或者私信我沟通。&lt;/p&gt;  &lt;p&gt;朋友们在买车卖车,用车养车时有什么问题也可以与我交流,我将会知无不言言无不尽的给车友提供一个在我的认知范围内的帮助。&lt;/p&gt;
  37.    &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>
  38.      <category />
  39.      <guid isPermaLink="true">https://itindex.net/detail/62919-%E4%BB%8E%E4%BA%8B-%E4%BA%8C%E6%89%8B-%E7%BB%8F%E8%90%A5</guid>
  40.      <pubDate>Thu, 11 Apr 2024 09:24:11 CST</pubDate>
  41.    </item>
  42.    <item>
  43.      <title>广汽净利暴跌45%,董事长曾庆洪7月合同到期</title>
  44.      <link>https://itindex.net/detail/62918-%E5%B9%BF%E6%B1%BD-%E5%87%80%E5%88%A9-%E8%91%A3%E4%BA%8B%E9%95%BF</link>
  45.      <description>&lt;blockquote&gt;
  46.  &lt;p&gt;曹原 发自 副驾寺&lt;/p&gt;
  47.  &lt;p&gt;智能车参考|公众号AI4Auto&lt;/p&gt;
  48. &lt;/blockquote&gt;
  49. &lt;p&gt;广汽集团的2023年,喜忧参半。&lt;/p&gt;
  50. &lt;p&gt;喜的是年销量  &lt;strong&gt;超250万辆&lt;/strong&gt;,新能源销量占比  &lt;strong&gt;22%&lt;/strong&gt;,转型成绩亮眼。&lt;/p&gt;
  51. &lt;p&gt;营收继续破千亿创新高,达  &lt;strong&gt;1297.06亿元&lt;/strong&gt;,相当于一天入账  &lt;strong&gt;3.55亿元&lt;/strong&gt;。&lt;/p&gt;
  52. &lt;p&gt;但,忧的是2023年集团净利润为  &lt;strong&gt;44.29亿元&lt;/strong&gt;,比上一年暴跌  &lt;strong&gt;45%&lt;/strong&gt;,赚钱能力回到2015年的水平。&lt;/p&gt;
  53. &lt;p&gt;更关键的是,广汽集团董事长  &lt;strong&gt;曾庆洪&lt;/strong&gt;的合同将于今年7月到期,这位董事长即将63岁,临近法定退休年龄。&lt;/p&gt;
  54. &lt;p&gt;正值转型关键期的广汽集团,或将迎来新的掌舵人。&lt;/p&gt;
  55. &lt;h1&gt;广汽集团2023年表现如何&lt;/h1&gt;
  56. &lt;p&gt;从整体来看,广汽集团2023年刷新多个自身最好成绩。&lt;/p&gt;
  57. &lt;p&gt;全年产销均超250万辆,销量为  &lt;strong&gt;250.5万辆&lt;/strong&gt;,一天大概能卖6863辆,同比增长2.92%。&lt;/p&gt;
  58. &lt;div&gt;  &lt;img alt="&amp;#24191;&amp;#27773;&amp;#20928;&amp;#21033;&amp;#26292;&amp;#36300;45%&amp;#65292;&amp;#33891;&amp;#20107;&amp;#38271;&amp;#26366;&amp;#24198;&amp;#27946;7&amp;#26376;&amp;#21512;&amp;#21516;&amp;#21040;&amp;#26399;" src="https://www.qbitai.com/wp-content/uploads/replace/2ded274c816b2c2e776a7712c97d4fbc.png"&gt;&lt;/img&gt;&lt;/div&gt;
  59. &lt;p&gt;并且在国内汽车市场占比达到8.32%,产销规模在全国排名第五。&lt;/p&gt;
  60. &lt;p&gt;并且新能源转型成绩也不错,全集团新能源汽车销量占比为  &lt;strong&gt;22%&lt;/strong&gt;,自主品牌中新能源销量占比达到  &lt;strong&gt;58%&lt;/strong&gt;。&lt;/p&gt;
  61. &lt;p&gt;其中广汽埃安销量达到  &lt;strong&gt;48万辆&lt;/strong&gt;,同比增长77%,在国内新能源车企中排在第三。&lt;/p&gt;
  62. &lt;p&gt;同时总营收也创下新高,2023年全年营收  &lt;strong&gt;1287.57亿元&lt;/strong&gt;,一天就能入账3.55亿,比2022年增长17.62%。&lt;/p&gt;
  63. &lt;div&gt;  &lt;img alt="&amp;#24191;&amp;#27773;&amp;#20928;&amp;#21033;&amp;#26292;&amp;#36300;45%&amp;#65292;&amp;#33891;&amp;#20107;&amp;#38271;&amp;#26366;&amp;#24198;&amp;#27946;7&amp;#26376;&amp;#21512;&amp;#21516;&amp;#21040;&amp;#26399;" src="https://www.qbitai.com/wp-content/uploads/replace/d825e2e32db3f6734741a935e5b506f3.png"&gt;&lt;/img&gt;&lt;/div&gt;
  64. &lt;p&gt;从营收规模来看,广汽2023年在国内略低于长城汽车,整体排在第四位。&lt;/p&gt;
  65. &lt;p&gt;并且2023年集团  &lt;strong&gt;毛利润&lt;/strong&gt;达到68.14亿元,比上一年增加29%,官方表示主要因为自主品牌整车厂毛利增长。&lt;/p&gt;
  66. &lt;p&gt;而且,集团研发投入也在不断增加。&lt;/p&gt;
  67. &lt;p&gt;2023年广汽研发投入为  &lt;strong&gt;83.88亿元&lt;/strong&gt;,比2022年增长28.53%,帮助集团新增3195件专利申请,包括1567项发明专利。&lt;/p&gt;
  68. &lt;div&gt;  &lt;img alt="&amp;#24191;&amp;#27773;&amp;#20928;&amp;#21033;&amp;#26292;&amp;#36300;45%&amp;#65292;&amp;#33891;&amp;#20107;&amp;#38271;&amp;#26366;&amp;#24198;&amp;#27946;7&amp;#26376;&amp;#21512;&amp;#21516;&amp;#21040;&amp;#26399;" src="https://www.qbitai.com/wp-content/uploads/replace/17807e4ce6601b865eb9eb25470f2a12.png"&gt;&lt;/img&gt;&lt;/div&gt;
  69. &lt;p&gt;但作为关键指标指标的  &lt;strong&gt;净利润&lt;/strong&gt;,在2023年出现暴跌。&lt;/p&gt;
  70. &lt;p&gt;2023年广汽集团归属上市公司股东的净利润为  &lt;strong&gt;44.29亿元&lt;/strong&gt;,比2022年减少  &lt;strong&gt;45.08%&lt;/strong&gt;,是2020年以来净利润首次下跌,规模逼近2015年的39.67亿元。&lt;/p&gt;
  71. &lt;div&gt;  &lt;img alt="&amp;#24191;&amp;#27773;&amp;#20928;&amp;#21033;&amp;#26292;&amp;#36300;45%&amp;#65292;&amp;#33891;&amp;#20107;&amp;#38271;&amp;#26366;&amp;#24198;&amp;#27946;7&amp;#26376;&amp;#21512;&amp;#21516;&amp;#21040;&amp;#26399;" src="https://www.qbitai.com/wp-content/uploads/replace/f990b0ef25fd85a9394c7f3fed0fd3dc.png"&gt;&lt;/img&gt;&lt;/div&gt;
  72. &lt;p&gt;虽然在公告中并没有过多解释净利润下跌的原因,但从具体表现来看,很可能是因为广汽集团两大“利润奶牛”两田——  &lt;strong&gt;广汽本田&lt;/strong&gt;和  &lt;strong&gt;广汽丰田&lt;/strong&gt;在2023年销量继续走低。&lt;/p&gt;
  73. &lt;p&gt;广汽本田2023年销量为  &lt;strong&gt;64.05万辆&lt;/strong&gt;,比2022年下降13.6%,已经是连续四年下滑;广汽丰田2023年销量跌破百万辆,达到  &lt;strong&gt;95万辆&lt;/strong&gt;,减少5.47%。&lt;/p&gt;
  74. &lt;div&gt;  &lt;img alt="&amp;#24191;&amp;#27773;&amp;#20928;&amp;#21033;&amp;#26292;&amp;#36300;45%&amp;#65292;&amp;#33891;&amp;#20107;&amp;#38271;&amp;#26366;&amp;#24198;&amp;#27946;7&amp;#26376;&amp;#21512;&amp;#21516;&amp;#21040;&amp;#26399;" src="https://www.qbitai.com/wp-content/uploads/replace/7dbe2caad1001651b80989d5cbb4070d.png"&gt;&lt;/img&gt;&lt;/div&gt;
  75. &lt;p&gt;这就导致两大品牌营收均出现下滑,广汽本田营收为935.28亿元,比上一年减少  &lt;strong&gt;18.75%&lt;/strong&gt;;广汽丰田营收为1528.69亿元,减少  &lt;strong&gt;6.52%&lt;/strong&gt;。&lt;/p&gt;
  76. &lt;p&gt;同时,集团另一大合资品牌  &lt;strong&gt;广汽三菱&lt;/strong&gt;则在2023年迎来重组,公司表示已经取得关键性进展,完成后将帮助广汽埃安增加产能,解决产能瓶颈问题。&lt;/p&gt;
  77. &lt;p&gt;总结一下就是,虽然2023年广汽集团销量、营收均创下新高,新能源转型成绩也不错,但合资品牌销量减少,影响集团2023年净利润暴跌。&lt;/p&gt;
  78. &lt;p&gt;不过集团拥有足够的现金储备。截至2023年年末现金及现金等价物为  &lt;strong&gt;458.65亿元&lt;/strong&gt;,比去年增加82.86亿元。&lt;/p&gt;
  79. &lt;p&gt;而对于2024年的规划,董事长曾庆洪仍定下  &lt;strong&gt;销量增长10%&lt;/strong&gt;的目标。这虽然与当初定下的2023年目标一致,但2023年并未实现。&lt;/p&gt;
  80. &lt;p&gt;更关键的是,掌舵人曾庆洪任期也要到期了。&lt;/p&gt;
  81. &lt;h1&gt;广汽董事长任期即将到期&lt;/h1&gt;
  82. &lt;p&gt;广汽集团现任董事长  &lt;strong&gt;曾庆洪&lt;/strong&gt;,已经领导广汽集团有8年之久,同时也是在汽车行业摸爬滚打40多年的老人。&lt;/p&gt;
  83. &lt;div&gt;  &lt;img alt="&amp;#24191;&amp;#27773;&amp;#20928;&amp;#21033;&amp;#26292;&amp;#36300;45%&amp;#65292;&amp;#33891;&amp;#20107;&amp;#38271;&amp;#26366;&amp;#24198;&amp;#27946;7&amp;#26376;&amp;#21512;&amp;#21516;&amp;#21040;&amp;#26399;" src="https://www.qbitai.com/wp-content/uploads/replace/1403b6aa134e136aad6b4b2f9a5dbc29.png"&gt;&lt;/img&gt;&lt;/div&gt;
  84. &lt;p&gt;作为维修工出身的曾庆洪,从一线干起,先后在广州汽车修理厂、广州客车厂、广州金宝马客车等公司做过汽车修理工、技术员、技术科工程师等职务。&lt;/p&gt;
  85. &lt;p&gt;后来在1999年,曾庆洪成为广汽本田执行副总经理,2005年出任广汽集团副董事长兼总经理。并在2016年,前董事长  &lt;strong&gt;张房有&lt;/strong&gt;年满60岁退休离职时,曾庆洪接棒成为集团董事长。&lt;/p&gt;
  86. &lt;p&gt;当时广泛认为,曾庆洪属于“高位接盘”。因为2016年广汽集团已经完成A股和H股上市,还打造完自有品牌,年销量为  &lt;strong&gt;165万辆&lt;/strong&gt;,增幅高于行业平均水平,领跑所有国有车企。&lt;/p&gt;
  87. &lt;p&gt;而曾庆洪上任后,在此基础上帮助集团顺应时代潮流,完成新能源初步转型。&lt;/p&gt;
  88. &lt;p&gt;一边是集团整体销量超过250万辆,营收多次突破千亿。&lt;/p&gt;
  89. &lt;p&gt;另一边是自主新能源品牌  &lt;strong&gt;埃安&lt;/strong&gt;,销量已从2019年的4万辆,增长至2023年的48万辆,连续10个月销量突破4万辆,拥有AION S、AION Y等爆款车型,累计销量已经突破  &lt;strong&gt;百万辆&lt;/strong&gt;。&lt;/p&gt;
  90. &lt;div&gt;  &lt;img alt="&amp;#24191;&amp;#27773;&amp;#20928;&amp;#21033;&amp;#26292;&amp;#36300;45%&amp;#65292;&amp;#33891;&amp;#20107;&amp;#38271;&amp;#26366;&amp;#24198;&amp;#27946;7&amp;#26376;&amp;#21512;&amp;#21516;&amp;#21040;&amp;#26399;" src="https://www.qbitai.com/wp-content/uploads/replace/824f786dccc915a1b6ea853bdb0da2f3.png"&gt;&lt;/img&gt;&lt;/div&gt;
  91. &lt;p&gt;并且广汽埃安在2022年估值就达到  &lt;strong&gt;1032.39亿元&lt;/strong&gt;,成为传统车企转型最成功的代表。近期埃安总经理古惠南还表示,公司正在寻找合适的时机上市。&lt;/p&gt;
  92. &lt;p&gt;集团营收规模破千亿、完成新能源转型,曾庆红领导期间的成绩也不差。&lt;/p&gt;
  93. &lt;p&gt;所以现在回头看集团并没有在2021年曾庆洪年满60岁时,让他和前任董事长一样年满退休,而是选择签续约合同,再领导集团3年,确实押注对了。&lt;/p&gt;
  94. &lt;p&gt;但这份合同在今年7月就要到期,并且曾庆洪今年已经63岁,距离法定退休年龄65岁仅剩两年。&lt;/p&gt;
  95. &lt;p&gt;同时,作为曾庆洪任职期间成绩之一的新能源转型,今年开年成绩出现下滑。&lt;/p&gt;
  96. &lt;p&gt;今年一季度,埃安累计销量为  &lt;strong&gt;7.4万辆&lt;/strong&gt;,同比减少  &lt;strong&gt;11.98%&lt;/strong&gt;,单月销量来到2万-3万辆左右,2月更是跌破2万辆,仅1.67万辆。&lt;/p&gt;
  97. &lt;div&gt;  &lt;img alt="&amp;#24191;&amp;#27773;&amp;#20928;&amp;#21033;&amp;#26292;&amp;#36300;45%&amp;#65292;&amp;#33891;&amp;#20107;&amp;#38271;&amp;#26366;&amp;#24198;&amp;#27946;7&amp;#26376;&amp;#21512;&amp;#21516;&amp;#21040;&amp;#26399;" src="https://www.qbitai.com/wp-content/uploads/replace/e700c55c95b6c09649846ae54a94ac0b.png"&gt;&lt;/img&gt;&lt;/div&gt;
  98. &lt;p&gt;也就是说,虽然2023年转型成绩亮眼,但2024年开年不利,接下来的销量压力只会更大。&lt;/p&gt;
  99. &lt;p&gt;再加上集团2024年销量增长10%的目标,合资品牌销量又在逐渐缩水,这意味着想要完成这个目标,更依赖旗下新能源等自主品牌的销量增长。&lt;/p&gt;
  100. &lt;p&gt;无论曾庆洪是否再次续约,对于广汽集团,特别是新能源品牌,2024年都非常关键。&lt;/p&gt;
  101. &lt;p&gt;传统车企转型后能否乘胜追击,今年就会揭晓。&lt;/p&gt;
  102. &lt;p&gt;你看好广汽集团吗?&lt;/p&gt;
  103. &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>
  104.      <category>智能车参考 传统汽车怎么变? 广汽集团 穿透财报招股书 车圈最新认知</category>
  105.      <guid isPermaLink="true">https://itindex.net/detail/62918-%E5%B9%BF%E6%B1%BD-%E5%87%80%E5%88%A9-%E8%91%A3%E4%BA%8B%E9%95%BF</guid>
  106.      <pubDate>Mon, 08 Apr 2024 15:36:06 CST</pubDate>
  107.    </item>
  108.    <item>
  109.      <title>OpenAI大模型上身机器人,原速演示炸场!</title>
  110.      <link>https://itindex.net/detail/62917-openai-%E6%A8%A1%E5%9E%8B-%E4%B8%8A%E8%BA%AB</link>
  111.      <description>&lt;blockquote&gt;
  112.  &lt;p&gt;编辑部 发自 凹非寺&lt;/p&gt;
  113.  &lt;p&gt;量子位 | 公众号 QbitAI&lt;/p&gt;
  114. &lt;/blockquote&gt;
  115. &lt;p&gt;OpenAI大模型加持的机器人,深夜来袭!&lt;/p&gt;
  116. &lt;p&gt;名曰  &lt;strong&gt;Figure 01&lt;/strong&gt;,它能听会说,动作灵活。&lt;/p&gt;
  117. &lt;div&gt;  &lt;img alt="OpenAI&amp;#22823;&amp;#27169;&amp;#22411;&amp;#19978;&amp;#36523;&amp;#26426;&amp;#22120;&amp;#20154;&amp;#65292;&amp;#21407;&amp;#36895;&amp;#28436;&amp;#31034;&amp;#28856;&amp;#22330;!" src="https://www.qbitai.com/wp-content/uploads/replace/8d6f278b75cbc07eb785af4623bccdcb.gif"&gt;&lt;/img&gt;&lt;/div&gt;
  118. &lt;p&gt;能和人类描述眼前看到的一切:&lt;/p&gt;
  119. &lt;blockquote&gt;
  120.  &lt;p&gt;我在桌子上看到了一个红色的苹果,沥水架上面还有几个盘子和一个杯子;然后你站在附近,手放在桌子上。&lt;/p&gt;
  121. &lt;/blockquote&gt;
  122. &lt;div&gt;  &lt;img alt="OpenAI&amp;#22823;&amp;#27169;&amp;#22411;&amp;#19978;&amp;#36523;&amp;#26426;&amp;#22120;&amp;#20154;&amp;#65292;&amp;#21407;&amp;#36895;&amp;#28436;&amp;#31034;&amp;#28856;&amp;#22330;!" src="https://www.qbitai.com/wp-content/uploads/replace/5bfe5e2d3992794355ea4213d6ced4b1.gif"&gt;&lt;/img&gt;&lt;/div&gt;
  123. &lt;p&gt;听到人类说“想吃东西”,就马上递过去苹果。&lt;/p&gt;
  124. &lt;div&gt;  &lt;img alt="OpenAI&amp;#22823;&amp;#27169;&amp;#22411;&amp;#19978;&amp;#36523;&amp;#26426;&amp;#22120;&amp;#20154;&amp;#65292;&amp;#21407;&amp;#36895;&amp;#28436;&amp;#31034;&amp;#28856;&amp;#22330;!" src="https://www.qbitai.com/wp-content/uploads/replace/25717dda402598564fc5493f503e4f2c.gif"&gt;&lt;/img&gt;&lt;/div&gt;
  125. &lt;p&gt;而且对于自己做的事有清楚认知,给苹果是因为这是桌上唯一能吃的东西。&lt;/p&gt;
  126. &lt;p&gt;还顺便把东西整理,能  &lt;strong&gt;同时搞定两种任务&lt;/strong&gt;。&lt;/p&gt;
  127. &lt;div&gt;  &lt;img alt="OpenAI&amp;#22823;&amp;#27169;&amp;#22411;&amp;#19978;&amp;#36523;&amp;#26426;&amp;#22120;&amp;#20154;&amp;#65292;&amp;#21407;&amp;#36895;&amp;#28436;&amp;#31034;&amp;#28856;&amp;#22330;!" src="https://www.qbitai.com/wp-content/uploads/replace/7bd3ee2d165173ed7a6d9aa39befcf44.gif"&gt;&lt;/img&gt;&lt;/div&gt;
  128. &lt;p&gt;最关键的是,这些展示都  &lt;strong&gt;没有加速&lt;/strong&gt;,机器人本来的动作就这么迅速。&lt;/p&gt;
  129. &lt;p&gt;(也没人在后面操纵)&lt;/p&gt;
  130. &lt;p&gt;这下网友坐不住了,立马@波士顿动力:&lt;/p&gt;
  131. &lt;blockquote&gt;
  132.  &lt;p&gt;老伙计们,这家伙是真来劲儿了。咱得回实验室,让以前的机器人(波士顿动力)多跳点舞了。&lt;/p&gt;
  133. &lt;/blockquote&gt;
  134. &lt;div&gt;  &lt;img alt="OpenAI&amp;#22823;&amp;#27169;&amp;#22411;&amp;#19978;&amp;#36523;&amp;#26426;&amp;#22120;&amp;#20154;&amp;#65292;&amp;#21407;&amp;#36895;&amp;#28436;&amp;#31034;&amp;#28856;&amp;#22330;!" src="https://www.qbitai.com/wp-content/uploads/replace/f914641662576780d6d6f9b184067f93.png"&gt;&lt;/img&gt;&lt;/div&gt;
  135. &lt;p&gt;也有网友看在OpenAI卷完大语言模型、文生视频之后,又狙击机器人后感慨道:&lt;/p&gt;
  136. &lt;blockquote&gt;
  137.  &lt;p&gt;这是一场激烈的竞争;与OpenAl合作,苹果可能会超越特斯拉。&lt;/p&gt;
  138.  &lt;p&gt;但硬件方面,擎天柱看起来更美观,Figure 01仍然需要一些“整容手术”。(doge)&lt;/p&gt;
  139. &lt;/blockquote&gt;
  140. &lt;div&gt;  &lt;img alt="OpenAI&amp;#22823;&amp;#27169;&amp;#22411;&amp;#19978;&amp;#36523;&amp;#26426;&amp;#22120;&amp;#20154;&amp;#65292;&amp;#21407;&amp;#36895;&amp;#28436;&amp;#31034;&amp;#28856;&amp;#22330;!" src="https://www.qbitai.com/wp-content/uploads/replace/94c092fc81ae3ea037304fcc69a6d4af.png"&gt;&lt;/img&gt;&lt;/div&gt;
  141. &lt;p&gt;接下来,我们继续来看下Figure 01的细节。&lt;/p&gt;
  142. &lt;h1&gt;OpenAI视觉语言大模型加持&lt;/h1&gt;
  143. &lt;p&gt;根据创始人的介绍,Figure 01通过端到端神经网络,可以和人类自如对话。&lt;/p&gt;
  144. &lt;p&gt;基于OpenAI提供的视觉理解和语言理解能力,它能完成快速、简单、灵巧的动作。&lt;/p&gt;
  145. &lt;p&gt;模型只说是一个视觉语言大模型,是否为GPT-4V不得而知。&lt;/p&gt;
  146. &lt;div&gt;  &lt;img alt="OpenAI&amp;#22823;&amp;#27169;&amp;#22411;&amp;#19978;&amp;#36523;&amp;#26426;&amp;#22120;&amp;#20154;&amp;#65292;&amp;#21407;&amp;#36895;&amp;#28436;&amp;#31034;&amp;#28856;&amp;#22330;!" src="https://www.qbitai.com/wp-content/uploads/replace/bf4f80e8f59410bf6ffcea25d89304d2.png"&gt;&lt;/img&gt;&lt;/div&gt;
  147. &lt;p&gt;它还能规划动作、有短期记忆能力、用语言解释它的推理过程。&lt;/p&gt;
  148. &lt;div&gt;  &lt;img alt="OpenAI&amp;#22823;&amp;#27169;&amp;#22411;&amp;#19978;&amp;#36523;&amp;#26426;&amp;#22120;&amp;#20154;&amp;#65292;&amp;#21407;&amp;#36895;&amp;#28436;&amp;#31034;&amp;#28856;&amp;#22330;!" src="https://www.qbitai.com/wp-content/uploads/replace/140f8754fc86bb3921c155927648db7d.jpeg"&gt;&lt;/img&gt;&lt;/div&gt;
  149. &lt;p&gt;比如对话里说“你能把它们放在那里吗?”&lt;/p&gt;
  150. &lt;p&gt;“它们”、“那里”这种模糊表述的理解,就体现了机器人的短期记忆能力。&lt;/p&gt;
  151. &lt;p&gt;它使用了OpenAI训练的  &lt;strong&gt;视觉语言模型&lt;/strong&gt;,机器人摄像头会以10Hz拍下画面,然后神经网络将以200Hz输出  &lt;strong&gt;24自由度&lt;/strong&gt;动作(手腕+手指关节角度)。&lt;/p&gt;
  152. &lt;p&gt;具体分工上,机器人的策略也很像人类。&lt;/p&gt;
  153. &lt;p&gt;复杂动作交给AI大模型,预训练模型会对图像和文本进行常识推理,给出动作计划;&lt;/p&gt;
  154. &lt;p&gt;简单动作如抓起塑料袋(抓哪里都可以),机器人基于已学习的视觉-动作执行策略,可以做出一些“下意识”的快速反应行动。&lt;/p&gt;
  155. &lt;p&gt;同时全身控制器会负责保持机身平衡、运动稳定。&lt;/p&gt;
  156. &lt;div&gt;  &lt;img alt="OpenAI&amp;#22823;&amp;#27169;&amp;#22411;&amp;#19978;&amp;#36523;&amp;#26426;&amp;#22120;&amp;#20154;&amp;#65292;&amp;#21407;&amp;#36895;&amp;#28436;&amp;#31034;&amp;#28856;&amp;#22330;!" src="https://www.qbitai.com/wp-content/uploads/replace/d6d3a47849fe3d1a09cb1b390f285213.gif"&gt;&lt;/img&gt;&lt;/div&gt;
  157. &lt;p&gt;机器人的语音能力则基于一个文本-语音大模型微调而来。&lt;/p&gt;
  158. &lt;div&gt;  &lt;img alt="OpenAI&amp;#22823;&amp;#27169;&amp;#22411;&amp;#19978;&amp;#36523;&amp;#26426;&amp;#22120;&amp;#20154;&amp;#65292;&amp;#21407;&amp;#36895;&amp;#28436;&amp;#31034;&amp;#28856;&amp;#22330;!" src="https://www.qbitai.com/wp-content/uploads/replace/d5e273662bd294b57e1e6ab683dbf2c7.png"&gt;&lt;/img&gt;&lt;/div&gt;
  159. &lt;p&gt;除了最先进的AI模型,Figure 01背后公司——Figure的创始人兼CEO还在推文中提到,Figure方面整合了机器人的所有关键组成。&lt;/p&gt;
  160. &lt;p&gt;包括电机、中间件操作系统、传感器、机械结构等,均由Figure工程师设计。&lt;/p&gt;
  161. &lt;p&gt;据了解,这家机器人初创公司在2周前才正式宣布和OpenAI的合作,但才13天后就带来如此重磅成果。不少人都开始期待后续合作了。&lt;/p&gt;
  162. &lt;div&gt;  &lt;img alt="OpenAI&amp;#22823;&amp;#27169;&amp;#22411;&amp;#19978;&amp;#36523;&amp;#26426;&amp;#22120;&amp;#20154;&amp;#65292;&amp;#21407;&amp;#36895;&amp;#28436;&amp;#31034;&amp;#28856;&amp;#22330;!" src="https://www.qbitai.com/wp-content/uploads/replace/e59a03c1bd41133af62895efb187dc90.png"&gt;&lt;/img&gt;&lt;/div&gt;
  163. &lt;p&gt;由此,具身智能领域又有一颗新星走到了聚光灯下。&lt;/p&gt;
  164. &lt;h1&gt;“将人形机器人带进生活”&lt;/h1&gt;
  165. &lt;p&gt;说到Figure,这家公司创立于2022年,正如前文所言,再次引爆外界关注,就在十几天前——&lt;/p&gt;
  166. &lt;p&gt;官宣在新一轮融资中筹集6.75亿美元,估值冲到26亿美元,投资方几乎要集齐半个硅谷,包括微软、OpenAI、英伟达和亚马逊创始人贝佐斯等等。&lt;/p&gt;
  167. &lt;p&gt;更重要的是,OpenAI同时公开了与Figure更进一步合作的计划:将多模态大模型的能力扩展到机器人的感知、推理和交互上,“开发能够取代人类进行体力劳动的人形机器人”。&lt;/p&gt;
  168. &lt;p&gt;用现在最热的科技词汇来说,就是要一起搞  &lt;strong&gt;具身智能&lt;/strong&gt;。&lt;/p&gt;
  169. &lt;div&gt;  &lt;img alt="OpenAI&amp;#22823;&amp;#27169;&amp;#22411;&amp;#19978;&amp;#36523;&amp;#26426;&amp;#22120;&amp;#20154;&amp;#65292;&amp;#21407;&amp;#36895;&amp;#28436;&amp;#31034;&amp;#28856;&amp;#22330;!" src="https://www.qbitai.com/wp-content/uploads/replace/d7b4b759298bc2179292b9b9779feabc.png"&gt;&lt;/img&gt;&lt;/div&gt;
  170. &lt;p&gt;彼时,Figure 01的最新进展是酱婶的:&lt;/p&gt;
  171. &lt;p&gt;通过观看人类的示范视频,仅需10小时端到端训练,Figure 01就能学会用胶囊咖啡机泡咖啡。&lt;/p&gt;
  172. &lt;div&gt;  &lt;img alt="OpenAI&amp;#22823;&amp;#27169;&amp;#22411;&amp;#19978;&amp;#36523;&amp;#26426;&amp;#22120;&amp;#20154;&amp;#65292;&amp;#21407;&amp;#36895;&amp;#28436;&amp;#31034;&amp;#28856;&amp;#22330;!" src="https://www.qbitai.com/wp-content/uploads/replace/693b7dece78dddbd074e378c9c76d6fc.gif"&gt;&lt;/img&gt;&lt;/div&gt;
  173. &lt;p&gt;Figure与OpenAI的合作一公开,网友们就已经对未来的突破充满了期待。&lt;/p&gt;
  174. &lt;div&gt;  &lt;img alt="OpenAI&amp;#22823;&amp;#27169;&amp;#22411;&amp;#19978;&amp;#36523;&amp;#26426;&amp;#22120;&amp;#20154;&amp;#65292;&amp;#21407;&amp;#36895;&amp;#28436;&amp;#31034;&amp;#28856;&amp;#22330;!" src="https://www.qbitai.com/wp-content/uploads/replace/0887a2feca16c84e73bbca7267a92dd4.png"&gt;&lt;/img&gt;&lt;/div&gt;
  175. &lt;p&gt;毕竟Brett Adcock,可是把“唯一的重点是以30年的视角建立Figure,以积极影响人类的未来”这样的话都写在个人主页上了。&lt;/p&gt;
  176. &lt;p&gt;但可能没人能想得到,仅仅两周左右的时间,新进展就来了。&lt;/p&gt;
  177. &lt;blockquote&gt;
  178.  &lt;p&gt;如此之快,如此之远。并且还能持续泛化、扩展规模。&lt;/p&gt;
  179. &lt;/blockquote&gt;
  180. &lt;div&gt;  &lt;img alt="OpenAI&amp;#22823;&amp;#27169;&amp;#22411;&amp;#19978;&amp;#36523;&amp;#26426;&amp;#22120;&amp;#20154;&amp;#65292;&amp;#21407;&amp;#36895;&amp;#28436;&amp;#31034;&amp;#28856;&amp;#22330;!" src="https://www.qbitai.com/wp-content/uploads/replace/67b1ef645081c6def6ea1ba440102c5f.png"&gt;&lt;/img&gt;&lt;/div&gt;
  181. &lt;p&gt;值得一提的是,与炸场demo同时发布的,还有Figure的招聘信息:&lt;/p&gt;
  182. &lt;blockquote&gt;
  183.  &lt;p&gt;我们正在将人形机器人带进生活。加入我们。&lt;/p&gt;
  184. &lt;/blockquote&gt;
  185. &lt;div&gt;  &lt;img alt="OpenAI&amp;#22823;&amp;#27169;&amp;#22411;&amp;#19978;&amp;#36523;&amp;#26426;&amp;#22120;&amp;#20154;&amp;#65292;&amp;#21407;&amp;#36895;&amp;#28436;&amp;#31034;&amp;#28856;&amp;#22330;!" src="https://www.qbitai.com/wp-content/uploads/replace/35469ffcb10c9b98aa846f551095c6af.png"&gt;&lt;/img&gt;&lt;/div&gt;
  186. &lt;p&gt;参考链接:  &lt;br /&gt;[1]https://twitter.com/figure_robot/status/1767913661253984474?s=46&amp;amp;t=HBob6gxh8cOfZTIbieKeSA  &lt;br /&gt;
  187. [2]https://twitter.com/adcock_brett/status/1767913955295744449  &lt;br /&gt;
  188. [3]https://twitter.com/coreylynch/status/1767927194163331345&lt;/p&gt;
  189. &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>
  190.      <category>资讯 首页轮播 OpenAI 具身智能</category>
  191.      <guid isPermaLink="true">https://itindex.net/detail/62917-openai-%E6%A8%A1%E5%9E%8B-%E4%B8%8A%E8%BA%AB</guid>
  192.      <pubDate>Thu, 14 Mar 2024 05:34:26 CST</pubDate>
  193.    </item>
  194.    <item>
  195.      <title>谈谈国内前端的三大怪啖</title>
  196.      <link>https://itindex.net/detail/62916-%E5%9B%BD%E5%86%85-%E5%89%8D%E7%AB%AF-%E4%B8%89%E5%A4%A7</link>
  197.      <description>&lt;p&gt;因为工作的原因,我和一些国外的工程师们有些交流。他们对于国内环境不了解,有时候会问出一些有趣的问题,大概是这些问题的启发,让我反复在思考一些更为深入的问题。&lt;/p&gt; &lt;p&gt;今天聊三个事情:&lt;/p&gt; &lt;ul&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;  &lt;a href="https://yeee.wang/#&amp;#23567;&amp;#31243;&amp;#24207;" title="&amp;#23567;&amp;#31243;&amp;#24207;"&gt;&lt;/a&gt;小程序&lt;/h4&gt; &lt;blockquote&gt;  &lt;p&gt;每个行业都有一把银座,当坐上那把银座时,做什么便都是对的。&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;“ 我们为什么需要小程序?”&lt;/p&gt; &lt;p&gt;第一次被问到这个问题,是因为一个法国的同事。他被派去做一个移动端业务,刚好那个业务是采用小程序在做。于是一个法国小哥就在被痛苦的中文文档和黑盒逻辑中来回折磨着 。&lt;/p&gt; &lt;p&gt;于是,当我们在有一次交流中,他问出了我这个问题:  &lt;strong&gt;我们为什么需要小程序?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;说实话,我试图解释了 19 年国内的现状,以及微信小程序推出时候所带来的便利和体验等等。总之,在我看来并不够深刻的见解。&lt;/p&gt; &lt;p&gt;即便到现在为止,每次当我使用小程序的时候,依旧会复现这个问题。在 ChatGPT 11 月份出来的时候,我也问了它这个很有国内特色的问题:&lt;/p&gt; &lt;p&gt;  &lt;img alt="" src="https://md.xiaobe.top/imgs/202308062112370.png!preview.webp"&gt;&lt;/img&gt;&lt;/p&gt; &lt;p&gt;  &lt;img alt="" src="https://md.xiaobe.top/imgs/202308062112544.png!preview.webp"&gt;&lt;/img&gt;&lt;/p&gt; &lt;p&gt;  &lt;img alt="" src="https://md.xiaobe.top/imgs/202308062113320.png!preview.webp"&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;h5&gt;  &lt;a href="https://yeee.wang/#&amp;#24212;&amp;#29992;&amp;#24066;&amp;#22330;" title="&amp;#24212;&amp;#29992;&amp;#24066;&amp;#22330;"&gt;&lt;/a&gt;应用市场&lt;/h5&gt; &lt;p&gt;全世界的互联网人都知道应用市场是非常有价值的事情,可以说操作系统最值钱的部分就在于他们构建了自己的应用市场。&lt;/p&gt; &lt;p&gt;只要应用在这里注册发行,雁过拔毛,这家公司就是互联网世界里的统治阶级,规则的制定者。&lt;/p&gt; &lt;p&gt;反之则需要受制于人,APP 做的再大,也只是应用市场里的一个应用,做的好与坏还得让应用商店的评判。&lt;/p&gt; &lt;p&gt;另外,不得不承认的是,一个庞大如苹果谷歌这样的公司,他们的应用商店对于普通国内开发者来说,确实是有门槛的。&lt;/p&gt; &lt;p&gt;在国内海量的 APP 需求来临之前,能否提供一个更低成本的解决方案,来消化这些公司的投资?&lt;/p&gt; &lt;p&gt;毕竟不是所有的小企业都需要 APP,其实他们大部分需求 Web 就可以解决,但是 Web 没牌面啊,做 Web 还得砸搜索的钱才有流量。(某度搜索又做成那样…)&lt;/p&gt; &lt;p&gt;那做操作系统?太不容易,那么多人都溺死在水里了,这水太深。&lt;/p&gt; &lt;p&gt;那有没有一种办法可以既能构建生态,又有 APP 的心智,还能给入驻企业提供流量?&lt;/p&gt; &lt;p&gt;于是,在 19 年夏天,深圳滨海大厦下的软件展业基地里,每天都在轮番播放着,做 XX小程序,拥抱下一个风口…&lt;/p&gt; &lt;h5&gt;  &lt;a href="https://yeee.wang/#&amp;#20840;&amp;#26032;&amp;#20307;&amp;#39564;&amp;#24515;&amp;#26234;" title="&amp;#20840;&amp;#26032;&amp;#20307;&amp;#39564;&amp;#24515;&amp;#26234;"&gt;&lt;/a&gt;全新体验心智&lt;/h5&gt; &lt;p&gt;小程序用起来挺方便的。&lt;/p&gt; &lt;p&gt;你有没有想过,这些美妙感觉的具体都来自哪些?以及这些真的是 Web 技术本身无法提供的吗?&lt;/p&gt; &lt;ol&gt;  &lt;li&gt;靠谱感,每个小程序都有约束和规范,于是你可以将他们整整齐齐的陈放在你的列表里,仿佛你已经拥有了这一个个精心雕琢的作品,相对于一条条记不住的网页地址和鱼龙混杂的网页内容来说,这让你觉得小程序更加的有分量和靠谱。&lt;/li&gt;  &lt;li&gt;安全感,沉浸式的头部,没有一闪而过的加载条,这一切无打扰的设计,都让你觉得这是一个在你本地的 APP,而不是随时可能丢失网页。你不会因为网速白屏而感到焦虑,尽管网络差的时候,你的 KFC 依旧下不了单 &lt;/li&gt;  &lt;li&gt;沉浸感,我不知道是否打开网页时顶部黑黑的状态栏是故意留下的,还是不小心的… 这些限制都让用户非常强烈的意识到这是一个网页而不是 APP,而小程序中虽然上面也存在一个空间的空白,但是却可以被更加沉浸的主题色和氛围图替代。网页这个需求做不了?我不信。&lt;/li&gt;&lt;/ol&gt; &lt;table&gt;  &lt;tr&gt;   &lt;th&gt;H5&lt;/th&gt;   &lt;th&gt;小程序&lt;/th&gt;&lt;/tr&gt;  &lt;tr&gt;   &lt;td&gt;    &lt;img alt="" src="https://md.xiaobe.top/picgo/20230810180955.png?preview.webp"&gt;&lt;/img&gt;&lt;/td&gt;   &lt;td&gt;    &lt;img alt="" src="https://md.xiaobe.top/picgo/20230810181040.png?preview.webp"&gt;&lt;/img&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt; &lt;ol start="4"&gt;  &lt;li&gt;顺滑感,得益于 Native 的容器实现,小程序在所有的视图切换时,都可以表现出于原生应用一样的顺滑感。其实这个问题才是在很多 Hybrid 应用中,主要想借助客户端来处理和解决的问题。类似容器预开、容器切换等技术是可以解决相关问题的,只是还没有一个标准。&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;我这里没有提性能,说实话我不认为性能在小程序中是有优势的(Native 调用除外,如地图等,不是一个讨论范畴)。作为普通用户,我们感受到的只是离线加载下带来的顺滑而已。&lt;/p&gt; &lt;p&gt;而上述提到的许多优势,这对于一个高品质的 Web 应用来说是可以做得到的,但注意这里是高品质的 Web 应用。而这种“高品质”在小程序这里,只是入驻门槛而已。&lt;/p&gt; &lt;p&gt;心智,这个词,听起来很黑话,但却很恰当。当小程序通过长期这样的筛选,所沉淀出来一批这样品质的应用时。就会让每个用户即便在还没打开一个新的小程序之前,也有不错体验的心理预期。这就是心智,一种感觉跟 Web 不一样,跟 APP 有点像的心智。&lt;/p&gt; &lt;p&gt;打造心智,这件事情好像就是国内互联网企业最擅长做的事情,总是能从一些细微的差别中开辟一条独立的领域,然后不断强化灌输本来就不大的差异,等流量起来再去捞钱变现。&lt;/p&gt; &lt;hr&gt;&lt;/hr&gt; &lt;p&gt;我总是感觉现在的互利网充斥着如何赚钱的想法,好像永远赚不够。“赚钱”这个事情,在这些公司眼里就是圈人圈地抢资源,看看谁先占得先机,别人有的我也得有,这好像是最重要的事情。&lt;/p&gt; &lt;p&gt;很少有企业在思考如何创造些没有的市场,创造些真正对技术发展有贡献,对社会发展有推动作用的事情。所以在国内互联网圈也充斥着一种奇怪的价值观,有技术的不一定比赚过钱的受待见。&lt;/p&gt; &lt;p&gt;管你是 PHP 还是 GO,管你是在做游戏还是直播带货,只要赚到钱就是高人。并且端的是理所应当、理直气壮,有些老板甚至把拍摄满屋子的程序员为自己打工作为一种乐趣。什么情怀、什么优雅、什么愿景,人生就俩字:搞钱。&lt;/p&gt; &lt;p&gt;不是故意高雅,赚钱这件事情本身不寒碜,只是在已经赚到盆满钵满、一家独大的时候还在只是想着赚更多的钱,好像赚钱的目的就是为了赚钱一样,这就有点不合适。企业到一定程度是要有社会责任的,龙头企业每一个决定和举措,都有会影响接下来的几年里这个行业的价值观走向。&lt;/p&gt; &lt;blockquote&gt;  &lt;p&gt;   &lt;em&gt;当然也不是完全没有好格局的企业,我非常珍惜每一个值得尊重的国内企业,来自一个蔚来车主。&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;小程序在商业上固然是成功的,但吃的红利可以说还是来自 网页 到 应用 的心智变革。将本来流向 APP 的红利,截在了小程序生态里。&lt;/p&gt; &lt;p&gt;但对于技术生态的发展却是带来了无数条新的岔路,小程序的玩法就决定了它必须生长在某个巨型应用里面,不论是用户数据获取、还是 API 的调用,其实都是取决于应用容器的标准规范。&lt;/p&gt; &lt;p&gt;不同公司和应用之间则必然会产生差异,并且这种差异是墒增式的差异,只会随着时间的推移越变越大。如果每个企业都只关注到自己业务的增长,无外部约束的话,企业必然会根据自己的业务发展和政策需要,选择成本较低的调整 API,甚至会故意制造一些壁垒来增加这种差异。&lt;/p&gt; &lt;p&gt;  &lt;strong&gt;小程序,应该是 浏览器 与 操作系统 的融合,这本应该是推动这两项技术操刀解决的事情。&lt;/strong&gt;&lt;/p&gt; &lt;h2&gt;  &lt;a href="https://yeee.wang/#&amp;#24494;&amp;#21069;&amp;#31471;" title="&amp;#24494;&amp;#21069;&amp;#31471;"&gt;&lt;/a&gt;微前端&lt;/h2&gt; &lt;p&gt;qiankun、wujie、single-spa 是近两年火遍前端的技术方案,同样一个问题:我们为什么需要微前端?&lt;/p&gt; &lt;p&gt;我不确定是否每个在使用这项技术的前端都想清楚了这个问题,但至少在我面试过的候选人中,我很少遇到对自己项目中已经在使用的微前端,有很深的思考和理解的人。&lt;/p&gt; &lt;p&gt;先说下我的看法:&lt;/p&gt; &lt;ol&gt;  &lt;li&gt;   &lt;strong&gt;微前端,重在解决项目管理而不在用户体验。&lt;/strong&gt;&lt;/li&gt;  &lt;li&gt;   &lt;strong&gt;微前端,解决不了该优化和需要规范的问题。&lt;/strong&gt;&lt;/li&gt;  &lt;li&gt;   &lt;strong&gt;微前端,在挽救没想清楚 MPA 的 SPA 项目。&lt;/strong&gt;&lt;/li&gt;&lt;/ol&gt; &lt;h3&gt;  &lt;a href="https://yeee.wang/#&amp;#27809;&amp;#26377;&amp;#19975;&amp;#33021;&amp;#38134;&amp;#24377;" title="&amp;#27809;&amp;#26377;&amp;#19975;&amp;#33021;&amp;#38134;&amp;#24377;"&gt;&lt;/a&gt;没有万能银弹&lt;/h3&gt; &lt;blockquote&gt;  &lt;p&gt;银色子弹(英文:Silver Bullet),或者称“银弹”“银质子弹”,指由纯银质或镀银的子弹。在欧洲民间传说及19世纪以来哥特小说风潮的影响下,银色子弹往往被描绘成具有驱魔功效的武器,是针对狼人、吸血鬼等超自然怪物的特效武器。后来也被比喻为具有极端有效性的解决方法,作为杀手锏、最强杀招、王牌等的代称。&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;所有技术的发展都是建立在前一项技术的基础之上,但技术依赖的选择过程中一定需要保留第一性原理的意识。&lt;/p&gt; &lt;p&gt;当 React、Vue 兴起,当 打包技术(Webpack) 兴起,当 网页应用(SPA) 兴起,这些杰出的技术突破都在不同场景和领域中给行业提供了新的思路、新的方案。&lt;/p&gt; &lt;p&gt;不知从何时开始,前端除了 div 竟说不出其他的标签(还有说 View 的),项目中再也不会考虑给一个通用的 class 解决通用样式问题。&lt;/p&gt; &lt;p&gt;不知从何时开始,有没有权限需要等到 API 请求过后才知道,没有权限的话再把页面跳转过去申请。&lt;/p&gt; &lt;p&gt;不知从何时开始,大家的页面都放在了一个项目里,两个这样的巨石应用融合竟然变成了一件困难的事。&lt;/p&gt; &lt;p&gt;上面这些不合理的现状,都是在不同的场景下,不思考适不适合,单一信奉 “一招吃遍天” 下演化出的问题。&lt;/p&gt; &lt;p&gt;  &lt;strong&gt;B 端应用,是否应该使用 SPA?&lt;/strong&gt; 这其实是一个需要思考的问题。 &lt;/p&gt; &lt;p&gt;微前端从某种程度上来讲,是认准 SPA 了必须是互联网下一代应用标准的产物,好像有了 SPA 以后,MPA 就变得一文不值。甭管页面是移动端的还是PC的;甭管页面是面对 C 端的还是 B 端的;甭管一个系统是有 20 个页面还是 200 个页面,一律行这套逻辑。&lt;/p&gt; &lt;p&gt;SPA 不是万能银弹,React 不是万能银弹,Tailwind 不是万能银弹。在新技术出现的时候,保持热情也要保持克制。&lt;/p&gt; &lt;blockquote&gt;  &lt;p&gt;ps. 我也十分痛恨 React 带来的这种垄断式的生态,一个 React 组件将 HTML 和 Style 都吃进去,让你即使在做一个移动端的纯展示页面时,也需要背上这些称重的负担。&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;  &lt;strong&gt;质疑 “墨守成规”,打开视野,深度把玩,理性消费。&lt;/strong&gt;&lt;/p&gt; &lt;h3&gt;  &lt;a href="https://yeee.wang/#&amp;#20998;&amp;#32780;&amp;#27835;&amp;#20043;" title="&amp;#20998;&amp;#32780;&amp;#27835;&amp;#20043;"&gt;&lt;/a&gt;分而治之&lt;/h3&gt; &lt;p&gt;分治法,一个很基本的工程思维。&lt;/p&gt; &lt;p&gt;在我看来在一个正常商业迭代项目中的主要维护者,最好不要超过 3 个人,注意是主要维护者(Maintainer) 。&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;当微前端做到这一部分的时候,我不禁在想,这好像是在用 JavaScript 实现一个浏览器的运行容器。这种本应该浏览器本身该做的事情,难道 JS 可以做的更好?&lt;/p&gt; &lt;p&gt;只是做到更好的项目拆分,组织协同的话,引入后端服务,由后端管控路由表和页面规则,将页面直接做成 MPA,这个方案或许并不比引入微前端成本高多少。&lt;/p&gt; &lt;h3&gt;  &lt;a href="https://yeee.wang/#&amp;#20307;&amp;#39564;&amp;#24046;&amp;#24322;" title="&amp;#20307;&amp;#39564;&amp;#24046;&amp;#24322;"&gt;&lt;/a&gt;体验差异&lt;/h3&gt; &lt;p&gt;从 SPA 再回 MPA,说了半天不又回去了么。&lt;/p&gt; &lt;p&gt;所以不防想想:在 B端 业务中使用 SPA 的优势在哪里?&lt;/p&gt; &lt;h5&gt;  &lt;a href="https://yeee.wang/#&amp;#27969;&amp;#30021;&amp;#30340;&amp;#29992;&amp;#25143;&amp;#20307;&amp;#39564;&amp;#65306;" title="&amp;#27969;&amp;#30021;&amp;#30340;&amp;#29992;&amp;#25143;&amp;#20307;&amp;#39564;&amp;#65306;"&gt;&lt;/a&gt;流畅的用户体验:&lt;/h5&gt; &lt;p&gt;这个话题其实涵盖范围很广,对于 SPA 能带来的 “流畅体验”,对于大多数情况下是指:  &lt;strong&gt;导航菜单不变,内容变化 发生变化,页面切换中间不出现白屏&lt;/strong&gt;。&lt;/p&gt; &lt;p&gt;但要做到这个点,其实对于 MPA 其实并没有那么困难,你只需要保证你的 FCP 在 500ms 以内就行。&lt;/p&gt; &lt;p&gt;  &lt;img alt="" src="https://md.xiaobe.top/imgs/202308121216465.gif!preview.webp"&gt;&lt;/img&gt;&lt;/p&gt; &lt;p&gt;以上的页面切换全部都是 MPA 的多页面切换,我们只是简单做了导航菜单的 拆分 和 SWR,并没有什么特殊的 preload、prefetch 处理,就得到了这样的效果。&lt;/p&gt; &lt;p&gt;因为浏览器本身在页面切换时会在 unload 之前先 hold 当前页面的视图不变,发起一下一个 document 的请求,当页面的视图渲染做到足够快和界面结构稳定就可以得到这样的效果。&lt;/p&gt; &lt;blockquote&gt;  &lt;p&gt;这项浏览器的优化手段我找了很久,想找一篇关于它的博文介绍,但确实没找到相关内容,所以 500ms 也是我的一个大致测算,如果你知道相关的内容,可以在评论区补充,不胜感激。&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;所以从这个角度来看,浏览器本身就在尽最大的努力做这些优化,并且他们的优化会更底层、更有效的。&lt;/p&gt; &lt;h5&gt;  &lt;a href="https://yeee.wang/#&amp;#31163;&amp;#32447;&amp;#35775;&amp;#38382;-PWA" title="&amp;#31163;&amp;#32447;&amp;#35775;&amp;#38382; (PWA)"&gt;&lt;/a&gt;离线访问 (PWA)&lt;/h5&gt; &lt;p&gt;SPA 确实会有更好的 PWA 组织能力,一个完整的 SPA 应用甚至可以只针对编译层做改动就可以支持 PWA 能力。&lt;/p&gt; &lt;p&gt;但如果看微前端下的 SPA 应用,需要支持 PWA 那就同样需要分析各子应用之间的元数据,定制 Service Worker。这种组织关系和定制 SW,对于元数据对于数据是来自前端还是后端,并不在意。&lt;/p&gt; &lt;p&gt;也就是说微前端模式下的 PWA,同样的投入成本,把页面都管理在后端服务中的 MPA 应用也是可以做到相同效果的。&lt;/p&gt; &lt;h5&gt;  &lt;a href="https://yeee.wang/#&amp;#39033;&amp;#30446;&amp;#21327;&amp;#21516;&amp;#12289;&amp;#20195;&amp;#30721;&amp;#22797;&amp;#29992;" title="&amp;#39033;&amp;#30446;&amp;#21327;&amp;#21516;&amp;#12289;&amp;#20195;&amp;#30721;&amp;#22797;&amp;#29992;"&gt;&lt;/a&gt;项目协同、代码复用&lt;/h5&gt; &lt;p&gt;有人说 SPA 项目下,项目中的组件、代码片段是可以相互之间复用的,在 MPA 下就相对麻烦。&lt;/p&gt; &lt;p&gt;这其实涉及到项目划分的领域,还是要看具体的需求也业务复杂度来定。如果说整个系统就是二三十个页面,这做成 SPA 使用前端接管路由高效简单,无可厚非。&lt;/p&gt; &lt;p&gt;但如果你本身在面对的是一个服务于复杂业务的 B 端系统,比如类似 阿里云、教务系统、ERP 系统或者一些大型内部系统,这种往往需要多团队合作开发。这种时候就需要跟完善的项目划分、组织协同和系统整合的方案。&lt;/p&gt; &lt;p&gt;这个时候 SPA 所体现出的优势在这样的诉求下就会相对较弱,在同等投入的情况下 MPA 的方案反而会有更少的执行成本。&lt;/p&gt; &lt;blockquote&gt;  &lt;p&gt;也不是所有项目一开始就会想的那么清楚,或许一开始的时候就是个简单的 SPA 项目,但是随着项目的不断迭代,才变成了一个个复杂的巨石应用,现在如果再拆出来也会有许多迁移成本。引入微前端,则可以…&lt;/p&gt;&lt;/blockquote&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;这个道理跟防沙治沙一样,哪有那么多一蹴而就、立竿见影的好事。&lt;/p&gt; &lt;h2&gt;  &lt;a href="https://yeee.wang/#&amp;#27169;&amp;#22359;&amp;#21152;&amp;#36733;" title="&amp;#27169;&amp;#22359;&amp;#21152;&amp;#36733;"&gt;&lt;/a&gt;模块加载&lt;/h2&gt; &lt;p&gt;模块加载这件事情,从玉伯大佬的成名作 sea.js 开始就是一个非常值得探讨的问题。在当时 jQuery 的时代里,这是一个绝对超前的项目,我也在实际业务中体会过在无编译的环境下 sea.js 的便捷。&lt;/p&gt; &lt;p&gt;  &lt;img alt="" src="https://md.xiaobe.top/picgo/202308141406072.png?preview.webp"&gt;&lt;/img&gt;&lt;/p&gt; &lt;p&gt;实际上,不论是微前端、低代码、会场搭建等热门话题离不开这项技术基础。&lt;/p&gt; &lt;p&gt;  &lt;code&gt;import * from *&lt;/code&gt; 我们每天都在用,但最终的产物往往是一个自运行的 JS Bundle,这来自于 Webpack、Vite 等编译技术的发展。让我们可以更好的组织项目结构,以构建更复杂的前端应用。&lt;/p&gt; &lt;p&gt;模块的概念用久了,就会自然而然的在遇到浏览器环境中,遇到动态模块加载的需求时,想到这种类似模块加载的能力。&lt;/p&gt; &lt;p&gt;比如在遇到会场千奇百怪的个性化营销需求时,能否将模块的 Props 开放出来,给到非技术人员,以更加灵活的方式让他们去做自由组合。&lt;/p&gt; &lt;p&gt;比如在低代码平台中,让开发者自定义扩展组件,动态的将开发好的组件注册进低代码平台中,以支持更加个性的需求。&lt;/p&gt; &lt;p&gt;在万物皆组件的思想影响下,把一整个完整页面都看做一个组件也不是不可以。于是在一些团队中,甚至提倡所有页面都可以搭建、搭建不了的就做一个大的页面组件。这样及可以减少维护运行时的成本,又可以统一管控和优化,岂不美哉。&lt;/p&gt; &lt;p&gt;当这样大一统的“天才方案”逐渐发展成为标准后,也一定会出现一些特殊场景无法使用,但没关系,这些天才设计者肯定会提供一种更加天才的扩展方案出来。比如插件,比如扩展,比如 IF ELSE。再后来,就会有性能优化了,而优化的 追赶对象 就是用原来那种简单直出的方案。&lt;/p&gt; &lt;p&gt;有没有发现,这好像是在轮回式的做着自己出的数学题,一道接一道,仿佛将 1 + 1的结论重新演化了一遍。&lt;/p&gt; &lt;blockquote&gt;  &lt;p&gt;题外话,我曾经自己实现过一套通过 JSON Schema 描述 React 结构的 “库” ,用于一个低代码核心层的渲染。在我的实现过程中,我越发觉得我在做一件把 JSX 翻译成 JS 的事情,但 JSX 或者 HTML 本身不就是一种 DSL 么。为什么一定要把它翻译成 JSON 来传输呢?或者说这样的封装其本身有意义么?这不就是在做 PHP、ASP 直接返回带有数据的 HTML Ajax 一样的事情么。&lt;/p&gt;  &lt;p&gt;    &lt;img alt="" src="https://md.xiaobe.top/picgo/20230814153456.png?preview.webp"&gt;&lt;/img&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;传统的浏览器运行环境下要实现一个模块加载器,无非是在全局挂载一个注册器,通过 Script 插入一段新的 JS,该 JS 通过特殊的头尾协议,将运行时的代码声明成一个函数,注册进事先挂载好的注册器。&lt;/p&gt; &lt;p&gt;但实际的实现场景往往要比这复杂的多,也有一些问题是这种非原生方式无法攻克的问题。比如全局注册器的命名冲突;同模块不同版本的加载冲突;并发加载下的时序问题;多次模块加载的缓存问题 等等等等等…&lt;/p&gt; &lt;p&gt;到最后发现,这些事情好像又是在用 JS 做浏览器该做的事情。然而浏览器果然就做了,  &lt;code&gt;&amp;lt;script type=&amp;quot;module&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;,Vite 就主要采用这种模式实现了它 1 年之内让各大知名项目切换到 Vite 的壮举。&lt;/p&gt; &lt;p&gt;“但我们用不了,有兼容性问题。”&lt;/p&gt; &lt;p&gt;哇哦,当我看着大家随意写出的   &lt;code&gt;display: grid&lt;/code&gt; 样式定义,不禁再次感叹人们对未知的恐惧。&lt;/p&gt; &lt;p&gt;  &lt;img alt="" src="https://md.xiaobe.top/picgo/20230814155146.png?preview.webp"&gt;&lt;/img&gt;&lt;/p&gt; &lt;p&gt;  &lt;em&gt;   &lt;code&gt;import.meta&lt;/code&gt; 的兼容性是另外一个版本,是需要 iOS12 以上,详情参考:   &lt;a href="https://caniuse.com/?search=import.meta" rel="noopener" target="_blank"&gt;https://caniuse.com/?search=import.meta&lt;/a&gt;&lt;/em&gt;&lt;/p&gt; &lt;p&gt;试想一下,现在的低代码、会场搭建等等各类场景的模块加载部分,如果都直接采用 ESM 的形式处理,这对于整个前端生态和开发体验来说会有多么大的提升。&lt;/p&gt; &lt;p&gt;模块加载,时至今日,本来就已经不再需要 loader。 正如 seajs 中写的:  &lt;a href="https://github.com/seajs/seajs/issues/588" rel="noopener" target="_blank"&gt;前端模块化开发那点历史&lt;/a&gt;&lt;/p&gt; &lt;blockquote&gt;  &lt;p&gt;历史不是过去,历史正在上演。随着 W3C 等规范、以及浏览器的飞速发展,前端的模块化开发会逐步成为基础设施。一切终究都会成为历史,未来会更好。&lt;/p&gt;&lt;/blockquote&gt; &lt;h2&gt;  &lt;a href="https://yeee.wang/#&amp;#32467;&amp;#35821;" title="&amp;#32467;&amp;#35821;"&gt;&lt;/a&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;blockquote&gt;  &lt;p&gt;   &lt;em&gt;希望未来技术人不要再去追逐 Write Once, Run Everywhere 的事情…&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&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>
  198.      <category>框架设计 设计模式 代码人生</category>
  199.      <guid isPermaLink="true">https://itindex.net/detail/62916-%E5%9B%BD%E5%86%85-%E5%89%8D%E7%AB%AF-%E4%B8%89%E5%A4%A7</guid>
  200.      <pubDate>Tue, 15 Aug 2023 00:57:00 CST</pubDate>
  201.    </item>
  202.    <item>
  203.      <title>kafka如何保证消息顺序性?</title>
  204.      <link>https://itindex.net/detail/62915-kafka-%E6%B6%88%E6%81%AF</link>
  205.      <description>&lt;hr&gt;&lt;/hr&gt;
  206. &lt;h2&gt;highlight: androidstudio
  207. theme: cyanosis&lt;/h2&gt;
  208. &lt;p&gt;kafka架构如下:&lt;/p&gt;
  209. &lt;p&gt;  &lt;img alt="&amp;#22270;&amp;#29255;" src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c3e3f56095b14f0887f960baf6edf705~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=800&amp;h=606&amp;s=24491&amp;e=png&amp;a=1&amp;b=000000"&gt;&lt;/img&gt;&lt;/p&gt;
  210. &lt;p&gt;Kafka 保证消息顺序性的关键在于其分区(Partition)机制。在 Kafka 中,每个主题(Topic)可以被分割成多个分区,消息被追加到每个分区中,并且在每个分区内部,消息是有序的。但是,Kafka 只保证单个分区内的消息顺序,而不保证跨分区的消息顺序。如果需要保证顺序消费,可以采用以下策略:&lt;/p&gt;
  211. &lt;ol&gt;
  212.  &lt;li&gt;分区设计:在 Kafka 主题中根据一定的规则为业务标识分配一个唯一的标识符,并将相同标识符的消息发送到同一个分区中。例如,可以使用组织的ID作为消息的key,这样相同ID的消息会被发送到同一个分区。&lt;/li&gt;
  213.  &lt;li&gt;消费者组配置:确保每个消费者组只有一个消费者,这样每个分区只有一个消费者消费消息。这可以确保相同分区的消息只会按照顺序被一个消费者消费。&lt;/li&gt;
  214. &lt;/ol&gt;
  215. &lt;h2&gt;组织调整如何使用kafka同步下游&lt;/h2&gt;
  216. &lt;p&gt;当调整组织架构时,确保消息的顺序性尤为重要,因为组织结构的变更可能会影响到多个层级和部门。以下是使用 Kafka 来同步组织架构调整的步骤,我们将通过一个例子来展示如何实现这一过程。&lt;/p&gt;
  217. &lt;h3&gt;确定分区键&lt;/h3&gt;
  218. &lt;p&gt;为了保证组织架构调整的顺序性,可以使用组织ID或者根组织ID作为分区键。这样,同一个组织或相关联的组织的所有调整消息都会被发送到同一个分区。&lt;/p&gt;
  219. &lt;h3&gt;生产者发送消息&lt;/h3&gt;
  220. &lt;p&gt;生产者在发送组织架构调整消息时,使用组织ID作为键。这样做确保了同一个组织的所有相关消息都会顺序地发送到同一个分区中。&lt;/p&gt;
  221. &lt;h3&gt;消费者处理消息&lt;/h3&gt;
  222. &lt;p&gt;消费者从各自的分区读取消息,并按照接收的顺序处理这些组织架构调整的消息。这保证了在单个分区内,组织架构的变更是有序的。&lt;/p&gt;
  223. &lt;h3&gt;流程图&lt;/h3&gt;
  224. &lt;p&gt;  &lt;img alt="image.png" src="https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/eda94c2aa9c04f279a7f9d01f8f378d5~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=1630&amp;h=222&amp;s=45508&amp;e=png&amp;b=fefefe"&gt;&lt;/img&gt;&lt;/p&gt;
  225. &lt;ul&gt;
  226.  &lt;li&gt;生产者(Producer)根据组织ID将组织架构调整消息发送到 Kafka 主题(Topic)。&lt;/li&gt;
  227.  &lt;li&gt;Kafka 根据提供的键(组织ID)将消息路由到相应的分区。&lt;/li&gt;
  228.  &lt;li&gt;消费者组(Consumer Group)中的消费者按分区消费消息,保证了分区内消息的顺序性。&lt;/li&gt;
  229.  &lt;li&gt;消费者处理组织架构调整消息并更新数据库。&lt;/li&gt;
  230. &lt;/ul&gt;
  231. &lt;h3&gt;实现&lt;/h3&gt;
  232. &lt;h4&gt;生产者&lt;/h4&gt;
  233. &lt;p&gt;生产者将组织架构调整消息发送到Kafka,使用组织ID作为键来保证同一个组织的消息被发送到同一分区。&lt;/p&gt;
  234. &lt;pre&gt;  &lt;code&gt;public class OrgProducer {
  235.     public static void main(String[] args) {
  236.         Properties properties = new Properties();
  237.         properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, &amp;quot;localhost:9092&amp;quot;);
  238.         properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
  239.         properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
  240.  
  241.         KafkaProducer&amp;lt;String, String&amp;gt; producer = new KafkaProducer&amp;lt;&amp;gt;(properties);
  242.  
  243.         String topic = &amp;quot;org-structure-changes&amp;quot;;
  244.         String orgId = &amp;quot;org123&amp;quot;; // 组织ID作为键
  245.         String message = &amp;quot;Org structure updated for org123&amp;quot;;
  246.  
  247.         ProducerRecord&amp;lt;String, String&amp;gt; record = new ProducerRecord&amp;lt;&amp;gt;(topic, orgId, message);
  248.  
  249.         producer.send(record);
  250.         producer.close();
  251.     }
  252. }
  253. &lt;/code&gt;&lt;/pre&gt;
  254. &lt;h4&gt;消费者&lt;/h4&gt;
  255. &lt;p&gt;消费者从Kafka读取组织架构调整的消息,并按顺序处理它们。&lt;/p&gt;
  256. &lt;pre&gt;  &lt;code&gt;public class OrgConsumer {
  257.     public static void main(String[] args) {
  258.         Properties properties = new Properties();
  259.         properties.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, &amp;quot;localhost:9092&amp;quot;);
  260.         properties.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
  261.         properties.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
  262.         properties.put(ConsumerConfig.GROUP_ID_CONFIG, &amp;quot;org-structure-consumer-group&amp;quot;);
  263.         properties.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, &amp;quot;earliest&amp;quot;);
  264.  
  265.         KafkaConsumer&amp;lt;String, String&amp;gt; consumer = new KafkaConsumer&amp;lt;&amp;gt;(properties);
  266.  
  267.         String topic = &amp;quot;org-structure-changes&amp;quot;;
  268.         consumer.subscribe(Collections.singletonList(topic));
  269.  
  270.         while (true) {
  271.             ConsumerRecords&amp;lt;String, String&amp;gt; records = consumer.poll(Duration.ofMillis(100));
  272.             for (ConsumerRecord&amp;lt;String, String&amp;gt; record : records) {
  273.                 System.out.printf(&amp;quot;Received message: key = %s, value = %s%n&amp;quot;, record.key(), record.value());
  274.                 // 处理组织架构调整消息
  275.             }
  276.         }
  277.     }
  278. }
  279. &lt;/code&gt;&lt;/pre&gt;
  280. &lt;p&gt;在这个例子中,生产者使用组织ID作为键发送消息,以确保相同组织的消息被发送到相同的分区。消费者从分区中读取消息并按顺序处理,保证了组织架构调整的顺序性。&lt;/p&gt;
  281. &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>
  282.      <category />
  283.      <guid isPermaLink="true">https://itindex.net/detail/62915-kafka-%E6%B6%88%E6%81%AF</guid>
  284.      <pubDate>Mon, 04 Mar 2024 18:57:02 CST</pubDate>
  285.    </item>
  286.    <item>
  287.      <title>糖尿病常见并发症风险降低73%!华科大最新研究:做好这3件生活小事</title>
  288.      <link>https://itindex.net/detail/62914-%E7%B3%96%E5%B0%BF%E7%97%85-%E5%B8%B8%E8%A7%81-%E5%B9%B6%E5%8F%91%E7%97%87</link>
  289.      <description>&lt;div&gt;  &lt;p&gt;▎药明康德内容团队编辑&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;外周动脉疾病影响全球超过2亿人,是造成下肢截肢的主要原因。2型糖尿病患者发生外周动脉疾病的风险是一般健康人群的2~4倍。因此,   &lt;strong&gt;确定能够预防或延缓糖尿病患者外周动脉疾病发生的有效措施具有重要的公共卫生意义&lt;/strong&gt;。然而,综合生活方式能否以及在多大程度上可降低2型糖尿病患者的外周动脉疾病发生风险尚不清楚。同时,遵循健康的生活方式能否抵消外周动脉疾病的遗传风险尚不明确。此外,代谢相关指标在上述关联中是否存在中介作用亦不清楚。&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;近期,国际权威期刊   &lt;em&gt;Diabetes Care&lt;/em&gt;在线刊发了   &lt;strong&gt;华中科技大学公共卫生学院&lt;/strong&gt;   &lt;strong&gt;刘刚教授&lt;/strong&gt;   &lt;strong&gt;团队&lt;/strong&gt;题为“可改变的生活方式因素、遗传易感性与2型糖尿病患者外周动脉疾病发生风险的前瞻性研究”(Modifiable
  290. Lifestyle Factors, Genetic Risk, and Incident Peripheral Artery Disease Among
  291. Individuals With Type 2 Diabetes: A Prospective Study)的最新研究成果。研究发现,   &lt;strong&gt;2型糖尿病患者坚持健康的生活方式与外周动脉疾病风险显著降低相关,且上述关联不受外周动脉疾病遗传易感性的影响。&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;/p&gt;  &lt;img src="https://cdn.linkresearcher.com/uxa1gmyq-4nts-b78j-ovfk-0z6wm5cq"&gt;&lt;/img&gt;截图来源:Diabetes Care  &lt;p&gt;   &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;本研究共纳入14543名2型糖尿病患者,在平均随访约13.5年后,新发628例外周动脉疾病。研究定义的加权综合生活方式评分基于以下6个组分:&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;    &lt;p&gt;保持健康腰臀比(女性&amp;lt;0.85,男性&amp;lt;0.90)&lt;/p&gt;&lt;/li&gt;   &lt;li&gt;    &lt;p&gt;不吸烟&lt;/p&gt;&lt;/li&gt;   &lt;li&gt;    &lt;p&gt;限制饮酒(酒精摄入量女性<14克/天,男性每天<28克/天)&lt;/p&gt;&lt;/li&gt;   &lt;li&gt;    &lt;p&gt;积极体育锻炼(每周中等体力活动≥150分钟或每周剧烈体力活动≥75分钟)&lt;/p&gt;&lt;/li&gt;   &lt;li&gt;    &lt;p&gt;健康饮食(以下10种饮食成分中,≥5种达到理想摄入水平,包括:水果、蔬菜、全谷物、鱼、乳制品、植物油、精制谷物、加工肉类、未加工肉类和含糖饮料)。&lt;/p&gt;&lt;/li&gt;   &lt;li&gt;    &lt;p&gt;充足的睡眠时长(7~8小时/天)&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;每符合一项计1分,不符合该项计为0分。基于多变量调整的Cox模型中每个生活方式因素与外周动脉疾病的相关系数,生成加权生活方式评分(范围:0~6分),并进一步将其分为不健康、中等和健康三组。在校正了人口统计学、糖尿病患病时长、血糖控制状态及使用降糖、降脂药物等多种潜在混杂因素后发现:&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;    &lt;p&gt;     &lt;strong&gt;在2型糖尿病患者中,不吸烟、限制饮酒和保持健康腰臀比均与外周动脉疾病发生风险降低显著相关&lt;/strong&gt;。&lt;/p&gt;    &lt;p&gt;&lt;/p&gt;&lt;/li&gt;   &lt;li&gt;    &lt;p&gt;与采取不健康的生活方式的患者相比,     &lt;strong&gt;遵循健康的生活方式的2型糖尿病患者外周动脉疾病发生风险下降73%,且上述关联不受外周动脉疾病遗传易感性的影响&lt;/strong&gt;。人群归因分数结果提示,如果糖尿病患者均坚持健康的生活方式,理论上可以避免近60%的外周动脉疾病事件发生。&lt;/p&gt;    &lt;p&gt;&lt;/p&gt;&lt;/li&gt;   &lt;li&gt;    &lt;p&gt;在加权生活方式评分与糖尿病患者外周动脉疾病关联之间,     &lt;strong&gt;脂代谢、肝肾功能、炎症等代谢指标发挥潜在的中介作用,且总的中介比例为13.3%&lt;/strong&gt;。&lt;/p&gt;    &lt;p&gt;     &lt;br /&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;   &lt;img src="https://cdn.linkresearcher.com/zu1cqobv-kart-p1jz-gyv5-9tbx68dw"&gt;&lt;/img&gt;&lt;/p&gt;  &lt;p&gt;▲健康生活方式、遗传易感性与2型糖尿病患者外周动脉疾病发生风险的前瞻性关联(图片来源:参考文献[1])   &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&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;/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>
  292.      <category />
  293.      <guid isPermaLink="true">https://itindex.net/detail/62914-%E7%B3%96%E5%B0%BF%E7%97%85-%E5%B8%B8%E8%A7%81-%E5%B9%B6%E5%8F%91%E7%97%87</guid>
  294.      <pubDate>Mon, 12 Feb 2024 04:16:10 CST</pubDate>
  295.    </item>
  296.    <item>
  297.      <title>如何进行微服务的划分</title>
  298.      <link>https://itindex.net/detail/62913-%E4%BD%95%E8%BF%9B-%E5%BE%AE%E6%9C%8D%E5%8A%A1</link>
  299.      <description>&lt;div&gt;    &lt;div&gt;      &lt;p&gt;本文是我在 2021 GIAC 上的一次分享        &lt;a href="https://link.zhihu.com/?target=https%3A//giac.msup.com.cn/teacher%3Fid%3D8281" rel="nofollow noreferrer" target="_blank"&gt;《Hints for Microservice design》&lt;/a&gt;的精简过后的讲稿。&lt;/p&gt;      &lt;h2&gt;前言&lt;/h2&gt;      &lt;p&gt;本次分享的内容主要是关于业务架构的讨论,业务架构不像技术架构一样有明确的好坏衡量标准,例如评价数据库的技术架构好不好,就可以在限定的资源限制下去 benchmark 进行评判,但是业务架构不能 benchmark。你现在不能证明某个业务架构是好的,未来也不能。所以我把我分享的内容称为        &lt;strong&gt;hint&lt;/strong&gt;,而不是 Guide,Principle;这些只是写个人经验的简单总结而已,所以「Don&amp;apos;t Belive Me!」&lt;/p&gt;      &lt;img src="data:image/svg+xml;utf8,&lt;svg xmlns='http://www.w3.org/2000/svg' width='1024' height='768'&gt;&lt;/svg&gt;" width="1024"&gt;&lt;/img&gt;      &lt;p&gt;本次分享总共分为两大部分&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;strong&gt;期待解决的问题,目标,现状&lt;/strong&gt;」和「        &lt;strong&gt;如何设计架构,有哪些维度,好的标准是什么&lt;/strong&gt;」&lt;/p&gt;      &lt;img src="data:image/svg+xml;utf8,&lt;svg xmlns='http://www.w3.org/2000/svg' width='1024' height='768'&gt;&lt;/svg&gt;" width="1024"&gt;&lt;/img&gt;      &lt;h2&gt;期待解决的问题,目标,现状&lt;/h2&gt;      &lt;p&gt;我们不从微服务的定义开始进行讨论,而是从我们期望解决的问题开始进行讨论。&lt;/p&gt;      &lt;h3&gt;期望微服务解决什么问题?&lt;/h3&gt;      &lt;p&gt;首先需要回答一个问题是「研发团队做得好坏的标准是什么」?我个人喜欢用        &lt;a href="https://link.zhihu.com/?target=https%3A//cloud.google.com/blog/products/devops-sre/using-the-four-keys-to-measure-your-devops-performance" rel="nofollow noreferrer" target="_blank"&gt;four key metrics&lt;/a&gt;进行衡量。即&lt;/p&gt;      &lt;ul&gt;        &lt;li&gt;Deployment Frequency—How often an organization successfully releases to production.&lt;/li&gt;        &lt;li&gt;Lead Time for Changes—The amount of time it takes a commit to get into production.&lt;/li&gt;        &lt;li&gt;Change Failure Rate—The percentage of deployments causing a failure in production.&lt;/li&gt;        &lt;li&gt;Time to Restore Service—How long it takes an organization to recover from a failure in production.&lt;/li&gt;&lt;/ul&gt;      &lt;p&gt;这四个指标从研发速度和研发质量两个维度进行了衡量。&lt;/p&gt;      &lt;p&gt;架构设计成什么样子有利于提高研发的速度和质量呢?其实是尽可能的自治,不互相依赖,自己搞自己的;我在公司的技术群里发起过一个投票「期望微服务解决什么问题?」,也一定程度印证了这个观点;&lt;/p&gt;      &lt;img src="data:image/svg+xml;utf8,&lt;svg xmlns='http://www.w3.org/2000/svg' width='1024' height='768'&gt;&lt;/svg&gt;" width="1024"&gt;&lt;/img&gt;      &lt;h3&gt;现状&lt;/h3&gt;      &lt;p&gt;现状是怎样的呢?大部分业务系统如下面两个动画所示&lt;/p&gt;      &lt;img src="data:image/svg+xml;utf8,&lt;svg xmlns='http://www.w3.org/2000/svg' width='320' height='240'&gt;&lt;/svg&gt;" width="320"&gt;&lt;/img&gt;      &lt;p&gt;        &lt;br /&gt;&lt;/p&gt;      &lt;img src="data:image/svg+xml;utf8,&lt;svg xmlns='http://www.w3.org/2000/svg' width='320' height='240'&gt;&lt;/svg&gt;" width="320"&gt;&lt;/img&gt;      &lt;h3&gt;目标&lt;/h3&gt;      &lt;p&gt;理想的情况又是怎样的呢?如果用一张图表示,我希望理想的业务系统可以像乐高一样,每一类乐高组件是一个子系统(业务能力),可以利用不同类的组件基础能力组合成复杂的业务能力(系统)。&lt;/p&gt;      &lt;img src="data:image/svg+xml;utf8,&lt;svg xmlns='http://www.w3.org/2000/svg' width='1024' height='768'&gt;&lt;/svg&gt;" width="1024"&gt;&lt;/img&gt;      &lt;p&gt;那我们来看看大部分公司的真实拆分微服务的历程,最后有没有达到像乐高一样各组件尽可能的自治,又能拼装出来复杂业务系统的目的。即「满足一定规范的尽可能的自治,又能自由组合」。接下来我们来看拆分案例&lt;/p&gt;      &lt;h3&gt;案例&lt;/h3&gt;      &lt;p&gt;最开始业务模型比较简单,要满足的需求比较少,只有一个系统。&lt;/p&gt;      &lt;img src="data:image/svg+xml;utf8,&lt;svg xmlns='http://www.w3.org/2000/svg' width='1024' height='768'&gt;&lt;/svg&gt;" width="1024"&gt;&lt;/img&gt;      &lt;p&gt;后来发现供应链很重要,出现问题就是重大故障。所以需要把供应链系统单独拆出来单独维护。&lt;/p&gt;      &lt;img src="data:image/svg+xml;utf8,&lt;svg xmlns='http://www.w3.org/2000/svg' width='1024' height='768'&gt;&lt;/svg&gt;" width="1024"&gt;&lt;/img&gt;      &lt;p&gt;后来大家发现课时 CRUD 模块是公用模块也拆出来吧&lt;/p&gt;      &lt;img src="data:image/svg+xml;utf8,&lt;svg xmlns='http://www.w3.org/2000/svg' width='1024' height='768'&gt;&lt;/svg&gt;" width="1024"&gt;&lt;/img&gt;      &lt;p&gt;拆着,拆着就总结出了如下几条规律&lt;/p&gt;      &lt;img src="data:image/svg+xml;utf8,&lt;svg xmlns='http://www.w3.org/2000/svg' width='1024' height='768'&gt;&lt;/svg&gt;" width="1024"&gt;&lt;/img&gt;      &lt;p&gt;最后把系统拆成了这个样子,一个十分复杂的系统&lt;/p&gt;      &lt;img src="data:image/svg+xml;utf8,&lt;svg xmlns='http://www.w3.org/2000/svg' width='1024' height='768'&gt;&lt;/svg&gt;" width="1024"&gt;&lt;/img&gt;      &lt;p&gt;根据我们总结的规律最后拆分出来的系统,做到「在一定的规范下尽可能的自治」了吗?解决了所谓的耦合问题了吗?貌似没有解决,而且出现了下面的新问题。&lt;/p&gt;      &lt;img src="data:image/svg+xml;utf8,&lt;svg xmlns='http://www.w3.org/2000/svg' width='1024' height='768'&gt;&lt;/svg&gt;" width="1024"&gt;&lt;/img&gt;      &lt;p&gt;那么如何衡量是否做到了「在一定的规范下尽可能的自治」,标准是什么?又如何做到呢?我们在第二部分进行讨论&lt;/p&gt;      &lt;h2&gt;        &lt;strong&gt;如何设计架构,有哪些维度,好的标准是什么&lt;/strong&gt;&lt;/h2&gt;      &lt;h3&gt;从哪些维度设计架构?&lt;/h3&gt;      &lt;p&gt;1995 年有一篇相关的论文        &lt;a href="https://link.zhihu.com/?target=https%3A//www.cs.ubc.ca/~gregor/teaching/papers/4%2B1view-architecture.pdf" rel="nofollow noreferrer" target="_blank"&gt;Architectural Blueprints—The “4+1” View Model of Software Architecture&lt;/a&gt;即围绕业务场景从四个视角设计和观测架构。借鉴这个思路,但是我们简化一下重点讨论两个维度&lt;/p&gt;      &lt;ul&gt;        &lt;li&gt;Logical view: 业务架构,业务模块的设计与划分&lt;/li&gt;        &lt;li&gt;Process view:物理运行时架构,运行时进程组的设计与划分&lt;/li&gt;&lt;/ul&gt;      &lt;p&gt;其实也就是要达到的目的「自治要达到业务模块和物理模块(物理层面的弹性与隔离)的自治」&lt;/p&gt;      &lt;p&gt;        &lt;br /&gt;&lt;/p&gt;      &lt;img src="data:image/svg+xml;utf8,&lt;svg xmlns='http://www.w3.org/2000/svg' width='1024' height='768'&gt;&lt;/svg&gt;" width="1024"&gt;&lt;/img&gt;      &lt;p&gt;Logical view 可以通过部署与 Process view 进行对应&lt;/p&gt;      &lt;img src="data:image/svg+xml;utf8,&lt;svg xmlns='http://www.w3.org/2000/svg' width='1024' height='768'&gt;&lt;/svg&gt;" width="1024"&gt;&lt;/img&gt;      &lt;p&gt;那接下来我们开始讨论 Logical view 和 Process view&lt;/p&gt;      &lt;h3&gt;Logical view(业务架构)&lt;/h3&gt;      &lt;p&gt;提起业务业务架构我们一般会想到哪些建模方法和指导原则?更重要的是衡量业务架构的好的标准是什么?因为只要把好的标准搞清楚了,才能真正的讨论问题,&lt;/p&gt;      &lt;img src="data:image/svg+xml;utf8,&lt;svg xmlns='http://www.w3.org/2000/svg' width='1024' height='768'&gt;&lt;/svg&gt;" width="1024"&gt;&lt;/img&gt;      &lt;p&gt;这些我们经常提到的方法和原则实际能帮到我们吗?确实有一定的指导意义。但是它们还是太笼统了,不够具体。不够具体造成的问题&lt;/p&gt;      &lt;ul&gt;        &lt;li&gt;不同的人理解差距太大,不能达成共识&lt;/li&gt;        &lt;li&gt;不能真正的实施,不能通过工具以数据的方式体现&lt;/li&gt;        &lt;li&gt;极难进行知识的传达&lt;/li&gt;&lt;/ul&gt;      &lt;p&gt;那么好的标准到底是什么呢?接下来我们尝试通过一些现象来总结一下&lt;/p&gt;      &lt;p&gt;        &lt;strong&gt;分层&lt;/strong&gt;&lt;/p&gt;      &lt;p&gt;下图是我们写代码时最常见的结构,将代码分成了这几层。对应到微服务上很容易地变成按照层次拆分成四类(DAO Service Application View)服务的实践。&lt;/p&gt;      &lt;img src="data:image/svg+xml;utf8,&lt;svg xmlns='http://www.w3.org/2000/svg' width='1024' height='768'&gt;&lt;/svg&gt;" width="1024"&gt;&lt;/img&gt;      &lt;p&gt;下图是我在        &lt;a href="https://www.zhihu.com/question/314356555/answer/625772570"&gt;知乎的技术架构是什么样的?&lt;/a&gt;中的一张关于基础架构的一张架构图。也是明显的分层架构。&lt;/p&gt;      &lt;img src="data:image/svg+xml;utf8,&lt;svg xmlns='http://www.w3.org/2000/svg' width='1024' height='768'&gt;&lt;/svg&gt;" width="1024"&gt;&lt;/img&gt;      &lt;p&gt;从业务架构视角来看,与上图的分层最大的区别是什么呢?&lt;/p&gt;      &lt;p&gt;最大的区别是第一个分层很多时候并没有达到分层的目的,很多时候一个新需求或者修改一个已有的需求都需要从头(view)改到尾(DAO),层与层之间的接口是不稳定的;第二张图里层与层之间的接口是稳定的,一般一个新需求只改一层就可以了,层与层是不知道彼此的存在的。&lt;/p&gt;      &lt;p&gt;什么样的分层架构是好的?如何进行衡量呢?&lt;/p&gt;      &lt;p&gt;层与层之间接口是否稳定,层与层之间是否必须知道彼此的存在也许是分层架构一个好的衡量标准&lt;/p&gt;      &lt;p&gt;        &lt;strong&gt;问答社区&lt;/strong&gt;&lt;/p&gt;      &lt;p&gt;再看下经过简化过后的问答社区的业务架构,这个架构看清来比较清晰。没有我们第一部分遇到的问题,看起来也达到了自治的目的。&lt;/p&gt;      &lt;img src="data:image/svg+xml;utf8,&lt;svg xmlns='http://www.w3.org/2000/svg' width='1024' height='768'&gt;&lt;/svg&gt;" width="1024"&gt;&lt;/img&gt;      &lt;p&gt;这个架构为什么比较清晰?&lt;/p&gt;      &lt;p&gt;因为模块除了 feed 之外模块之间没有任何数据和逻辑共享,彼此之前不互相影响。&lt;/p&gt;      &lt;p&gt;从业务架构角度还有哪些可以优化的地方吗?&lt;/p&gt;      &lt;p&gt;也许由 Feed  定义接口其他的系统(文章,问答,广告,知识市场)来实现会更好。这样更能保证接口的稳定。即业务架构上将 Feed 系统放到下边;下边电商的例子也会提到&lt;/p&gt;      &lt;p&gt;        &lt;strong&gt;电商(订单,价格)&lt;/strong&gt;&lt;/p&gt;      &lt;p&gt;        &lt;strong&gt;订单&lt;/strong&gt;&lt;/p&gt;      &lt;p&gt;电商领域一般被认为是比较复杂的,电商团队一般也是加班最多,最繁忙的;那我们一起来分析下单的这个业务。即用户点击「提交订单」,相关信息(收货人信息,支付方式,送货清单,发表信息,优惠券等)被保存,然后开始履约。&lt;/p&gt;      &lt;img src="data:image/svg+xml;utf8,&lt;svg xmlns='http://www.w3.org/2000/svg' width='1024' height='768'&gt;&lt;/svg&gt;" width="1024"&gt;&lt;/img&gt;      &lt;p&gt;对于这个业务场景,最直观地业务架构设计是将所有的信息存储到订单系统里,然后各方履约的时候从订单系统里获取(getOrderByID)。这样的设计十分容易理解。如果部分履约系统发生了发生了业务变化是怎样的;例如买了免费商品不需要付费了怎么办?新增了某种支付方式或者开发票的信息怎么办?都需要通知订单系统进行修改,进行接口的变动,跨团队的沟通。是不够自治,十分影响开发效率的。&lt;/p&gt;      &lt;img src="data:image/svg+xml;utf8,&lt;svg xmlns='http://www.w3.org/2000/svg' width='1024' height='768'&gt;&lt;/svg&gt;" width="1024"&gt;&lt;/img&gt;      &lt;p&gt;可以换一种思路来设计,最极端情况下订单是不是可以只一个 orderID,然后各个履约方存储自己关心的信息(不让订单系统代为存储),并且与 orderID 关联。这样各个履约方如果发生业务迭代的时候只需要改动自己的系统和存储就可以,与其他系统业务相对隔离,保持足够的自治。&lt;/p&gt;      &lt;img src="data:image/svg+xml;utf8,&lt;svg xmlns='http://www.w3.org/2000/svg' width='1024' height='768'&gt;&lt;/svg&gt;" width="1024"&gt;&lt;/img&gt;      &lt;p&gt;        &lt;strong&gt;价格&lt;/strong&gt;&lt;/p&gt;      &lt;p&gt;再看下图中右下角的价格,价格理论上是根据多方的信息计算出来的。例如商品的原始价格,优惠券,支付方式,配送方式等;实现价格系统时我当然可以把所有的信息都存储在一起,并且把所有价格相关的计算逻辑也写到一个模块里;这样维护价格的团队可能是全公司最忙的了,因为每个业务系统都想改变价格,频繁调整价格来强调自己业务的重要性&amp;lt;(* ̄▽ ̄*)/。&lt;/p&gt;      &lt;img src="data:image/svg+xml;utf8,&lt;svg xmlns='http://www.w3.org/2000/svg' width='1024' height='768'&gt;&lt;/svg&gt;" width="1024"&gt;&lt;/img&gt;      &lt;p&gt;价格计算有两种计算逻辑。一种是类似        &lt;a href="https://link.zhihu.com/?target=https%3A//www.wikiwand.com/en/Chain-of-responsibility_pattern" rel="nofollow noreferrer" target="_blank"&gt;Chain-of-responsibility pattern&lt;/a&gt;,价格计算按照一定顺序交给各个系统轮流处理,报价系统按照特定顺序进行调用即可。另一类稍微复杂一些,必须根据各方系统的信息综合判断才能计算出价格,例如用户是会员,持有特定优惠券,并且选择特定支付方式的前提下才能计算出最后的价格,这种情况下报价系统从各方系统获取必要信息,进行小部分的计算的集成算出最后的价格&lt;/p&gt;      &lt;p&gt;这里需要特别注意的是:接口一定是由报价系统定义,然后由其他系统(优惠券,会员,团购,支付等)来实现的。而不是直接调用其他系统暴露出来的 getCouponByID 类似的接口,这样才能更好的保持在价格这个业务逻辑里接口的稳定,从而保证足够的自治。这也正是 Dependency inversion principle 在业务架构里的重要体现。&lt;/p&gt;      &lt;img src="data:image/svg+xml;utf8,&lt;svg xmlns='http://www.w3.org/2000/svg' width='1024' height='768'&gt;&lt;/svg&gt;" width="1024"&gt;&lt;/img&gt;      &lt;p&gt;        &lt;strong&gt;数仓&lt;/strong&gt;&lt;/p&gt;      &lt;p&gt;在很多公司做业务数仓的工程师和与业务数仓合作的业务研发工程师都很痛苦,因为面临如下问题&lt;/p&gt;      &lt;ul&gt;        &lt;li&gt;MySQL schema 的变化导致数仓同学改一个月,如果没有通知到数仓的同学直接导致数仓的故障&lt;/li&gt;        &lt;li&gt;业务研发想把 MySQL 换成其他的存储如 Redis,HBase;但是数仓同学不同意,因为不能像 MySQL 一样监听 binlog 进行数据统计&lt;/li&gt;        &lt;li&gt;数仓的数据错了,debug 超级困难&lt;/li&gt;&lt;/ul&gt;      &lt;img src="data:image/svg+xml;utf8,&lt;svg xmlns='http://www.w3.org/2000/svg' width='1024' height='768'&gt;&lt;/svg&gt;" width="1024"&gt;&lt;/img&gt;      &lt;p&gt;造成这些问题的根本原因是什么呢?MySQL 即为业务服务又为数仓的数据服务,双方都强耦合了 MySQL 的 schema 的这个接口,但是这个接口却不稳定。可以有其他的解决方案吗?&lt;/p&gt;      &lt;p&gt;也许我们可以像维护 RPC 接口一样去维护数仓数据的接口,而不是依赖业务 MySQL schema。也就是说让每个业务团队定义好自己对外提供数据的接口,并将其实现,同时将接口注册到类似微服务注册中心的数据接口注册中心。从组织架构上直接上业务研发团队具备数据处理能力,统一的业务数仓团队从各个业务研发获取数据,做数据的互联互通,而不是把所有的细节的业务数据处理放到统一的数仓团队。这也是最近比较火的        &lt;a href="https://link.zhihu.com/?target=https%3A//martinfowler.com/articles/data-mesh-principles.html" rel="nofollow noreferrer" target="_blank"&gt;Data Mesh&lt;/a&gt;的核心思想。&lt;/p&gt;      &lt;img src="data:image/svg+xml;utf8,&lt;svg xmlns='http://www.w3.org/2000/svg' width='1024' height='768'&gt;&lt;/svg&gt;" width="1024"&gt;&lt;/img&gt;      &lt;img src="data:image/svg+xml;utf8,&lt;svg xmlns='http://www.w3.org/2000/svg' width='1024' height='768'&gt;&lt;/svg&gt;" width="1024"&gt;&lt;/img&gt;      &lt;p&gt;        &lt;strong&gt;总结&lt;/strong&gt;&lt;/p&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;/ul&gt;        &lt;li&gt;只共享 immutable data&lt;/li&gt;        &lt;ul&gt;          &lt;li&gt;电商订单的例子中不同的系统间只共享了 orderID,是不可变数据。不同系统间的影响是可控的&lt;/li&gt;&lt;/ul&gt;        &lt;li&gt;共享 mutable data,但是 interface 少,而且几乎不变&lt;/li&gt;        &lt;li&gt;interface 变化次数 / implementation 变化次数比例小&lt;/li&gt;        &lt;ul&gt;          &lt;li&gt;电商报价系统与业务数仓的例子,系统间共享的数据是会变化的,但是系统间的接口是稳定变化的的;哪怕会变化,接口的变化次数也是大大小于实现的变动次数的。&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;      &lt;img src="data:image/svg+xml;utf8,&lt;svg xmlns='http://www.w3.org/2000/svg' width='1024' height='768'&gt;&lt;/svg&gt;" width="1024"&gt;&lt;/img&gt;      &lt;p&gt;再看一下这张图,为什么我们在第一部分总结的「拆得越细越好」不对呢?乐高可以使用小组件组合成不同的模型是最核心原因是因为「拆得细」吗?其实并不是,而是「乐高小组件形状是不变的,即组件的接口是稳定不变的」&lt;/p&gt;      &lt;img src="data:image/svg+xml;utf8,&lt;svg xmlns='http://www.w3.org/2000/svg' width='1024' height='768'&gt;&lt;/svg&gt;" width="1024"&gt;&lt;/img&gt;      &lt;p&gt;稍微上升一下高度,如果只用一个词来概念系统面临的问题,就是 Complexity。Complexity的核心来源又是什么?是「不同模块间的相互影响」。我们前边总结的业务架构好的标准和设计方法不就是在想办法衡量复杂度,控制复杂度吗?&lt;/p&gt;      &lt;img src="data:image/svg+xml;utf8,&lt;svg xmlns='http://www.w3.org/2000/svg' width='1024' height='768'&gt;&lt;/svg&gt;" width="1024"&gt;&lt;/img&gt;      &lt;p&gt;那么有哪些具体的 hints 可以帮助我们达到上文提到的好的标准呢,如下图琐事。具体在这里就不详细介绍了,后再单独另开其他的 topic 进行展开。到此 Logical veiw 告一段落。&lt;/p&gt;      &lt;img src="data:image/svg+xml;utf8,&lt;svg xmlns='http://www.w3.org/2000/svg' width='1024' height='768'&gt;&lt;/svg&gt;" width="1024"&gt;&lt;/img&gt;      &lt;h3&gt;Process view(物理运行时架构)&lt;/h3&gt;      &lt;p&gt;首先要问为什么要做物理运行时隔离?目的其实就是达成物理层面的自治。&lt;/p&gt;      &lt;img src="data:image/svg+xml;utf8,&lt;svg xmlns='http://www.w3.org/2000/svg' width='1024' height='768'&gt;&lt;/svg&gt;" width="1024"&gt;&lt;/img&gt;      &lt;p&gt;这是物理运行时自治带来的好处?那又有哪些负面影响呢?一方面是        &lt;a href="https://link.zhihu.com/?target=https%3A//www.wikiwand.com/en/Fallacies_of_distributed_computing" rel="nofollow noreferrer" target="_blank"&gt;Fallacies of distributed computing&lt;/a&gt;,另一方面是违背了        &lt;a href="https://link.zhihu.com/?target=https%3A//www.wikiwand.com/en/Law_of_Demeter" rel="nofollow noreferrer" target="_blank"&gt;Law of Demeter&lt;/a&gt;。&lt;/p&gt;      &lt;img src="data:image/svg+xml;utf8,&lt;svg xmlns='http://www.w3.org/2000/svg' width='1024' height='768'&gt;&lt;/svg&gt;" width="1024"&gt;&lt;/img&gt;https://www.wikiwand.com/en/Fallacies_of_distributed_computing      &lt;img src="data:image/svg+xml;utf8,&lt;svg xmlns='http://www.w3.org/2000/svg' width='1024' height='768'&gt;&lt;/svg&gt;" width="1024"&gt;&lt;/img&gt;      &lt;p&gt;物理运行时的隔离面临这么多问题,那有什么好的解决方案吗?希望在做到物理层次的隔离的同时,又尽可能不受分布式的影响,并能尽量少的暴露 API ,不违背        &lt;a href="https://link.zhihu.com/?target=https%3A//www.wikiwand.com/en/Law_of_Demeter" rel="nofollow noreferrer" target="_blank"&gt;Law of Demeter&lt;/a&gt;。&lt;/p&gt;      &lt;img src="data:image/svg+xml;utf8,&lt;svg xmlns='http://www.w3.org/2000/svg' width='1024' height='768'&gt;&lt;/svg&gt;" width="1024"&gt;&lt;/img&gt;      &lt;p&gt;此图表示的是一个业务模块,但是在运行时有不同的 SLA 和弹性边界的要求,需要把 HTTP,RPC,Consumer 进行物理运行时的隔离。那么我们可以把整个业务模块的代码写到一个 git repo 里,同一个 git repo 跑起来后所有的通信都是进程内通信,把有物理隔离诉求的服务编译成不同的可运行可运行的包,然后分别部署到不同的进程组就可以了。如上图可以把 HTTP,module A,module B,backend  和  RPC ,module B,module C,backend 和 Consumer ,module B,backend 分别编译之后部署到不同的进程组,这几个进程组一定要一起部署一起回滚,从而保证版本分化的风险;这样的物理运行时设计就做到了物理层面的自治的目标了。&lt;/p&gt;      &lt;p&gt;到这里大家也看到了,也是需要重点强调的是业务架构模块与物理运行是模块并不是一一对应的,这也是大家普遍对于微服务的误解。千万不要把两者混为一谈,而是要先设计业务架构再设计物理运行时架构。&lt;/p&gt;      &lt;img src="data:image/svg+xml;utf8,&lt;svg xmlns='http://www.w3.org/2000/svg' width='1024' height='768'&gt;&lt;/svg&gt;" width="1024"&gt;&lt;/img&gt;      &lt;h2&gt;总结&lt;/h2&gt;      &lt;img src="data:image/svg+xml;utf8,&lt;svg xmlns='http://www.w3.org/2000/svg' width='1024' height='768'&gt;&lt;/svg&gt;" width="1024"&gt;&lt;/img&gt;      &lt;p&gt;简单回顾一下,整个分享我们先看了我们面临的问题,现状和要达到的目标。然后第二部分通过一些现象总结了业务架构好的标准,并且给出了如何做到业务架构自治的标准与物理自治的一些 hints。整个分享内容很多,如果只记住两个 hint 的话,我希望是这两点。&lt;/p&gt;      &lt;img src="data:image/svg+xml;utf8,&lt;svg xmlns='http://www.w3.org/2000/svg' width='1024' height='768'&gt;&lt;/svg&gt;" width="1024"&gt;&lt;/img&gt;      &lt;h2&gt;后记&lt;/h2&gt;      &lt;p&gt;回头看起来这个分享有以下几个问题,需要进行改善。&lt;/p&gt;      &lt;ul&gt;        &lt;li&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://www.zhihu.com/people/b1660a0ce5920b693c26fc1f23d81997"&gt;@陶文&lt;/a&gt;的        &lt;strong&gt;          &lt;a href="https://link.zhihu.com/?target=https%3A//autonomy.design/" rel="nofollow noreferrer" target="_blank"&gt;业务逻辑拆分模式&lt;/a&gt;&lt;/strong&gt;和        &lt;strong&gt;          &lt;a href="https://link.zhihu.com/?target=https%3A//twitter.com/udidahan%3Flang%3Den" rel="nofollow noreferrer" target="_blank"&gt;Udi Dahan&lt;/a&gt;,&lt;/strong&gt;在此郑重感谢两位老师的指导。&lt;/p&gt;      &lt;p&gt;希望大家多多评论或者以私信的方式提出批评和质疑。&lt;/p&gt;      &lt;p&gt;PS.如果上文对你有一点点儿帮助,欢迎来我和        &lt;a href="https://www.zhihu.com/people/b1660a0ce5920b693c26fc1f23d81997"&gt;@陶文&lt;/a&gt;        &lt;a href="https://www.zhihu.com/people/1824717da821307ac1151a15299666ed"&gt;@flaneur&lt;/a&gt;        &lt;a href="https://www.zhihu.com/people/0f51ea6191b958bc7c296b6161ce6922"&gt;@lfyzjck&lt;/a&gt;的        &lt;a href="https://link.zhihu.com/?target=https%3A//t.zsxq.com/16W4VcxtS" rel="nofollow noreferrer" target="_blank"&gt;《打开引擎盖》&lt;/a&gt;一起深入讨论&lt;/p&gt;      &lt;p&gt;参考&lt;/p&gt;      &lt;ul&gt;        &lt;li&gt;          &lt;a href="https://link.zhihu.com/?target=https%3A//autonomy.design/" rel="nofollow noreferrer" target="_blank"&gt;业务逻辑拆分模式&lt;/a&gt;&lt;/li&gt;        &lt;li&gt;          &lt;a href="https://link.zhihu.com/?target=https%3A//twitter.com/udidahan%3Flang%3Den" rel="nofollow noreferrer" target="_blank"&gt;Udi Dahan&lt;/a&gt;&lt;/li&gt;        &lt;li&gt;          &lt;a href="https://link.zhihu.com/?target=https%3A//ferd.ca/complexity-has-to-live-somewhere.html" rel="nofollow noreferrer" target="_blank"&gt;Complexity Has to Live Somewhere&lt;/a&gt;&lt;/li&gt;        &lt;li&gt;          &lt;a href="https://link.zhihu.com/?target=https%3A//martinfowler.com/bliki/MonolithFirst.html" rel="nofollow noreferrer" target="_blank"&gt;Monolith First&lt;/a&gt;&lt;/li&gt;        &lt;li&gt;          &lt;a href="https://link.zhihu.com/?target=https%3A//martinfowler.com/articles/dont-start-monolith.html" rel="nofollow noreferrer" target="_blank"&gt;Don’t start with a monolith&lt;/a&gt;&lt;/li&gt;        &lt;li&gt;          &lt;a href="https://link.zhihu.com/?target=https%3A//www.bilibili.com/video/BV1Rf4y1Q7Y4%3Ffrom%3Dsearch%26seid%3D12807152794497338058" rel="nofollow noreferrer" target="_blank"&gt;我们到底要微服务还是业务能力?&lt;/a&gt;&lt;/li&gt;        &lt;li&gt;          &lt;a href="https://link.zhihu.com/?target=https%3A//www.bilibili.com/video/BV1Rf4y1Q7Y4%3Ffrom%3Dsearch%26seid%3D12807152794497338058" rel="nofollow noreferrer" target="_blank"&gt;多“微”才算微服务&lt;/a&gt;&lt;/li&gt;        &lt;li&gt;          &lt;a href="https://link.zhihu.com/?target=https%3A//www.bilibili.com/video/BV1Rf4y1Q7Y4%3Ffrom%3Dsearch%26seid%3D12807152794497338058" rel="nofollow noreferrer" target="_blank"&gt;Modular Monolith&lt;/a&gt;&lt;/li&gt;        &lt;li&gt;          &lt;a href="https://link.zhihu.com/?target=http%3A//sunnyday.mit.edu/16.355/parnas-criteria.html" rel="nofollow noreferrer" target="_blank"&gt;On the Criteria To Be Used in Decomposing Systems into Modules&lt;/a&gt;&lt;/li&gt;        &lt;li&gt;          &lt;a href="https://link.zhihu.com/?target=https%3A//www.microsoft.com/en-us/research/wp-content/uploads/2016/02/acrobat-17.pdf" rel="nofollow noreferrer" target="_blank"&gt;Hints for Computer System Design&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;
  300.    &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>
  301.      <category />
  302.      <guid isPermaLink="true">https://itindex.net/detail/62913-%E4%BD%95%E8%BF%9B-%E5%BE%AE%E6%9C%8D%E5%8A%A1</guid>
  303.      <pubDate>Thu, 08 Feb 2024 16:45:08 CST</pubDate>
  304.    </item>
  305.    <item>
  306.      <title>互联网公司的管理神话破灭</title>
  307.      <link>https://itindex.net/detail/62912-%E4%BA%92%E8%81%94%E7%BD%91-%E5%85%AC%E5%8F%B8-%E7%AE%A1%E7%90%86</link>
  308.      <description>&lt;p&gt;价值观,OKR,花名,弹性工作制等……&lt;/p&gt;
  309.  
  310.  
  311.  
  312. &lt;p&gt;在过去的 20 年里,互联网行业为企业管理界贡献了许多花活儿,这其中有些是中国互联网原创的,也有不少是从硅谷学习而来属于全球互联网行业通行。&lt;/p&gt;
  313.  
  314.  
  315.  
  316. &lt;p&gt;当互联网行业处于黄金上升期的时候,几乎每家成功的互联网企业都要或多或少的对外输出一下自己的企业管理方法论,有的是通过创始人演讲,有的是通过出书,也有类似腾讯和阿里巴巴这样的,直接以被投企业家俱乐部的形式来影响自己投资的创业企业。&lt;/p&gt;
  317.  
  318.  
  319.  
  320. &lt;p&gt;然而,随着互联网黄金增长期的结束,全球互联网普及红利(对国内来说是人口红利)的消失,我们惊讶发现从 2020 年开始,许多过去互联网行业高举高打的管理概念正在失效……或者说,它也许从来就没有有效过。&lt;/p&gt;
  321.  
  322.  
  323.  
  324. &lt;p&gt;站在这个时间点去回顾互联网公司曾经沉淀下的那些方法论,我们会发现无论是阿里巴巴、腾讯、字节跳动,还是 Google、Amazon 和 Netflix。他们的企业管理方法论可能都存在错误归因——低估自己所乘着的时代东风,高估了自身的努力(管理行为)。&lt;/p&gt;
  325.  
  326.  
  327.  
  328. &lt;p&gt;因为在企业管理界,有一些明显的错误答案,剩下的全都是“正确答案”。&lt;/p&gt;
  329.  
  330.  
  331.  
  332. &lt;img alt="" height="1024" src="https://i0.wp.com/1q43.blog/wp-content/uploads/2024/02/s34725916-002365-WrS44D2L.jpg?resize=757%2C1024&amp;ssl=1" width="757"&gt;&lt;/img&gt;
  333.  
  334.  
  335.  
  336. &lt;p&gt;这是我看最近一本书《  &lt;a href="https://book.douban.com/subject/36687259/" rel="noreferrer noopener nofollow" target="_blank"&gt;大厂人才&lt;/a&gt;》的感受,这本书由穆胜咨询合伙人娄珺(Samantha)出品。书中详细横向评测了字节跳动、腾讯、阿里巴巴、美团、华为等多个大厂的管理体系,并间或的对这些不同模式与传统企业管理制度做了比较。&lt;/p&gt;
  337.  
  338.  
  339.  
  340. &lt;p&gt;原书作者在结论上总结的比较委婉,但我结合自身的大厂工作经历以及对本书阅读的感受,可以直说:所有互联网大厂的管理创新,可能都是画蛇添足。&lt;/p&gt;
  341.  
  342.  
  343.  
  344. &lt;p&gt;以全书反思性最为明显的 OKR 为例,OKR 的“始作俑者”Google 在 2022 年启用了新的管理工具 GRAD(Googler Reviews and Devlopment, 谷歌员工评价和发展),GRAD 是一种更为绩效(偏向 KPI)而非目标导向的管理工具。&lt;/p&gt;
  345.  
  346.  
  347.  
  348. &lt;p&gt;根据书中的描述,Google 使用 GRAD 取代 OKR 的主要原因可能有两个,第一个是在过去很长一段时间里,由于 OKR 的反 KPI 属性,导致日常业务中大量的经常性工作无法被考核,OKR 只能作为该公司更大的管理机制 Preformance Management 一环使用,并且只能覆盖 40% 的工作。第二个,则是 OKR 复杂的流程和评价机制本身让员工不堪重负,在许多时候,反复的对齐、拉通、复盘比简单的定期考核一个业务指标是否达成更让人痛苦。&lt;/p&gt;
  349.  
  350.  
  351.  
  352. &lt;p&gt;OKR 在国内的忠实粉丝字节跳动也在 2023 年调整了它们的考核方式与考核节奏,比如从双月回顾改为季度回顾。&lt;/p&gt;
  353.  
  354.  
  355.  
  356. &lt;p&gt;在 OKR 以外,一些曾经在发展早期宣誓要“去 KPI 化”的企业也在最近重新回到 KPI 考核的道路,比如百度和小米。&lt;/p&gt;
  357.  
  358.  
  359.  
  360. &lt;p&gt;阿里巴巴的花名机制,也在实践中与原本的设立初衷背道而驰——原本是为了淡化职级加强扁平化管理,结果真的搞成了“江湖味儿”,公司内“门派林立”。腾讯的“赛马机制”和“自下而上”也一度使得公司缺乏 Big Picture,漏球了信息流和短视频这两个非常重要的业务。&lt;/p&gt;
  361.  
  362.  
  363.  
  364. &lt;p&gt;从社会学的角度讲,现代企业的本质是个体分工协作的产物。它的作用是将一群人以特定的社会关系结合在一起,实现一个人无法实现的伟业。这意味着巴别塔可以有很多种建成方式,只要没有上帝来捣乱,任何一种方式都可以通天,而“上帝来捣乱”的方法,就是让每个人都觉得自己的方法是对的。&lt;/p&gt;
  365.  
  366.  
  367.  
  368. &lt;p&gt;从 2023 年全球互联网行业的大裁员和惨状来看,互联网的企业管理方法论创新,别说可能不适用于其他企业,甚至可能连互联网行业自己都不合适。比如,早期的字节跳动被称为“App 工厂”,上一个火一个。从字节跳动在 2017 年全面启用飞书之后,就再也没有上线过任何一个现象级产品。腾讯方法论无法让腾讯复制微信,字节方法论也无法让字节复制抖音。&lt;/p&gt;
  369.  
  370.  
  371.  
  372. &lt;p&gt;这意味着无论是飞书提出的“先进团队先用飞书”还是阿里的“每年将会向社会输出 1000 名在阿里工作 10 年以上的人才”,对于社会上的其他企业来说都是一个陷阱。&lt;/p&gt;
  373.  
  374.  
  375.  
  376. &lt;p&gt;如果你相信这些从互联网公司来的工具、人才、方法论能够帮助你原本陷入困境的企业重振旗鼓,那你就要倒大霉咯。&lt;/p&gt;
  377.  
  378.  
  379.  
  380. &lt;p&gt;这个观点倒不是书中提出的,而是我之前从字节的方法论观察到的。众所周知,虽然字节其实并不怎么输出企业管理方法论(比起阿里巴巴),但飞书却从诞生之出将“方法论”与产品捆绑进行销售。飞书在所有的媒体和互联网公司都备受好评,甚至连百度和阿里的一些团队也私下使用飞书进行一些边缘项目的协作,确实配得上“先进团队先用飞书”。&lt;/p&gt;
  381.  
  382.  
  383.  
  384. &lt;p&gt;但是,这个世界本身就是由落后构成的。&lt;/p&gt;
  385.  
  386.  
  387.  
  388. &lt;p&gt;我第一次认识到这一点,是我在一次参会成员年龄稍大的会议上,用飞书分享我自己的稿子(就是那个几万字的稿子)。我讲到一半,一个听众问我:你讲到第几页了?&lt;/p&gt;
  389.  
  390.  
  391.  
  392. &lt;p&gt;我愣了,我讲到第几页了?飞书没有页数啊,因为飞书就没想过会有人把电子文档打印出来看。&lt;/p&gt;
  393.  
  394.  
  395.  
  396. &lt;p&gt;提问者 50 多岁,以我和大多数互联网员工的视角看确实算是“岁数大了”。但他实际上也是从 90 年代开始用电脑的“弄潮儿”,你怎么都不能说人家“数字素养”不行?类似的情况其实还有几乎所有的在线文档都不支持“尾注”这个在学术写作中非常重要的功能(其实还有“修订模式”),以至于金山文档至今可以拿到腾讯文档和飞书文档都拿不到的市场份额。&lt;/p&gt;
  397.  
  398.  
  399.  
  400. &lt;p&gt;是因为各种眼花缭乱的在线文档不够“先进”吗?不,是因为太过先进了,与落后的现实世界并不匹配。&lt;/p&gt;
  401.  
  402.  
  403.  
  404. &lt;p&gt;除非你假定一个 35 岁全员退休的社会,否则向落后兼容,就是一个先进管理工具与生产力工具的最重要基础要素。&lt;/p&gt;
  405.  
  406.  
  407.  
  408. &lt;p&gt;这个事情在 SaaS 市场其实被反复验证,所有人都说中国的 SaaS 市场不好做,然后找了许多许多理由。但时至 2024 年,就没有几家企业开门做公司敢不买 Microsoft Office,连免费的 WPS 都是因为和 Microsoft Office 做的“一模一样”,才能抢到这部分市场。以至于我之前和@  &lt;a href="https://web.okjike.com/u/bb9f32a4-a2ee-40a7-af01-a9b4949cd365" rel="noreferrer noopener nofollow" target="_blank"&gt;汐笺&lt;/a&gt; 聊 SaaS 的时候说:&lt;/p&gt;
  409.  
  410.  
  411.  
  412. &lt;p&gt;你如果做了一个办公三件套,觉得自己很创新,和 Office 长得不像。那一定是你做错了,因为微软办公套件里的每个按钮都有一个你们整个团队那么多的产品和研发,还对应了 0.x%~x% 的市场份额。&lt;/p&gt;
  413.  
  414.  
  415.  
  416. &lt;p&gt;你日常可以用飞书,用 notion,用 Obsidian,甚至你在小团队里也可以用这些新工具来协作。然而,一旦你要进入到更大规模的社会协作,你就离不开 Microsoft Office。字节跳动的 GR 和政府打交道也丢飞书链接吗?阿里巴巴和腾讯合作签合同难道用钉钉文档做前期互审吗?不可能的。&lt;/p&gt;
  417.  
  418.  
  419.  
  420. &lt;p&gt;不仅在工具层面如此,在管理工具层面也是如此,OKR 是一个所谓“面向创新”的管理工具。但即便是在人类密集创新的最近半个世纪里,创新也并非企业的常态。创新带来的是新增长点,但这个点一旦被创出来了,后面的增长工作无一例外是由海量的人与资金在枯燥的日常工作中驱动的。&lt;/p&gt;
  421.  
  422.  
  423.  
  424. &lt;p&gt;这两年其实也刚好有一个对比,一方面是由于裁员数量增大,职场社交软件脉脉上关于“空降阿里员工”的吐槽多了起来。大致的故事模版就是中小厂,来了一个阿里高 P,进来就搞一通管理+工具的改革,风风火火干三个月,轻则业务下降,重则公司倒闭。&lt;/p&gt;
  425.  
  426.  
  427.  
  428. &lt;p&gt;另一方面,马斯克在 2022 年末收购推特,主打一个干翻所有管理理念,什么必要岗位,先裁掉一半员工再说。什么切换服务器要半年,我亲自坐私人飞机给你网线拔了——结果是 X 的主要业务数据并没有下滑,甚至在 AI 新业务上的进展也优于 Google。&lt;/p&gt;
  429.  
  430.  
  431.  
  432. &lt;p&gt;书中也特意配了一个维度来证明这一点,这是我非常佩服作者的。她竟然能想到用几大公司离职员工的创业成功率来恒量一个企业的管理制度是否有效,而数据是这样的:&lt;/p&gt;
  433.  
  434.  
  435.  
  436. &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;IPO上岸率&lt;/th&gt;&lt;/tr&gt;  &lt;tr&gt;   &lt;td&gt;华为&lt;/td&gt;   &lt;td&gt;481&lt;/td&gt;   &lt;td&gt;25&lt;/td&gt;   &lt;td&gt;5.2%&lt;/td&gt;&lt;/tr&gt;  &lt;tr&gt;   &lt;td&gt;美团&lt;/td&gt;   &lt;td&gt;115&lt;/td&gt;   &lt;td&gt;3&lt;/td&gt;   &lt;td&gt;2.6%&lt;/td&gt;&lt;/tr&gt;  &lt;tr&gt;   &lt;td&gt;腾讯&lt;/td&gt;   &lt;td&gt;720&lt;/td&gt;   &lt;td&gt;18&lt;/td&gt;   &lt;td&gt;2.5%&lt;/td&gt;&lt;/tr&gt;  &lt;tr&gt;   &lt;td&gt;阿里巴巴&lt;/td&gt;   &lt;td&gt;941&lt;/td&gt;   &lt;td&gt;16&lt;/td&gt;   &lt;td&gt;1.7%&lt;/td&gt;&lt;/tr&gt;  &lt;tr&gt;   &lt;td&gt;字节跳动&lt;/td&gt;   &lt;td&gt;21&lt;/td&gt;   &lt;td&gt;0&lt;/td&gt;   &lt;td&gt;0%&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;数据来源:穆圣咨询、IT桔子
  437.  
  438.  
  439.  
  440. &lt;p&gt;这个维度并不严谨,因为这个数字本身就会有漏算,而且创业成功也并非 IPO 一个衡量指标。但是我们会非常明显的看到对自己价值观与方法论自视甚高的阿里巴巴在这个比较中是非常落下风的。&lt;/p&gt;
  441.  
  442.  
  443.  
  444. &lt;p&gt;在这本书中,华为是作为“传统企业”被拉进来与互联网公司做对比的,因此在横评中的每一项,华为几乎都有优势,不免让人觉得这是不是作者在拉偏手。但华为的成功本身由华为的管理方法论决定的吗?华为的方法论在别的企业执行的下去吗?&lt;/p&gt;
  445.  
  446.  
  447.  
  448. &lt;p&gt;众所周知,华为在人才管理方面曾做出过一些超乎民企可及范围的事情。类似的情况,拼多多也在电商消费纠纷上有一些“别人做不到的能力”。所以,不管你想要在自己的企业里实施奋斗者文化,还是想要对供应商实施“仅退款”政策,还是要创始人掂量一下自己的斤两。&lt;/p&gt;
  449.  
  450.  
  451.  
  452. &lt;p&gt;所以,还是回到我在本文开头提到的,企业管理界有一些明显的错误答案,剩下的全都是“正确答案”。在吸收别人的经验时,错误的总比正确的更重要。只要你的企业还没黄,就不要轻易效仿别人。&lt;/p&gt;
  453.  
  454.  
  455.  
  456. &lt;p&gt;尤其是在现在这个下行周期里,企业黄了也不一定是你做的不对, 试图模仿先进者只会让你黄的更快。&lt;/p&gt;
  457. &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>
  458.      <category>#技术与商业 互联网 企业管理 字节跳动 腾讯</category>
  459.      <guid isPermaLink="true">https://itindex.net/detail/62912-%E4%BA%92%E8%81%94%E7%BD%91-%E5%85%AC%E5%8F%B8-%E7%AE%A1%E7%90%86</guid>
  460.      <pubDate>Sun, 04 Feb 2024 17:21:45 CST</pubDate>
  461.    </item>
  462.    <item>
  463.      <title>深入剖析 Spring WebFlux</title>
  464.      <link>https://itindex.net/detail/62911-spring-webflux</link>
  465.      <description>&lt;div&gt;    &lt;h2&gt;一、WebFlux 简介&lt;/h2&gt;    &lt;p&gt;WebFlux 是 Spring Framework5.0 中引入的一种新的反应式Web框架。通过Reactor项目实现Reactive Streams规范,完全异步和非阻塞框架。本身不会加快程序执行速度,但在高并发情况下借助异步IO能够以少量而稳定的线程处理更高的吞吐,规避文件IO/网络IO阻塞带来的线程堆积。&lt;/p&gt;    &lt;h3&gt;1.1 WebFlux 的特性&lt;/h3&gt;    &lt;p&gt;WebFlux 具有以下特性:&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;        &lt;strong&gt;异步非阻塞&lt;/strong&gt; - 可以举一个上传例子。相对于 Spring MVC 是同步阻塞IO模型,Spring WebFlux这样处理:线程发现文件数据没传输好,就先做其他事情,当文件准备好时通知线程来处理(这里就是输入非阻塞方式),当接收完并写入磁盘(该步骤也可以采用异步非阻塞方式)完毕后再通知线程来处理响应(这里就是输出非阻塞方式)。&lt;/li&gt;      &lt;li&gt;        &lt;strong&gt;响应式函数编程&lt;/strong&gt; - 相对于Java8 Stream 同步、阻塞的Pull模式,Spring Flux 采用Reactor Stream 异步、非阻塞Push模式。书写采用 Java lambda 方式,接近自然语言形式且容易理解。&lt;/li&gt;      &lt;li&gt;        &lt;strong&gt;不拘束于Servlet&lt;/strong&gt; - 可以运行在传统的Servlet 容器(3.1+版本),还能运行在Netty、Undertow等NIO容器中。&lt;/li&gt;&lt;/ul&gt;    &lt;h3&gt;1.2 WebFlux 的设计目标&lt;/h3&gt;    &lt;ul&gt;      &lt;li&gt;适用高并发&lt;/li&gt;      &lt;li&gt;高吞吐量&lt;/li&gt;      &lt;li&gt;可伸缩性&lt;/li&gt;&lt;/ul&gt;    &lt;h2&gt;二、Spring WebFlux 组件介绍&lt;/h2&gt;    &lt;h3&gt;2.1 HTTPHandler&lt;/h3&gt;    &lt;p&gt;一个简单的处理请求和响应的抽象,用来适配不同HTTP服务容器的API。&lt;/p&gt;    &lt;div&gt;      &lt;div&gt;        &lt;img src="https://ask.qcloudimg.com/http-save/4821640/dba124c21ea4df3d776294d7042aa50d.png"&gt;&lt;/img&gt;&lt;/div&gt;&lt;/div&gt;    &lt;h3&gt;2.2 WebHandler&lt;/h3&gt;    &lt;p&gt;一个用于处理业务请求抽象接口,定义了一系列处理行为。相关核心实现类如下;&lt;/p&gt;    &lt;div&gt;      &lt;div&gt;        &lt;img src="https://ask.qcloudimg.com/http-save/4821640/5eef9dcd7c350a01f5f3beae50299c0b.png"&gt;&lt;/img&gt;&lt;/div&gt;&lt;/div&gt;    &lt;h3&gt;2.3 DispatcherHandler&lt;/h3&gt;    &lt;p&gt;请求处理的总控制器,实际工作是由多个可配置的组件来处理。&lt;/p&gt;    &lt;div&gt;      &lt;div&gt;        &lt;img src="https://ask.qcloudimg.com/http-save/4821640/210b005f0edffbd80756d14b5cc72aae.png"&gt;&lt;/img&gt;&lt;/div&gt;&lt;/div&gt;    &lt;p&gt;WebFlux是兼容Spring MVC 基于@Controller,@RequestMapping等注解的编程开发方式的,可以做到平滑切换。&lt;/p&gt;    &lt;h3&gt;2.4 Functional Endpoints&lt;/h3&gt;    &lt;p&gt;这是一个轻量级函数编程模型。是基于@Controller,@RequestMapping等注解的编程模型的替代方案,提供一套函数式API 用于创建Router,Handler和Filter。调用处理组件如下:&lt;/p&gt;    &lt;div&gt;      &lt;div&gt;        &lt;img src="https://ask.qcloudimg.com/http-save/4821640/e2913e0c3804f563d4be80c220276bc2.png"&gt;&lt;/img&gt;&lt;/div&gt;&lt;/div&gt;    &lt;p&gt;简单的RouterFuntion 路由注册和业务处理过程:&lt;/p&gt;    &lt;div&gt;      &lt;pre&gt;        &lt;code&gt;@Bean
  466. public RouterFunction&amp;lt;ServerResponse&amp;gt; initRouterFunction() {
  467.    return RouterFunctions.route()
  468.        .GET(&amp;quot;/hello/{name}&amp;quot;, serverRequest -&amp;gt; {
  469.            String name = serverRequest.pathVariable(&amp;quot;name&amp;quot;);
  470.            return ServerResponse.ok().bodyValue(name);
  471.        }).build();
  472. }&lt;/code&gt;&lt;/pre&gt;      &lt;div&gt;复制&lt;/div&gt;&lt;/div&gt;    &lt;p&gt;请求转发处理过程:&lt;/p&gt;    &lt;div&gt;      &lt;div&gt;        &lt;img src="https://ask.qcloudimg.com/http-save/4821640/5a35495ca35c7253c7c6abe674ca0554.png"&gt;&lt;/img&gt;&lt;/div&gt;&lt;/div&gt;    &lt;h3&gt;2.5 Reactive Stream&lt;/h3&gt;    &lt;p&gt;这是一个重要的组件,WebFlux 就是利用Reactor 来重写了传统Spring MVC 逻辑。其中Flux和Mono 是Reactor中两个关键概念。掌握了这两个概念才能理解WebFlux工作方式。&lt;/p&gt;    &lt;p&gt;Flux和Mono 都实现了Reactor的Publisher接口,属于时间发布者,对消费者提供订阅接口,当有事件发生的时候,Flux或者Mono会通过回调消费者的相应的方法来通知消费者相应的事件。这就是所谓的响应式编程模型。&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;Mono工作流程图&lt;/strong&gt;&lt;/p&gt;    &lt;div&gt;      &lt;div&gt;        &lt;img src="https://ask.qcloudimg.com/http-save/4821640/d328e3e0ae145c54a3e255ff4bcf7afc.jpeg"&gt;&lt;/img&gt;&lt;/div&gt;&lt;/div&gt;    &lt;p&gt;只会在发送出单个结果后完成。&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;Flux工作流程图&lt;/strong&gt;&lt;/p&gt;    &lt;div&gt;      &lt;div&gt;        &lt;img src="https://ask.qcloudimg.com/http-save/4821640/8b8a27d52908d4fd5f7f1e261362e199.jpeg"&gt;&lt;/img&gt;&lt;/div&gt;&lt;/div&gt;    &lt;p&gt;发送出零个或者多个,可能无限个结果后才完成。&lt;/p&gt;    &lt;div&gt;      &lt;pre&gt;        &lt;code&gt;对于流式媒体类型:application/stream+json 或者 text/event-stream ,可以让调用端获得服务器滚动结果。
  473. 对于非流类型:application/json  WebFlux 默认JSON编码器会将序列化的JSON 一次性刷新到网络,这并不意味着阻塞,因为结果Flux&amp;lt;?&amp;gt; 是以反应式方式写入网络的,没有任何障碍。&lt;/code&gt;&lt;/pre&gt;      &lt;div&gt;复制&lt;/div&gt;&lt;/div&gt;    &lt;h2&gt;三、WebFlux 工作原理&lt;/h2&gt;    &lt;h3&gt;3.1 组件装配过程&lt;/h3&gt;    &lt;div&gt;      &lt;div&gt;        &lt;img src="https://ask.qcloudimg.com/http-save/4821640/40a50b6b73ad7dd91d1bf62fbe05f37d.png"&gt;&lt;/img&gt;&lt;/div&gt;&lt;/div&gt;    &lt;p&gt;      &lt;strong&gt;流程相关源码解析&lt;/strong&gt;-WebFluxAutoConfiguration&lt;/p&gt;    &lt;div&gt;      &lt;pre&gt;        &lt;code&gt;@Configuration
  474. //条件装配 只有启动的类型是REACTIVE时加载
  475. @ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.REACTIVE)
  476. //只有存在 WebFluxConfigurer实例  时加载
  477. @ConditionalOnClass(WebFluxConfigurer.class)
  478. //在不存在  WebFluxConfigurationSupport实例时 加载
  479. @ConditionalOnMissingBean({ WebFluxConfigurationSupport.class })
  480. //在之后装配
  481. @AutoConfigureAfter({ ReactiveWebServerFactoryAutoConfiguration.class,
  482.      CodecsAutoConfiguration.class, ValidationAutoConfiguration.class })
  483. //自动装配顺序
  484. @AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10)
  485. public class WebFluxAutoConfiguration {
  486.   @Configuration
  487.   @EnableConfigurationProperties({ ResourceProperties.class, WebFluxProperties.class })
  488.   //接口编程 在装配WebFluxConfig 之前要先 装配EnableWebFluxConfiguration
  489.   @Import({ EnableWebFluxConfiguration.class })
  490.   public static class WebFluxConfig implements WebFluxConfigurer {
  491.      //隐藏部分源码
  492.     /**
  493.     * Configuration equivalent to {@code @EnableWebFlux}.
  494.     */
  495.   }
  496.    @Configuration
  497.    public static class EnableWebFluxConfiguration
  498.            extends DelegatingWebFluxConfiguration {
  499.        //隐藏部分代码
  500.    }
  501.    @Configuration
  502.    @ConditionalOnEnabledResourceChain
  503.    static class ResourceChainCustomizerConfiguration {
  504.        //隐藏部分代码
  505.    }
  506.    private static class ResourceChainResourceHandlerRegistrationCustomizer
  507.            implements ResourceHandlerRegistrationCustomizer {
  508.        //隐藏部分代码
  509.    }&lt;/code&gt;&lt;/pre&gt;      &lt;div&gt;复制&lt;/div&gt;&lt;/div&gt;    &lt;p&gt;WebFluxAutoConfiguration 自动装配时先自动装配EnableWebFluxConfiguration 而EnableWebFluxConfiguration-&amp;gt;DelegatingWebFluxConfiguration -&amp;gt;WebFluxConfigurationSupport。&lt;/p&gt;    &lt;p&gt;最终WebFluxConfigurationSupport 不仅配置DispatcherHandler 还同时配置了其他很多WebFlux核心组件包括 异常处理器WebExceptionHandler,映射处理器处理器HandlerMapping,请求适配器HandlerAdapter,响应处理器HandlerResultHandler 等。&lt;/p&gt;    &lt;p&gt;DispatcherHandler 创建初始化过程如下;&lt;/p&gt;    &lt;div&gt;      &lt;pre&gt;        &lt;code&gt;public class WebFluxConfigurationSupport implements ApplicationContextAware {
  510.   //隐藏部分代码
  511.   @Nullable
  512.   public final ApplicationContext getApplicationContext() {
  513.      return this.applicationContext;
  514.   }
  515. //隐藏部分代码
  516.   @Bean
  517.   public DispatcherHandler webHandler() {
  518.      return new DispatcherHandler();
  519.   }&lt;/code&gt;&lt;/pre&gt;      &lt;div&gt;复制&lt;/div&gt;&lt;/div&gt;    &lt;div&gt;      &lt;pre&gt;        &lt;code&gt;public class DispatcherHandler implements WebHandler, ApplicationContextAware {
  520.   @Nullable
  521.   private List&amp;lt;HandlerMapping&amp;gt; handlerMappings;
  522.   @Nullable
  523.   private List&amp;lt;HandlerAdapter&amp;gt; handlerAdapters;
  524.   @Nullable
  525.   private List&amp;lt;HandlerResultHandler&amp;gt; resultHandlers;
  526.   @Override
  527.   public void setApplicationContext(ApplicationContext applicationContext) {
  528. initStrategies(applicationContext);
  529.   }
  530.   protected void initStrategies(ApplicationContext context) {
  531.    //注入handlerMappings
  532.      Map&amp;lt;String, HandlerMapping&amp;gt; mappingBeans = BeanFactoryUtils.beansOfTypeIncludingAncestors(
  533.            context, HandlerMapping.class, true, false);
  534.  
  535.      ArrayList&amp;lt;HandlerMapping&amp;gt; mappings = new ArrayList&amp;lt;&amp;gt;(mappingBeans.values());
  536.      AnnotationAwareOrderComparator.sort(mappings);
  537.      this.handlerMappings = Collections.unmodifiableList(mappings);
  538.  //注入handlerAdapters
  539.      Map&amp;lt;String, HandlerAdapter&amp;gt; adapterBeans = BeanFactoryUtils.beansOfTypeIncludingAncestors(
  540.            context, HandlerAdapter.class, true, false);
  541.  
  542.      this.handlerAdapters = new ArrayList&amp;lt;&amp;gt;(adapterBeans.values());
  543.      AnnotationAwareOrderComparator.sort(this.handlerAdapters);
  544.      //注入resultHandlers
  545.      Map&amp;lt;String, HandlerResultHandler&amp;gt; beans = BeanFactoryUtils.beansOfTypeIncludingAncestors(
  546.            context, HandlerResultHandler.class, true, false);
  547.  
  548.      this.resultHandlers = new ArrayList&amp;lt;&amp;gt;(beans.values());
  549.      AnnotationAwareOrderComparator.sort(this.resultHandlers);
  550.   }&lt;/code&gt;&lt;/pre&gt;      &lt;div&gt;复制&lt;/div&gt;&lt;/div&gt;    &lt;p&gt;      &lt;strong&gt;流程相关源码解析-&lt;/strong&gt;HTTPHandlerAutoConfiguration&lt;/p&gt;    &lt;p&gt;上面已讲解过WebFlux 核心组件装载过程,那么这些组件又是什么时候注入到对应的容器上下文中的呢?其实是在刷新容器上下文时注入进去的。&lt;/p&gt;    &lt;p&gt;org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext#onRefresh&lt;/p&gt;    &lt;div&gt;      &lt;pre&gt;        &lt;code&gt;public class ReactiveWebServerApplicationContext extends GenericReactiveWebApplicationContext
  551.      implements ConfigurableWebServerApplicationContext {
  552.   @Override
  553.   protected void onRefresh() {
  554.      super.onRefresh();
  555.      try {
  556.         createWebServer();
  557.      }
  558.      catch (Throwable ex) {
  559.         throw new ApplicationContextException(&amp;quot;Unable to start reactive web server&amp;quot;, ex);
  560.      }
  561.   }
  562.   private void createWebServer() {
  563.      WebServerManager serverManager = this.serverManager;
  564.      if (serverManager == null) {
  565.         String webServerFactoryBeanName = getWebServerFactoryBeanName();
  566.         ReactiveWebServerFactory webServerFactory = getWebServerFactory(webServerFactoryBeanName);
  567.         boolean lazyInit = getBeanFactory().getBeanDefinition(webServerFactoryBeanName).isLazyInit();
  568.         // 这里创建容器管理时注入httpHandler
  569.         this.serverManager = new WebServerManager(this, webServerFactory, this::getHttpHandler, lazyInit);
  570.         getBeanFactory().registerSingleton(&amp;quot;webServerGracefulShutdown&amp;quot;,
  571.               new WebServerGracefulShutdownLifecycle(this.serverManager));
  572.         // 注册一个 web容器启动服务类,该类继承了SmartLifecycle
  573.         getBeanFactory().registerSingleton(&amp;quot;webServerStartStop&amp;quot;,
  574.               new WebServerStartStopLifecycle(this.serverManager));
  575.      }
  576.      initPropertySources();
  577.   }
  578.   protected HttpHandler getHttpHandler() {
  579. String[] beanNames = getBeanFactory().getBeanNamesForType(HttpHandler.class);
  580. if (beanNames.length == 0) {
  581. throw new ApplicationContextException(
  582. &amp;quot;Unable to start ReactiveWebApplicationContext due to missing HttpHandler bean.&amp;quot;);
  583. }
  584. if (beanNames.length &amp;gt; 1) {
  585. throw new ApplicationContextException(
  586. &amp;quot;Unable to start ReactiveWebApplicationContext due to multiple HttpHandler beans : &amp;quot;
  587. + StringUtils.arrayToCommaDelimitedString(beanNames));
  588. }
  589.        //容器上下文获取httpHandler
  590. return getBeanFactory().getBean(beanNames[0], HttpHandler.class);
  591. }&lt;/code&gt;&lt;/pre&gt;      &lt;div&gt;复制&lt;/div&gt;&lt;/div&gt;    &lt;p&gt;而这个HTTPHandler 是由HTTPHandlerAutoConfiguration装配进去的。&lt;/p&gt;    &lt;div&gt;      &lt;pre&gt;        &lt;code&gt;@Configuration
  592. @ConditionalOnClass({ DispatcherHandler.class, HttpHandler.class })
  593. @ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.REACTIVE)
  594. @ConditionalOnMissingBean(HttpHandler.class)
  595. @AutoConfigureAfter({ WebFluxAutoConfiguration.class })
  596. @AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE + 10)
  597. public class HttpHandlerAutoConfiguration {
  598.   @Configuration
  599.   public static class AnnotationConfig {
  600.      private ApplicationContext applicationContext;
  601.      public AnnotationConfig(ApplicationContext applicationContext) {
  602.         this.applicationContext = applicationContext;
  603.      }
  604.      //构建WebHandler
  605.      @Bean
  606.      public HttpHandler httpHandler() {
  607.         return WebHttpHandlerBuilder.applicationContext(this.applicationContext)
  608.               .build();
  609.      }
  610.   }&lt;/code&gt;&lt;/pre&gt;      &lt;div&gt;复制&lt;/div&gt;&lt;/div&gt;    &lt;p&gt;      &lt;strong&gt;流程相关源码解析-web容器&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext#createWebServer 。在创建WebServerManager 容器管理器时会获取对应web容器实例,并注入响应的HTTPHandler。&lt;/p&gt;    &lt;div&gt;      &lt;pre&gt;        &lt;code&gt;class WebServerManager {
  611.   private final ReactiveWebServerApplicationContext applicationContext;
  612.   private final DelayedInitializationHttpHandler handler;
  613.   private final WebServer webServer;
  614.   WebServerManager(ReactiveWebServerApplicationContext applicationContext, ReactiveWebServerFactory factory,
  615.         Supplier&amp;lt;HttpHandler&amp;gt; handlerSupplier, boolean lazyInit) {
  616.      this.applicationContext = applicationContext;
  617.      Assert.notNull(factory, &amp;quot;Factory must not be null&amp;quot;);
  618.      this.handler = new DelayedInitializationHttpHandler(handlerSupplier, lazyInit);
  619.      this.webServer = factory.getWebServer(this.handler);
  620.   }
  621. }&lt;/code&gt;&lt;/pre&gt;      &lt;div&gt;复制&lt;/div&gt;&lt;/div&gt;    &lt;p&gt;以Tomcat 容器为例展示创建过程,使用的是 TomcatHTTPHandlerAdapter 来连接Servlet 请求到HTTPHandler组件。&lt;/p&gt;    &lt;div&gt;      &lt;pre&gt;        &lt;code&gt;public class TomcatReactiveWebServerFactory extends AbstractReactiveWebServerFactory implements ConfigurableTomcatWebServerFactory {
  622.    //隐藏部分代码  
  623.    @Override
  624.    public WebServer getWebServer(HttpHandler httpHandler) {
  625.        if (this.disableMBeanRegistry) {
  626.            Registry.disableRegistry();
  627.        }
  628.        Tomcat tomcat = new Tomcat();
  629.        File baseDir = (this.baseDirectory != null) ? this.baseDirectory : createTempDir(&amp;quot;tomcat&amp;quot;);
  630.        tomcat.setBaseDir(baseDir.getAbsolutePath());
  631.        Connector connector = new Connector(this.protocol);
  632.        connector.setThrowOnFailure(true);
  633.        tomcat.getService().addConnector(connector);
  634.        customizeConnector(connector);
  635.        tomcat.setConnector(connector);
  636.        tomcat.getHost().setAutoDeploy(false);
  637.        configureEngine(tomcat.getEngine());
  638.        for (Connector additionalConnector : this.additionalTomcatConnectors) {
  639.            tomcat.getService().addConnector(additionalConnector);
  640.        }
  641.        TomcatHttpHandlerAdapter servlet = new TomcatHttpHandlerAdapter(httpHandler);
  642.        prepareContext(tomcat.getHost(), servlet);
  643.        return getTomcatWebServer(tomcat);
  644.    }
  645. }&lt;/code&gt;&lt;/pre&gt;      &lt;div&gt;复制&lt;/div&gt;&lt;/div&gt;    &lt;p&gt;最后Spring容器加载后通过SmartLifecycle实现类WebServerStartStopLifecycle 来启动Web容器。&lt;/p&gt;    &lt;p&gt;WebServerStartStopLifecycle 注册过程详见:org.springframework.boot.web.reactive.context.ReactiveWebServerApplicationContext#createWebServer&lt;/p&gt;    &lt;h3&gt;3.2 完整请求处理流程&lt;/h3&gt;    &lt;div&gt;      &lt;div&gt;        &lt;img src="https://ask.qcloudimg.com/http-save/4821640/ceecf29bcca72d65e17222c4d05d9d36.png"&gt;&lt;/img&gt;&lt;/div&gt;&lt;/div&gt;    &lt;p&gt;(引用自:      &lt;a href="https://cloud.tencent.com/developer/tools/blog-entry?target=https%3A%2F%2Fblog.csdn.net%2Fweixx3%2Farticle%2Fdetails%2F89788171&amp;source=article&amp;objectId=1888001" rel="nofollow noopener" target="_blank"&gt;https://blog.csdn.net&lt;/a&gt;)&lt;/p&gt;    &lt;p&gt;该图给出了一个HTTP请求处理的调用链路。是采用Reactor Stream 方式书写,只有最终调用 subscirbe 才真正执行业务逻辑。基于WebFlux 开发时要避免controller 中存在阻塞逻辑。列举下面例子可以看到Spring MVC 和Spring Webflux 之间的请求处理区别。&lt;/p&gt;    &lt;div&gt;      &lt;pre&gt;        &lt;code&gt;@RestControllerpublic
  646. class TestController {
  647.    private Logger logger = LoggerFactory.getLogger(this.getClass());
  648.    @GetMapping(&amp;quot;sync&amp;quot;)
  649.    public String sync() {
  650.        logger.info(&amp;quot;sync method start&amp;quot;);
  651.        String result = this.execute();
  652.        logger.info(&amp;quot;sync method end&amp;quot;);
  653.        return result;
  654.    }
  655.    @GetMapping(&amp;quot;async/mono&amp;quot;)
  656.    public Mono&amp;lt;String&amp;gt; asyncMono() {
  657.        logger.info(&amp;quot;async method start&amp;quot;);
  658.        Mono&amp;lt;String&amp;gt; result = Mono.fromSupplier(this::execute);
  659.        logger.info(&amp;quot;async method end&amp;quot;);
  660.        return result;
  661.    }
  662.    private String execute() {
  663.        try {
  664.            TimeUnit.SECONDS.sleep(5);
  665.        } catch (InterruptedException e) {
  666.            e.printStackTrace();
  667.        }
  668.        return &amp;quot;hello&amp;quot;;
  669.    }
  670. }&lt;/code&gt;&lt;/pre&gt;      &lt;div&gt;复制&lt;/div&gt;&lt;/div&gt;    &lt;p&gt;日志输出&lt;/p&gt;    &lt;div&gt;      &lt;pre&gt;        &lt;code&gt;2021-05-31 20:14:52.384  INFO 3508 --- [nio-8080-exec-2] c.v.internet.webflux.web.TestController  : sync method start
  671. 2021-05-31 20:14:57.385  INFO 3508 --- [nio-8080-exec-2] c.v.internet.webflux.web.TestController  : sync method end
  672. 2021-05-31 20:15:09.659  INFO 3508 --- [nio-8080-exec-3] c.v.internet.webflux.web.TestController  : async method start
  673. 2021-05-31 20:15:09.660  INFO 3508 --- [nio-8080-exec-3] c.v.internet.webflux.web.TestController  : async method end&lt;/code&gt;&lt;/pre&gt;      &lt;div&gt;复制&lt;/div&gt;&lt;/div&gt;    &lt;p&gt;从上面例子可以看出sync() 方法阻塞了请求,而asyncMono() 没有阻塞请求并立刻返回的。asyncMono() 方法具体业务逻辑 被包裹在了Mono 中Supplier中的了。当execute 处理完业务逻辑后通过回调方式响应给浏览器。&lt;/p&gt;    &lt;h2&gt;四、存储支持&lt;/h2&gt;    &lt;p&gt;一旦控制层使用了 Spring Webflux 则安全认证层、数据访问层都必须使用 Reactive API 才真正实现异步非阻塞。&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;NOSQL Database&lt;/strong&gt;&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;        &lt;strong&gt;MongoDB&lt;/strong&gt; (org.springframework.boot:spring-boot-starter-data-mongodb-reactive)。&lt;/li&gt;      &lt;li&gt;        &lt;strong&gt;Redis&lt;/strong&gt;(org.springframework.boot:spring-boot-starter-data-redis-reactive)。&lt;/li&gt;&lt;/ul&gt;    &lt;p&gt;      &lt;strong&gt;Relational Database&lt;/strong&gt;&lt;/p&gt;    &lt;ul&gt;      &lt;li&gt;        &lt;strong&gt;H2&lt;/strong&gt; (io.r2dbc:r2dbc-h2)&lt;/li&gt;      &lt;li&gt;        &lt;strong&gt;MariaDB&lt;/strong&gt; (org.mariadb:r2dbc-mariadb)&lt;/li&gt;      &lt;li&gt;        &lt;strong&gt;Microsoft SQL Server&lt;/strong&gt; (io.r2dbc:r2dbc-mssql)&lt;/li&gt;      &lt;li&gt;        &lt;strong&gt;MySQL&lt;/strong&gt; (dev.miku:r2dbc-mysql)&lt;/li&gt;      &lt;li&gt;        &lt;strong&gt;jasync-sql MySQL&lt;/strong&gt; (com.github.jasync-sql:jasync-r2dbc-mysql)&lt;/li&gt;      &lt;li&gt;        &lt;strong&gt;Postgres&lt;/strong&gt; (io.r2dbc:r2dbc-postgresql)&lt;/li&gt;      &lt;li&gt;        &lt;strong&gt;Oracle&lt;/strong&gt; (com.oracle.database.r2dbc:oracle-r2dbc)&lt;/li&gt;&lt;/ul&gt;    &lt;h2&gt;五、总结&lt;/h2&gt;    &lt;p&gt;关于Spring MVC 和Spring WebFlux 测评很多,本文引用下做简单说明。参考:《      &lt;a href="https://cloud.tencent.com/developer/tools/blog-entry?target=https%3A%2F%2Ftechnology.amis.nl%2Fsoftware-development%2Fperformance-and-tuning%2Fspring-blocking-vs-non-blocking-r2dbc-vs-jdbc-and-webflux-vs-web-mvc%2F&amp;source=article&amp;objectId=1888001" rel="nofollow noopener" target="_blank"&gt;Spring: Blocking vs non-blocking: R2DBC vs JDBC and WebFlux vs Web MVC&lt;/a&gt;》。&lt;/p&gt;    &lt;p&gt;      &lt;strong&gt;基本依赖&lt;/strong&gt;&lt;/p&gt;    &lt;div&gt;      &lt;pre&gt;        &lt;code&gt;&amp;lt;dependency&amp;gt;
  674.    &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;
  675.    &amp;lt;artifactId&amp;gt;spring-boot-starter-data-r2dbc&amp;lt;/artifactId&amp;gt;
  676. &amp;lt;/dependency&amp;gt;
  677. &amp;lt;!-- r2dbc 连接池 --&amp;gt;
  678. &amp;lt;dependency&amp;gt;
  679.    &amp;lt;groupId &amp;gt;io.r2dbc&amp;lt;/groupId&amp;gt;
  680.    &amp;lt;artifactId&amp;gt;r2dbc-pool&amp;lt;/artifactId&amp;gt;
  681. &amp;lt;/dependency&amp;gt;
  682. &amp;lt;!--r2dbc mysql 库--&amp;gt;
  683. &amp;lt;dependency&amp;gt;
  684.    &amp;lt;groupId&amp;gt;dev.miku&amp;lt;/groupId&amp;gt;
  685.    &amp;lt;artifactId&amp;gt;r2dbc- mysql&amp;lt;/artifactId&amp;gt;
  686. &amp;lt;/dependency&amp;gt;
  687. &amp;lt;!--自动配置需要引入一个嵌入式数据库类型对象--&amp;gt;
  688. &amp;lt;dependency&amp;gt;
  689.    &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;
  690.    &amp;lt;artifactId&amp;gt;spring-boot-starter-data-jdbc&amp;lt;/artifactId&amp;gt;
  691. &amp;lt;/dependency&amp;gt;
  692. &amp;lt;!-- 反应方程式 web 框架 webflux--&amp;gt;
  693. &amp;lt;dependency&amp;gt;
  694.    &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;
  695.    &amp;lt;artifactId&amp;gt;spring-boot-starter-webflux&amp;lt;/artifactId&amp;gt;
  696. &amp;lt;/dependency&amp;gt;&lt;/code&gt;&lt;/pre&gt;      &lt;div&gt;复制&lt;/div&gt;&lt;/div&gt;    &lt;p&gt;相同数据下效果如下      &lt;strong&gt;;&lt;/strong&gt;&lt;/p&gt;    &lt;div&gt;      &lt;div&gt;        &lt;img src="https://ask.qcloudimg.com/http-save/4821640/c833df5a909b9b28beaae087a964f4ef.jpeg"&gt;&lt;/img&gt;&lt;/div&gt;&lt;/div&gt;    &lt;p&gt;Spring MVC + JDBC 在低并发下表现最好,但 WebFlux + R2DBC 在高并发下每个处理请求使用的内存最少。&lt;/p&gt;    &lt;div&gt;      &lt;div&gt;        &lt;img src="https://ask.qcloudimg.com/http-save/4821640/2ecf95be8324dcbbc01da4c851ac4555.jpeg"&gt;&lt;/img&gt;&lt;/div&gt;&lt;/div&gt;    &lt;p&gt;Spring WebFlux + R2DBC 在高并发下,吞吐量表现优异。&lt;/p&gt;    &lt;blockquote&gt;      &lt;p&gt;作者:vivo互联网服务器团队-Zhou Changqing&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;
  697.    &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>
  698.      <category />
  699.      <guid isPermaLink="true">https://itindex.net/detail/62911-spring-webflux</guid>
  700.      <pubDate>Sun, 04 Feb 2024 14:27:27 CST</pubDate>
  701.    </item>
  702.    <item>
  703.      <title>logback VS log4j2 那些你注意不到的性能差距...</title>
  704.      <link>https://itindex.net/detail/62910-logback-vs-log4j2</link>
  705.      <description>&lt;h2&gt;一、简介&lt;/h2&gt;
  706. &lt;p&gt;logback, log4j2 等都是非常优秀的日志框架, 在日常使用中,我们很少会关注去使用哪一个框架, 但其实这些日志框架在性能方面存在明显的差异。
  707. 尤其在生产环境中, 有时候日志的性能高低,很可能影响到机器的成本, 像一些大企业,如阿里、腾讯、字节等,一点点的性能优化,就能节省数百万的支出。
  708. 再次, 统一日志框架也是大厂常有的规范化的事情, 还可以便于后续的ETL流程, 因此,我们选一个日志框架,其实还是比较重要的。&lt;/p&gt;
  709. &lt;h3&gt;浅谈与slfj4、log4j, logback的关系&lt;/h3&gt;
  710. &lt;p&gt;笼统的讲就是slf4j是一系列的日志接口,而log4j logback是具体实现了这些接口的日志框架,也可以简单理解为 slf4j 是接口, logback 和log4j是slf4j的具体实现, slf4j 具备很高的易用性和很好的抽象性。 使用SLF4J编写日志消息非常简单。首先需要调用 LoggerFactory 上的 getLogger 方法来实例化一个新的 Logger 对象。一共有两种方法:&lt;/p&gt;
  711. &lt;p&gt;  &lt;strong&gt;方法1: 使用lombok (推荐)&lt;/strong&gt;&lt;/p&gt;
  712. &lt;p&gt;直接在类上打上lombok的注解, 这个方法是最简单,代码量最小,编程效率最高的, 而且lombok组件在很多场景都很好用,&lt;/p&gt;
  713. &lt;pre&gt;  &lt;code&gt;@Slf4j
  714. public class Main {}
  715. &lt;/code&gt;&lt;/pre&gt;
  716. &lt;p&gt;  &lt;strong&gt;方法2: 直接使用&lt;/strong&gt;&lt;/p&gt;
  717. &lt;p&gt;使用   &lt;code&gt;org.slf4j.LoggerFactory&lt;/code&gt; 的   &lt;code&gt;getLogger&lt;/code&gt; 方法获取logger实例,注意推荐   &lt;code&gt;private static final&lt;/code&gt;&lt;/p&gt;
  718. &lt;pre&gt;  &lt;code&gt;private static final Logger LOG = LoggerFactory.getLogger(Main.class);
  719. &lt;/code&gt;&lt;/pre&gt;
  720. &lt;h2&gt;二、性能测试对比&lt;/h2&gt;
  721. &lt;h3&gt;性能对比图&lt;/h3&gt;
  722. &lt;p&gt;  &lt;img alt="compare.png" src="https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/9b83051d75924e92908c7c4789153a3a~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=893&amp;h=813&amp;s=47757&amp;e=png&amp;b=ffffff"&gt;&lt;/img&gt;&lt;/p&gt;
  723. &lt;p&gt;从上图可以得出两个结论:&lt;/p&gt;
  724. &lt;ol&gt;
  725.  &lt;li&gt;log4j2 全面优于 logback, log4j2性能是 logback的两倍&lt;/li&gt;
  726.  &lt;li&gt;随着线程数量的增加, 日志输出能力并不会线性增加,在增加到约两倍于CPU核数的时候, 日志性能达到比较高的一个值。&lt;/li&gt;
  727. &lt;/ol&gt;
  728. &lt;blockquote&gt;
  729.  &lt;p&gt;tips:&lt;/p&gt;
  730.  &lt;p&gt;已知的影响效率的是,打出方法名称和行号都会显著降低日志输出效率, 如我们单单去掉 行号,在单线程情况下, log4j2 的性能相差一倍多. 见下图:&lt;/p&gt;
  731. &lt;/blockquote&gt;
  732. &lt;p&gt;  &lt;img alt="format.png" src="https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/fbf6786d717e40909565576be11ca68b~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=1384&amp;h=1162&amp;s=408512&amp;e=jpg&amp;b=fefefe"&gt;&lt;/img&gt;&lt;/p&gt;
  733. &lt;h3&gt;附:测试环境:&lt;/h3&gt;
  734. &lt;p&gt;  &lt;strong&gt;1. 硬件环境:&lt;/strong&gt;&lt;/p&gt;
  735. &lt;pre&gt;  &lt;code&gt;CPU AMD Ryzen 5 3600 6-Core Processor  Base speed:3.95 GHz
  736. Memory 32.0 GB Speed:2666 MHz
  737. &lt;/code&gt;&lt;/pre&gt;
  738. &lt;p&gt;  &lt;strong&gt;2. jvm 信息&lt;/strong&gt;&lt;/p&gt;
  739. &lt;pre&gt;  &lt;code&gt;JDK版本: semeru-11.0.20  
  740. JVM 参数:-Xms1000m -Xmx1000m
  741. &lt;/code&gt;&lt;/pre&gt;
  742. &lt;p&gt;  &lt;strong&gt;3. log4j2 和logback的版本&lt;/strong&gt;&lt;/p&gt;
  743. &lt;pre&gt;  &lt;code&gt;&amp;lt;log4j.version&amp;gt;2.22.1&amp;lt;/log4j.version&amp;gt;
  744. &amp;lt;logback.version&amp;gt;1.4.14&amp;lt;/logback.version&amp;gt;
  745. &lt;/code&gt;&lt;/pre&gt;
  746. &lt;p&gt;  &lt;strong&gt;4. 测试线程数和测试方式&lt;/strong&gt;&lt;/p&gt;
  747. &lt;pre&gt;  &lt;code&gt;线程数:    1 8 32 128
  748. 测试方式:  统一预热, 跑三次,取预热后的正式跑的平均值
  749. &lt;/code&gt;&lt;/pre&gt;
  750. &lt;p&gt;  &lt;strong&gt;4. 日志格式&lt;/strong&gt;
  751. 日志格式对于log的效率会有非常大的影响, 有些时候则是天差地别。&lt;/p&gt;
  752. &lt;pre&gt;  &lt;code&gt;&amp;lt;!-log4j2 的配置 --&amp;gt;
  753. &amp;lt;Property name=&amp;quot;log.pattern&amp;quot;&amp;gt;[%d{yyyyMMdd HH:mm:ss.SSS}] [%t] [%level{length=4}] %c{1.}:%L %msg%n&amp;lt;/Property&amp;gt;
  754. &amp;lt;!-logback 的配置 --&amp;gt;
  755. &amp;lt;pattern&amp;gt;[%date{yyyyMMdd HH:mm:ss.SSS}] [%thread] [%-4level] %logger{5}:%line %msg%n&amp;lt;/pattern&amp;gt;
  756. &lt;/code&gt;&lt;/pre&gt;
  757. &lt;p&gt;  &lt;strong&gt;5. 日志长度&lt;/strong&gt;&lt;/p&gt;
  758. &lt;p&gt;长度大约 129个字符,常见长度  输出到文件   &lt;code&gt;app.log&lt;/code&gt;, 格式统一, 一模一样&lt;/p&gt;
  759. &lt;pre&gt;  &lt;code&gt;[20240125 16:24:27.716] [thread-3] [INFO] c.w.d.Main:32 main - info level ...this is a demo script, pure string log will be used!
  760. [20240125 16:24:27.716] [thread-1] [INFO] c.w.d.Main:32 main - info level ...this is a demo script, pure string log will be used!
  761. &lt;/code&gt;&lt;/pre&gt;
  762. &lt;h2&gt;三、 使用方法, 有需要的可以拿去.&lt;/h2&gt;
  763. &lt;h3&gt;1. logback在springboot项目中的使用&lt;/h3&gt;
  764. &lt;p&gt;pom 文件, 不需要做任何事情, spring官方默认使用logback, 非spring项目可以直接引入下面的xml, 同时包含logback 和slf4j&lt;/p&gt;
  765. &lt;pre&gt;  &lt;code&gt;    &amp;lt;dependency&amp;gt;
  766.        &amp;lt;groupId&amp;gt;ch.qos.logback&amp;lt;/groupId&amp;gt;
  767.        &amp;lt;artifactId&amp;gt;logback-classic&amp;lt;/artifactId&amp;gt;
  768.        &amp;lt;version&amp;gt;${logback.version}&amp;lt;/version&amp;gt;
  769.    &amp;lt;/dependency&amp;gt;
  770. &lt;/code&gt;&lt;/pre&gt;
  771. &lt;p&gt;配置文件放置位置:   &lt;code&gt;src/main/resource/logback.xml&lt;/code&gt;, 样例如下:&lt;/p&gt;
  772. &lt;pre&gt;  &lt;code&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;
  773. &amp;lt;configuration&amp;gt;
  774.  
  775. &amp;lt;appender name=&amp;quot;CONSOLE&amp;quot; class=&amp;quot;ch.qos.logback.core.ConsoleAppender&amp;quot;&amp;gt;
  776. &amp;lt;encoder&amp;gt;
  777. &amp;lt;pattern&amp;gt;%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n&amp;lt;/pattern&amp;gt;
  778. &amp;lt;/encoder&amp;gt;
  779. &amp;lt;/appender&amp;gt;
  780.  
  781. &amp;lt;appender name=&amp;quot;FILE&amp;quot; class=&amp;quot;ch.qos.logback.core.rolling.RollingFileAppender&amp;quot;&amp;gt;
  782. &amp;lt;encoder&amp;gt;
  783. &amp;lt;pattern&amp;gt;%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n&amp;lt;/pattern&amp;gt;
  784. &amp;lt;charset&amp;gt;utf-8&amp;lt;/charset&amp;gt;
  785. &amp;lt;/encoder&amp;gt;
  786. &amp;lt;file&amp;gt;log/output.log&amp;lt;/file&amp;gt;
  787. &amp;lt;rollingPolicy class=&amp;quot;ch.qos.logback.core.rolling.FixedWindowRollingPolicy&amp;quot;&amp;gt;
  788. &amp;lt;fileNamePattern&amp;gt;log/output.log.%i&amp;lt;/fileNamePattern&amp;gt;
  789. &amp;lt;/rollingPolicy&amp;gt;
  790. &amp;lt;triggeringPolicy class=&amp;quot;ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy&amp;quot;&amp;gt;
  791. &amp;lt;MaxFileSize&amp;gt;1MB&amp;lt;/MaxFileSize&amp;gt;
  792. &amp;lt;/triggeringPolicy&amp;gt;
  793. &amp;lt;/appender&amp;gt;
  794.  
  795. &amp;lt;root level=&amp;quot;INFO&amp;quot;&amp;gt;
  796. &amp;lt;appender-ref ref=&amp;quot;CONSOLE&amp;quot; /&amp;gt;
  797. &amp;lt;appender-ref ref=&amp;quot;FILE&amp;quot; /&amp;gt;
  798. &amp;lt;/root&amp;gt;
  799. &amp;lt;/configuration&amp;gt;
  800.  
  801. &lt;/code&gt;&lt;/pre&gt;
  802. &lt;h3&gt;2. log4j2 在spring项目中的使用&lt;/h3&gt;
  803. &lt;p&gt;由于spring官方默认使用logback,因此我们需要对spring默认的依赖进行排除然后再引入以下依赖:&lt;/p&gt;
  804. &lt;pre&gt;  &lt;code&gt;    &amp;lt;dependency&amp;gt;
  805.        &amp;lt;groupId&amp;gt;org.apache.logging.log4j&amp;lt;/groupId&amp;gt;
  806.        &amp;lt;artifactId&amp;gt;log4j-core&amp;lt;/artifactId&amp;gt;
  807.        &amp;lt;version&amp;gt;${log4j.version}&amp;lt;/version&amp;gt;
  808.    &amp;lt;/dependency&amp;gt;
  809.  
  810.    &amp;lt;dependency&amp;gt;
  811.        &amp;lt;groupId&amp;gt;org.apache.logging.log4j&amp;lt;/groupId&amp;gt;
  812.        &amp;lt;artifactId&amp;gt;log4j-api&amp;lt;/artifactId&amp;gt;
  813.        &amp;lt;version&amp;gt;${log4j.version}&amp;lt;/version&amp;gt;
  814.    &amp;lt;/dependency&amp;gt;
  815.  
  816.    &amp;lt;dependency&amp;gt;
  817.        &amp;lt;groupId&amp;gt;org.apache.logging.log4j&amp;lt;/groupId&amp;gt;
  818.        &amp;lt;artifactId&amp;gt;log4j-slf4j2-impl&amp;lt;/artifactId&amp;gt;
  819.        &amp;lt;version&amp;gt;${log4j.version}&amp;lt;/version&amp;gt;
  820.    &amp;lt;/dependency&amp;gt;
  821.  
  822. &lt;/code&gt;&lt;/pre&gt;
  823. &lt;p&gt;配置文件放置位置:   &lt;code&gt;src/main/resource/log4j2.xml&lt;/code&gt;, 样例如下:&lt;/p&gt;
  824. &lt;pre&gt;  &lt;code&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;
  825. &amp;lt;Configuration&amp;gt;
  826. &amp;lt;Properties&amp;gt;
  827.        &amp;lt;!-- 定义日志格式 --&amp;gt;
  828. &amp;lt;Property name=&amp;quot;log.pattern&amp;quot;&amp;gt;%d{MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36}%n%msg%n%n&amp;lt;/Property&amp;gt;
  829.        &amp;lt;!-- 定义文件名变量 --&amp;gt;
  830. &amp;lt;Property name=&amp;quot;file.err.filename&amp;quot;&amp;gt;log/err.log&amp;lt;/Property&amp;gt;
  831. &amp;lt;Property name=&amp;quot;file.err.pattern&amp;quot;&amp;gt;log/err.%i.log.gz&amp;lt;/Property&amp;gt;
  832. &amp;lt;/Properties&amp;gt;
  833.    &amp;lt;!-- 定义Appender,即目的地 --&amp;gt;
  834. &amp;lt;Appenders&amp;gt;
  835.        &amp;lt;!-- 定义输出到屏幕 --&amp;gt;
  836. &amp;lt;Console name=&amp;quot;console&amp;quot; target=&amp;quot;SYSTEM_OUT&amp;quot;&amp;gt;
  837.            &amp;lt;!-- 日志格式引用上面定义的log.pattern --&amp;gt;
  838. &amp;lt;PatternLayout pattern=&amp;quot;${log.pattern}&amp;quot; /&amp;gt;
  839. &amp;lt;/Console&amp;gt;
  840.        &amp;lt;!-- 定义输出到文件,文件名引用上面定义的file.err.filename --&amp;gt;
  841. &amp;lt;RollingFile name=&amp;quot;err&amp;quot; bufferedIO=&amp;quot;true&amp;quot; fileName=&amp;quot;${file.err.filename}&amp;quot; filePattern=&amp;quot;${file.err.pattern}&amp;quot;&amp;gt;
  842. &amp;lt;PatternLayout pattern=&amp;quot;${log.pattern}&amp;quot; /&amp;gt;
  843. &amp;lt;Policies&amp;gt;
  844.                &amp;lt;!-- 根据文件大小自动切割日志 --&amp;gt;
  845. &amp;lt;SizeBasedTriggeringPolicy size=&amp;quot;1 MB&amp;quot; /&amp;gt;
  846. &amp;lt;/Policies&amp;gt;
  847.            &amp;lt;!-- 保留最近10份 --&amp;gt;
  848. &amp;lt;DefaultRolloverStrategy max=&amp;quot;10&amp;quot; /&amp;gt;
  849. &amp;lt;/RollingFile&amp;gt;
  850. &amp;lt;/Appenders&amp;gt;
  851. &amp;lt;Loggers&amp;gt;
  852. &amp;lt;Root level=&amp;quot;info&amp;quot;&amp;gt;
  853.            &amp;lt;!-- 对info级别的日志,输出到console --&amp;gt;
  854. &amp;lt;AppenderRef ref=&amp;quot;console&amp;quot; level=&amp;quot;info&amp;quot; /&amp;gt;
  855.            &amp;lt;!-- 对error级别的日志,输出到err,即上面定义的RollingFile --&amp;gt;
  856. &amp;lt;AppenderRef ref=&amp;quot;err&amp;quot; level=&amp;quot;error&amp;quot; /&amp;gt;
  857. &amp;lt;/Root&amp;gt;
  858. &amp;lt;/Loggers&amp;gt;
  859. &amp;lt;/Configuration&amp;gt;
  860.  
  861. &lt;/code&gt;&lt;/pre&gt;
  862. &lt;h3&gt;最佳实践:&lt;/h3&gt;
  863. &lt;ol&gt;
  864.  &lt;li&gt;
  865.   &lt;p&gt;滚动日志,永远不让磁盘满&lt;/p&gt;
  866.   &lt;ul&gt;
  867.    &lt;li&gt;根据运行环境要求, 配置最大日志数量&lt;/li&gt;
  868.    &lt;li&gt;根据运行环境要求, 配置日志文件最大大小&lt;/li&gt;
  869. &lt;/ul&gt;
  870. &lt;/li&gt;
  871.  &lt;li&gt;
  872.   &lt;p&gt;日志如何使用才方便统计和定位问题&lt;/p&gt;
  873.   &lt;ul&gt;
  874.    &lt;li&gt;统一日志格式,比如统一先打印方法名称,再打印参数列表&lt;/li&gt;
  875.    &lt;li&gt;写好要打印参数的 toString方法&lt;/li&gt;
  876. &lt;/ul&gt;
  877. &lt;/li&gt;
  878.  &lt;li&gt;
  879.   &lt;p&gt;日志如何配置性能才比较高&lt;/p&gt;
  880.   &lt;ul&gt;
  881.    &lt;li&gt;日志配置应该遵循结构清晰,尽量简化的原则,能不让框架计算的,尽量不让框架计算, 比如方法名,行号等&lt;/li&gt;
  882. &lt;/ul&gt;
  883. &lt;/li&gt;
  884.  &lt;li&gt;
  885.   &lt;p&gt;全公司,或者个人使用习惯统一,这样有助于后续的日志收集、分析和统计&lt;/p&gt;
  886. &lt;/li&gt;
  887. &lt;/ol&gt;
  888. &lt;h2&gt;四、 附录:&lt;/h2&gt;
  889. &lt;h3&gt;1. 测试代码:&lt;/h3&gt;
  890. &lt;pre&gt;  &lt;code&gt;package com.winjeg.demo;
  891.  
  892.  
  893. import lombok.extern.slf4j.Slf4j;
  894. import org.apache.commons.lang3.concurrent.BasicThreadFactory;
  895. import org.slf4j.Logger;
  896. import org.slf4j.LoggerFactory;
  897.  
  898. import java.util.ArrayList;
  899. import java.util.List;
  900. import java.util.concurrent.*;
  901.  
  902. @Slf4j
  903. public class Main {
  904.  
  905.    private static final Logger LOG = LoggerFactory.getLogger(Main.class);
  906.  
  907.    private static final ThreadPoolExecutor EXECUTOR = new ThreadPoolExecutor(128, 256, 1L,
  908.            TimeUnit.MINUTES, new ArrayBlockingQueue&amp;lt;&amp;gt;(512),
  909.            new BasicThreadFactory.Builder().namingPattern(&amp;quot;thread-%d&amp;quot;).daemon(true).build());
  910.  
  911.    public static void main(String[] args) {
  912.        long start = System.currentTimeMillis();
  913.        execute(8, 160_000);
  914.        long first = System.currentTimeMillis();
  915.        execute(8, 160_000);
  916.        System.out.printf(&amp;quot;time cost, preheat:%d\t, formal:%d\n&amp;quot;, first - start, System.currentTimeMillis() - first);
  917.    }
  918.  
  919.    private static void execute(int threadNum, int times) {
  920.        List&amp;lt;Future&amp;lt;?&amp;gt;&amp;gt; futures = new ArrayList&amp;lt;&amp;gt;();
  921.        for (int i = 0; i &amp;lt; threadNum; i++) {
  922.            Future&amp;lt;?&amp;gt; f = EXECUTOR.submit(() -&amp;gt; {
  923.                for (long j = 0; j &amp;lt; times; j++) {
  924.                    log.info(&amp;quot;main - info level ...this is a demo script, pure string log will be used!&amp;quot;);
  925.                }
  926.            });
  927.            futures.add(f);
  928.        }
  929.        futures.forEach(f -&amp;gt; {
  930.            try {
  931.                f.get();
  932.            } catch (InterruptedException | ExecutionException e) {
  933.                throw new RuntimeException(e);
  934.            }
  935.        });
  936.    }
  937. }
  938.  
  939. &lt;/code&gt;&lt;/pre&gt;
  940. &lt;pre&gt;  &lt;code&gt;&amp;lt;project xmlns=&amp;quot;http://maven.apache.org/POM/4.0.0&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;
  941.         xsi:schemaLocation=&amp;quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd&amp;quot;&amp;gt;
  942.    &amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;
  943.    &amp;lt;groupId&amp;gt;com.winjeg.spring&amp;lt;/groupId&amp;gt;
  944.    &amp;lt;artifactId&amp;gt;demo&amp;lt;/artifactId&amp;gt;
  945.    &amp;lt;version&amp;gt;1.0-SNAPSHOT&amp;lt;/version&amp;gt;
  946.    &amp;lt;packaging&amp;gt;jar&amp;lt;/packaging&amp;gt;
  947.    &amp;lt;properties&amp;gt;
  948.        &amp;lt;project.build.sourceEncoding&amp;gt;UTF-8&amp;lt;/project.build.sourceEncoding&amp;gt;
  949.        &amp;lt;log4j.version&amp;gt;2.22.1&amp;lt;/log4j.version&amp;gt;
  950.        &amp;lt;logback.version&amp;gt;1.4.14&amp;lt;/logback.version&amp;gt;
  951.        &amp;lt;java.version&amp;gt;1.8&amp;lt;/java.version&amp;gt;
  952.    &amp;lt;/properties&amp;gt;
  953.  
  954.    &amp;lt;dependencies&amp;gt;
  955.        &amp;lt;dependency&amp;gt;
  956.            &amp;lt;groupId&amp;gt;org.projectlombok&amp;lt;/groupId&amp;gt;
  957.            &amp;lt;artifactId&amp;gt;lombok&amp;lt;/artifactId&amp;gt;
  958.            &amp;lt;version&amp;gt;1.18.30&amp;lt;/version&amp;gt;
  959.        &amp;lt;/dependency&amp;gt;
  960.  
  961.        &amp;lt;dependency&amp;gt;
  962.            &amp;lt;groupId&amp;gt;org.apache.commons&amp;lt;/groupId&amp;gt;
  963.            &amp;lt;artifactId&amp;gt;commons-lang3&amp;lt;/artifactId&amp;gt;
  964.            &amp;lt;version&amp;gt;3.12.0&amp;lt;/version&amp;gt;
  965.        &amp;lt;/dependency&amp;gt;
  966.  
  967.        &amp;lt;dependency&amp;gt;
  968.            &amp;lt;groupId&amp;gt;org.apache.logging.log4j&amp;lt;/groupId&amp;gt;
  969.            &amp;lt;artifactId&amp;gt;log4j-core&amp;lt;/artifactId&amp;gt;
  970.            &amp;lt;version&amp;gt;${log4j.version}&amp;lt;/version&amp;gt;
  971.        &amp;lt;/dependency&amp;gt;
  972.  
  973.        &amp;lt;dependency&amp;gt;
  974.            &amp;lt;groupId&amp;gt;org.apache.logging.log4j&amp;lt;/groupId&amp;gt;
  975.            &amp;lt;artifactId&amp;gt;log4j-api&amp;lt;/artifactId&amp;gt;
  976.            &amp;lt;version&amp;gt;${log4j.version}&amp;lt;/version&amp;gt;
  977.        &amp;lt;/dependency&amp;gt;
  978.  
  979.        &amp;lt;dependency&amp;gt;
  980.            &amp;lt;groupId&amp;gt;org.apache.logging.log4j&amp;lt;/groupId&amp;gt;
  981.            &amp;lt;artifactId&amp;gt;log4j-slf4j2-impl&amp;lt;/artifactId&amp;gt;
  982.            &amp;lt;version&amp;gt;${log4j.version}&amp;lt;/version&amp;gt;
  983.        &amp;lt;/dependency&amp;gt;
  984.  
  985.        &amp;lt;!--        &amp;lt;dependency&amp;gt;--&amp;gt;
  986.        &amp;lt;!--            &amp;lt;groupId&amp;gt;ch.qos.logback&amp;lt;/groupId&amp;gt;--&amp;gt;
  987.        &amp;lt;!--            &amp;lt;artifactId&amp;gt;logback-classic&amp;lt;/artifactId&amp;gt;--&amp;gt;
  988.        &amp;lt;!--            &amp;lt;version&amp;gt;${logback.version}&amp;lt;/version&amp;gt;--&amp;gt;
  989.        &amp;lt;!--        &amp;lt;/dependency&amp;gt;--&amp;gt;
  990.    &amp;lt;/dependencies&amp;gt;
  991. &amp;lt;/project&amp;gt;
  992.  
  993. &lt;/code&gt;&lt;/pre&gt;
  994. &lt;h3&gt;2. 参考资料&lt;/h3&gt;
  995. &lt;p&gt;这些参考资料有可能不太对, 但是为了方便大家查阅, 我还是给出了一些官方的和比较受欢迎的资料&lt;/p&gt;
  996. &lt;ul&gt;
  997.  &lt;li&gt;   &lt;a href="https://logback.qos.ch/performance.html"&gt;logback官方测试结果&lt;/a&gt;&lt;/li&gt;
  998.  &lt;li&gt;   &lt;a href="https://logging.apache.org/log4j/2.x/performance.html"&gt;log4j2官方测试结果&lt;/a&gt;&lt;/li&gt;
  999.  &lt;li&gt;   &lt;a href="https://zhuanlan.zhihu.com/p/472941897"&gt;Java日志框架:log4j vs logback vs log4j2&lt;/a&gt;&lt;/li&gt;
  1000. &lt;/ul&gt;
  1001. &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>
  1002.      <category />
  1003.      <guid isPermaLink="true">https://itindex.net/detail/62910-logback-vs-log4j2</guid>
  1004.      <pubDate>Thu, 25 Jan 2024 17:44:13 CST</pubDate>
  1005.    </item>
  1006.    <item>
  1007.      <title>广州重回GDP第四城,释放了什么信号?</title>
  1008.      <link>https://itindex.net/detail/62909-%E5%B9%BF%E5%B7%9E-gdp-%E9%87%8A%E6%94%BE</link>
  1009.      <description>&lt;img src="https://img.huxiucdn.com/article/cover/202401/25/203356841652.jpg?imageView2/1/w/1440/h/810/|imageMogr2/strip/interlace/1/quality/85/format/jpg"&gt;&lt;/img&gt;      &lt;p&gt;本文来自微信公众号:  &lt;a href="http://mp.weixin.qq.com/s?__biz=MzUyMTI0MDkxMg==&amp;mid=2247504647&amp;idx=1&amp;sn=f6d03b5db693f5144654dbc30f0711e7&amp;chksm=f9dcbb38ceab322ea4e2ddc53edc38e300c80e5f6bff8a2ff5533831658d6667c9a25b06b967#rd" rel="nofollow" target="_blank"&gt;国民经略 (ID:guominjinglve)&lt;/a&gt;,作者:凯风,原文标题:《大逆转!全国GDP第四城,又变了》,头图来自:视觉中国&lt;/p&gt; &lt;p&gt;&lt;/p&gt;   广州以30335.73亿元的GDP总量超过重庆,重返全国前四。广州经济呈现节节攀升、逐浪复苏之势,消费和进出口总额连续三年超过1万亿元,固定资产投资达到8600亿元。广州的经济韧性得到了体现,产业结构也在转型升级。 &lt;br /&gt; &lt;br /&gt;•  广州消费和进出口总额连续三年超过1万亿元 &lt;br /&gt; &lt;br /&gt;•  广州的固定资产投资达到8600亿元 &lt;br /&gt; &lt;br /&gt;•  广州的新兴产业迅速崛起,特别是汽车产业表现亮眼    &lt;p&gt;城市竞争,不进则退。&lt;/p&gt; &lt;p&gt;日前,广州、重庆发布2023年经济数据,广州以30335.73亿元的GDP总量,超过重庆的30145.8亿元,重返全国前四。&lt;/p&gt; &lt;p&gt;过去几年,由于疫情等超预期因素冲击,加上传统产业处于升级转型的关键阶段,广州经济出现明显波动,一度被重庆赶超,坊间关于“北上广深”变成“北上深渝”或“北上深杭”的声音不绝于耳。&lt;/p&gt; &lt;p&gt;如今,  &lt;strong&gt;广州重回GDP第四城,释放了什么信号?&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;一  &lt;br /&gt;&lt;/p&gt; &lt;p&gt;广州经济,何以强势反弹?&lt;/p&gt; &lt;p&gt;回顾2023年经济,广州呈现的是节节攀升、逐浪复苏之势,GDP实际增速从年初的1.8%一路上升到年末的4.8%,一路企稳向好。&lt;/p&gt; &lt;p&gt;从经济“三驾马车”来看,广州消费、进出口总额连续第三年双双超过1万亿元,而固定资产投资达到8600亿元,成为GDP突破3万亿的支撑。&lt;/p&gt;  &lt;img height="963 " src="https://img.huxiucdn.com/article/content/202401/25/191008142709.jpg" width="1000 "&gt;&lt;/img&gt;       &lt;p&gt;前两年,广州罕见遭遇人口流失之困,但随着疫情干扰不复存在,大量人口开始回流,广州地铁客流量、高铁及航空旅客量双双创下新高,消费及第三产业全面复苏。&lt;/p&gt; &lt;p&gt;一度停了一两年之久的广交会终于重回线下,无论是展览面积还是采购商数量,均创下了历史新高,凸显了广州作为国际经贸窗口的重要地位,为广州稳经济贡献了重要力量。&lt;/p&gt; &lt;p&gt;我们在  &lt;a href="https://mp.weixin.qq.com/s?__biz=MzUyMTI0MDkxMg==&amp;mid=2247504561&amp;idx=1&amp;sn=05474e2661970f958ade66c65f3440e1&amp;chksm=f9dcba8eceab3398dcb5467bc5ac9c0baa693f9d47c505f786110bc09dd169438fc28a974b28&amp;scene=21#wechat_redirect" rel="nofollow" target="_blank"&gt;《第四个3万亿城市诞生》&lt;/a&gt;一文,曾梳理了广州创下的三个“第一”:&lt;/p&gt; &lt;ul&gt;  &lt;li&gt;   &lt;p&gt;一是机场、高铁客流量双双位居全国之首;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt; &lt;ul&gt;  &lt;li&gt;   &lt;p&gt;二是广州独角兽企业增量全国第一;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt; &lt;ul&gt;  &lt;li&gt;   &lt;p&gt;三是与深圳共同成为全国首批5万亿级都市圈。&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;/p&gt;  &lt;img height="573 " src="https://img.huxiucdn.com/article/content/202401/25/191009084513.png" width="982 "&gt;&lt;/img&gt;       &lt;p&gt;众所周知,广州以汽车、电子、石化为传统支柱产业,受到新能源汽车竞争与行业周期的影响,这些产业经济一度大幅放缓,从而对经济形成一定拖累。&lt;/p&gt; &lt;p&gt;不过,随着“制造业立市”“产业第一”等战略陆续推进,广州智能与新能源汽车、新一代信息技术、生物医药与健康产业等战略性新兴产业迅速补位,成为稳经济新的支撑。&lt;/p&gt; &lt;p&gt;数据显示,2023年,广州新能源汽车、太阳能电池(光伏电池)、风力发动机组产量同比分别增长1.1倍、80.0%和38.2%,工业机器人、服务机器人、显示器、集成电路等新一代信息技术产品产量分别增长47.1%、43.8%、29.3%和21.6%。&lt;/p&gt; &lt;p&gt;这其中,汽车产业最具代表性。作为中国汽车制造第一大市,汽车产业变迁对全市经济有着直接而深远的影响。&lt;/p&gt;  &lt;img height="1008 " src="https://img.huxiucdn.com/article/content/202401/25/191010733953.png" width="800 "&gt;&lt;/img&gt;       &lt;p&gt;去年年初,受到新能源汽车冲击及行业周期影响,多地燃油车突然大幅降价,打响史上最强价格战,一众以传统汽车制造为支柱的城市备受冲击。&lt;/p&gt; &lt;p&gt;广州也不例外。作为全国汽车产量最高的城市,广州汽车产量一度突破300万辆大关,历来都是传统燃油车的重镇。&lt;/p&gt; &lt;p&gt;去年一季度,广州规上工业增加值一度下降5.8%,而汽车制造业同比下降10%以上,成了最大拖累。&lt;/p&gt; &lt;p&gt;但在新能源汽车狂飙式增长的带动之下,广州汽车制造业增速从年初的-12.8%,一路上升到全年的1.5%,呈现企稳反弹的势头。&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年,再深耕10年、30年,必定能再造一个新广东、再创让世界刮目相看的新奇迹”。(参阅  &lt;a href="https://www.huxiu.com/article/2582703.html" target="_blank"&gt;《中国,第一个13万亿大省诞生》&lt;/a&gt;)&lt;/p&gt; &lt;p&gt;随后,广州进一步提出,拿出广州40多年前改革开放的闯劲干劲拼劲,高扬改革旗帜,燃起二次创业的奋斗激情……再造一个新广州。&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;广州是华南地区工业门类最为齐全的城市之一,拥有3个国家级先进制造业集群,6个千亿级先进制造业集群,汽车产量连续5年位居全国第一,大尺寸OLED电视面板产量占了全球近一半。&lt;/p&gt; &lt;p&gt;但必须承认的是,这些年,与其他多数城市一样,广州整体产业结构呈现出“退二进三”的走势,工业比重从2010年前后的35%左右一路降低到24%左右。&lt;/p&gt; &lt;p&gt;面对这一局面,广州市“十四五”规划指出,将加快建设先进制造业强市,更连续3年在政府工作报告中将“产业第一、制造业立市”放在C位。&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;img height="1008 " src="https://img.huxiucdn.com/article/content/202401/25/191010915810.jpg" width="800 "&gt;&lt;/img&gt;       &lt;p&gt;根据相关文件,广州18个产业拿下了代表核心城市的三星,而深圳只有15个,而佛山和东莞是8个和4个。&lt;/p&gt; &lt;p&gt;虽说这些产业未必实力都趋于一流,但全产业布局,足以说明广州的制造业底蕴之厚、发展潜力之大。&lt;/p&gt; &lt;p&gt;另一个表现是,广州的独角兽企业开始爆发,是全球独角兽数量增长最快的城市之一。&lt;/p&gt; &lt;p&gt;根据胡润研究院发布的《2023年全球独角兽榜》,广州共有22家企业上榜,位列全球第8、全国第4。&lt;/p&gt;  &lt;img height="1097 " src="https://img.huxiucdn.com/article/content/202401/25/191011040619.png" width="718 "&gt;&lt;/img&gt;       &lt;p&gt;与前一年相比,广州多了12家独角兽企业,增量之多位列全国之首,在全球仅次于旧金山和纽约。&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;重庆的优势在于省部级的超高行政地位,西部地区15%优惠税率的加持,来自国家大规模的财政转移支付。&lt;/p&gt; &lt;p&gt;在国家战略上,又有长江经济带、西部大开发、成渝双城经济圈、西部陆海新通道等战略的叠加优势,这在  &lt;a href="https://mp.weixin.qq.com/s?__biz=MzUyMTI0MDkxMg==&amp;mid=2247504561&amp;idx=1&amp;sn=05474e2661970f958ade66c65f3440e1&amp;chksm=f9dcba8eceab3398dcb5467bc5ac9c0baa693f9d47c505f786110bc09dd169438fc28a974b28&amp;scene=21#wechat_redirect" rel="nofollow" target="_blank"&gt;《第四个3万亿城市,诞生了》&lt;/a&gt;一文有详细论述。&lt;/p&gt;  &lt;img height="766 " src="https://img.huxiucdn.com/article/content/202401/25/191012677797.jpg" width="1000 "&gt;&lt;/img&gt;       &lt;p&gt;在产业上,重庆则以电子信息、汽车为支柱产业,两大产业一度占据当地工业的半壁江山,电子信息产业更是重庆外贸增长的主力。&lt;/p&gt; &lt;p&gt;与广州等地相比,重庆虽然GDP直追一线,但人均GDP不仅与一线城市相距甚远,甚至不及同能级的二线城市,且有数百万人口流动在外,人口吸引力不及广深杭等城市。&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;a href="http://mp.weixin.qq.com/s?__biz=MzUyMTI0MDkxMg==&amp;mid=2247504647&amp;idx=1&amp;sn=f6d03b5db693f5144654dbc30f0711e7&amp;chksm=f9dcbb38ceab322ea4e2ddc53edc38e300c80e5f6bff8a2ff5533831658d6667c9a25b06b967#rd" rel="nofollow" target="_blank"&gt;国民经略 (ID:guominjinglve)&lt;/a&gt;,作者:凯风&lt;/p&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>
  1010.      <category>广州 经济 广州gdp 重庆gdp 城市经济</category>
  1011.      <guid isPermaLink="true">https://itindex.net/detail/62909-%E5%B9%BF%E5%B7%9E-gdp-%E9%87%8A%E6%94%BE</guid>
  1012.      <pubDate>Thu, 25 Jan 2024 20:52:33 CST</pubDate>
  1013.    </item>
  1014.    <item>
  1015.      <title>抗生素、消炎药,到底有什么区别?</title>
  1016.      <link>https://itindex.net/detail/62908-%E6%8A%97%E7%94%9F%E7%B4%A0-%E6%B6%88%E7%82%8E%E8%8D%AF</link>
  1017.      <description>&lt;div&gt;    &lt;p&gt;      &lt;strong&gt;流言&lt;/strong&gt;&lt;/p&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;&lt;/p&gt;    &lt;p&gt;炎症,就是我们平时所说的“发炎”。实际上,炎症是身体受到某种刺激所发生的一种免疫反应表现,局部表现为红、肿、热、痛和功能障碍,也可伴有发热、白细胞增高等全身反应。&lt;/p&gt;    &lt;p&gt;很多因素都会导致炎症发生,      &lt;strong&gt;感染&lt;/strong&gt;(细菌、真菌、病毒等原因)是炎症发生最常见的原因,但炎症也可以不是因感染而起。非感染性因素包括物理性因素、化学性因素、免疫反应性因素等。物理性因素如外伤、烫伤、紫外线灼伤等。化学性因素包括外源性强酸、强碱、内源性毒性物质等。免疫反应性因素包括超敏反应(如过敏性鼻炎、荨麻疹等),以及自身免疫性疾病。&lt;/p&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;&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;strong&gt;什么是抗生素?&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;只有感染引起的炎症,才可以考虑使用抗生素。抗生素,以前称为抗菌素,是指由微生物(包括细菌、真菌、放线菌属)产生的,能杀灭或抑制其他微生物的物质。临床常用的抗生素分为天然抗生素和人工半合成抗生素。&lt;/p&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;&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;strong&gt;结论&lt;/strong&gt;&lt;/p&gt;    &lt;p&gt;抗生素和消炎药的药理机制迥然不同。细菌感染时会引起机体发生炎症反应,而抗生素是用来杀灭或抑制细菌生长繁殖的,当致病菌被清除后,其引起机体的炎症反应自然也会逐步消失。因此,会让人们产生错觉,抗生素即为消炎药。然而,抗生素并不针对炎症本身,而是针对引起炎症的致病菌,是间接起到了消炎作用,不能将其称为消炎药。尤其当“发炎”不是细菌感染(如真菌、病毒性感染)引起时,抗生素的使用并不能起到消炎作用,反而会发生不良反应。&lt;/p&gt;    &lt;p&gt;   &lt;br /&gt;&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;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;【责任编辑:孙晓倩】&lt;/div&gt;&lt;/div&gt;
  1018.    &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>
  1019.      <category />
  1020.      <guid isPermaLink="true">https://itindex.net/detail/62908-%E6%8A%97%E7%94%9F%E7%B4%A0-%E6%B6%88%E7%82%8E%E8%8D%AF</guid>
  1021.      <pubDate>Tue, 23 Jan 2024 11:13:34 CST</pubDate>
  1022.    </item>
  1023.    <item>
  1024.      <title>MBTI性格测试像星座运势一样不靠谱</title>
  1025.      <link>https://itindex.net/detail/62907-mbti-%E6%80%A7%E6%A0%BC-%E6%B5%8B%E8%AF%95</link>
  1026.      <description>&lt;div&gt;    &lt;p&gt;〔按〕昨日年会,有同事在群里推荐MBTI测试,于是我翻出这篇科普旧作。五年多来,对MBTI的追捧愈演愈烈。当年《南方周末》编辑约稿写专栏,每篇2千字篇幅,我则螺蛳壳里做道场,把1万字的信息容量精心收纳到2千字的空间里,并在通俗性和严谨性之间保持平衡,着实要下很大一番工夫,工匠般精雕细琢的结果就是至今读来无一句废话,无一字多余。我引以为豪。&lt;/p&gt;    &lt;p&gt;      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;说MBTI(Myers–Briggs Type Indicator)是全世界最流行的性格测试一点也不夸张。无论是考大学选专业还是大学毕业选职业,都会用它作为参考,甚至有人把MBTI类型是否匹配列为找对象的标准之一。如今,许多高校都会在就业指导课上向学生讲授这一测试,《财富》世界五百强中有超过八成的企业使用MBTI作为人力资源测评的工具,桥水基金创始人Ray Dalio在新作《原则》中也肯定了MBTI在公司管理中的作用,就连顶级科学期刊《自然》都曾撰文向科研机构推荐过它。¹&lt;/p&gt;    &lt;p&gt;      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;与上述情况形成鲜明对比的是,作为一项心理测试,MBTI在心理学界乏人问津。心理学教科书和课堂上几乎不会提到它,如果提到也是作为反面教材。²心理学期刊中很少会看到针对它的研究,倒是每隔几年,心理学家就会全面总结一下最新的研究成果,指出MBTI存在的种种问题。主流共识是,MBTI是一项不靠谱的性格测试。³⁻⁶&lt;/p&gt;    &lt;p&gt;      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;MBTI的不靠谱源于它的先天不足。其理论基础出自心理学家荣格,经由身为心理学爱好者的一对母女Briggs和Myers扩展完善,将人的性格从四个维度进行划分,组合成16种不同的性格类型。MBTI是心理学还未发展成为一门实证科学之前的产物,无论荣格还是那对母女,他们对性格的分类主要源自个体经验的构建。这样建造出的房屋再精致诱人,也注定是一座空中楼阁。研究表明,其中有两个维度存在相关性,可谓叠床架屋。⁷&lt;/p&gt;    &lt;p&gt;      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;MBTI在构建中最大的败笔是把性格进行了非此即彼的二分。² ⁸比如人类性格的内外向维度,MBTI会根据得分,把你划入内向型或外向型。这意味着,全体人类中的内向者和外向者会分别聚集在两端,形成统计学上的双峰分布(M形)。事实上,这个维度应该是从内向到外向的一个连续型正态分布(倒V形),少数人非常内向或非常外向,多数人则介于两者之间。备受心理学界推崇的“大五”性格测试,正符合后一种情形,它基于实证数据、经由统计学分析,把人的性格提炼出五个不同维度,每个维度都呈连续型分布。⁹¹⁰&lt;/p&gt;    &lt;p&gt;      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;即便存在上述先天不足,仍有许多MBTI的支持者声称它是靠谱的。这就需要通过考察两大指标来加以驳斥。其一是信度。好比用一把尺子来测量身高,上周测的结果和这周测的结果相同,说明这把尺子的信度高,反之则信度低。常常听人说到自己先后测过几次MBTI,每次结果都不相同,这正是信度低的表现。有研究表明,在仅仅相隔五周之后重测,超过一半人的性格类型从一种变成了另外一种。¹¹性格当然不可能如此善变,很多人其实处于某一性格维度(比如内外向)的中间地带,MBTI得分上出现少许变化,就由内向型突变成了外向型。⁸&lt;/p&gt;    &lt;p&gt;      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;如果把强行二分的做法改成直接比较得分,MBTI的信度会提高不少。¹²但光有信度是不够的,在此基础上要考察第二个指标,效度。尺子用来测身高很合适,拿去测体重却是无效的,毕竟同样身高的人体重可以差很多。MBTI就是这样一把无效的尺子,它在各方面的效度都不尽如人意。MBTI广受欢迎的一个原因,是大家认为它可以用于指导就业,不同MBTI类型的人适合不同的工作,以及哪些类型的人适合在一起工作。这些指的其实是效度最重要的一个方面,即预测效度,测量一个人的MBTI类型可以预测他与工作相关的表现。而研究表明,MBTI既不能预测一个人会选择什么工作,也不能预测他对工作的满意度,更不能预测领导者的管理效能以及工作团队的绩效。¹²⁻¹⁴&lt;/p&gt;    &lt;p&gt;      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;相较之下,无论是前述“大五”性格测试,还是基于“大五”理论、用于就业指导的霍根性格调查问卷,¹⁵都有着良好的信效度,为心理学界所公认。遗憾的是,它们在大众中的流行程度远不及MBTI,大家总是喜欢那些含义模糊却积极向上的性格剖析,认为它准确地描述了自己,MBTI正好迎合了这种大众心理,心理学上将其称作“巴纳姆效应”。⁶ ⁸&lt;/p&gt;    &lt;p&gt;      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;MBTI及其衍生的凯尔西气质类型调查表的测试结果,对每种性格类型,先来一段正面的特征描述,再附上几种体面的参考职业,甚至给出一个名人作为该类型代表(比如INTP类型的代表人物是爱因斯坦),这样对自己性格的解读谁会不喜欢呢?根据MBTI理论,小偷和乞丐、希特勒或孔乙己想必也对应某种性格类型,怎么不把这些写进来呢?&lt;/p&gt;    &lt;p&gt;      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;其实我们大可以把MBTI当成像星座运势那样的谈资,作为一种活跃气氛的娱乐话题无可厚非。但是它不值得个人、学校和企业去投入大量资金和精力,花冤枉钱不说,做的还是无用功。Ray Dalio在《原则》中讲到,他让公司管理层做了MBTI测试,他觉得测试结果与自己对这些人的了解大相径庭,但是当他要求这些人评价测试结果的准确性时,多数人都认可了自己的测试结果。这个故事既反映了MBTI的效度有问题,又体现了普遍存在的巴纳姆效应。遗憾的是,聪明如Dalio者,面对上述情形,不是去反思MBTI是否有效,而是削足适履地选择了用MBTI测试的结果来重新审视身边的同事。&lt;/p&gt;    &lt;p&gt;      &lt;br /&gt;&lt;/p&gt;    &lt;p&gt;总之,MBTI不仅指导不了个人的就业和企业的绩效,更预测不了个人的命运和企业的前途。不幸的是,它已经成为了社会文化的一部分,更作为一个产业牵动着许多人的利益。就连MBTI测试的出版公司CPP的董事会主席、资深心理学家Carl Thoresen也承认:“我没有在任何研究中使用过它,这一定程度上是因为,如果用了它,学术界同行会质疑我。”这里不讲科学与证据,谈的都是情怀和生意。&lt;/p&gt;    &lt;br /&gt;〔参考文献〕    &lt;ol&gt;      &lt;li&gt;Loc, C. (2012). What’s your type?         &lt;em&gt;Nature&lt;/em&gt;, 488(7412), 545-547.        &lt;br /&gt;&lt;/li&gt;      &lt;li&gt;Larsen, R. J., &amp;amp; Buss, D. M. (2018).         &lt;em&gt;Personality psychology&lt;/em&gt;. Boston: McGraw-Hill.&lt;/li&gt;      &lt;li&gt;Boyle, G. J. (1995). Myers‐Briggs Type Indicator (MBTI): Some psychometric limitations.         &lt;em&gt;Australian Psychologist&lt;/em&gt;, 30(1), 71-74.&lt;/li&gt;      &lt;li&gt;Hunsley, J., Lee, C. M., &amp;amp; Wood, J. M. (2003). Controversial and questionable assessment techniques. In S. O. Lilienfeld, S. J. Lynn, &amp;amp; J. M. Lohr (Eds.),         &lt;em&gt;Science and pseudoscience in clinical psychology&lt;/em&gt; (pp. 39-76). New York: Guilford Press.&lt;/li&gt;      &lt;li&gt;Pittenger, D. J. (2005). Cautionary comments regarding the Myers-Briggs Type Indicator.         &lt;em&gt;Consulting Psychology Journal: Practice and Research&lt;/em&gt;, 57(3), 210-221.&lt;/li&gt;      &lt;li&gt;Gerras, S. J., &amp;amp; Wong, L. (2016). Moving beyond the MBTI: The Big Five and leader development.         &lt;em&gt;Military Review&lt;/em&gt;, 96(2), 54-57.&lt;/li&gt;      &lt;li&gt;McCrae, R. R., &amp;amp; Costa, P. T. (1989). Reinterpreting the Myers‐Briggs Type Indicator from the perspective of the five‐factor model of personality.         &lt;em&gt;Journal of Personality&lt;/em&gt;, 57(1), 17-40.&lt;/li&gt;      &lt;li&gt;Pittenger, D. J. (1993). Measuring the MBTI… and coming up short.         &lt;em&gt;Journal of Career Planning and Employment&lt;/em&gt;, 54(1), 48-52.&lt;/li&gt;      &lt;li&gt;Barrick, M. R., &amp;amp; Mount, M. K. (1991). The Big Five personality dimensions and job performance: A meta‐analysis.         &lt;em&gt;Personnel Psychology&lt;/em&gt;, 44(1), 1-26.&lt;/li&gt;      &lt;li&gt;Goldberg, L. R. (1990). An alternative “description of personality”: The Big-Five factor structure.         &lt;em&gt;Journal of Personality and Social Psychology&lt;/em&gt;, 59(6), 1216-1229.&lt;/li&gt;      &lt;li&gt;McCarley, N. G., &amp;amp; Carskadon, T. G. (1983). Test-retest reliabilities of scales and subscales of the Myers-Briggs Type Indicator and of criteria for clinical interpretive hypotheses involving them.         &lt;em&gt;Research in Psychological Type&lt;/em&gt;, 6, 24-36.&lt;/li&gt;      &lt;li&gt;Gardner, W. L., &amp;amp; Martinko, M. J. (1996). Using the Myers-Briggs Type Indicator to study managers: A literature review and research agenda.         &lt;em&gt;Journal of Management&lt;/em&gt;, 22(1), 45-83.&lt;/li&gt;      &lt;li&gt;Kuipers, B. S., Higgs, M. J., Tolkacheva, N. V., &amp;amp; de Witte, M. C. (2009). The influence of Myers-Briggs Type Indicator profiles on team development processes: An empirical study in the manufacturing industry.         &lt;em&gt;Small Group Research&lt;/em&gt;, 40(4), 436-464.&lt;/li&gt;      &lt;li&gt;National Research Council. (1991).         &lt;em&gt;In the mind&amp;apos;s eye: Enhancing human performance&lt;/em&gt;. Washington, DC: National Academies Press.&lt;/li&gt;      &lt;li&gt;Hogan, J., &amp;amp; Holland, B. (2003). Using theory to evaluate personality and job-performance relations: A socioanalytic perspective.         &lt;em&gt;Journal of Applied Psychology&lt;/em&gt;, 88(1), 100-112.&lt;/li&gt;&lt;/ol&gt;    &lt;p&gt;&lt;/p&gt;&lt;/div&gt;
  1027.    &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>
  1028.      <category />
  1029.      <guid isPermaLink="true">https://itindex.net/detail/62907-mbti-%E6%80%A7%E6%A0%BC-%E6%B5%8B%E8%AF%95</guid>
  1030.      <pubDate>Sun, 21 Jan 2024 20:52:31 CST</pubDate>
  1031.    </item>
  1032.    <item>
  1033.      <title>适合个人网站的云服务组合</title>
  1034.      <link>https://itindex.net/detail/62906-%E4%B8%AA%E4%BA%BA%E7%BD%91%E7%AB%99-%E6%9C%8D%E5%8A%A1-%E7%BB%84%E5%90%88</link>
  1035.      <description>&lt;div&gt;&lt;/div&gt; &lt;div&gt;回想起来我折腾博客和各类网站已将近 10 年光阴,在维护   &lt;a href="https://0xffff.one/" rel="noopener noreferrer" target="_blank"&gt;0xFFFF&lt;/a&gt; 的几年来,也尝试过各类不同的建站方案。当前用到的各类服务,综合速度和成本而言,感觉可能的选择方向差不多已经成型,可以做一个总结。&lt;/div&gt; &lt;div&gt;若你也想低成本搭建属于自己的网站,且想拥有不俗的访问速度,这里的方案也许可以是你的一个参考。&lt;/div&gt; &lt;h4&gt;  &lt;div&gt;&lt;/div&gt;基本结构&lt;/h4&gt; &lt;div&gt;抽象地说,运行一个网站需要的能力主要分两大块,一是域名与 DNS 解析,二是负责处理浏览器请求的服务器端。从需求来看,域名和 DNS 的能力相对比较固定,而服务器端需要的能力就比较多样,按角色和常用的业务来区分,可以分为这几类:&lt;/div&gt; &lt;ol start="1"&gt;  &lt;li&gt;接入层网关、反向代理:接收用户流量,转发到对应的服务&lt;/li&gt;&lt;/ol&gt; &lt;ol start="2"&gt;  &lt;li&gt;静态页面:HTML 网页 / Jamstack 应用的 Service-side Rendering&lt;/li&gt;&lt;/ol&gt; &lt;ol start="3"&gt;  &lt;li&gt;JS / CSS 等:通常会通过第三方域名 CDN 分发,提高网页的打开速度,减小对主站的依赖&lt;/li&gt;&lt;/ol&gt; &lt;ol start="4"&gt;  &lt;li&gt;媒体类附件:网站流量消耗的大头,通常托管在对象存储,也可通过 CDN 分发&lt;/li&gt;&lt;/ol&gt; &lt;ol start="5"&gt;  &lt;li&gt;动态服务:当一个网站需要交互的能力,需要有服务承载相关的 API 接口&lt;/li&gt;&lt;/ol&gt; &lt;div&gt;动态服务而言,大致可以按“无状态服务”和“有状态服务”去区分,无状态服务可以随时创建和销毁,有状态服务则需要持久化服务产生的数据。部分服务可能还需要数据库和缓存服务等的支持,类似 MySQL、PostgresSQL、Redis 等等。&lt;/div&gt; &lt;div&gt;当前云计算已经足够发达,基本你能想到的点,都有对应的云服务提供,因此也可以根据实际需要和网站的功能,来选择合适的服务去支撑。写这篇文章的主要目的,也是分享我当前在用的服务,以及选择 / 不选择它们背后的一些考虑点。&lt;/div&gt; &lt;h4&gt;  &lt;div&gt;&lt;/div&gt;DNS 与接入层网关&lt;/h4&gt; &lt;div&gt;DNS 方面我选择   &lt;a href="https://www.dnspod.cn/" rel="noopener noreferrer" target="_blank"&gt;DNSPod&lt;/a&gt;,考虑点在于它有中国大陆内的解析节点,并且在专业版可以支持全球服务器的解析,价格还可接受。最关键是它提供了精细化地在不同的地域去做分流解析的能力,这对于部署在海外的站点是非常有利的,可以针对大陆用户去专门部署优化的线路,相比于 Cloudflare、  &lt;a href="https://www.cloudns.net/" rel="noopener noreferrer" target="_blank"&gt;ClouDNS&lt;/a&gt; 等会更加灵活。&lt;/div&gt; &lt;div&gt;接入层网关方面,关注目标在于,地域上离用户越近越好,可以针对不同地域用户使用针对其最优的线路,以减少网络层面的不确定性,尽可能和用户维持稳定的连接。对应的服务选择,一是支持动态请求链路优化的 CDN 服务,二是网络条件较好的云服务器,三是现今一些支持边缘计算的网站服务商(如   &lt;a href="https://vercel.com/guides/vercel-reverse-proxy-rewrites-external" rel="noopener noreferrer" target="_blank"&gt;Vercel&lt;/a&gt;、  &lt;a href="https://fly.io/" rel="noopener noreferrer" target="_blank"&gt;Fly.io&lt;/a&gt; 等),通常它们的边缘节点之间的链路会做一些特殊优化,可以合理使用利用起来。&lt;/div&gt; &lt;div&gt;这里我选择二、三两种方案结合,以一个阿里云香港的轻量服务器来承接来自大陆的流量,其他地域的流量通过   &lt;a href="http://fly.io/" rel="noopener noreferrer" target="_blank"&gt;fly.io&lt;/a&gt; 承接,用 DNSPod 实现按地域的分流。目前(2023年底)的阿里云 hk 轻量服务器的网络质量非常优秀,全大陆访问的延迟可以   &lt;a href="https://ping.chinaz.com/0xffff.one" rel="noopener noreferrer" target="_blank"&gt;控制在 50ms 内&lt;/a&gt;;Fly.io 的好处则在于,他们有一个连通全球的边缘计算网络,理论上我只需要在我想要的地域部署服务,其他地域可以直接通过边缘节点接收用户请求,然后再在内部转发到服务所在地域的计算实例,网络请求相对也会更加可控一些。两者结合下来,实现各自中国大陆内外优势的互补。&lt;/div&gt; &lt;div&gt;对于反向代理的程序,这里直接用 Caddy Server,无论在轻量服务器还是   &lt;a href="http://fly.io" rel="noopener noreferrer" target="_blank"&gt;fly.io&lt;/a&gt;,只需做一些简单配置,就能实现流量转发,并自动申请签发配置好 https 证书,非常简单方便。&lt;/div&gt; &lt;h4&gt;  &lt;div&gt;&lt;/div&gt;静态页面&lt;/h4&gt; &lt;div&gt;众所周知,大部分网站、Web App 等实质上由静态的 HTML 网页以及各种脚本、样式图片音频资源等组合,因此托管静态页面和资源,应该是建站最基本的需求。&lt;/div&gt; &lt;div&gt;这方面的托管,基本没什么障碍的点,无非就是维护成本方面的差异,无论   &lt;a href="https://vercel.com/" rel="noopener noreferrer" target="_blank"&gt;Vercel&lt;/a&gt;、  &lt;a href="https://fly.io/" rel="noopener noreferrer" target="_blank"&gt;Fly.io&lt;/a&gt;、  &lt;a href="https://pages.github.com/" rel="noopener noreferrer" target="_blank"&gt;GitHub Pages&lt;/a&gt;、  &lt;a href="https://pages.cloudflare.com/" rel="noopener noreferrer" target="_blank"&gt;Cloudflare Pages&lt;/a&gt;,还是自己架 HTTP 服务器部署,都没有什么毛病。部分服务还提供了适应静态页面渲染的边缘节点。&lt;/div&gt; &lt;div&gt;当前我是用 Vercel 多一些,本博客和   &lt;a href="https://wiki.0xffff.one/" rel="noopener noreferrer" target="_blank"&gt;0xFFFF Wiki&lt;/a&gt; 都放在这上面,主打一个简单直接方便,push 代码直接就能自动触发构建和部署,非常省心。&lt;/div&gt; &lt;h4&gt;  &lt;div&gt;&lt;/div&gt;静态资源、CDN&lt;/h4&gt; &lt;div&gt;浏览器下载 HTML 后,通常需要加载脚本、样式、图片等资源,这会带来一个额外的流量消耗。接入层网关本身的带宽成本相对要贵一些,且访问速度方面不太可控,通常会单独对 HTML 外的资源,去根据访问情况做分布式的缓存。这也是 CDN 的一大作用,CDN 以大带宽低成本的优势,分摊源站点的流量,提升用户的访问体验。&lt;/div&gt; &lt;div&gt;这里我主要选择了 Bunny CDN,以及腾讯云 CDN 做大陆的静态资源加速。前者在价格和速度方面非常有优势;后者结合已备案域名,在大陆的访问体验更佳。主要考虑的点还是在速度方面的提升。&lt;/div&gt; &lt;h4&gt;  &lt;div&gt;&lt;/div&gt;媒体类附件&lt;/h4&gt; &lt;div&gt;一个网站的静态资源通常分为两部分,一部分是网站本身业务逻辑的一部分,这部分可以提前处理好交给服务托管;还有一部分是用户操作过程中新增的上传、后台处理需要的图片等,这种类型的数据就很适合放在对象存储上。&lt;/div&gt; &lt;div&gt;适合个人站长的选择不是太多,这方面鼻祖自然是 Amazon S3,不过传闻贼贵,不是一般学生可以承担的那种;另外还有国内大厂的 COS / OSS,Cloudflare R2,Backblaze B2 等。&lt;/div&gt; &lt;div&gt;Cloudflare R2 是很好的选择,它流量费全免的机制非常适合新手上路研究,但 Cloudflare 要求绑定的域名的 NS 记录都指向他们的 DNS 服务器。也就是说会和 DNSpod 的分流策略所冲突,无奈忍痛放弃。&lt;/div&gt; &lt;div&gt;经过一番尝试,发现 Blackblaze B2,这一服务在成本方面极具优势,虽然没有 Cloudflare 的 CDN 免流量费香,配合 Bunny CDN 去处理,效果还挺不错,0xFFFF 主站重度使用半个月下来,流量也才 2G 左右,费用 0.04 美分。&lt;/div&gt; &lt;div&gt;  &lt;img alt="&amp;#27880;&amp;#20876;&amp;#26102;&amp;#35760;&amp;#24471;&amp;#36873;&amp;#25321; US West&amp;#65292;&amp;#36317;&amp;#31163;&amp;#22823;&amp;#38470;&amp;#36817;&amp;#19968;&amp;#20123;&amp;#65292;&amp;#27880;&amp;#20876;&amp;#25104;&amp;#21151;&amp;#21518;&amp;#25913;&amp;#19981;&amp;#20102;&amp;#12290;" src="https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F5ef6a41f-4ad3-43d9-a314-d863352a143b%2Fceb0a778-3b2c-4f00-97ab-efde07302858%2FUntitled.png?table=block&amp;id=15a39f85-f78a-459e-b8a9-0ce5ef01a274&amp;cache=v2"&gt;&lt;/img&gt;注册时记得选择 US West,距离大陆近一些,注册成功后改不了。&lt;/div&gt; &lt;div&gt;Bunny CDN 和 Backblaze B2 有   &lt;a href="https://bunny.net/blog/bunny-net-partners-with-backblaze-for-free/" rel="noopener noreferrer" target="_blank"&gt;合作&lt;/a&gt;,可以优化接入相关体验。B2 官方还会有一些教程和文章,做的还挺贴心细致的:  &lt;a href="https://www.backblaze.com/blog/aws-cloudfront-vs-bunny-net-how-do-the-cdns-compare/" rel="noopener noreferrer" target="_blank"&gt;AWS CloudFront vs. bunny.net: How Do the CDNs Compare&lt;/a&gt;&lt;/div&gt; &lt;h4&gt;  &lt;div&gt;&lt;/div&gt;动态服务&lt;/h4&gt; &lt;div&gt;对于功能更强大的网站,静态的网页文件不太能满足需求,这时候就需要有后端服务支持,通常这类后端服务可能会提供以下的能力:&lt;/div&gt; &lt;ol start="1"&gt;  &lt;li&gt;动态生成 HTML&lt;/li&gt;&lt;/ol&gt; &lt;ol start="2"&gt;  &lt;li&gt;根据请求 API,动态生成响应,驱动业务逻辑&lt;/li&gt;&lt;/ol&gt; &lt;ol start="3"&gt;  &lt;li&gt;可能根据需要,生成其他资源(图片 / 待下载的文件等)&lt;/li&gt;&lt;/ol&gt; &lt;div&gt;如开头所说,动态服务有无状态服务和有状态服务两种:&lt;/div&gt; &lt;ul&gt;  &lt;li&gt;无状态服务:fly.io 会更适合,它可以以 Firecracker 虚拟机的形势一键部署运行 Docker 镜像,并快速部署到合适的地域,减少网络延迟的影响&lt;/li&gt;&lt;/ul&gt; &lt;ul&gt;  &lt;li&gt;有状态服务:用一个单独的 VPS 来处理比较合适,这里我继续用了阿里云香港的轻量服务器,业务规模不大的情况下,一台机器足矣。这里可选项有很多,腾讯云、AWS 的    &lt;a href="https://aws.amazon.com/cn/lightsail/" rel="noopener noreferrer" target="_blank"&gt;LightSail&lt;/a&gt;、Vultr、Linode 等也是不错的选择,最重要是稳定和可靠&lt;/li&gt;&lt;/ul&gt; &lt;div&gt;一个可行的方向是尽可能把服务做得无状态,可以部署到边缘节点的话速度会更具优势(但同时也需要考虑不同地域之间状态共享的问题)。&lt;/div&gt; &lt;h4&gt;  &lt;div&gt;&lt;/div&gt;数据库&lt;/h4&gt; &lt;div&gt;我原本比较倾向在本机去部署网站的数据库,但经历过一次误操作导致   &lt;a href="https://0xffff.one/d/1670" rel="noopener noreferrer" target="_blank"&gt;论坛数据丢失&lt;/a&gt; 的事件,也让我心有余悸,一方面日常备份得加强,另一方面也在考虑把数据库维护的工作交给专业的 DBA 服务。&lt;/div&gt; &lt;div&gt;这类服务通常很贵很贵,但感谢互联网,低成本的 Serverless 托管 DB 方案还是有的,目前看   &lt;a href="https://www.pingcap.com/pricing/" rel="noopener noreferrer" target="_blank"&gt;TiDB Cloud&lt;/a&gt; 和   &lt;a href="https://planetscale.com/pricing" rel="noopener noreferrer" target="_blank"&gt;PlanetScale&lt;/a&gt; 的免费额度能覆盖到,大概一点缺点是公网访问数据库,延迟会对应提高,需要做好 cache 的方案。目前亚太地区只有新加坡和东京机房,可能需要考虑把计算实例挪到新加坡区域(接入层可以不动)。&lt;/div&gt; &lt;div&gt;有的站点会依赖 Redis 做 cache 或者 DB,这时候也需要考虑备份和托管的方案,目前   &lt;a href="https://upstash.com/" rel="noopener noreferrer" target="_blank"&gt;Upstash Redis&lt;/a&gt; 应该还不错,看   &lt;a href="http://fly.io" rel="noopener noreferrer" target="_blank"&gt;fly.io&lt;/a&gt; 和他们合作搞了  &lt;a href="https://fly.io/docs/reference/redis/" rel="noopener noreferrer" target="_blank"&gt;内部方案&lt;/a&gt;。&lt;/div&gt; &lt;div&gt;如果业务涉及到大量 SQL 查询(博客 / 论坛等),还是需要单机部署数据库,那就需要从备份入手。这里的一点经验也是,在跑数据库的容器加入定时任务,然后定期 mysql dump 出最新的 sql,gzip 压缩作备份,再保存到备份专用的对象存储桶中,备份软件推荐   &lt;a href="https://www.duplicati.com/" rel="noopener noreferrer" target="_blank"&gt;Deplicati&lt;/a&gt;,存储桶我用的腾讯云的 COS。&lt;/div&gt; &lt;h4&gt;  &lt;div&gt;&lt;/div&gt;引荐链接&lt;/h4&gt; &lt;div&gt;若本文对你有所帮助,有需要的话,可以通过下方的引荐链接注册对应服务,可以为我多增加一些账户余额:&lt;/div&gt; &lt;ul&gt;  &lt;li&gt;Bunny CDN:   &lt;a href="https://bunny.net/?ref=f71884jr1m" rel="noopener noreferrer" target="_blank"&gt;https://bunny.net?ref=f71884jr1m&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;h4&gt;  &lt;div&gt;&lt;/div&gt;参考&lt;/h4&gt; &lt;ul&gt;  &lt;li&gt;   &lt;a href="https://0xffff.one/d/1530/4" rel="noopener noreferrer" target="_blank"&gt;Flarum 0x 及其迭代记录 - 0xFFFF&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;ul&gt;  &lt;li&gt;   &lt;a href="https://twitter.com/zgq354/status/1735342522577371436" rel="noopener noreferrer" target="_blank"&gt;独立开发者之穷鬼套餐 - X&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;ul&gt;  &lt;li&gt;   &lt;a href="https://limboy.me/posts/vercel-cf-fly/" rel="noopener noreferrer" target="_blank"&gt;Vercel, Cloudflare, fly.io 我的云服务三剑客&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;ul&gt;  &lt;li&gt;   &lt;a href="https://wzfou.com/bunny-cdn/" rel="noopener noreferrer" target="_blank"&gt;Bunny CDN网站CDN加速 - 挖站否&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;ul&gt;  &lt;li&gt;   &lt;a href="https://www.backblaze.com/blog/aws-cloudfront-vs-bunny-net-how-do-the-cdns-compare/" rel="noopener noreferrer" target="_blank"&gt;AWS CloudFront vs. bunny.net: How Do the CDNs Compare?&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;ul&gt;  &lt;li&gt;   &lt;a href="https://bunny.net/blog/bunny-net-partners-with-backblaze-for-free/" rel="noopener noreferrer" target="_blank"&gt;bunny.net partners with Backblaze to help reduce egress fees and supercharge content!&lt;/a&gt;&lt;/li&gt;&lt;/ul&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>
  1036.      <category />
  1037.      <guid isPermaLink="true">https://itindex.net/detail/62906-%E4%B8%AA%E4%BA%BA%E7%BD%91%E7%AB%99-%E6%9C%8D%E5%8A%A1-%E7%BB%84%E5%90%88</guid>
  1038.      <pubDate>Thu, 21 Dec 2023 08:00:00 CST</pubDate>
  1039.    </item>
  1040.    <item>
  1041.      <title>为什么ChatGPT采用SSE协议而不是Websocket?</title>
  1042.      <link>https://itindex.net/detail/62905-chatgpt-sse-%E5%8D%8F%E8%AE%AE</link>
  1043.      <description>&lt;p&gt;  &lt;img alt="R-C.png" src="https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/3c1eed35067a439db9fce16ef1dac244~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=1600&amp;h=840&amp;s=1099153&amp;e=png&amp;b=2a4e77"&gt;&lt;/img&gt;&lt;/p&gt;
  1044. &lt;p&gt;在探索ChatGPT的使用过程中,我们发现GPT采用了流式数据返回的方式。理论上,这种情况可以通过全双工通信协议实现持久化连接,或者依赖于基于EventStream的事件流。然而,ChatGPT选择了后者,也就是本文即将深入探讨的SSE(Server-Sent Events)技术。&lt;/p&gt;
  1045. &lt;p&gt;要理解这个选择,我们需要关注ChatGPT的使用场景。作为一个基于深度学习的大型语言模型,ChatGPT需要处理大量的自然语言数据,这无疑需要大量的计算资源和时间。相较于普通的读取数据库操作,其响应速度自然会慢许多。&lt;/p&gt;
  1046. &lt;p&gt;对于这种可能需要长时间等待响应的对话场景,ChatGPT采用了一种巧妙的策略:它会将已经计算出的数据“推送”给用户,并利用SSE技术在计算过程中持续返回数据。这样做可以避免用户因等待时间过长而选择关闭页面。&lt;/p&gt;
  1047. &lt;h2&gt;什么是 SSE?&lt;/h2&gt;
  1048. &lt;p&gt;SSE(Server-Sent Events)是一种Web技术,它允许服务器实时向客户端推送数据。相比于传统的轮询和长轮询机制,SSE提供了一种更高效且实时的数据推送方式。这种技术主要应用于构建实时应用,例如实时消息推送、股票行情更新等。&lt;/p&gt;
  1049. &lt;p&gt;SSE是HTML5规范中的一个通信相关API,它主要包含两个部分:服务端与浏览器端的通信协议(基于HTTP协议),以及浏览器端JavaScript可使用的EventSource对象。&lt;/p&gt;
  1050. &lt;p&gt;SSE运行在HTTP协议之上,它允许服务器以事件流(Event Stream)的形式将数据发送给客户端。客户端通过建立持久化的HTTP连接,并监听这个事件流,从而可以实时接收到服务器推送的数据。&lt;/p&gt;
  1051. &lt;p&gt;SSE具有以下几个主要特点:&lt;/p&gt;
  1052. &lt;ul&gt;
  1053.  &lt;li&gt;简单易用:SSE使用基于文本的数据格式,如纯文本、JSON等,这使得数据发送和解析都相对简单直接。&lt;/li&gt;
  1054.  &lt;li&gt;单向通信:SSE仅支持从服务器到客户端的单向通信。这意味着服务器可以主动推送数据给客户端,但客户端只能被动接收数据。&lt;/li&gt;
  1055.  &lt;li&gt;实时性:由于SSE能够建立持久化连接,服务器因此可以实时地将数据推送给客户端,无需客户端频繁地发起请求。这大大提高了数据传输的效率和实时性。&lt;/li&gt;
  1056. &lt;/ul&gt;
  1057. &lt;h2&gt;SSE与WebSocket的比较&lt;/h2&gt;
  1058. &lt;p&gt;WebSocket是一种Web技术,用于实现实时双向通信,它与SSE(Server-Sent Events)在某些方面存在差异。以下是对两者的比较:&lt;/p&gt;
  1059. &lt;ul&gt;
  1060.  &lt;li&gt;数据推送方向:SSE主要支持从服务器到客户端的单向通信,这意味着服务器可以主动地向客户端推送数据。而WebSocket则支持双向通信,允许服务器和客户端之间进行实时的数据交换。&lt;/li&gt;
  1061.  &lt;li&gt;连接建立:SSE利用基于HTTP的长连接,通过常规的HTTP请求和响应来建立连接,进而实现数据的实时推送。相反,WebSocket采用自定义的协议,通过创建WebSocket连接来实现双向通信。&lt;/li&gt;
  1062.  &lt;li&gt;兼容性:由于SSE基于HTTP协议,因此它可以在大多数现代浏览器中使用,并且无需进行额外的协议升级。虽然WebSocket在绝大多数现代浏览器中也得到了支持,但在某些特定的网络环境下可能会遇到问题。&lt;/li&gt;
  1063.  &lt;li&gt;适用场景:SSE适合于需要服务器向客户端实时推送数据的场景,例如股票价格更新、新闻实时推送等。而WebSocket则适合于需要实时双向通信的场景,如聊天应用、多人在线协作编辑等。&lt;/li&gt;
  1064. &lt;/ul&gt;
  1065. &lt;p&gt;选择使用SSE还是WebSocket主要取决于具体的业务需求和场景。如果你只需要实现从服务器向客户端的单向数据推送,并且希望保持操作简便且兼容性好,那么SSE是一个理想的选择。然而,如果你需要实现双向通信,或者需要更高级的功能和控制,那么WebSocket可能会更适合你的需求。&lt;/p&gt;
  1066. &lt;h2&gt;SSE的实现原理&lt;/h2&gt;
  1067. &lt;p&gt;以下是SSE(Server-Sent Events)的实现原理:&lt;/p&gt;
  1068. &lt;ul&gt;
  1069.  &lt;li&gt;连接建立:通常情况下,客户端(如浏览器)通过发送HTTP GET请求到服务器来请求建立一个SSE连接。&lt;/li&gt;
  1070.  &lt;li&gt;服务器响应:一旦服务器接收到请求,它将返回一个HTTP响应,该响应的状态码为200,内容类型(Content-Type)设置为&amp;quot;text/event-stream&amp;quot;。&lt;/li&gt;
  1071.  &lt;li&gt;数据推送:服务器可以通过已经建立的连接向客户端推送数据。每次推送的数据被称作一个事件(Event)。每个事件由一个或多个以&amp;quot;\n\n&amp;quot;分隔的数据块组成。每个数据块都是一行文本,可能包含一个以&amp;quot;:&amp;quot;开头的注释行、以&amp;quot;data:&amp;quot;开头的数据行,或者以&amp;quot;id:&amp;quot;和&amp;quot;event:&amp;quot;开头的行来指定事件ID和事件类型。&lt;/li&gt;
  1072.  &lt;li&gt;客户端处理:当客户端接收到服务器推送的事件后,它会触发相应的JavaScript事件处理器来处理这些事件。&lt;/li&gt;
  1073.  &lt;li&gt;重连:如果连接断开,客户端会自动尝试重新连接。如果服务器在事件中指定了ID,那么在重新连接时,客户端会发送一个&amp;quot;Last-Event-ID&amp;quot;的HTTP头部信息到服务器,告诉服务器客户端接收到的最后一个事件的ID。根据这个信息,服务器可以决定从哪个事件开始重新发送数据。&lt;/li&gt;
  1074. &lt;/ul&gt;
  1075. &lt;p&gt;总结起来,SSE使用了基于文本和HTTP协议的简单机制,使得服务器能够实时地将数据推送到客户端,而无需客户端频繁地发起新的请求。&lt;/p&gt;
  1076. &lt;h2&gt;使用SSE的注意事项&lt;/h2&gt;
  1077. &lt;p&gt;以下是在使用SSE(Server-Sent Events)技术进行实时数据推送时需要注意的几个关键点:&lt;/p&gt;
  1078. &lt;ul&gt;
  1079.  &lt;li&gt;异步处理:由于SSE基于长连接的机制,因此数据推送过程可能会持续较长时间。为了防止服务器线程被阻塞,建议采用异步方式处理SSE请求。例如,可以在控制器方法中使用@Async注解或利用CompletableFuture等异步编程方式。&lt;/li&gt;
  1080.  &lt;li&gt;超时处理:SSE连接可能会因网络中断、客户端关闭等原因而超时。为了避免无效连接占据服务器资源,建议设置超时时间并处理超时情况。例如,可以利用SseEmitter对象的setTimeout()方法设定超时时间,并通过onTimeout()方法处理超时逻辑。&lt;/li&gt;
  1081.  &lt;li&gt;异常处理:在实际应用中,可能会遇到网络异常、数据推送失败等问题。这种情况下,可以使用SseEmitter对象的completeWithError()方法将异常信息发送给客户端,并在客户端通过eventSource.onerror事件进行处理。&lt;/li&gt;
  1082.  &lt;li&gt;内存管理:在使用SseEmitter时,需要特别注意内存管理问题,尤其是在大量并发连接的场景下。当客户端断开连接后,务必及时释放SseEmitter对象,以避免资源泄漏和内存溢出。&lt;/li&gt;
  1083.  &lt;li&gt;并发性能:SSE的并发连接数可能对服务器性能产生影响。如果需要处理大量并发连接,可以考虑使用线程池或其他异步处理方式,以最大化服务器资源利用。&lt;/li&gt;
  1084.  &lt;li&gt;客户端兼容性:虽然大多数现代浏览器都支持SSE,但一些旧版本的浏览器可能不支持。因此,在使用SSE时,需要确保目标客户端对其有良好的支持,或者提供备选的实时数据推送机制。&lt;/li&gt;
  1085. &lt;/ul&gt;
  1086. &lt;p&gt;以上这些注意事项可以根据具体应用需求进行调整和优化。在实际应用中,确保服务器的稳定性、安全性和性能是非常重要的。同时,在处理SSE连接时,可以考虑适当的限流和安全控制措施,以防止滥用和恶意连接的出现。总的来说,使用SSE技术时需要全面考虑各个方面的因素,才能实现高效、稳定、安全的实时数据推送服务。&lt;/p&gt;
  1087. &lt;h2&gt;SpringBoot集成SSE案例&lt;/h2&gt;
  1088. &lt;p&gt;假设正在开发一个实时股票价格监控应用,需要将股票价格实时推送给客户端。以下为Spring Boot中集成SSE技术实现的场景示例代码。&lt;/p&gt;
  1089. &lt;p&gt;首先,定义一个控制器来处理SSE请求和发送实时股票价格:&lt;/p&gt;
  1090. &lt;pre&gt;  &lt;code&gt;import org.springframework.http.MediaType;
  1091. import org.springframework.web.bind.annotation.GetMapping;
  1092. import org.springframework.web.bind.annotation.RestController;
  1093. import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
  1094. import java.util.Random;
  1095. @RestController
  1096. public class StockController {
  1097.    @GetMapping(value = &amp;quot;/stock-price&amp;quot;, produces = MediaType.TEXT_EVENT_STREAM_VALUE)
  1098.    public SseEmitter streamStockPrice() {
  1099.        SseEmitter emitter = new SseEmitter();
  1100.        // 模拟生成实时股票价格并推送给客户端
  1101.        Random random = new Random();
  1102.        new Thread(() -&amp;gt; {
  1103.            try {
  1104.                while (true) {
  1105.                    // 生成随机的股票价格
  1106.                    double price = 100 + random.nextDouble() * 10;
  1107.                    // 构造股票价格的消息
  1108.                    String message = String.format(&amp;quot;%.2f&amp;quot;, price);
  1109.                    // 发送消息给客户端
  1110.                    emitter.send(SseEmitter.event().data(message));
  1111.                    // 休眠1秒钟
  1112.                    Thread.sleep(1000);
  1113.                }
  1114.            } catch (Exception e) {
  1115.                emitter.completeWithError(e);
  1116.            }
  1117.        }).start();
  1118.        return emitter;
  1119.    }
  1120. }
  1121. &lt;/code&gt;&lt;/pre&gt;
  1122. &lt;p&gt;在上述代码中,定义了一个  &lt;code&gt;streamStockPrice()&lt;/code&gt;方法,该方法使用  &lt;code&gt;@GetMapping&lt;/code&gt;注解将  &lt;code&gt;/stock-price&lt;/code&gt;路径映射到该方法上,并指定  &lt;code&gt;produces = MediaType.TEXT_EVENT_STREAM_VALUE&lt;/code&gt;以表明该方法将产生SSE事件流。&lt;/p&gt;
  1123. &lt;p&gt;在方法内部创建了一个  &lt;code&gt;SseEmitter&lt;/code&gt;对象作为事件发射器,并在一个单独的线程中不断生成随机的股票价格,并将价格转换为字符串形式发送给客户端。&lt;/p&gt;
  1124. &lt;p&gt;通过  &lt;code&gt;emitter.send()&lt;/code&gt;方法发送的数据会被封装为SSE事件流的形式,客户端可以通过监听该事件流来实时接收股票价格。&lt;/p&gt;
  1125. &lt;p&gt;在前端页面中,创建一个简单的HTML页面来展示实时股票价格:&lt;/p&gt;
  1126. &lt;pre&gt;  &lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
  1127. &amp;lt;html lang=&amp;quot;en&amp;quot;&amp;gt;
  1128.  &amp;lt;head&amp;gt;
  1129.    &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;
  1130.    &amp;lt;title&amp;gt;实时股票价格监控&amp;lt;/title&amp;gt;
  1131.  &amp;lt;/head&amp;gt;
  1132.  &amp;lt;body&amp;gt;
  1133.    &amp;lt;h1&amp;gt;实时股票价格&amp;lt;/h1&amp;gt;
  1134.    &amp;lt;div id=&amp;quot;stock-price&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;
  1135.    &amp;lt;script&amp;gt;
  1136.      const eventSource = new EventSource(&amp;apos;/stock-price&amp;apos;);
  1137.      eventSource.onmessage = function (event) {
  1138.        document.getElementById(&amp;apos;stock-price&amp;apos;).innerHTML = event.data;
  1139.      };
  1140.    &amp;lt;/script&amp;gt;
  1141.  &amp;lt;/body&amp;gt;
  1142. &amp;lt;/html&amp;gt;
  1143. &lt;/code&gt;&lt;/pre&gt;
  1144. &lt;p&gt;上述代码中,通过  &lt;code&gt;new EventSource(&amp;apos;/stock-price&amp;apos;)&lt;/code&gt;创建了一个  &lt;code&gt;EventSource&lt;/code&gt;对象,它与  &lt;code&gt;/stock-price&lt;/code&gt;路径建立SSE连接。然后,通过  &lt;code&gt;eventSource.onmessage&lt;/code&gt;定义了接收消息的回调函数,在收到新消息时更新页面上的股票价格。&lt;/p&gt;
  1145. &lt;p&gt;通过以上代码,可以在浏览器中打开该HTML页面,它会建立与服务器的SSE连接,并实时接收并展示股票价格。这只是使用SSE实现实时数据推送的一个简单示例。在实践中,可以根据具体的业务需求和场景,进行更复杂和丰富的实现。&lt;/p&gt;
  1146. &lt;h2&gt;小结&lt;/h2&gt;
  1147. &lt;p&gt;SSE(Server-Sent Events)是一种基于HTTP协议的轻量级实时通信技术,具备服务端推送、断线重连和简单轻量等优点。然而,它也存在一些限制,例如无法进行双向通信、连接数受限以及仅支持GET请求等。&lt;/p&gt;
  1148. &lt;p&gt;在Web应用程序中,SSE可以实现各种即时数据推送功能,如股票在线数据更新、日志推送、实时显示聊天室人数等。&lt;/p&gt;
  1149. &lt;p&gt;然而,需要注意的是,并非所有的实时推送场景都适合使用SSE。在需要处理高并发、高吞吐量和低延迟的场景下,WebSocket可能是更好的选择。而对于那些需要轻量级推送解决方案的场景,SSE可能会更加适合。&lt;/p&gt;
  1150. &lt;p&gt;因此,在选择实时更新方案时,我们需要根据具体的需求和应用场景来做出决策。只有这样,我们才能确保选择的技术能够最大程度地满足我们的需求。&lt;/p&gt;
  1151. &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>
  1152.      <category />
  1153.      <guid isPermaLink="true">https://itindex.net/detail/62905-chatgpt-sse-%E5%8D%8F%E8%AE%AE</guid>
  1154.      <pubDate>Fri, 29 Dec 2023 08:01:40 CST</pubDate>
  1155.    </item>
  1156.    <item>
  1157.      <title>脑科学能帮助我们改掉坏习惯吗?</title>
  1158.      <link>https://itindex.net/detail/62904-%E8%84%91%E7%A7%91%E5%AD%A6-%E5%B8%AE%E5%8A%A9-%E5%9D%8F%E4%B9%A0%E6%83%AF</link>
  1159.      <description>几年前,我购买了一部智能手机,很快就爱不释手。随时随地能发邮件、查信息或购物,这为我带来了前所未有的效率提升。手机每收到一封邮件就会发出“嘀”的一声,我随即处理它,为自己的效率沾沾自喜。短信到来伴随着法国号的声音,我也会迅速回复。不久,我开始条件反射般地一听到手机响就伸手去拿,就像帕夫洛夫的狗听到铃声就会流口水。这渐渐干扰了我的工作和谈话。这台本应是神奇助手的机器,却慢慢让我沦为了它的奴隶。
  1160.  
  1161. 我一直自认为意志力很强。像许多经历过医学训练的人一样,那些早起、长时间轮班,而朋友们却在享受派对的人,我已习惯于延迟满足。但这都没用。当我尝试把手机调成静音,我反而更频繁地检查它,生怕错过什么。唯一能控制自己不看手机的时候是安息日,因为那时我不查邮件。但我会不停地看表,计算着何时能再打开手机。那是我第一次真切感受到吸烟者对香烟的渴望。检查智能手机已成为我难以摆脱的坏习惯。
  1162.  
  1163. 习惯的好坏一直吸引着哲学家和政策制定者。亚里士多德在他的作品《尼各马可伦理学》中探讨了美德的不同理念,并总结道:“有人认为人之初性本善,有人说是习惯使然,还有人觉得教育至关重要。”他的结论是习惯扮演了关键角色。西塞罗将习惯称作“第二天性”,这个说法至今仍广为流传。亚历山大·汉密尔顿在《联邦党人文集》第 27 号文章中,当他思考如何培养出遵守新共和国联邦法律的公民时,他提到了“人是习惯的奴隶”。汉密尔顿认为,如果联邦法律深入州级事务,它将成为人们日常生活的一部分。“它越是融入人们激情自然流动的渠道,就越不需要强制手段的帮助,”他写道。
  1164.  
  1165. 在现代,习惯已成为科学研究的重要领域。心理学家深入研究了习惯行为的形成及其对健康和幸福的影响。威廉·詹姆斯回应亚里士多德的观点,写道:“我们的生活,只要形成了一定的模式,就是由各种习惯构成的——实用的、情感的、智力的……它们不可抗拒地推动我们走向命运。”
  1166.  
  1167. 我们大多数人不愿意把自己看作被动的存在。那意志力呢?市场营销通过像“Just Do It”(耐克)和“Declare Your Path”(新百伦)这样的口号,来抚慰我们对自主意识的渴望。很多流行心理学也强化了我们对自我控制的信念。在六十年代,沃尔特·米歇尔设计的著名斯坦福棉花糖实验中,孩子们要面对一块棉花糖,他们是否能抵抗住立即吃掉它的冲动,将决定他们的“执行功能”水平。这个实验被认为能预测孩子未来的成功,如 SAT 成绩、人际关系的持久度和职业成就。但如果我们只是习惯的产物,这一切又如何解释呢?
  1168.  
  1169. 在《好习惯,坏习惯》一书中(由 Farrar, Straus &amp;amp; Giroux 出版),社会心理学家 Wendy Wood 对 James 的决定论和轻率的自我激励论进行了反驳。她试图为普通读者提供更实际的方法来打破习惯。她基于自己的领域研究,认为维护积极行为和遏制消极行为需要决策与无意识因素的共同作用。Wood 解释说,我们的大脑有“多个独立但相互连接的行为指导机制。”但我们只能意识到决策能力——这种现象被称为“内省错觉”——这可能是我们过分高估了这种能力的原因。她写道,让意志力成为可能的执行功能给了我们一种“代理感”,让我们认为这就是“我”。但这是以付出努力为代价的。为了日常生活,我们需要某些行为变得自动化。
  1170.  
  1171. 功能性磁共振成像(fMRI)扫描让研究者能够窥探在机械性任务和有意识任务期间活跃的不同神经网络。学习新任务时,大脑扫描显示前额叶皮层和海马体的活跃,这些区域与决策和执行控制相关。随着任务重复,大脑活动转移到纹状体和基底节,即 Wood 称为“我们心灵的基础机制”的部分。在这里,任务转变为习惯。
  1172.  
  1173. 这些更原始的大脑区域对我们的精神能量需求更少。一系列动作变得连贯,这个过程称为“分块 (chunking)”。例如,当我们上车准备开车时,我们不需要分别考虑系安全带、打火、挂挡、检查后视镜和盲区、踩油门等动作。所有这些步骤被整合在记忆中,形成一个单元,由上车这一环境线索触发。这使我们能够专注于那些最需要我们有意识关注的事情,比如思考目的地、规划当天的任务,同时留意路上的任何异常情况。
  1174.  
  1175. Wood 的研究起初并不是聚焦于习惯,而是坚持。对于像打流感疫苗这样的“偶发性、一次性行为”,有意识的决策就足够了。然而,对于需要重复的行为,习惯就显得至关重要。William James 曾估计,我们的活动中有“几乎全部是自动和习惯性的。”这只是一个推测;但 Wood 通过一项研究,量化了人们多少行为是出于习惯。她用一种名为“体验抽样”(experience sampling) 的技术,让参与者在两天内记录自己的所作所为。研究结果虽各组不同,但基本发现是我们大约 43% 的行为是习惯性的。
  1176.  
  1177. 这就解释了为什么仅凭意识上的知识还不足以改变行为,以及为什么仅仅通过教育人们做出健康选择的公共卫生倡议往往会失败。1991 年,国家癌症研究所发现只有 8% 的美国人知道每天至少应该吃五份水果和蔬菜。随后发起了一项全国运动:“每天五份,为了更好的健康。”六年后,知道这一建议的美国人增至 39%,增长了近五倍,但实际饮食习惯几乎未变。2007 年,政府官员再次尝试,推出了“水果与蔬菜 - 更多益处”计划。然而,到 2018 年,每天吃两份水果的美国人仅占 12%,吃三份蔬菜的仅 9%。仅仅告知我们什么对我们有益是无效的,因为我们的饮食、烹饪和购物习惯主宰了我们的行为。
  1178.  
  1179. 在 Mischel 的棉花糖实验中,只有四分之一的参与者能坚持十五分钟不吃棉花糖。这意味着大多数人缺乏成功所需的自控力。但研究中不太为人所知的一部分,提出了绕开我们脆弱的方法。研究者比较了两种情况:一种是孩子们能看到面前的棉花糖;另一种则是知道棉花糖在那儿,但看不到它。结果显示,面对可见诱惑时,孩子们平均只能坚持六分钟,但如果把诱惑藏起来,他们能坚持十分钟。对 Wood 而言,这说明自控力“并非内在品质,而是我们所处环境的反映。”通过微调环境,我们也许能够模仿那些看起来更有自制力的人。
  1180.  
  1181. 一项研究调查了大学生的自控能力,结果支持了这一假设。研究要求学生每次想到“哎呀,我不应该这么做”的时候就报告,例如熬夜、睡懒觉、暴饮暴食或拖延。他们在养成有益行为时,最有效的方式并非下定决心做得更好,或是分散对诱惑的注意,而是改变自己的环境。他们选择不在带电视的寝室沙发上学习,而是去图书馆。他们还发现,清除寝室冰箱里的垃圾食品后,饮食变得更健康。伍德指出:“成功的自控,实际上来自于有效隐藏诱惑。”
  1182.  
  1183. 即便是在自控问卷上得分高的人,他们看似的美德可能更多源于情境因素,而非单纯的意志力。在德国对这类人的一项研究中,他们很少报告自己抵抗诱惑的情况。“他们的生活方式几乎一直在隐藏诱惑,”伍德如是写道。这一观察引出了她书中论点的核心:摆脱坏习惯的关键不在于决心,而在于以支持良好行为的方式重新构建我们的环境。伍德引用了心理学家库尔特·莱文 (Kurt Lewin) 的理论,他认为行为受到类似于重力或使河流加速或减速的流体动力学的“一系列力量”的影响。这些力量取决于你所处的环境、周围的人、一天中的时间,以及你最近的行为。我们通过寻找方法从方程式中移除意志力,反而能够实现情境控制,这似乎有些矛盾,但并不是靠意志力实现的。
  1184.  
  1185. 伍德认为,根除坏习惯的关键力量是“障碍”:如果我们能增加坏习惯的不便性,那么惯性就会帮助我们朝着美德方向前进,而无需我们表现出坚强。她列举了增加障碍导致吸烟减少的例子:法律禁止在餐厅、酒吧、飞机和火车上吸烟;税收的增加使得美国香烟价格在过去二十年里翻了三倍;以及从自动售货机中清除香烟,电视和收音机中禁播烟草广告。
  1186.  
  1187. 与此同时,我们周边的企业都在努力减少消费者的操作障碍。比如麦当劳的收银员会有意诱导顾客,问道:“您要加薯条吗?”这样的提问促使我们摄入更多脂肪和碳水化合物。Netflix 或 Hulu 的连续剧播放功能也是如此,它们通过在一集结束后自动播放下一集的方式,让我们沉迷于连续观看。Wood 采访了 Uber 前经济研究主管 M. Keith Chen,后者分享了该应用是如何设计来减少用户操作步骤的。“手机的 GPS 已经知道你的位置,”他说,“你几乎不需要多想……下车时连现金都不用处理。”
  1188.  
  1189. 公司成为我们习惯形成的帮手,这一现象在 Charles Duhigg 的畅销书《The Power of Habit》(2012 年)中被深入探讨。像 Wood 一样,Duhigg 当时是《时报》的记者,他指出快餐业通过各种方式诱使我们增加消费。例如,麦当劳统一餐厅的装潢风格,旨在触发我们的饮食习惯。许多连锁餐厅的食品都经过特别设计,可以迅速激发大脑的奖励中心,提供瞬间的盐分和脂肪享受。
  1190.  
  1191. 在研究企业如何利用习惯形成来获取利益的过程中,Duhigg 描述了 20 世纪初的广告大师 Claude C. Hopkins 的工作。他的 Pepsodent 牙膏广告活动据说使刷牙成为美国人的日常习惯。Pepsodent 于 1915 年首次面市时,很少有人会刷牙,甚至当时的牙科权威都认为所有牙膏都无用。Hopkins 将营销焦点放在覆盖牙齿的牙菌斑 (plaque) 上;1917 年,他在报纸广告中宣称这是“所有牙齿问题的根源”。实际上,简单地吃一个苹果就能暂时去除牙菌斑,而当时的牙膏去除效果并不比光刷牙更好。尽管如此,Hopkins 还是夸大了牙菌斑的危害,并宣称 Pepsodent 是唯一的解决方案。“只需用舌头轻轻划过牙齿,”另一则广告写道,“你会感到一层薄膜——这就是让你的牙齿变色和蛀牙的原因。”不久,Pepsodent 就成为了全球知名的产品。
  1192.  
  1193. Duhigg 和 Wood 都认为,习惯性的行为是由刺激和回应所驱动的。虽然 Pepsodent 不是唯一声称能去除牙齿薄膜的品牌,但其含有的柠檬酸和薄荷油等成分,不仅带来清新口感,还轻微刺激口腔,产生舒适的刺痛感。Hopkins 让消费者意识到牙齿上的薄膜,为其提供了一个刺激,而牙膏本身则提供了物理上的回应。这种刺激与回应的循环极为强大:如果我们没有刷牙,就会感觉不舒服。Hopkins 发起他的活动二十年后,使用牙膏已成为美国绝大多数人的日常行为。Duhigg 表示,Hopkins“创造了一种需求”。
  1194.  
  1195. Wood 强调通过情境控制来培养良好习惯,而 Duhigg 则提到了一位咬指甲的女性,她被建议寻找其他可以用手做的事情,以产生类似的物理刺激,比如在桌子上敲打指关节。这样做的目的是保持刺激和回应的有效结构,但改变习惯的具体内容。对这两位作家来说,关键不在于靠意志力打破习惯,而是用一个新习惯替换旧习惯。
  1196.  
  1197. 这两个案例都突出了有意识努力的重要性 - 不是去反抗习惯,而是去深入分析它,以此制定更有效的改革策略。Duhigg 在体重上升后,决定放弃在 Times 餐厅每天下午吃的那块饼干。他曾尝试在便签上写下不吃饼干的禁令,但这并无效果:他会忽略这个提醒,走到餐厅,与收银台的同事闲聊,最后还是会买下饼干。因此,他开始探究触发这一习惯的因素,参考研究人员提出的五个类别:时间、地点、情绪状态、周围人员、以及习惯性动作之前的行为。他是因为饥饿、无聊,还是需要休息或是血糖提升?他尝试改变自己的日常,选择在办公桌上吃甜甜圈,而非去餐厅,或者到外面散步。他在做实验:如果在办公桌上吃甜甜圈并未减少去餐厅的冲动,那就可以排除是因为糖分的原因。最终,他通过排除法确定,他的习惯实际上是由对交流和分散注意力的需求驱动的。于是,他发现与朋友聊天成了替代吃饼干的最佳选择。
  1198.  
  1199. Wood 在她的书的最后,给我们这些被智能手机控制的人提供了建议。她提出了一个分步骤的策略。首先,认识到自己对手机的依赖,意识到这种习惯如何干扰了工作、社交和安全驾驶。接着是“控制情境线索”,也就是找出是什么触发了你拿起手机的行为。对我而言,这些线索包括听觉(如通知声、法国号声)和视觉(如屏幕弹窗)。我已经知道,仅仅把手机调成静音是不足以打破这一习惯的,但正如“棉花糖耐性实验”所示,眼不见心不烦。早上做早餐时,我发现把手机放在另一个房间很有效。开车时,手机被放进手套箱。走路时,我会把手机放在带拉链的口袋里。还有其他方法来增加使用的难度,从而减少这一习惯的发生。完全关机比单纯静音更有效,continue 不是因为我不好奇谁可能给我发邮件,而是因为重新开机很麻烦。
  1200.  
  1201. Wood 还建议我们找到新的奖励来替代手机原本提供的那些奖励。我开始在车里听收音机音乐。晚上,我没有浏览推特和电子邮件,而是探索那些我从未阅读过的作者。每天结束时,我都感到更加平静和自由。 &lt;img alt="&amp;#9830;" height="20.3984375" src="https://abs-0.twimg.com/emoji/v2/svg/2666.svg" width="20.3984375"&gt;&lt;/img&gt;
  1202. &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>
  1203.      <category />
  1204.      <guid isPermaLink="true">https://itindex.net/detail/62904-%E8%84%91%E7%A7%91%E5%AD%A6-%E5%B8%AE%E5%8A%A9-%E5%9D%8F%E4%B9%A0%E6%83%AF</guid>
  1205.      <pubDate>Mon, 08 Jan 2024 09:13:34 CST</pubDate>
  1206.    </item>
  1207.    <item>
  1208.      <title>开源可视化报表工具:Superset</title>
  1209.      <link>https://itindex.net/detail/62903-%E5%BC%80%E6%BA%90-%E5%8F%AF%E8%A7%86%E5%8C%96-%E5%B7%A5%E5%85%B7</link>
  1210.      <description>&lt;h2&gt;Superset简介&lt;/h2&gt;
  1211. &lt;p&gt;Superset 是一个开源的数据可视化和数据探索平台,最初由 Airbnb 开发,后来成为了 Apache 软件基金会的顶级项目。它支持各种类型的数据源,如数据库和 SQL 引擎,并提供了一个易于使用的界面来创建和共享仪表板和图表。&lt;/p&gt;
  1212. &lt;p&gt;  &lt;img alt="" height="528" src="https://www.biaodianfu.com/wp-content/uploads/2024/01/superset-1.jpg" width="780"&gt;&lt;/img&gt;&lt;/p&gt;
  1213. &lt;p&gt;主要特点包括:&lt;/p&gt;
  1214. &lt;ul&gt;
  1215.  &lt;li&gt;数据可视化: Superset 提供了丰富的图表库,支持从简单的折线图和条形图到更复杂的地理信息系统 (GIS) 可视化等。&lt;/li&gt;
  1216.  &lt;li&gt;数据探索: 用户可以通过 Superset 的 SQL 编辑器执行查询,探索数据,并将结果可视化。&lt;/li&gt;
  1217.  &lt;li&gt;仪表板: 可以将多个图表组合成仪表板,为数据分析提供全面视图。&lt;/li&gt;
  1218.  &lt;li&gt;安全性和权限管理: Superset 支持细粒度的访问控制,允许管理员定义用户和角色,控制对数据和功能的访问。&lt;/li&gt;
  1219.  &lt;li&gt;易于集成: 作为一个开源工具,Superset 可以与多种数据源和其他数据工具集成。&lt;/li&gt;
  1220.  &lt;li&gt;自定义和扩展: 用户可以根据需要自定义图表和界面,并且可以开发新的可视化插件。&lt;/li&gt;
  1221. &lt;/ul&gt;
  1222. &lt;p&gt;Superset 适用于数据分析师和开发人员,帮助他们快速有效地探索和可视化数据,从而做出更好的数据驱动决策。&lt;/p&gt;
  1223. &lt;p&gt;看板示例:&lt;/p&gt;
  1224. &lt;p&gt;  &lt;img alt="" height="447" src="https://www.biaodianfu.com/wp-content/uploads/2024/01/superset-2.jpg" width="780"&gt;&lt;/img&gt;&lt;/p&gt;
  1225. &lt;p&gt;拖拽式看板编辑器:&lt;/p&gt;
  1226. &lt;p&gt;  &lt;img alt="" height="414" src="https://www.biaodianfu.com/wp-content/uploads/2024/01/superset-3.jpg" width="780"&gt;&lt;/img&gt;&lt;/p&gt;
  1227. &lt;p&gt;SQL编辑器:&lt;/p&gt;
  1228. &lt;p&gt;  &lt;img alt="" height="546" src="https://www.biaodianfu.com/wp-content/uploads/2024/01/sql-lab.jpg" width="780"&gt;&lt;/img&gt;&lt;/p&gt;
  1229. &lt;h2&gt;Superset架构&lt;/h2&gt;
  1230. &lt;p&gt;Apache Superset 是一款开源的数据可视化和数据探索平台,它的架构设计允许用户轻松地进行数据分析并创建交互式的仪表板。Superset的架构主要由以下几个核心组件构成:&lt;/p&gt;
  1231. &lt;p&gt;  &lt;img alt="" height="464" src="https://www.biaodianfu.com/wp-content/uploads/2024/01/superset-4-1.png" width="780"&gt;&lt;/img&gt;&lt;/p&gt;
  1232. &lt;p&gt;Web服务器&lt;/p&gt;
  1233. &lt;ul&gt;
  1234.  &lt;li&gt;Flask:Superset使用Flask作为其Web框架,处理HTTP请求和渲染界面。&lt;/li&gt;
  1235.  &lt;li&gt;Gunicorn:在生产环境中,通常使用Gunicorn作为WSGI HTTP服务器来运行Flask应用。&lt;/li&gt;
  1236. &lt;/ul&gt;
  1237. &lt;p&gt;SQL查询引擎&lt;/p&gt;
  1238. &lt;ul&gt;
  1239.  &lt;li&gt;SQLAlchemy:Superset通过SQLAlchemy与数据源进行交互,它支持多种数据库。&lt;/li&gt;
  1240.  &lt;li&gt;Pandas:在某些情况下,Superset会使用Pandas库来处理数据。&lt;/li&gt;
  1241. &lt;/ul&gt;
  1242. &lt;p&gt;数据库&lt;/p&gt;
  1243. &lt;ul&gt;
  1244.  &lt;li&gt;元数据数据库:存储Superset的配置信息、仪表板定义、数据源定义等。&lt;/li&gt;
  1245.  &lt;li&gt;缓存数据库:用于缓存数据,提高查询性能。Redis和Memcached是常用的选项。&lt;/li&gt;
  1246. &lt;/ul&gt;
  1247. &lt;p&gt;前端&lt;/p&gt;
  1248. &lt;ul&gt;
  1249.  &lt;li&gt;React &amp;amp; JavaScript:Superset的前端主要使用React框架结合JavaScript开发,用于实现用户界面的交互和动态展示。&lt;/li&gt;
  1250.  &lt;li&gt;js:图表的渲染利用了D3.js库,提供丰富的可视化选项。&lt;/li&gt;
  1251. &lt;/ul&gt;
  1252. &lt;p&gt;安全性&lt;/p&gt;
  1253. &lt;ul&gt;
  1254.  &lt;li&gt;认证与授权:Superset提供灵活的认证选项(如LDAP、OAuth、数据库等)和基于角色的访问控制(RBAC)。&lt;/li&gt;
  1255.  &lt;li&gt;数据安全:支持数据级别的安全控制,确保用户只能访问授权的数据。&lt;/li&gt;
  1256. &lt;/ul&gt;
  1257. &lt;p&gt;扩展性&lt;/p&gt;
  1258. &lt;ul&gt;
  1259.  &lt;li&gt;插件系统:Superset支持自定义插件,允许用户扩展新的可视化类型或其他功能。&lt;/li&gt;
  1260.  &lt;li&gt;API:提供REST API,支持与其他系统的集成。&lt;/li&gt;
  1261. &lt;/ul&gt;
  1262. &lt;p&gt;任务调度器&lt;/p&gt;
  1263. &lt;ul&gt;
  1264.  &lt;li&gt;Celery:用于执行后台任务,如异步查询和发送报告。&lt;/li&gt;
  1265. &lt;/ul&gt;
  1266. &lt;h2&gt;Superset功能扩展&lt;/h2&gt;
  1267. &lt;p&gt;拓展Apache Superset主要涉及添加新的可视化类型、增强现有功能、集成更多数据源等方面。&lt;/p&gt;
  1268. &lt;p&gt;开发自定义可视化插件&lt;/p&gt;
  1269. &lt;ul&gt;
  1270.  &lt;li&gt;Superset支持通过插件机制添加新的图表和可视化类型。&lt;/li&gt;
  1271.  &lt;li&gt;可以使用React和JavaScript开发新的可视化组件。&lt;/li&gt;
  1272.  &lt;li&gt;开发完成后,将插件包含在Superset的配置中,使其成为可用的可视化类型。&lt;/li&gt;
  1273. &lt;/ul&gt;
  1274. &lt;p&gt;集成更多数据源&lt;/p&gt;
  1275. &lt;ul&gt;
  1276.  &lt;li&gt;Superset通过SQLAlchemy与数据源进行交互,可以添加对新数据库的支持。&lt;/li&gt;
  1277.  &lt;li&gt;通过添加相应的数据库驱动和SQLAlchemy方言,可以实现新的数据库支持。&lt;/li&gt;
  1278. &lt;/ul&gt;
  1279. &lt;p&gt;增强现有功能&lt;/p&gt;
  1280. &lt;ul&gt;
  1281.  &lt;li&gt;对Superset的源代码进行修改,可以增强或改变现有功能。&lt;/li&gt;
  1282.  &lt;li&gt;包括改进用户界面、增加新的数据处理功能、优化性能等。&lt;/li&gt;
  1283. &lt;/ul&gt;
  1284. &lt;p&gt;使用API进行集成&lt;/p&gt;
  1285. &lt;ul&gt;
  1286.  &lt;li&gt;Superset提供了REST API,可以用来与其他系统集成。&lt;/li&gt;
  1287.  &lt;li&gt;例如,可以通过API自动化仪表板的创建、更新数据源等。&lt;/li&gt;
  1288. &lt;/ul&gt;
  1289. &lt;p&gt;安全性和认证的定制&lt;/p&gt;
  1290. &lt;ul&gt;
  1291.  &lt;li&gt;可以定制Superset的安全性和认证机制,如集成企业的单点登录(SSO)系统。&lt;/li&gt;
  1292.  &lt;li&gt;修改认证流程以支持LDAP、OAuth等。&lt;/li&gt;
  1293. &lt;/ul&gt;
  1294. &lt;p&gt;使用和配置Celery任务调度器&lt;/p&gt;
  1295. &lt;ul&gt;
  1296.  &lt;li&gt;使用Celery来优化和管理后台任务,如数据刷新、报告发送等。&lt;/li&gt;
  1297.  &lt;li&gt;可以定制Celery的配置以满足特定的性能和规模需求。&lt;/li&gt;
  1298. &lt;/ul&gt;
  1299. &lt;p&gt;参考链接:&lt;/p&gt;
  1300. &lt;ul&gt;
  1301.  &lt;li&gt;   &lt;a href="https://superset.apache.org/"&gt;Welcome | Superset (apache.org)&lt;/a&gt;&lt;/li&gt;
  1302.  &lt;li&gt;   &lt;a href="https://github.com/apache/superset"&gt;GitHub – apache/superset: Apache Superset is a Data Visualization and Data Exploration Platform&lt;/a&gt;&lt;/li&gt;
  1303.  &lt;li&gt;   &lt;a href="https://github.com/amancevice/docker-superset"&gt;GitHub – amancevice/docker-superset: Docker image for Airbnb’s Superset&lt;/a&gt;&lt;/li&gt;
  1304. &lt;/ul&gt;
  1305. &lt;div&gt;
  1306.  
  1307.  &lt;h3&gt;相关文章:&lt;/h3&gt;  &lt;ol&gt;
  1308.   &lt;li&gt;    &lt;a href="https://www.biaodianfu.com/docker-jupyterhub.html" rel="bookmark" title="Docker&amp;#23433;&amp;#35013;&amp;#22810;&amp;#29992;&amp;#25143;&amp;#29256;JupyterHub"&gt;Docker安装多用户版JupyterHub&lt;/a&gt;&lt;/li&gt;
  1309.   &lt;li&gt;    &lt;a href="https://www.biaodianfu.com/hive-udf.html" rel="bookmark" title="Hive UDF&amp;#30340;&amp;#24320;&amp;#21457;&amp;#31616;&amp;#20171;"&gt;Hive UDF的开发简介&lt;/a&gt;&lt;/li&gt;
  1310.   &lt;li&gt;    &lt;a href="https://www.biaodianfu.com/microsoft-rest-api-guidelines.html" rel="bookmark" title="Microsoft REST API Guidelines&amp;#20013;&amp;#25991;&amp;#32763;&amp;#35793;"&gt;Microsoft REST API Guidelines中文翻译&lt;/a&gt;&lt;/li&gt;
  1311. &lt;/ol&gt;
  1312. &lt;/div&gt;
  1313. &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>
  1314.      <category>器→工具 工具软件 BI</category>
  1315.      <guid isPermaLink="true">https://itindex.net/detail/62903-%E5%BC%80%E6%BA%90-%E5%8F%AF%E8%A7%86%E5%8C%96-%E5%B7%A5%E5%85%B7</guid>
  1316.      <pubDate>Thu, 04 Jan 2024 12:54:55 CST</pubDate>
  1317.    </item>
  1318.    <item>
  1319.      <title>高并发系统-如何做服务化拆分</title>
  1320.      <link>https://itindex.net/detail/62902-%E5%B9%B6%E5%8F%91-%E7%B3%BB%E7%BB%9F-%E6%9C%8D%E5%8A%A1</link>
  1321.      <description>&lt;hr&gt;&lt;/hr&gt;
  1322. &lt;h2&gt;theme: channing-cyan
  1323. highlight: a11y-dark&lt;/h2&gt;
  1324. &lt;p&gt;一般早期架构是  &lt;code&gt;一体化架构(Monolithic Architecture)&lt;/code&gt;,简单来说就是所有的业务都在一个后台服务来承载。&lt;/p&gt;
  1325. &lt;p&gt;例如,一个Java web应用运行在Tomcat之类web容器上,仅包含单个WAR文件;一个Rails应用使用Phusion Passenger部署在Apache/Nginx上,或者使用JRuby部署在Tomcat上,它们都仅包含单个目录结构。为了伸缩和提高可用性,你可以在一个负载均衡器下面运行该应用的多份实例。&lt;/p&gt;
  1326. &lt;p&gt;  &lt;img alt="image.png" src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/7a248aeb2faf483da090a2648dae1c7a~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=720&amp;h=540&amp;s=138158&amp;e=png&amp;b=faf2ee"&gt;&lt;/img&gt;&lt;/p&gt;
  1327. &lt;h1&gt;1. 一体化架构痛点&lt;/h1&gt;
  1328. &lt;h2&gt;1.1 技术层面,数据库可能成为系统瓶颈&lt;/h2&gt;
  1329. &lt;p&gt;一体化应用是可以快速复制,但是数据库一般没法横向扩展(除非做分库分表拆分)。  &lt;br /&gt;
  1330. 数据库比如MYSQL的客户端连接数是有限制的,一般可在服务器端配置,比如2w。假设一个应用100数据库连接,最多100*200=2w,实际不能扩展到这么多,因为还有运维、监控相关也会使用一定的连接数。&lt;/p&gt;
  1331. &lt;h2&gt;1.2 增加沟通成本,抑制研发效率提升&lt;/h2&gt;
  1332. &lt;p&gt;《人月神话》中曾经提到:一个团队内部沟通成本,和人员数量 n 有关,约等于 n(n-1)/2,也就是说随着团队人员的增加,沟通的成本呈指数级增长,一个 100 人的团队,需要沟通的渠道大概是 100(100-1)/2 = 4950。&lt;/p&gt;
  1333. &lt;p&gt;同时针对一体化项目,大多代码比较多,这会导致开发维护效率变低。之前在一个客户端项目,一个apk的代码量在150w,30+团队一起开发,合代码做需求非常刺激,有时候专门需要1整天来解决需求提交的代码冲突。&lt;/p&gt;
  1334. &lt;h2&gt;1.3 运维复杂度增加&lt;/h2&gt;
  1335. &lt;p&gt;系统编译、构建、启动等随着代码量的增多变得越来越复杂&lt;/p&gt;
  1336. &lt;h2&gt;1.4 一体化架构优点&lt;/h2&gt;
  1337. &lt;p&gt;一体化架构也是有着一些优点的,如果针对访问量不大、并发不高的系统,一体化架构可以节约机器、精简架构、提高研发效率有着自身的优势。&lt;/p&gt;
  1338. &lt;p&gt;可以参考2023年的这篇文章:  &lt;a href="https://www.infoq.cn/article/nu2y3xiazg1cqianoxxa"&gt;从微服务转为单体架构、成本降低 90%,亚马逊内部案例引发轰动!CTO:莫慌,要持开放心态&lt;/a&gt;&lt;/p&gt;
  1339. &lt;p&gt;针对单体架构还是微服务化架构,针对项目不同阶段、人员储备等情况按需进行选择&lt;/p&gt;
  1340. &lt;h1&gt;2. 如何进行服务化拆分&lt;/h1&gt;
  1341. &lt;h2&gt;2.1 做到单一服务内部功能的高内聚,和低耦合&lt;/h2&gt;
  1342. &lt;p&gt;每个服务只完成自己职责之内的任务,对于不是自己职责的功能,交给其它服务来完成。&lt;/p&gt;
  1343. &lt;h2&gt;2.2 服务拆分的粒度,先粗略拆分,再逐渐细化&lt;/h2&gt;
  1344. &lt;p&gt;拆分初期可以把服务粒度拆的粗一些,后面随着团队对于业务和微服务理解的加深,再考虑把服务粒度细化。&lt;/p&gt;
  1345. &lt;h2&gt;2.3 尽量避免影响产品的日常功能迭代,也就是说,要一边做产品功能迭代,一边完成服务化拆分&lt;/h2&gt;
  1346. &lt;p&gt;优先剥离比较独立的边界服务(比如短信服务、地理位置服务),从非核心的服务出发,减少拆分对现有业务的影响  &lt;br /&gt;
  1347. 当两个服务存在依赖关系时,优先拆分被依赖的服务。&lt;/p&gt;
  1348. &lt;h2&gt;2.4 服务接口的定义要具备可扩展性&lt;/h2&gt;
  1349. &lt;p&gt;为保证接口扩展性,接口入参和返回值采用对象而不是直接使用参数做入参  &lt;br /&gt;
  1350. 比如下面test1要增加一个参数处理新增加一个方法外没有其他处理方式了,test2直接在入参加一个字段即可&lt;/p&gt;
  1351. &lt;pre&gt;  &lt;code&gt;void test1(int a, int b);
  1352.  
  1353. void test2(Test1Req req)
  1354. &lt;/code&gt;&lt;/pre&gt;
  1355. &lt;h1&gt;3. 微服务化带来的问题和解决思路&lt;/h1&gt;
  1356. &lt;h2&gt;3.1 服务接口的调用,不再是同一进程内的方法调用,而是跨进程的网络调用,这会增加接口响应时间的增加&lt;/h2&gt;
  1357. &lt;p&gt;选择何时微服务框架,比如Dubbo&lt;/p&gt;
  1358. &lt;h2&gt;3.2 多个服务之间有着错综复杂的依赖关系&lt;/h2&gt;
  1359. &lt;p&gt;引入服务治理体系:熔断降级限流超时控制&lt;/p&gt;
  1360. &lt;h2&gt;3.3 服务拆分到多个进程后,一条请求的调用链路上,涉及多个服务,那么一旦这个请求的响应时间增长,或者是出现错误,我们就很难知道,是哪一个服务出现的问题&lt;/h2&gt;
  1361. &lt;p&gt;分布式追踪服务  &lt;br /&gt;
  1362. 监控报表 APM工具,如PINPOINT&lt;/p&gt;
  1363. &lt;h1&gt;4. 其他&lt;/h1&gt;
  1364. &lt;h2&gt;4.1 康威定律&lt;/h2&gt;
  1365. &lt;p&gt;设计系统的组织,其产生的设计等同于组织间的沟通结构。通俗一点说,就是你的团队组织结构是什么样的,你的架构就会长成什么样。&lt;/p&gt;
  1366. &lt;h2&gt;4.2 贝索斯的两个披萨理论&lt;/h2&gt;
  1367. &lt;p&gt;按照亚马逊 CEO,贝佐斯的“两个披萨”的理论,如果两个披萨不够你的团队吃,那么你的团队就太大了,需要拆分,所以一个小团队包括开发、运维、测试以 6~8 个人为最佳&lt;/p&gt;
  1368. &lt;h2&gt;4.3 微服务化成本高,先采用工程拆分方式&lt;/h2&gt;
  1369. &lt;p&gt;参考:  &lt;br /&gt;
  1370.  &lt;a href="https://imonce.github.io/2019/08/07/%E4%BB%80%E4%B9%88%E6%98%AF%E4%B8%80%E4%BD%93%E5%8C%96%E6%9E%B6%E6%9E%84-Monolithic-Architecure/"&gt;什么是一体化架构(Monolithic Architecture)&lt;/a&gt;  &lt;br /&gt;
  1371.  &lt;a href="https://www.infoq.cn/article/nu2y3xiazg1cqianoxxa"&gt;从微服务转为单体架构、成本降低 90%,亚马逊内部案例引发轰动!CTO:莫慌,要持开放心态&lt;/a&gt;&lt;/p&gt;
  1372. &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>
  1373.      <category />
  1374.      <guid isPermaLink="true">https://itindex.net/detail/62902-%E5%B9%B6%E5%8F%91-%E7%B3%BB%E7%BB%9F-%E6%9C%8D%E5%8A%A1</guid>
  1375.      <pubDate>Wed, 03 Jan 2024 20:56:54 CST</pubDate>
  1376.    </item>
  1377.  </channel>
  1378. </rss>
  1379.  
  1380.  
  1381.  

If you would like to create a banner that links to this page (i.e. this validation result), do the following:

  1. Download the "valid RSS" banner.

  2. Upload the image to your own server. (This step is important. Please do not link directly to the image on this server.)

  3. Add this HTML to your page (change the image src attribute if necessary):

If you would like to create a text link instead, here is the URL you can use:

http://www.feedvalidator.org/check.cgi?url=http%3A//itindex.net/feed.jsp

Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda