# 有问必答 **Repository Path**: annebrown/answer-all-the-questions ## Basic Information - **Project Name**: 有问必答 - **Description**: 学习中一些名词或专业词语的积累 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-09-11 - **Last Updated**: 2022-10-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 有问必答 ### 昆虫纲悖论 物联网系统的昆虫纲悖论 工业经济追求规模经济(economy of scale),强调分工、专业化和一个品种的产量规模,新经济追求范围经济(economy of scope),强调品种多样化和个性化。经济发展需要解决通用性和个性化的矛盾,这就是我常讲的“昆虫纲悖论”。以后的物联网、人工智能应用可能像昆虫一样,有很多品种,你想把这些应用规模化生产,就会产生矛盾,只能靠大数据和智能技术解决有效满足个性化需求的矛盾。 ### 使能技术/赋能技术 [为什么叫使能技术_使能技术的浅谈 - 技术文章 - 电子发烧友网 (elecfans.com)](https://www.elecfans.com/company/LitePoint/article/2018/0104/610522.html) 使能技术 ,目前国际国内没有严格的“使能技术”相关定义。一般而言,使能技术是指一项或一系列的、应用面广、具有多学科特性、为完成任务,而实现目标的技术。 首先“使能技术”是个舶来词,由英文enabling [te](https://www.elecfans.com/tags/te/)chnology直译而来,因此有人将之翻译为“赋能技术”,笔者个人还是喜欢用“使能技术”这种译法,有种使之能够的动感。维基百科的定义:使能技术是指能够对用户的能力或文化产生根本性变化的发明或创新,其最明显的特征是一般会在不同领域快速形成衍生技术。 使能技术是有差异的,主要表现在三个方面。一是地域差异。各国根据自身经济、科技、产业基础,结合国家发展目标,认定本国所需重点发展的“使能技术”,因此各国的关键使能技术是不同的的。二是层次差异。比如有多项“使能技术”支撑信息技术,而在宏观角度,信息技术本身就是“使能技术”。三是领域差异。此外,“使能技术”之间具有关联性,会交织,或部分重叠。越是宏观层面,这一特点越是明显。 ### 库操作系统 LibOS [库操作系统 LibOS – 人人都懂物联网 (getiot.tech)](https://getiot.tech/dictionary/libos.html#:~:text=库操作系统 (Library Operating,System,简称 LibOS)是根据某类应用的特殊需求,由某一高级编程语言将原本属于操作系统内核的某些资源管理功能,如文件磁盘 I%2FO、网络通信等,按照模块化的要求,以库的形式提供给应用程序的特殊操作系统。) **库操作系统**(Library Operating System,简称 LibOS)是根据某类应用的特殊需求,由某一高级编程语言将原本属于操作系统内核的某些**资源管理功能**,如文件磁盘 I/O、网络通信等,按照模块化的要求,**以库的形式提供**给应用程序的特殊操作系统。 它能代替操作系统内核合理地管理和控制所涉及的计算机资源,并将所涉及的计算机资源直接暴露给应用程序,让应用程序直接访问底层(虚拟)硬件,以便应用程序能够高效地运行。特别地,它与应用程序在编译时被链接到一起,形成一个只有单地址空间的二进制文件并工作在应用层,是构建 Unikernel 的一个必不可少的系统组件。 相对于 Container/VM 等共享内核技术,**LibOS 更加轻量、运行资源消耗更少**,并提供了**内核定制**能力。LibOS 有更好的隔离性,能够给每个应用都提供独立的 OS,从而让应用可以在不同的平台上运行。 ![img](https://static.getiot.tech/libos-generic-framework.png) ### 向后兼容 向后兼容(backwards compatible),即使用新版编译器可以正确编译使用老版本语法编写的代码。 ### CSP理论 Communication Sequential Process (简称CSP)是著名计算机科学家C.A.R.Hoare为解决并发现象而提出的代数理论,是一个专为描述并发系统中通过消息交换进行交互通信实体行为而设计的一种抽象语言。 在该语言中,一个并发系统由若干并行运行的顺序进程组成,每个进程不能对其他进程的变量赋值。进程之间只能通过 一对通信原语实现协作:Q->x表示从进程Q输入一个值到变量x中;P<-e表示把表达式e的值发送给进程P。当P进程执行Q->x, 同时Q进程执行P<-e时,发生通信,e的值从Q进程传送给P进程的变量x。后来出现的实用编程语言OCCAM即以CSP为基础发展而成。 1984年S.Brooks,C.A.R.Hoare和W.Roscoe提出CSP理论(TCSP)。这是一个代数演算系统,其基本成分是事件(或动 作)。进程由事件和一组算子构造而成。 典型的算子有:→(前缀),|(外部非确定性选择),\e(事件隐蔽),以及递归等。 CSP 的一个作用是 model checking: 用这套语言来描述一个并发系统或者流程, 然后丢给分析软件, 它就能给出这个系统的很多性质. 例如你把社保局办证大厅的办事流程扔给它, 它或许会帮你找出其中的一些漏洞让你可以钻空子.Golang 就和 Plan9 libthread, DirectShow, ... 一样, 只是顺带借用了些 CSP 概念, 但用 Golang 写的程序是不能用 CSP 工具分析的, Golang 编译器也没这样的分析, 所以依然无法杜绝死锁/活锁 (Go 编译器有一个 -race 检测, 不过和 CSP 的分析是两回事). 链接:https://www.zhihu.com/question/26192499/answer/46815754 ### 时间片 链接:https://www.jianshu.com/p/44585830f009 CPU时间片概念:时间片即CPU分配给各个程序的时间,每个线程被分配一个时间段,称作它的时间片,即该进程允许运行的时间,使各个程序从表面上看是同时进行的。如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。而不会造成CPU资源浪费。在宏观上:我们可以同时打开多个应用程序,每个程序并行不悖,同时运行。但在微观上:由于只有一个CPU,一次只能处理程序要求的一部分,如何处理公平,一种方法就是引入时间片,每个程序轮流执行。 Windows 系统中线程轮转时间也就是时间片大约是20ms,如果某个线程所需要的时间小于20ms,那么不到20ms就会切换到其他线程;如果一个线程所需的时间超过20ms,系统也最多只给20ms,除非意外发生(那可能导致整个系统无响应),而Linux/unix中则是5~800ms。 ### 系统臃肿 ### OSDI OSDI是计算机学界最顶级学术会议之一,全称本来是USENIX Symposium on Operating Systems Design and Implementation,简称OSDI,但近些年来其关注的领域已经不再限于OS了,比如很多对工业界产生革命性影响的成果都在这里发表过(比如MapReduce和BigTable等) 之前一直是每两年举办一次,2020年开始每年举办了。OSDI是CCF推荐的A类国际学术会议 OSDI 和 SOSP 是系统领域并驾齐驱的两个顶级会议之一 ### SRAM DRAM 随机存取存储器(英语:RandomAccessMemory,缩写:RAM),也叫主存,是与CPU直接交换数据的内部存储器。它可以随时读写(刷新时除外,见下文),而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介。 静态随机存取存储器(Static Random-Access Memory,SRAM)是随机存取存储器的一种。所谓的“静态”,是指这种存储器只要保持通电,里面储存的数据就可以恒常保持。相对之下,动态随机存取存储器(DRAM)里面所储存的数据就需要周期性地更新。然而,当电力供应停止时,SRAM储存的数据还是会消失(被称为易失性存储器volatile memory),这与在断电后还能储存资料的ROM或闪存是不同的。 SRAM不需要刷新电路即能保存它内部存储的数据。而DRAM(Dynamic Random Access Memory)每隔一段时间,要刷新充电一次,否则内部的数据即会消失,因此SRAM具有较高的性能,但是SRAM也有它的缺点,即它的集成度较低,功耗较DRAM大,相同容量的DRAM内存可以设计为较小的体积,但是SRAM却需要很大的体积。同样面积的硅片可以做出更大容量的DRAM,因此SRAM显得更贵。 SRAM主要用于二级高速缓存(Level2 Cache)。它利用晶体管来存储数据。与DRAM相比,SRAM的速度快,但在相同面积中SRAM的容量要比其他类型的内存小。 | | SRAM | DRAM | | ---------- | ------ | -------- | | 存储信息 | 触发器 | 电容 | | 破坏性读出 | 非 | 是 | | 需要刷新 | 不要 | 需要 | | 送行列地址 | 同时送 | 分两次送 | | 运行速度 | 快 | 慢 | | 集成度 | 低 | 高 | | 发热量 | 大 | 小 | | 存储成本 | 高 | 低 | ### 内存阶层 img ### 全栈 [全栈是什么意思(java到底是做什么的)_环球信息网 (gpbctv.com)](https://news.gpbctv.com/shxw/202110/402772.html) 现在的程序员有很多方向,前端开发、后端开发、测试、算法等。其中,以前端和后端最为流行。 顾名思义,前端就是在前面的、用户能看到和使用的界面。前端程序员就是写这些界面,并且研究如何更高效地写出更美观、更稳定、体验更好、性能更高的页面。 后端就是躲在后面,帮前端保存和处理数据,默默提供服务的工具人。后端程序员就是通过设计和编写逻辑代码来实现功能,并且研究如何让功能更可用、更稳定、更迅速、更低成本、支持更多人同时用等。 而全栈程序员就是全干,前端、后端、甚至是测试等等啥都能干,一个人就能独立完成整个产品! 虽然看起来好像啥都做,工作量肯定不小。但是全栈程序员负责工作通常更偏向业务,而不是架构,难度和专业性上要比在某一个领域深入钻研的同学要小一些。 短期来看,我建议大家确定一个方向,可以追求技术的多样性和广度,但那些都要以你的主方向能学好为前提。贪多嚼不烂,也没必要给自己太大的压力。 但长期来看,我认为 每个人都应该做全栈程序员 !想要成为技术 Leader,你的知识面就要更广,视野和格局才能更大。像我现在的 Leader 就是,前端、后端、算法、产品,都能有自己独特的见解(要不然手下人偷懒忽悠咋办)。当然,这个需要时间去积累,也不用每个方向都学得很深,但多学一点总是好的。 ### Docker Docker 是一种操作系统层面的虚拟化技术,可以在操作系统和应用程序之间进行隔离,也可以称之为容器。Docker 可以在一台物理服务器上快速运行一个或多个实例。例如,启动一个 CentOS 操作系统,并在其内部命令行执行指令后结束,整个过程就像自己在操作系统一样高效。 项目链接:https://github.com/docker/docker ### 协程 协程(Coroutines)是一种比线程更加轻量级的存在。协程完全由程序所控制(在用户态执行),带来的好处是性能大幅度的提升。 一个操作系统中可以有多个进程;一个进程可以有多个线程;同理,一个线程可以有多个协程。 协程是一个特殊的函数,这个函数可以在某个地方挂起,并且可以重新在挂起处继续运行。 **一个线程内的多个协程的运行是串行的,这点和多进程(多线程)在多核CPU上执行时是不同的。** 多进程(多线程)在多核CPU上是可以并行的。**当线程内的某一个协程运行时,其它协程必须挂起。** 计算型的操作,利用协程来回切换执行,没有任何意义,来回切换并保存状态 反倒会降低性能。 IO型的操作,利用协程在IO等待时间就去切换执行其他任务,当IO操作结束后再自动回调,那么就会大大节省资源并提供性能,从而实现异步编程(不等待任务结束就可以去执行其他代码)。 ### Framework Framework即架构,它是一个语言开发软件,提供了软件开发的框架,使开发更具工程性、简便性和稳定性.NET Framework通过COM Interop(COM互操作)技术支持COM+和MTS。一个传统的COM应用程序能够调用一个.NET组件,同时.NET组件(在.NET中称为.NET Assembly)也能够调用一个COM组件。这一非常强大的双向互操作特性使你可以在应用程序中混合使用两类技术。 ### USA电子信息复兴时代 ERI ERI计划旨在打破传统器件微型化的局限,在无法持续缩小尺寸的情况下,通过重点开发全新微系统材料、电子器件集成架构、软硬件创新设计等实现电子器件性能的持续提升,推动美国半导体技术实现变革性创新。 2017年6月1日,美国国防高级研究计划局(Defense Advanced Research Projects Agency,DARPA)宣布拟投资7500万美元启动电子复兴计划(Electronics Resurgence Initiative, ERI),在随后五年内投资约15亿美元,旨在解决半导体技术的制程瓶颈并应对半导体产业快速发展的挑战。2020年美国两党两院提案《为美国半导体制造创造有益激励法案》建议追加20亿美元用于实施ERI计划。ERI计划成为近年来美国在半导体领域实施的最大规模举措,涵盖基础研究、应用基础研究、转化研究、国防和商业应用等创新环节。 [美国电子复兴计划进展分析与启示-电子头条-EEWORLD电子工程世界](http://news.eeworld.com.cn/mp/Icbank/a102730.jspx) ### 后摩尔时代 1965年,英特尔公司联合创始人戈登·摩尔提出著名的摩尔定律。半导体芯片的发展遵循着摩尔定律,随着晶体管尺寸的缩小,器件能耗更低、性能更高、价格更便宜。然而,当晶体管尺寸进入到纳米级时,量子隧穿效应发生,晶体管的漏电现象成为不可忽视的问题。硅工艺制程技术不断被穿孔、光刻、隧穿、散热等技术瓶颈困扰,人们为解决这些技术难题付出高昂代价,摩尔定律遭遇到成本的“天花板”,半导体芯片技术开始进入“后摩尔时代”。 “后摩尔时代”人们对“芯片”的关注更多的由“尺寸”转向能力,由处理能力转向计算能力,由计算能力转向计算效率。解决问题的思路,也从以往单纯强调制程技术,逐渐向架构、材料、范式创新和统筹运用多重手段等方面转变。 More Moore More than Moore [什么是“后摩尔时代”?? - 知乎 (zhihu.com)](https://zhuanlan.zhihu.com/p/375450151) ### 元宇宙经济 元宇宙经济:体验经验+创作者经济 ### API签名 以API形式对外提供服务,API接口暴露在公网上,可能存在安全性问题。例如,非法攻击API服务(收费接口非法调用),恶意攻击和破坏(数据篡改、DOS)。因此需要设计一些接口安全保护的方式来增强接口安全,在运输层可添加 SSL 证书,上 HTTPS,在应用层主要是通过一些加密逻辑来实现。目前主流的两种是在 HTTP Header 里加认证信息和 API 签名。 [聊聊 API 签名方式 - Fururur - 博客园 (cnblogs.com)](https://www.cnblogs.com/Sinte-Beuve/p/12093307.html) ### 代码综合 通俗的来讲,“综合”就是把你用硬件描述语言描述的电路转换成实际能够实现的真实电路的过程。包括门级或者寄存器传输级甚至是开关级。 综合就是把你写的rtl代码转换成对应的实际电路。 在数位电路设计中,寄存器传输级(英語:register-transfer level, RTL)是一种对同步数位电路的抽象模型,这种模型是根据数字信号在硬件寄存器、存储器、组合逻辑装置和总线等逻辑单元之间的流动,以及其逻辑代数运作方式来确定的。 ### 沙箱 Sandbox Sandbox(又叫沙箱、沙盘)即是一个虚拟系统程序,允许你在沙盘环境中运行浏览器或其他程序,因此运行所产生的变化可以随后删除。它创造了一个类似沙盒的独立作业环境,在其内部运行的程序并不能对硬盘产生永久性的影响。 在网络安全中,沙箱指在隔离环境中,用以测试不受信任的文件或应用程序等行为的工具。 ### DSL 领域特定语言 领域特定语言(英语:domain-specific language、DSL)指的是专注于某个应用程序领域的计算机语言。又译作领域专用语言。不同于普通的跨领域通用计算机语言(GPL),领域特定语言只用在某些特定的领域。 比如用来显示网页的HTML,以及Emacs所使用的Emac LISP语言。 + 外部DSL:不同于应用系统主要使用语言的语言,通常采用自定义语法,宿主应用的代码采用文本解析技术对外部DSL编写的脚本进行解析。例子如:正则表达式、SQL、AWK以及Struts的配置文件等 + 内部DSL:通用语言的特定语法,用内部DSL写成的脚本是一段合法的程序,但是它具有特定的风格,而且仅仅用到了语言的一部分特性,用于处理整个系统一个小方面的问题; + 语言工作台:一种专用的IDE,用于定义和构建DSL,具体的讲,语言工作台不仅用来确定DSL的语言结构,而且是人们编写DSL脚本的编辑环境,最终的脚本将编辑环境和语言本身紧密的结合在一起。 [DSL的概念 - zzfx - 博客园 (cnblogs.com)](https://www.cnblogs.com/feng9exe/p/10901595.html) ### 云网融合 准确来说,云计算包括计算能力、存储能力以及相关的软硬件。而通信网,则包括接入网、承载网、核心网等电信网络的方方面面。 从本质来看,云是计算,网是连接。从企业主体来看,云是云服务提供商(亚马逊、谷歌、阿里、腾讯),网是电信运营商(移动、电信、联通)。 云网融合,站在技术的角度,就是云计算中引入网络的技术,通信网中引入云计算的技术。 云服务提供商的核心资产是DC(Data Center,数据中心),他们会想方设法提升数据中心内部的网络能力,数据中心与数据中心之间的网络能力,还有数据中心与用户之间的网络能力。 所以,像SD-WAN,还有现在很火的DCI(Data Center Interconnection,数据中心互联),以及光传送网最关键的400G光模块等,都是云服务商非常关注的网络技术。 云服务商虽然在技术上是强项,但有一个方面是短板,那就是资源。在边缘计算领域,这一点表现得非常明显。 边缘计算其实就是云计算的一个分支。将一部分算力从云计算剥离,下沉到离用户更近的位置,就是边缘计算。 谁离用户近?当然是网络。网络一直延伸到用户身边,是离用户最近的角色。 边缘计算可以下沉到地级市、县级市,也可以下沉到小区、大楼,甚至可以下沉到你的家门口。 在基站机房里,可以放一个x86服务器小机架,就是边缘计算节点。光纤宽带的光猫里,加个边缘计算芯片或子卡,也是边缘计算节点。 云服务商想要进入这个领域,就必须依赖运营商,获得运营商的许可,或者与运营商合作,换取通信网资源。 运营商大量的基层站址空间资源,是云服务提供商梦寐以求的。这是运营商的一个优势,如果能够利用好这个优势,未来会有很大的市场空间。 [什么是云网融合? - 知乎 (zhihu.com)](https://www.zhihu.com/question/370735122) ### 算力网络 数据经济的发展将推动海量数据产生,数据处理需要云、边、端协同的强大算力和广泛覆盖的网络连接。算力网络就是一种在云、边、端之间**按需分配和灵活调度**计算资源、存储资源以及网络资源的新型信息基础设施。 所谓算力,简而言之就是设备的计算能力(Computing Power)。小至手机、PC,大到超级计算机,没有算力就没有各种软硬件的正常应用。以PC而言,搭载的CPU、显卡、内存配置越高,一般来说算力就越高。 算力基础设施从云向算泛在演进,其位置的分布从中心向边缘和端侧泛在延伸,将出现云、边、端三级算力架构。 ![云、边、端三级算力架构](https://download.huawei.com/mdl/image/download?uuid=6c8467bdefec4f0ebda803b73d6210ca) [什么是算力网络?为什么需要算力和算力网络? - 华为 (huawei.com)](https://info.support.huawei.com/info-finder/encyclopedia/zh/算力网络.html) ### 算力的衡量 大数据时代,数据和算力都是巨量的,这里先解释一下单位巨大量级的表示方式:K(Kilo)表示10^3 、M(Mega)表示10^6 、 G(Giga)表示10^9 、 T(Tera)表示10^12 、 P(Peta) 表示10^15、 E(Exa)表示10^18、 Z(Zetta)表示10^21 、 Y(Yotta) 表示10^24。 算力的单位,是衡量算力强弱的指标和基准,当前存在多种不同的衡量方法。常见的包括MIPS(每秒钟执行的百万指令数,Million Instructions Per Second)、DMIPS(Dhrystone每秒钟执行的百万指令数,Dhrystone Million Instructions executed Per Second)、OPS(每秒操作次数,Operations Per Second)、FLOPS(每秒浮点运算次数,Floating-point Operations Per Second)、Hash/s(每秒哈希运算次数,Hash Per Second)等。 其中,FLOPS单位一直被视为衡量计算机运算速度的主要指标之一。从量级来看,PC的算力为GFLOPS级别;中国超级计算机神威“太湖之光”的算力为93.015PFLOPS;鹏程实验室的鹏程云脑II(以华为Atlas 900集群为底座)拥有1000PFLOPS的强大算力,相当于数千万甚至上亿台PC的集合。 再举一个Hash/s单位的例子,数字货币比特币挖矿(获取比特币)的矿机每秒钟能做多少次哈希碰撞,就代表这台挖矿机的算力。矿工的矿池,也就是他拥有的所有矿机的算力占比特币全网总算力(所有参与挖矿的矿机算力总和)的比率,代表着他在挖矿竞争中能获胜的概率。PC的算力为GHash/s级别,而目前比特币全网总算力已达到200EHash/s(每日均在波动),按这个比率,现在PC挖矿的成功概率为百亿分之一。 算力按照应用领域,可以分成两大类: + 通用算力:计算量小;常规应用,只消耗少量算力。 + HPC(高性能计算,High-performance computing)算力:计算量大;一个任务,要调用巨多计算资源。HPC是一个计算机集群系统,它通过各种互联技术将多个计算机系统连接在一起,利用所有被连接系统的综合计算能力来处理大型计算问题,所以又通常被称为高性能计算集群。 HPC和通用算力 其中,HPC算力按照应用领域又可以细分为三类: + 科学计算类:物理化学、气象环保、生命科学、石油勘探、天文探测等。 + 工程计算类:计算机辅助工程、计算机辅助制造、电子设计自动化、电磁仿真等。 + 智能计算类:即人工智能(AI,Artificial Intelligence)计算,包括:机器学习、深度学习、数据分析等。 由于人类将步入智能世界,人工智能算力需求大量增加,并且人工智能也会参与到科学计算和工程计算中。所以,一般情况下,我们也可以简单地将算力分为:通用算力和人工智能算力两类。 ### 智能世界三要素 在智能世界中,智能是知识和智力的总和,智能翻译到数字世界就是“数据+算力+算法”。 ![智能世界三要素](https://download.huawei.com/mdl/image/download?uuid=0016cb217ed74753a0ae75d816ba3060) ### 负载 在计算机科学与电信领域,负载(英语:Payload)是数据传输中所欲传输的实际信息,通常也被称作实际数据或者数据体。信头与元数据,或称为开销数据,仅用于辅助数据传输。 在计算机病毒或电脑蠕虫领域中,负载指的是进行有害操作的部分,例如:数据销毁、发送垃圾邮件等。 在计算机安全领域,负载是私人用户文本的一部分,同样可以包括如进行有害操作(删除数据、发送垃圾邮件或加密数据进行勒索等等)的电脑蠕虫和计算机病毒在内的恶意软件。[3]除了负载以外,此种恶意软件基本上也存在进行扩散或规避检测的开销代码。 在程序设计中,负载最常于信息协议环境中提及并用于从实际数据中区分出协议的开销。 计算机网络中,传输的数据为负载,但负载几乎总是被封装为由组帧位与帧校验序列构成的一种帧。[4][5]例如:以太网帧格式、点对点协议(PPP)帧、光纤通道帧与调制解调器链接访问流程。 负载均衡就是一种计算机网络技术,用来在多个计算机(计算机集群)、网络连接、CPU、磁碟驱动器或其他资源中分配负载,以达到最佳化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。那么,这种计算机技术的实现方式有多种。大致可以分为以下几种,其中最常用的是四层和七层负载均衡。 + 四层负载均衡四层负载均衡工作在OSI模型的传输层,由于在传输层,只有TCP/UDP协议,这两种协议中除了包含源IP、目标IP以外,还包含源端口号及目的端口号。四层负载均衡服务器在接受到客户端请求后,以后通过修改数据包的地址信息(IP+端口号)将流量转发到应用服务器。 + 七层负载均衡七层负载均衡工作在OSI模型的应用层,应用层协议较多,常用http、radius、dns等。七层负载就可以基于这些协议来负载。这些应用层协议中会包含很多有意义的内容。比如同一个Web服务器的负载均衡,除了根据IP加端口进行负载外,还可根据七层的URL、浏览器类别、语言来决定是否要进行负载均衡。 [搞懂“负载均衡”,一篇就够了 - 知乎 (zhihu.com)](https://zhuanlan.zhihu.com/p/366204416) ### 耦合、解耦 耦合——关联性,指两个或两个以上的体系或两种运动形式间通过相互作用而彼此影响以至联合起来的现象 在软件工程中,对象之间的耦合度就是对象之间的依赖性。对象之间的耦合越高,维护成本越高,因此对象的设计应使类和构件之间的耦合最小。 分类:有软硬件之间的耦合,还有软件各模块之间的耦合。耦合性是程序结构中各个模块之间相互关联的度量。它取决于各个模块之间的接口的复杂程度、调用模块的方式以及哪些信息通过接口。 解耦,字面意思就是解除耦合关系。 在软件工程中,降低耦合度即可以理解为解耦,模块间有依赖关系必然存在耦合,理论上的绝对零耦合是做不到的,但可以通过一些现有的方法将耦合度降至最低。 设计的核心思想:尽可能减少代码耦合,如果发现代码耦合,就要采取解耦技术。让数据模型,业务逻辑和视图显示三层之间彼此降低耦合,把关联依赖降到最低,而不至于牵一发而动全身。原则就是A功能的代码不要写在B的功能代码中,如果两者之间需要交互,可以通过接口,通过消息,甚至可以引入框架,但总之就是不要直接交叉写。 观察者模式:观察者模式存在的意义就是「解耦」,它使观察者和被观察者的逻辑不再搅在一起,而是彼此独立、互不依赖。比如网易新闻的夜间模式,当用户切换成夜间模式之后,被观察者会通知所有的观察者「设置改变了,大家快蒙上遮罩吧」。QQ消息推送来了之后,既要在通知栏上弹个推送,又要在桌面上标个小红点,也是观察者与被观察者的巧妙配合。 [什么是耦合和解耦 - 北极星! - 博客园 (cnblogs.com)](https://www.cnblogs.com/zhjblogs/p/14221560.html) 不同模块之间的关系就是耦合,根据耦合程度可以分为7种,耦合度依次变低。 - 内容耦合 - 公共耦合 - 外部耦合 - 控制耦合 - 标记耦合 - 数据耦合 - 非直接耦合