一文介绍分布式系统挑战

📅 2026/6/16 18:18:05
一文介绍分布式系统挑战
![image](https://i-blog.csdnimg.cn/direct/90c1c910872c4697bd217ba4db298482.png)学习编程时我们常通过HelloWorld程序体会简单代码的成功执行但这一课掩盖了分布式系统中的可观测性问题和分布式调用挑战。在分布式系统中方法调用可能因网络故障、服务节点问题或安全威胁而失败或延迟影响系统的高可用和高性能。程序员需建立对系统可观测性的新认知企业需构建可观测性系统。分布式调用带来的问题包括网络不可靠、服务节点故障、时序不保证等解决办法包括服务超时检测、降级、重试机制等。这些问题会显著影响系统质量需通过战术方法解决。可观测性技术需适应分布式环境如链路跟踪、操作系统和JVM指标监控。随着系统规模扩大这些分布式问题会愈发突出影响业务系统稳定运行当我们还是小白学习编程第一课时候总是会遇到一个叫Hello World的程序无论使用何种语言实现它容易编写容易编译和且执行必定成功,让我们生心愉快对未来工作充满信心。如下Java代码方法main调用方法b的时候我们毫不怀疑肯定能调用到方法b且只会调用一次。方法b也肯定会返回一个调用结果.public static void main(String\[\] paras){ b(1) } protected static boolean b(int data){ System.out.println(hello data) return true } 编程的第一课虽然简单但掩盖了走入职业生涯遇后到分布式系统带来的容易被忽略的俩个问题 - 可观测性问题b方法输出字符串到控制台我们能容易得看到。但实际分布式系统运行的可观测非常复杂不仅仅是期望从控制台得到一个“Hello World日志”。程序员需要建立对系统可观测性新认知企业需要建立一套可观测性系统对分布式系统进行观测个人和企业都不应该期望仅仅查看控制台观日志能观测整个系统关于“Hello World和可观测性”将在下一节介绍 - 分布式问题b方法如果是改成分布式调用会带来各种问题影响系统的高可用高性能等质量属性。如下代码把调用b方法改成分布式调用这里假设Remote类是一个调用远程代理类可能是一个EJB 客户端Dubbo客户端或者Feigh客户端。AutowiredRemote remotepublicstaticvoidmain(String[] paras){ remote.b(1) }在分布式场景下main方法调用remote.b会出现各种结果 - remote.b()成功返回返回结果这是最理想结果。 - remote.b()网络故障调用立刻失败 - remote.b()网络正常远程服务B不存在调用立刻失败 - remote.b()网络拥塞调用超时导致main方法阻塞 - remote.b()hello world成功输出到控制条并返回结果但这是调用超过设定时限main方法不知道是否调用成功 - remote.b()黑客截获调用参数修改参数重调用或者模拟一个返回结果。 - main方法所在主机自身问题如垃圾回收导致CPU繁忙导致b方法调用看起来超时的幻觉 - remote 所在主机自身问题如海量访问导致CPU繁忙导致b方法调用来超时 - remote 系统正在重启由于JVM预热初始化访问性能较慢main尝试调用超时导致不断无谓的重试。 虚假的分布式是“像单体应用那样纳秒级响应且毫无错误执行并有确定返回的的调用”。真实的分布式调用不会出现这种理想情况。下图的一个简单的分布式调用模型会给我们带来哪些问题以及它是如何影响系统质量的 标签#使用技巧 #python ![image](https://i-blog.csdnimg.cn/direct/fa0036ad811d46fdb105d4a964b616cc.png)