微服务知识01

1、概念

大型单体应用拆分成多个独立部署运行的微服务(解决并发问题)​​​​​​​

2、特点

3、技术栈

4、微服务带来的问题及解决方案

​​​​​​​

5、微服务的注册中心

  1. 服务注册与发现:微服务实例在启动时会向注册中心注册自己的信息,如网络地址、端口号等。其他微服务可以通过注册中心发现这些信息,从而进行通信。
  2. 健康检查:注册中心会定期检查已注册的服务实例的健康状态,确保只有健康的服务被其他服务发现和调用。
  3. 负载均衡:注册中心可以帮助实现负载均衡,当有多个相同服务的实例时,可以根据负载情况分配请求,提高系统的可用性和性能。
  4. 容错性:注册中心通常具有高可用的特性,即使在部分服务实例或注册中心节点出现故障的情况下,也能保证服务的正常运行。
  5. 配置管理:除了服务发现,一些注册中心还提供配置管理的功能,允许动态地管理和更新服务的配置信息。

6、Feign和Dubbo

Feign是一个声明式的Web服务客户端,它使得编写HTTP客户端变得更简单

Feign集成了Ribbon和Hystrix,可以方便地实现服务发现和负载均衡

Dubbo是一个高性能的RPC框架,它提供了丰富的配置和容错机制,适合大规模分布式系统

​​​​​​​Dubbo通过RPC调用实现远程调用,支持多种传输协议,如Dubbo、RMI、HTTP、Redis等,可以根据业务场景选择最佳的方式,非常灵活。Dubbo在性能上有优势,

它通过TCP长连接的方式进行通信,服务粒度是方法级的,适合数据量小、高并发和服务提供者远远少于消费者的场景。

7、微服务架构(背)

注意:es 数据秒查、MongDB存日志 随便丢,

网关限流,做转发(统一认证、日志处理、统一结果集、全局降级处理),基于WebFlux不能整合mysql

8、组件的学习

(1)Spring Cloud

Spring Cloud Gateway Api网关
Spring Cloud OpenFeign 远程调用
Spring Cloud Security 用户认证、服务认证
Spring Cloud Sleuth(少) 链路追踪
Spring Cloud Stream(少) 做统一的消息管理

(2)Spring Cloud Alibaba

Sentinel 把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性
Nacos 一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。(注册中心、配置中心)(解决服务治理问题)
RocketMQ 一款开源的分布式消息系统(数据),基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。(异步消息 不阻塞)
Seata 阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案

Sentinel注意:Feign和Dubbo属于同步消息,同步消息(需要等待响应), 异步消息(不阻塞,类似发短信)

9、nacos、Feign原理图(记)(心跳检测5秒)

String服务名

10、负载均衡(选择一个ip地址+端口)

(1)客户端的负载均衡(正向)

​​​​​​​LoadBalancer(2.3以上)和Ribbon(2.3及以下)(客户端、正向、发起请求时)

Spring Cloud中的LoadBalancer和Ribbon都是用于实现负载均衡的组件,它们之间存在一些差异。以下是具体分析:

- **Ribbon**:是一个由Netflix开源的客户端负载均衡器,专注于提供中间层服务(如RPC)的客户端负载均衡。它基于HTTP和TCP等协议,通常与Eureka、Consul或Zookeeper等服务注册中心结合使用。Ribbon需要开发者在代码中手动调用目标服务,提供了多种负载均衡策略(如轮询、随机等),并且支持丰富的配置项,例如超时、重试等。
- **LoadBalancer**:是Spring Cloud提供的负载均衡组件,它是Spring Cloud的原生组件,不需要像Ribbon一样需要在代码中进行服务调用,而是通过服务ID获取负载均衡器的RPC地址。LoadBalancer底层原理是默认调用Ribbon的实现,为客户端负载均衡提供了一种更为便捷的方式。

总的来说,Ribbon是一个功能丰富且灵活的负载均衡器,适用于需要高度自定义负载均衡逻辑的场景。而LoadBalancer则是一个更简单易用的选择,适合快速实现服务调用时的负载均衡需求。

(2)服务器端的负载均衡:Nginx(反向代理 加载静态资源)

11、dubbo和feign对比(远程调用)

Dubbo和Feign是两种流行的微服务框架,它们在远程调用方面各有特点和优势。以下是对两者的对比分析:

