背景分析:
1.以后的配置都会去配置中心写,不会再去java类里写
2.官方日志去输出,以及日志级别,读内存里的数据比读数据库里的数据快很多,可以在适当的场景打开 内存(cache).
什么是配置中心:
存储信息的服务,配置中心最基础的功能就是存储一个键值对,配置的是可能经常变化的数据 例如/; 连接池 日志 线程池 限流熔断规则, 一般不会写到配置中心: 服务端口号,服务名 ,服务的注册地址 配置中心地址
配置中心的选型:
在面向分布式的微服务系统中,如何通过更高效的配置管理方式,实现微服务系统架构持续“无痛”的演进,并动态调整和控制系统的运行时态,配置中心的选型和设计起着举足轻重的作用。市场上主流配置中心有Apollo(携程开源),nacos(阿里开源),Spring Cloud Config(Spring Cloud 全家桶成员)。我们在对这些配置中心进行选型时重点要从产品功能、使用体验、实施过程和性能等方面进行综合考量。本次课程我们选择nacos,此组件不仅提供了注册中心,还具备配置中心的功能。
小节面试分析
- 什么是配置中心?(存储项目配置信息的一个服务)
- 为什么要使用配置中心?(集中管理配置信息,动态发布配置信息)
- 市场上有哪些主流的配置中心?(Apollo,nacos,……)
Nacos配置快速入门
业务描述
在sca-provider项目中添加一个Controller对象,例如ProviderLogController,基于此Controller中的方法演示日志级别的配置。 要基于规范去配置
面试题
List<object> list1=new ArrayLIst<String>(); 不对
List<string> list1=new ArrayLIst<Object>(); 不对
List<? extend object> list1=new ArrayLIst<Integer>(); 对 上界泛型通配
List<? super string> list1=new ArrayLIst<Object>(); 对 下界泛型通配
? 代表无界通配符
概念
slf4j是基于门面模式设计的一套API
log4j和log4back是出自同一作者
权限:trace<debug<info<warn<error
设计模式:
1.策略模式
2.模型方法
3.代理模式
4.门面模式
5.享元模式
内部感知: 是在控制台打印
外部感知:是在浏览器页面查看
小节面试分析
1.配置中心一般都会配置什么内容?(可能会经常变化的配置信息,例如连接池,日志、线程池、限流熔断规则)
2.什么信息一般不会写到配置中心?(服务端口,服务名,服务的注册地址,配置中心)
3.项目中为什么要定义bootstrap.yml文件?(此文件被读取的优先级比较高,可以在服务启动时读取配置中心的数据)
4.Nacos配置中心宕机了,我们的服务还可以读取到配置信息吗?(可以从内存,客户端获取了配置中心的配置信息以后,会将配置信息在本地内存中存储一份.)
5.微服务应用中我们的客户端如何获取配置中心的信息?(我们的服务一般首先会从内存读取配置信息,同时我们的微服务还可以定时向nacos配置中心发请求拉取(pull)更新的配置信息)
6.微服务应用中客户端如何感知配置中心数据变化?(1.4.x版本的nacos客户端会基于长轮询(指的是客户端每隔30秒会访问nacos取一次信息来更新本地信息,如果没有数据就等待超过29.5秒就不等待了)机制从nacos获取配置信息,所谓的长轮询就是没有配置更新时,会在nacos服务端的队列进行等待.)
7.服务启动后没有从配置中心获取我们的配置数据是什么原因?(依赖,配置文件名字bootstrap.yml,配置中心的dataId名字是否正确,分组是否正确,配置的名字是否正确,缩进关系是否正确,假如是动态发布,类上是否有@RefreshScope注解)
8.你项目中使用的日志规范是什么?(SLF4J)
9.你了解项目中的日志级别吗?(debug,info,error,…,可以基于日志级别控制日志的输出)
Nacos配置管理模型
概述
Nacos 配置管理模型由三部分构成,如图所示:
其中:
- Namespace:命名空间,对不同的环境进⾏隔离,⽐如隔离开发环境和⽣产环境。
- Group:分组,将若⼲个服务或者若⼲个配置集归为⼀组。
- Service/DataId:某⼀个服务或配置集,一般对应一个配置文件。
空间设计的创建:
命名空间设计:
Nacos中的命名空间一般用于配置隔离,这种命名空间的定义一般会按照环境(开发,生产等环境)进行设计和实现.我们默认创建的配置都存储到了public命名空间
命名空间成功创建以后,会在如下列表进行呈现。
在指定命名空间下添加配置,也可以直接取配置列表中克隆,例如:
克隆和创建新的配置中心这两中方式是一样的
分组设计及实现
当我们在指定命名空间下,按环境或服务做好了配置以后,有时还需要基于服务做分组配置,例如,一个服务在不同时间节点(节假日,活动等)切换不同的配置,可以在新建配置时指定分组名称
小节面试分析
- Nacos配置管理模型的背景?(环境不同配置不同)
- Nacos配置中的管理模型是怎样的?(namespace,group,service/data-id)
- Nacos客户端(微服务)是否可以读取共享配置?(可以)
总结
重难点分析
配置中心的选型?
市场活跃度、稳定性、性能、易用
Nacos配置中心基本应用?
新建,修改、删除配置以后,在Nacos客户端应用配置
配置管理模型应用?
1.namespace(命名空间,对不同的环境进⾏隔离,⽐如隔离开发环境和⽣产环境)
2.group(分组,将若⼲个服务或者若⼲个配置集归为⼀组。)
3.service/dataId(某⼀个服务或配置集,一般对应一个配置文件。)
4.Nacos配置变更的动态感知。(底层原理分析)
共享配置设计及读取
当同一个namespace的多个配置文件中都有相同的配置时,可以对这些配置存储到nacos配置中心的一个或多个指定配置文件,哪个微服务,就在服务的配置中心设置读取即可
练习
1.本地缓存线程安全策略:乐观锁(copyonwriteArrayList),双重校验悲观锁
2.本地缓存数据一致性策略:暂不考虑
3.本地缓存数据淘汰策略:暂不考虑
设计一个简易tomcat用于处理客户端请求,并响应一个结果(满足http协议的字符串)给客户浏览器
1.服务是谁(java.net.ServerSocket)
2.客户端谁(浏览器)
3.服务端向客户端输出数据用谁(OutputStream)