分布式系统核心围绕CAP原则展开,该定理指出在分布式环境中,一致性(C)、可用性(A)和分区容错性(P)三者不可兼得,最多只能同时满足两个。其中一致性要求所有节点数据实时同步,可用性强调服务持续可访问,分区容错性保障系统在网络故障时仍能对外提供服务。实际架构中常根据业务需求在三者间权衡取舍。 高并发设计需兼顾高性能、高可用与高可扩展三大宏观目标。性能优化关注平均响应时间与TP99等分位指标,通过集群部署、多级缓存、分库分表、异步化、限流削峰等手段提升吞吐并降低延迟;可用性保障依赖冗余部署、故障转移、超时重试、降级熔断及全链路监控;可扩展性则通过分层架构、服务无状态化、存储拆分等实现灵活扩容,避免单点瓶颈。 分布式存储实现形式多样:HDFS采用中心控制节点(NameNode)管理元数据、DataNode存储数据的架构,适合高吞吐场景;Ceph和Swift采用无中心设计,前者通过计算映射定位数据,后者基于一致性哈希算法实现数据分布与负载均衡,均具备良好的横向扩展能力。 分布式事务旨在跨服务/数据库保证数据一致性,常见方案包括两阶段提交(2PC/XA)——虽实现简单但存在单点与阻塞问题;TCC模式通过Try-Confirm-Cancel三阶段实现柔性事务,支持补偿机制,适用于高并发业务

分布式系统旨在保证最终一致性,面临的关键挑战在于处理分布式事务。传统方案如两阶段提交(2PC)和三阶段提交(3PC)通过协调者与参与者之间的交互来实现,但存在阻塞、单点故障和脑裂等问题,可用性受限。阿里巴巴提出的TCC协议尝试通过Try-Confirm-Cancel模式优化事务处理,具备一定自我修复能力,但极端情况下仍可能出现不一致。 实际应用中,由于2PC和3PC的复杂性和性能问题,TCC也并非完美,最终一致性往往通过更轻量级的模式实现。例如,查询模式用于追踪操作状态;补偿模式通过逆向操作修正错误;异步确保模式利用消息队列实现异步处理;定期校对模式通过批量校对发现并修复不一致;可靠消息模式确保消息传递的可靠性;缓存一致性模式则牺牲强一致性以提升性能。 对于分布式系统的单点问题,无状态服务易于水平扩展,而有状态服务则需考虑去状态化或采用主备方案,并通过引入第三方服务(如ZooKeeper)或选举算法来保证高可用性。HTTP和RPC的区别主要体现在传输协议、效率、性能、负载均衡和服务治理等方面。RPC更适合内部服务调用,HTTP则更通用。

TCP是一种面向连接的可靠传输协议,其四次挥手过程用于优雅地断开连接,确保双方都已完成数据传输。第一次挥手客户端发送FIN报文,告知服务器不再发送数据;服务器回复ACK确认,并进入关闭等待状态,可能继续发送数据。随后,服务器发送FIN报文,客户端再次确认。最后,客户端进入TIME-WAIT状态,经过2MSL后完全关闭连接,服务器则提前进入CLOSED状态。 四次挥手的原因在于TCP是全双工的,双方都需要确认没有数据需要发送,才能安全关闭连接。最后一次ACK至关重要,防止延迟报文段导致连接状态混乱。 TCP还会出现粘包和拆包问题,这是由于其流式传输特性,数据包边界不明确造成的。可以通过设置包头、包长或结束标识符来解决。 TCP与UDP的区别在于,TCP提供可靠、有序的连接,有拥塞控制和流量控制,适用于对数据完整性要求高的场景;而UDP则更快、更简单,但不可靠,适用于实时性要求高的场景。可以通过应用层实现可靠的UDP,例如通过超时重传和确认序列号。TCP报文首部中的序号字段占用4个字节,用于标识数据字节的顺序。TCP缓存用于临时存储待发送或接收的数据,提高传输效率。

TCP异常终止(reset报文)发生在无法正常四次挥手释放连接时,通过发送RST报文强制断开连接,释放资源。常见情形包括连接目标端口未监听、程序崩溃、接收到未知TCP报文、或长时间无确认。 UDP可靠传输可通过应用层实现确认、重传和窗口机制,或使用RUDP、RTP、UDT等已实现的可靠UDP协议。 报文乱序是由于IP路由不同导致的,TCP会先假设乱序并记录时间戳,判断是否丢包,避免不必要的重传。 IP地址分为A、B、C三类,以及D类(多播)和E类(保留)。分类是为了优化路由表大小和转发速度,避免路由器维护全网地址。 IPv4和IPv6的区别在于地址长度(32位vs 128位)、表示方法、包大小和安全性。IPv6内置IPSec支持,提供更强的安全性。 HTTPS通过SSL/TLS加密HTTP通信,确保数据安全。它采用混合加密机制,先用非对称加密协商对称密钥,再用对称加密进行数据传输,兼顾安全性和效率。常见的加密算法包括对称加密(AES、DES)、非对称加密(RSA、ECC)和Hash算法(MD5、SHA)。

文章介绍了HTTPS的工作原理,说明服务器公钥/私钥与客户端随机对称密钥的两次握手过程;列举了HTTP 4xx、5xx错误码及其含义;概述了状态码的五大分类及常见代码的意义;比较了301与302、302与304的区别;描述了一次完整的HTTP请求及其背后的DNS解析流程;并阐明了服务器端请求转发与浏览器重定向在请求次数、地址栏变化、数据共享和实现方式上的差异。