1. **使用场景**:Feign是一种声明式的HTTP客户端,主要用于简化对RESTful API的调用。而Dubbo是一个分布式服务框架,支持多种通信协议,包括HTTP、TCP等,适用于各种微服务场景。
2. **通信协议**:Feign基于HTTP/HTTPS协议进行服务间通信,适合轻量级的REST风格服务调用。Dubbo支持多种通信协议,如Dubbo协议(默认)、RMI、Hessian、HTTP等,可以根据不同的应用场景选择合适的协议。
3. **性能**:由于Dubbo支持多种通信协议,并且可以通过各种序列化方式来优化性能,因此在一些高性能要求的场景下,Dubbo可能会有更好的表现。Feign作为Netflix开源的一部分,设计上更侧重于简化RESTful API的调用,其性能对于大多数Web服务来说已经足够。
4. **扩展性和维护性**:Feign通过注解的方式定义接口,与Spring Cloud体系结合紧密,易于扩展和维护。Dubbo则需要额外的配置,但提供了丰富的服务治理功能,如服务注册、发现、负载均衡等。
5. **生态系统**:Feign作为Spring Cloud生态的一部分,与其他Spring Cloud组件(如Hystrix、Ribbon)集成非常方便,有助于构建微服务架构。Dubbo虽然也可以与Spring Cloud集成,但需要额外的适配工作。
6. **社区支持**:Dubbo由阿里巴巴维护,社区活跃,文档齐全,国内使用广泛。Feign由Netflix开源,也是Spring Cloud生态的重要组成部分,国际社区支持较好。

总的来说,Feign和Dubbo各有千秋。如果项目是基于Spring Cloud构建的,且主要涉及RESTful风格的服务调用,Feign可能是更好的选择。而如果项目对性能有极高要求,或者需要更复杂的服务治理功能,Dubbo可能更适合。在选择时,应根据项目的具体需求和团队的技术栈来决定使用哪个框架。

12、nacos领域模型(三者一致)(服务注册 服务发现)namespace+group+Service(找到唯一的服务)

​​​​​​​

11、nacos配置流程

(1)拿到nacos-docker-master_1706522287_1.zip包(先安装docker-compose)

(2)已弄好

(1)修改隐藏文件.env的版本为2.2.0(包中,已弄好)

(2)新建一个文件夹 mysql-schema.sql存放nacos的sql(包中,已弄好)

两个位置

/*
 * Copyright 1999-2018 Alibaba Group Holding Ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info   */
/******************************************/
CREATE TABLE `config_info` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) DEFAULT NULL,
  `content` longtext NOT NULL COMMENT 'content',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
  `app_name` varchar(128) DEFAULT NULL,
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  `c_desc` varchar(256) DEFAULT NULL,
  `c_use` varchar(64) DEFAULT NULL,
  `effect` varchar(64) DEFAULT NULL,
  `type` varchar(64) DEFAULT NULL,
  `c_schema` text,
  `encrypted_data_key` text NOT NULL COMMENT '密钥',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_aggr   */
/******************************************/
CREATE TABLE `config_info_aggr` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `datum_id` varchar(255) NOT NULL COMMENT 'datum_id',
  `content` longtext NOT NULL COMMENT '内容',
  `gmt_modified` datetime NOT NULL COMMENT '修改时间',
  `app_name` varchar(128) DEFAULT NULL,
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租户字段';


/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_beta   */
/******************************************/
CREATE TABLE `config_info_beta` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `content` longtext NOT NULL COMMENT 'content',
  `beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
  `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  `encrypted_data_key` text NOT NULL COMMENT '密钥',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_info_tag   */
/******************************************/
CREATE TABLE `config_info_tag` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
  `tag_id` varchar(128) NOT NULL COMMENT 'tag_id',
  `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  `content` longtext NOT NULL COMMENT 'content',
  `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  `src_user` text COMMENT 'source user',
  `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_tag';

/******************************************/
/*   数据库全名 = nacos_config   */
/*   表名称 = config_tags_relation   */
/******************************************/
CREATE TABLE `config_tags_relation` (
  `id` bigint(20) NOT NULL COMMENT 'id',
  `tag_name` varchar(128) NOT NULL COMMENT 'tag_name',
  `tag_type` varchar(64) DEFAULT NULL COMMENT 'tag_type',
  `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
  `nid` bigint(20) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`nid`),
  UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`),
  KEY `idx_tenant_id&
  • 17
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值