概述
单体应用 复杂性高,当一个项目达到百万级别,整个项目包含的模块非常多、模块的边界模糊、依赖关系不清晰、代码质量参差不齐、混乱地堆砌在一起。整个项目非常复杂。每次修改代码都心惊胆战,甚至添加一个简单的功能,或者修改一个bug都会带来隐含的缺陷。
当代企业级应用特点:
设备激增,用户增多
功能更多,更新频繁,业务复杂度几何级增长
数据量趋于海量
系统稳定性要求更高,可用性要求极高
单体应用:
- 代码间关系复杂,难以理解和维护
- 项目体积变大,开发、测试、部署的过程都无比困难
- 无法使用新框架
- 可靠性下降
解决方案: 拆
一个单体应用拆分成多个服务,每个服务有自己独立的数据库
单个服务的复杂度降低
服务与服务之间需要通信,协调
单体 -> 分布式系统(微服务架构)
在分布式系统中,我们为了打破单块系统中集中式的系统架构,引入系统拆分的思想和实践。拆分的需求来自组织结构变化、交付速度、业务需求以及技术需求所引起的变化,一般认为系统拆分的基本思路有两种,即纵向(Vertical)拆分和横向(Horizontal)拆分。
CAP是一致性(Consistency)、可用性(Availability)、分区容忍性(Partition tolerance)的缩写。
一致性:可以参考数据库的一致性。每次信息的读取都需要反映最新更新后的数据。
可用性:高可用性意味着每一次请求都可以成功完成并受到响应数据
分区宽容度:这个是容错机制的要求。一个服务需要在局部出错的情况下,没有出错的那部分被复制的数据分区仍然可以支持部分服务的操作,可以简单的理解为可以很容易的在线增减机器以达到更高的扩展性,即所谓的横向扩展能力。
CAP原则的要义在于在分配计算量的过程中,当面对数据的一致性,可用性和分区宽容度时你只能选择三者中的两者。
一、什么是 Base 理论
BASE:全称:Basically Available(基本可用),Soft state(软状态),和 Eventually consistent(最终一致性)三个短语的缩写,来自 ebay 的架构师提出。
Base 理论是对 CAP 中一致性和可用性权衡的结果,其来源于对大型互联网分布式实践的总结,是基于 CAP 定理逐步演化而来的。其核心思想是:既是无法做到强一致性(Strong consistency),但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性(Eventual consistency)。
二、Basically Available(基本可用)
什么是基本可用呢?假设系统,出现了不可预知的故障,但还是能用,相比较正常的系统而言:
(1)响应时间上的损失:正常情况下的搜索引擎 0.5 秒即返回给用户结果,而基本可用的搜索引擎可以在 1 秒作用返回结果。
(2)功能上的损失:在一个电商网站上,正常情况下,用户可以顺利完成每一笔订单,但是到了大促期间,为了保护购物系统的稳定性,部分消费者可能会被引导到一个降级页面。
三、 Soft state(软状态)
什么是软状态呢?相对于原子性而言,要求多个节点的数据副本都是一致的,这是一种 “硬状态”。
软状态指的是:允许系统中的数据存在中间状态,并认为该状态不影响系统的整体可用性,即允许系统在多个不同节点的数据副本存在数据延时。
四、Eventually consistent(最终一致性)
上面说软状态,然后不可能一直是软状态,必须有个时间期限。在期限过后,应当保证所有副本保持数据一致性。从而达到数据的最终一致性。这个时间期限取决于网络延时,系统负载,数据复制方案设计等等因素。
稍微官方一点的说法就是:
系统能够保证在没有其他新的更新操作的情况下,数据最终一定能够达到一致的状态,因此所有客户端对系统的数据访问最终都能够获取到最新的值。
spring-cloud
我所理解的 Spring Cloud
就是微服务系统架构的一站式解决方案,在平时我们构建微服务的过程中需要做如 服务发现注册 、配置中心 、消息总线 、负载均衡 、断路器 、数据监控 等操作,而 Spring Cloud 为我们提供了一套简易的编程模型,使我们能在 Spring Boot 的基础上轻松地实现微服务项目的构建。
总的来说,Eureka
就是一个服务发现框架。何为服务,何又为发现呢?
举一个生活中的例子,就比如我们平时租房子找中介的事情。
在没有中介的时候我们需要一个一个去寻找是否有房屋要出租的房东,这显然会非常的费力,一你找凭一个人的能力是找不到很多房源供你选择,再者你也懒得这么找下去(找了这么久,没有合适的只能将就)。这里的我们就相当于微服务中的 Consumer
,而那些房东就相当于微服务中的 Provider
。消费者 Consumer
需要调用提供者 Provider
提供的一些服务,就像我们现在需要租他们的房子一样。
最后
以上就是温婉纸飞机为你收集整理的为什么采用分布式系统spring-cloud的全部内容,希望文章能够帮你解决为什么采用分布式系统spring-cloud所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复