1、微服务架构
概念: 微服务是一种架构风格,一个大型的复杂软件应用,由一个或者多个微服务组成,系统中的各个微服务可以被独立部署,各个微服务之间是松耦合的,每个微服务仅仅关注于完成一件任务并很好的完成该任务。将一个复杂的软件系统,进行了惨无人道的拆分,但是通过拆分之后,这个复杂的应用系统变的更加的高效。
2.微服务特点
(1)系统是有多个服务构成
(2)每个服务可以单独独立部署
(3)每个服务之间是松耦合的。服务内部是高内聚的,外部是低耦合的,也是比较符合软件设计原则的,高内聚就是每个服务内部的关系是非常密切的,每个服务之间只关注完成一个功能。
微服务的优点、缺点
优点:
测试容易
可伸缩性强
可靠性强
跨语言程度会更加灵活
团队协作容易
系统迭代容易
缺点:
运维成本过高,部署数量较多
接口兼容多版本
分布式系统的复杂性
分布式事务
什么是分布式系统?
简单的来说,一个分布式系统是一组计算机系统一起工作,在终端用户看来,就像一台计算机在工作一样。
这组一起工作的计算机,拥有共享的状态,他们同时运行,独立机器的故障不会影响整个系统的正常运行。
一致性Consistency: 依次读写的是什么就是什么。
可用性Availability: 整个系统不会崩溃, 每个非故障节点总会有一个响应。
分区容错性Partition tolerant: 尽管有分区,系统仍能继续运行并保持其一致性和可用性。
BASE原理
基本可用(Basically Available): 基本可用是指分布式系统在出现故障的时候,允许损失部分可用性,即保证核心可用。电商大促时,为了应对访问量激增,部分用户可能会被引导到降级页面,服务层也可能只提供降级服务。这就是损失部分可用性的体现。
软状态(Soft State): 软状态是指允许系统存在中间状态,而该中间状态不会影响系统整体可用性。分布式存储中一般一份数据至少会有三个副本,允许不同节点间副本同步的延时就是软状态的体现。MySQL Replication 的异步复制也是一种体现。
最终一致性(Eventual Consistency): 最终一致性是指系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况。
ACID 和 BASE 的区别与联系:
ACID 是传统数据库常用的设计理念,追求强一致性模型。BASE 支持的是大型分布式系统,提出通过牺牲强一致性获得高可用性。
ACID 和 BASE 代表了两种截然相反的设计哲学,在分布式系统设计的场景中,系统组件对一致性要求是不同的,因此 ACID 和 BASE 又会结合使用。
Spring-Cloud
概念:Spring Cloud为开发人员构建微服务架构提供了完整的解决方案,SpringCloud是若干个框架的集合,它包括spring-cloud-config、spring-cloud-bus等近20个子项目,它提供了服务治理、服务网关、智能路由、负载均衡、断路器、监控跟踪、分布式消息队列、配置管理等领域的解决方案。
为什么选择Spring Cloud?
SpringCloud不只是解决微服务的某一个问题,而是一个解决微服务架构实施的综合性解决框架;
整合了诸多被广泛实践和证明过的框架作为实施的基础部件,又在该体系基础上创建了一些非常优秀的边缘组件;
大量的兼容性测试,保证了更好的稳定性;
极高的社区活跃度。
Spring Cloud称为 伞形项目,由多个子项目组成,留意三个子项目
- spring-cloud-netflix spring-cloud第一个子项目,应用广泛
- 服务发现:spring-cloud-netflix-eureka
- 负载均衡:ribbon
- 服务容错:hystrix
- 配置管理:archius
- 服务调用:feign
- 服务网关: zuul
- spring-cloud-alibaba 阿里巴巴出品,国产,中文,符合中国国情,在国内采用比较多
- 服务发现:spring-cloud-alibaba-nacos
- 服务容错:sentinel
- 配置管理:nacos
- 服务调用:dubbo
- 分布式事务:seata
- 消息队列:rocketmq
- spring-cloud官方组件
- 服务网关:spring-cloud-gateway
- 服务调用:openfeign