软件架构-分布式系统,集群
再也不是我们熟悉的单体时代了!!!,单体时代,我很怀恋-_-
我们亲眼见证了很多组件都从单机走向了集群,比如Redis,rabbitmq,kafka, elasticsearch, Mysql等。趋势就是技术会演变地越来越复杂,相应地提供的服务越来越好。
和单体服务相对应的就是集群,或者分布式系统。在一些文档中,经常出现distributed system, cluster,两个词意思上大差不差,但使用多了,就有一些语义山的区分。
集群是一种物理形态,把服务放在一起提供服务,不管里面具体怎么实现。分布式是一种设计架构。通常来说,集群是多个节点做同一件事,比如tomcat集群,分布式是过个节点做不同的事。类似于水平扩展和垂直扩展。
集群和分布式都有很多概念和理论。最基本的就是高可用(A),一致性(C),分区容错(P),合称CAP理论。
何为分布式?各个节点通过网络通信,对外提供服务。在分布式系统中,网络和节点是核心概念。并且它们都是有可能出现故障的,那我们如何让系统提供尽可能好的服务呢?这里的"好"是可以细分为不同的指标,不同用户需求一样。这就引出了CAP理论。
其中,CA很好理解,P如何理解呢?Patition Tolerance,意思就是当网络(节点)出现故障时,节点(子网络)无法通信时,出现分区,系统还能继续提供服务。这基本要求我们在设计系统时,不能因为节点间无法通信,整个系统就不提供服务,通俗来说就是鸡蛋不能装在一个篮子中,也即不能一损俱损,从这点看,P很重要,绝大多数分布式系统都要满足,也即数据要有副本。可以说P是分布式设计的基本出发点,其他两个则是衍生的问题。
总的来说就是,数据存在的节点越多,分区容忍性越高,但要复制更新的数据就越多,一致性就越难保证。为了保证一致性,更新所有节点数据所需要的时间就越长,可用性就会降低。这就是redis,rabbitmq,kafka虽然都推荐使用集群,但是我们仍然可以使用单机版, 单机版就是集群的退化,其满足CP,不满足A。当服务不挂掉,我们希望提供的服务能尽可能的好,这时就需要在A和C中选择了,其实就是可用和可靠的问题。
在设计分布式系统时,我们一个基本原则就是数据要有副本,并存储在不同的节点上,保证P。那么剩下就是A和C了。
由CAP又可以引申出BASE理论,这里不细究了。
软件架构,听的最多的是微服务架构,还有什么pass,saas,iaas等
参考博客:软件架构概述
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
2019-12-22 c++版本进化
2019-12-22 c++数据库操作
2019-12-22 c++常用库学习