1 架构演变
单体应用架构—->垂直应用架构—->分布式架构—->SOA架构—->微服务架构
微服务架构是通过应用领域模型等理论,将庞大的单体应用拆分为更细粒度的小型服务,每个服务都可以独立部署、测试和发布,满足了快速迭代和高可用保障的要求。
2 服务组件
3 服务治理和配置-Nacos
什么是服务治理
服务治理是微服务架构中最核心最基本的模块。用于实现各个微服务的自动化注册与发现。
常见的注册中心
概念 | 描述 |
---|---|
服务 | 可以配置元数据和服务保护阈值等信息 |
集群 | 可以配置元数据 |
实例 | 编辑实例的元数据信息、修改它的状态或者配置路由权重 |
(2)数据模型
通过 Namespace + Group + Service/DataID,我们就可以精准定位到一个具体的微服务。
概念 | 描述 |
---|---|
Namespace | 用来区分环境 |
Group | 用来区分项目 |
Service/DataID | 用来区分具体的服务 |
(3)基本架构
Naming Service,用来做服务发现的模块;
Config Service,用来提供配置项管理、动态更新配置和元数据的功能
Nacos Core 模块,提供一系列的平台基础功能
Nacos使用
docker pull nacos/nacos-server
docker run -p 9901:8848
--env MODE=cluster
--env MYSQL_SERVICE_DB_NAME=nacos
--env MYSQL_SERVICE_HOST=192.168.223.128
--env MYSQL_SERVICE_PASSWORD=root
--env MYSQL_SERVICE_PORT=3306
--env MYSQL_SERVICE_USER=root
--env NACOS_SERVERS="192.168.223.128:9902 192.168.223.128:9903"
--env PREFER_HOST_MODE=ip
--env SPRING_DATASOURCE_PLATFORM=mysql
--name nacos01
--restart always
<!-- 服务发现 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 配置管理Nacos Config -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
Nacos底层实现
(1)服务发现
Nacos Client 通过一种主动轮询的机制从 Nacos Server 获取服务注册信息,包括地址列表、group 分组、cluster 名称等一系列数据。即客户端定时主动从服务端拉取的模式。负责拉取服务的任务是 UpdateTask 类。
2 负载均衡
(1)负载均衡简单分类
- 集中式
即在服务的提供方和消费方之间使用独立的LB设施,如Nginx,由该设施负责把访问请求通过某种策略转发至服务的提供方! - 进程式
将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选出一个合适的服务器。Ribbon 就属于进程内LB,它只是一个类库,集成于消费方进程,消费方通过它来获取到服务提供方的地址!3 服务调用
4 服务配置
5 服务容错
Sentinel
docker pull bladex/sentinel-dashboard
docker run
-p 8858:8858
--name sentinel
--restart=always
-d bladex/sentinel-dashboard:latest
6 链路追踪
7服务网关
8 消息驱动
9 分布式事务
微服务架构是一种架构模式,或者说是一种架构风格,它体长将单一的应用程序划分成一组小的服务,每个服务运行在其独立的自己的进程内,服务之间互相协调,互相配置,为用户提供最终价值,服务之间采用轻量级的通信机制(HTTP)互相沟通。
3 微服务理论
1 CAP是什么?
- C (Consistency) 强一致性
- A (Availability) 可用性
- P (Partition tolerance) 分区容错性
一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求 - CA:单点集群,满足一致性,可用性的系统,通常可扩展性较差
- CP:满足一致性,分区容错的系统,通常性能不是特别高
- AP:满足可用性,分区容错的系统,通常可能对一致性要求低一些
Zookeeper保证的是CP,如果客户端心跳消失的时候,zookeeper会很快剔除该服务,之后就无法提供需求
Eureka保证的是AP,当Eureka客户端心跳消失的时候,那Eureka服务端就会启动自我保护机制,不会剔除该EurekaClient客户端的服务,依然可以提供需求