CAP理论
CAP三要素:
一致性(Consistency): 所有节点在同一时间具有相同的数据
可用性(Availability) :保证每个请求不管成功或者失败都有响应
分区容错性(Partition tolerance) :系统中任意信息的丢失或失败不会影响系统的继续运作
CAP 原则:三个要素最多只能同时实现两点
1)满足CA舍弃P,也就是满足一致性和可用性,舍弃容错性。但是这也就意味着你的系统不是分布式的了,因为涉及分布式的想法就是把功能分开,部署到不同的机器上。
2)满足CP舍弃A,也就是满足一致性和容错性,舍弃可用性。如果你的系统允许有段时间的访问失效等问题,这个是可以满足的。就好比多个人并发买票,后台网络出现故障,你买的时候系统就崩溃了。
3)满足AP舍弃C,也就是满足可用性和容错性,舍弃一致性。这也就是意味着你的系统在并发访问的时候可能会出现数据不一致的情况。
结论:实时证明,大多数都是牺牲了一致性。像12306还有淘宝网,就好比是你买火车票,本来你看到的是还有一张票,其实在这个时刻已经被买走了,你填好了信息准备买的时候发现系统提示你没票了。
总结:分区容错性P必然存在,所以将从CA中选择一个,彼此互斥的。
常见的注册中心
微服务:注册中心ZooKeeper、Eureka、Consul 、Nacos对比_琦彦的博客-CSDN博客_consul nacos
Nacos |
Eureka |
Consul |
CoreDNS |
Zookeeper |
||
一致性协议 |
CP+AP |
AP |
CP |
— |
CP |
|
健康检查 |
TCP/HTTP/MYSQL/Client Beat |
Client Beat |
TCP/HTTP/gRPC/Cmd |
— |
Keep Alive |
|
负载均衡策略 |
权重/ |
|||||
metadata/Selector |
Ribbon |
Fabio |
RoundRobin |
— |
||
雪崩保护 |
有 |
有 |
无 |
无 |
无 |
|
自动注销实例 |
支持 |
支持 |
支持 |
不支持 |
支持 |
|
访问协议 | HTTP/DNS | HTTP | HTTP/DNS | DNS | TCP | TCP |
监听支持 | 支持 | 支持 | 支持 | 不支持 | 支持 | |
多数据中心 | 支持 | 支持 | 支持 | 不支持 | 不支持 | |
跨注册中心同步 | 支持 | 不支持 | 支持 | 不支持 | 不支持 | |
SpringCloud集成 | 支持 | 支持 | 支持 | 不支持 | 支持 | |
Dubbo集成 | 支持 | 不支持 | 支持 | 不支持 | 支持 | |
K8S集成 |
支持 |
不支持 |
支持 |
支持 |
不支持 |
什么是Nacos
- Nacos用于服务的注册发现与服务的配置管理。
- Nacos提供了简单易用的Web Console。可以帮助开发者快速的实现服务发现、服务配置管理、服务元数据等需求。
- 官方文档
- 基本架构及概念
概念 | 描述 |
服务 (Service) | 服务是指一个或一组软件功能 |
服务注册中心 (Service Registry) | 服务注册中心,它是服务,其实例及元数据的数据库。 服务实例在启动时注册到服务注册表,并在关闭时注销。 |
服务元数据 (Service Metadata) |
服务元数据是指包括服务端点(endpoints)、服务标签、服务版本号、服务实例权重、路由规则、安全策略等描述服务的数据 |
服务提供方 (Service Provider) |
提供可复用和可调用服务的应用方 |
服务消费方 (Service Consumer) |
发起对某个服务调用的应用方 |
配置 (Configuration) |
在系统开发过程中通常会将一些需要变更的参数、变量等从代码中分离出来独立管理,以独立的配置文件的形式存在。 |
配置管理 (Configuration Management) |
在数据中心中,系统中所有配置的编辑、存储、分发、变更管理、历史版本管理、变更审计等所有与配置相关的活动统称为配置管理。 |
名字服务 (Naming Service) |
提供分布式系统中所有对象(Object)、实体(Entity)的“名字”到关联的元数据之间的映射管理服务 |
下载
安装
解压
- 解压
要求
- 要求:操作系统的位数(32位/64位),和JDK的位数一致的
- 操作系统:
- JDK的位置:
常见错误:
1)删除data目录重试
- 如果无法正常运行,删除 data目录后,重新运行
2)必须配置JAVA_HOME
- 提示:没有配置JAVA_HOME,且需要JDK的版本为JDK8及其以上。
3) unable to start embedded tomcat
- 不能成功启动tomcat
- 解决方案:更换JDK