2017年一个做SRE的朋友在凌晨三点被报警电话叫醒。他负责的某个核心服务突然开始大量返回502错误。他迷迷糊糊地打开笔记本登录到Nginx服务器上看了一眼日志发现后端有一台应用服务器的响应时间在逐步升高最终超过了Nginx设置的超时阈值。Nginx主动把这台服务器从upstream列表里摘掉了把流量重新分配给剩下三台健康的服务器。整个过程中用户只感觉到了大概30秒的轻微卡顿没有全站崩溃没有数据丢失没有上热搜。事后排查发现那台出问题的服务器是因为有一个批处理任务在凌晨意外启动占满了CPU导致正常的请求处理不过来了。他一边重启那台服务器一边在心里感谢Nginx的负载均衡机制。如果没有那个权重分配和自动摘除的逻辑那台被批处理任务拖死的服务器会像一个黑洞一样把所有的请求都吸进去然后全部超时。整个服务就会全站瘫痪。Nginx是一个反向代理。它站在你的服务器集群前面替所有的后端服务器接收用户请求然后按照你预设的规则把请求转发给最适合处理它的那台机器。它不关心每台机器上跑的是什么代码不关心这台机器的硬件是Intel还是AMD。它只关心你给它配置的那几个调度参数权重、连接数、健康状态。而你的投资组合直到今天可能连一个最简陋的Nginx都没有。加权轮询给每一类资产分配好权重然后放手在Nginx的upstream配置里最基础也最常用的调度算法是加权轮询。你告诉Nginx服务器A权重为6服务器B权重为4。Nginx每收到10个请求就自动把其中6个转发给A4个转发给B。如果服务器C加入了集群权重设为2那么每12个请求里A拿6个B拿4个C拿2个。Nginx在执行这个规则的时候不思考不犹豫不因为A最近几次响应特别快就多分一点也不因为B刚刚超时过一次就惩罚它。规则就是规则。你的资产配置比例——股债6:4或者股债5:5或者你在第三章第二节配置的那套包含了债券和黄金的RAID阵列——就是你给Nginx写的upstream配置文件。股票这台服务器的权重是6债券这台服务器的权重是4。在初始状态下你的资金就是按照这个比例分配到不同的后端服务器上的。问题出在哪里出在你不像Nginx一样无情。市场一波动你这台“人肉负载均衡器”就开始擅自修改权重了。牛市来了股票这台服务器最近响应特别快连续几个月都在返回200 OK你开始觉得债券那台服务器简直是浪费资源每年才给你返回3%的响应而股票那边动不动就是一个涨停。于是你把本来要发给债券的钱偷偷改成了发给股票。你手动把权重从6:4调成了9:1。你心想“等牛市结束了再调回去。”然后牛市结束了。股票这台服务器开始大量超时。你现在想调回权重但债券那边因为长期没有接收到流量已经被你清空了。你的整个集群里只剩下股票这一台服务器还在运行而它正在返回500 Internal Server Error。Nginx从来不会做这种蠢事。不是因为Nginx比你聪明是因为Nginx没有贪婪和恐惧。你给自己的Nginx配置写下weight6和weight4的时候你是理性的。但当市场波动开始刺激你的杏仁核时那个理性的配置工程师被赶下了驾驶座一个被情绪驱动的赌徒接管了方向盘。解决办法只有一个让你冷静时写下的那个权重配置在你情绪上头的时候依然有效。怎么做到在第二章第八节的季度架构委员会上你预设好的资产配置目标比例应该被视为不可在非评审日修改的配置文件。除非经过一个正式的、有记录的、经过冷静思考的架构评审流程否则任何偏离目标权重的行为都被视为违规操作。Nginx在运行过程中不会自己改配置。你的组合也不应该。最小连接数卖高买低的工程学原理加权轮询有一个盲区它只根据预设的权重来分配流量不考虑每一台后端服务器当前的实时负载。如果权重为6的那台服务器正在处理大量慢请求而权重为4的那台服务器几乎空闲继续按照6:4分配流量就会导致前者越来越慢后者资源浪费。Nginx提供了另一种算法来解决这个问题最小连接数。它会实时监测每一台后端服务器的活跃连接数把新的请求优先分配给当前连接数最少的服务器。这个逻辑精准地解释了资产再平衡中最反人性、也最重要的那个操作——卖高买低。当股票这台服务器连续大涨之后它在你的资产组合里占据的实际权重已经超过了预设的6。按照最小连接数的逻辑这台服务器的“活跃连接数”已经太高了它正在处理远超过它应得份额的资金占用。而债券这台服务器因为长期不涨权重已经掉到了3以下它的连接数几乎是零。如果Nginx在管理你的投资组合它会做什么它会毫不犹豫地把新流入的资金分配给债券甚至主动从股票那边撤掉一部分资金重新分配回债券。不是因为它讨厌股票也不是因为它知道股票要跌。它只是在执行一条最基本的负载均衡策略把资源分配给当前占用最少的节点让整个集群的负载重新回到预设的权重分布。而你作为一个人类投资者在市场涨了一段时间之后的本能反应是什么是追涨。你看到股票这台服务器响应得又快又好就想把更多的钱塞给它。你看到债券这台服务器趴在地上一动不动就觉得它占着资源不干活。你正在用和最小连接数完全相反的逻辑在管理你的集群。股债再平衡在操作层面的定义就是强制性地执行最小连接数算法。每个季度在你的架构评审日检查各类资产的实际权重。如果股票涨得太好占比从60%膨胀到了70%你就必须卖掉超出部分的股票用这笔钱去买债券让比例恢复到6:4。这个操作让你在股票贵的时候卖出在债券便宜的时候买入。你不做任何估值判断你只是让你的权重配置回到预设值。它反人性。上涨的东西你舍不得卖下跌的东西你不愿意买。但所有长期业绩优异的资产管理者——从耶鲁大学捐赠基金的大卫·斯文森到桥水的达利奥——核心操作逻辑都是这套机制化的再平衡。他们不是因为能预测市场才做这件事他们是因为知道自己预测不了市场所以才需要一套不依赖预测的调度算法。健康检查把已经永久损坏的资产从upstream里摘掉Nginx有一项至关重要的能力对后端服务器做主动健康检查。它每隔一段时间向每个后端节点发一个探测请求。如果某个节点连续返回几次5xx错误Nginx就会自动把这个节点标记为down停止向它转发任何流量。这个探测不是一次性的在节点被摘除期间Nginx仍会定期发送探测请求一旦发现节点恢复健康就会自动把它重新加入upstream列表。健康检查的存在是为了区分两类完全不同的故障临时性故障和永久性故障。服务器因为瞬时流量尖峰而超时是临时性故障。重启之后恢复健康检查通过流量重新接入。服务器因为硬盘物理损坏而数据丢失是永久性故障。健康检查持续失败节点被永久摘除需要更换硬盘甚至更换整台机器。你的持仓里也有这两类完全不同的亏损。但你在处理它们的时候用的却是同一套逻辑——“放着不管等它回本”。某只股票因为大盘整体回调而下跌了20%但它的基本面没有变化行业逻辑没有走坏只是市场情绪暂时悲观。这是临时性故障。健康检查不应该对它做摘除处理你应该按照自己的配置权重在季度再平衡时甚至可以考虑小幅加仓。某只股票因为竞争对手发布了颠覆性的新产品而下跌了40%并且连续四个季度市场份额在下滑客户大量流失。这不是临时故障。这是硬盘坏了。健康检查应该在这个时候连续报警如果你给自己设的健康检查规则足够灵敏——比如“连续两个季度营收同比下降超过10%”或者“核心客户的续约率跌破80%”——你应该在这只股票上执行的就不是再平衡加仓而是直接摘除。把它的权重从你的组合里清零释放出来的资金重新分配到健康的节点上。大多数散户是怎么做的他们在临时性故障的股票上恐慌卖出在永久性故障的股票上死扛到底。他们做的是和健康检查完全相反的操作。不是因为他们不想做正确的操作而是因为他们没有给自己预设健康检查的规则。等到真正需要判断的时候他们的判断力已经被亏损的情绪淹没了。你需要在你的季度评审流程里给每一只持仓股票设定健康检查标准。这个标准可以很简单——比如营收增速、ROE、分红稳定性或者就是你在买入时写下的核心买入逻辑是否仍然成立。触发任何一个标准就执行摘除。没有触发就继续持有并在再平衡时按权重调整。规则写在纸上执行交给日历。反向代理的延迟缓冲再平衡不是实时操作Nginx作为反向代理还有一个容易被忽略但极其重要的功能它隔断了客户端和后端服务器之间的直接连接。客户端不知道后端有几台服务器不知道每台服务器的IP地址不知道它发出去的请求最终被哪一台机器处理。客户端只管把请求扔给Nginx然后等响应。这个隔离的作用是什么它让后端服务器的任何变化——扩容、缩容、宕机、重启——对客户端完全透明。你不需要在每台后端服务器出问题的时候去通知所有客户端修改他们的配置文件。而在投资世界里没有Nginx这个反向代理层。你是客户端市场是后端服务器集群。你直接连接着每一个市场——A股、港股、美股、债市、金市、楼市。每一个市场的每一次微小波动你都能在手机上实时看到。涨了0.5%你的手机震一下跌了1%你的手机再震一下。你以为这些实时推送是在帮你做更及时的决策实际上它们是在绕过你的理性层直接向你的杏仁核发送高频噪声。再平衡必须是定期操作不能是实时操作。这个“定期”就是你的反向代理延迟缓冲。你把所有高频市场波动的实时数据全部挡在外面不让它们穿透到你的决策层。你只在每个季度的架构评审日打开一次Nginx的转发通道检查后端服务器的权重是否偏离了预设值。如果是执行一次再平衡操作。如果不是关闭通道等下一个季度。这个季度间隔就是你的反向代理缓冲时间。它让你免于被日内的随机波动刺激出无效操作让你免于在市场最恐慌的时刻被迫做出决策让你免于在市场最狂热的时刻被FOMO情绪裹挟入场。季度再平衡的具体操作流程我在第二章第八节已经给了。但这一节要强调的不是操作步骤而是操作频率背后的工程哲学一个健壮的系统不是对外部变化响应最快的系统而是对非关键变化不做响应的系统。再平衡是你在投资这个游戏里唯一需要主动执行的操作。它不需要预测不需要分析不需要在深夜盯着美股期货的走势。它只需要你承认一个事实你没有能力判断哪台后端服务器在未来一段时间会响应得更好。你唯一能做的就是让每一台服务器都保持在你预设的权重附近然后让时间去完成剩下的工作。在下一节我们将面对一个更具体也更沉重的话题——同城双活和灾备切换。你会学到怎么用应急金、保险和储备资源来构建你财富系统的灾备层。在真正的灾难面前再平衡是一道防线但它不是最后一道。最后一道防线是你在废墟里还能重新启动系统的那张底牌。