- 世界级软件架构大师 Martin Fowler
分布式系统就是一组部署在同一个网络下的多个通过网络来通信和协调的组件,对外部而言表现的如同一个系统
单体应用:
引入了网络
解决方案: 拆
一个单体应用拆分成多个服务,每个服务有自己独立的数据库
单个服务的复杂度降低
服务与服务之间需要通信,协调
单体 -> 分布式系统(微服务架构)
微服务架构风格这种开发方法,是以开发一组小型服务的方式来开发一个独立的应用系统。其中每个小型服务都运行在自己的进程中,并经常采用HTTP资源API这样轻量的机制来相互通信。这些服务围绕业务功能进行构建,并能通过全自动的部署机制来进行独立部署。这些微服务可以使用不同的语言来编写,并且可以使用不同的数据存储技术。对这些微服务,我们仅做最低限度的集中管理。
分布式系统有多种层面的理解,比如,
结论:
- 微服务架构 是 分布式系统,分布式系统不一定是微服务架构
- 应用系统当中,这两种的集群模式都有出现
CPA原理
1998年,加州大学的计算机科学家 Eric Brewer 提出,分布式系统有三个指标,CAP,而这三个指标无法同时满足,这个结论称为CAP定理
Consistency 一致性
Availability 可用性
Partition tolerance 分区容错性
C 一致性一致性是指,在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于访问任一节点得到的都是最新的数据副本)
下例是一个分布式存储系统,当某个节点更新时的情况,更新前后符合一致性的
A 可用性可用性是指,在集群中一部分节点故障后,集群整体是否还能正常响应客户端的读写请求。(对数据更新具备高可用性)
下例仍然是分布式存储系统,如果某个节点出现故障,集群整体仍然是可用的,满足可用性
当代企业级应用特点:
设备激增,用户增多
功能更多,更新频繁,业务复杂度几何级增长
数据量趋于海量
系统稳定性要求更高,可用性要求极高
微服务架构:
微服务架构风格这种开发方法,是以开发一组小型服务的方式来开发一个独立的应用系统。其中每个小型服务都运行在自己的进程中,并经常采用HTTP资源API这样轻量的机制来相互通信。这些服务围绕业务功能进行构建,并能通过全自动的部署机制来进行独立部署。这些微服务可以使用不同的语言来编写,并且可以使用不同的数据存储技术。对这些微服务,我们仅做最低限度的集中管理。
base原理Basically Available(基本可用),Soft state(软状态),和 Eventually consistent(最终一致性)
在分布式系统设计中引入柔性因素,降低设计和实现的难度,但又不影响基本使用
设计上的妥协和折中
Basically Available(基本可用)算作完全可用和完全不可用中的一种折中,互联网上的应用,如果是完全不可用的,那这个系统就没存在必要了;而在互联网上,用户量等有时候难以预见,就造成了用户超出系统设计的标准,想一直保持完全可用就很难,所以折中下,我们可以通过延迟响应,流量削峰等手段来保障系统的核心功能的正常,从而实现基本可用。
Eventually consistent(最终一致性)我们希望获取的数据就是正确的,这像一句废话,如果获取到的数据是不确定正确与否,那我们拿这些错误的数据干嘛。但是由于这样那样的问题,我们不能随时都保障数据的一致,所以我们有了数据的中间状态,即软状态,经过一定时间后,数据最终回归于最终一致,这些短暂的数据不一致性,对用户的影响很小,比如你更新一条微博动态,可能有的地方用户可以看到你这条微博消息,另外的用户看不到这条微博消息,这个影响不大,只要最终所有用户都可以看到你这条微博消息就可以了。
最终一致性的系统不承诺写入数据成功后,立刻就从系统中读出最新的数据,也不承诺具体多久之后可以读到最新的数据,而是尽可能保障特定时间级别之后的数据可用,这取决于很多因素,比如网络快慢,比如副本的多少等。如果我们设置过DNS域名就知道,DNS域名我们配置A记录后,域名和IP的关系不是立刻生效的,过多久也不好说,这就是个最新一致性的系统。
Soft state(软状态)软状态故名思意就是可以变动的状态,强调的是数据状态处于一种临界状态。相对于软状态,就是硬状态,就是数据的状态是确定的。对于满足ACID的数据状态是硬状态。最终一致性的系统中,数据的读出来的不一定是最新的,我理解就是一种软状态即一种短暂的临时状态。
Spring-Cloud微服务架构工具集,提供了搭建微服务架构所需用的各种工具,借由这些工具,开发人员可以快速的搭建一个微服务架构。
Spring Cloud 为开发者提供了工具来快速构建分布式系统中的一些常见模式(例如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话,集群状态)。分布式系统协调存在一些通用模式,使用 Spring Cloud 开发人员可以快速建立实现这些模式的服务和应用程序。它们在任何分布式环境中都能很好地工作,包括开发人员自己的笔记本电脑、裸机数据中心以及 Cloud Foundry 等托管平台。
Spring Cloud称为 伞形项目,由多个子项目组成,留意三个子项目
>>>同一个问题,可以有不同的解决方案,使用不同的组件来解决相同的问题
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)