当前位置:网站首页>微服务架构
微服务架构
2022-06-26 18:20:00 【[email protected]】
一,微服务架构
核心知识点
微服务架构诞生的背景(软件即服务,将一个大型软件,拆成若干个小系统;分而治之~北京 一个火车站到多个火车站)
微服务架构解决方案(大厂基本自研~自己研发各种组件,Spring Cloud ~Netflix,Alibaba,…)
微服务架构下Maven聚合项目的创建方式?(Maven聚合项目~资源复用:extends,import,简化编 译,打包,部署方式)
微服务架构入门聚合项目创建?(01-sca,sca-consumer,sca-provider,sca-gateway,sca-common)
微服务中聚合工程之间的引用设计?(将一个工程作为依赖添加到其它工程~重点是坐标)
常见问题分析
为什么需要微服务?(对系统分而治,解决因并发访问过大带来的系统复杂性(例如:业务,开发,测试,升级,可靠性等)
微服务设计的特点?(单一职责,独立进程,开发测试效率高,可靠性高,升级难度小,但会带来一定的维护成本)
微服务解决方案有哪些?(大厂自研,中小企业采用开源Spring Cloud Alibaba,Spring Cloud Netfix等 )
微服务设计中需要哪些关键组件(服务的注册,发现,配置,限流降级,访问入口管理,分布式事务管理等)
创建聚合工程的目的?(实现工程之间资源的的共享,简化工程管理)
如何修改聚合工程中项目的编译和运行版本?(pom.xml:build->plugins->plugin->maven-compiler-plugin)
maven工程中build元素的作用?(定义项目的编译,打包方式)
maven父工程的packaging元素内的值是什么?(父工程默认打包方式为pom方式)
maven父工程中dependencyManagement元素的作用是什么?(项目依赖的版本,当前工程或子工程不需要再指定版本)
Maven父工程中如何统一定义JDK编译和运行版本?(配置maven编译插件:maven-compiler-plugin)
毕业版本
<!--第一步: 定义子工程中核心依赖的版本管理(注意,只是版本管理)-->
<dependencyManagement>
<dependencies>
<!--spring boot 核心依赖版本定义(spring官方定义)-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.3.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--Spring Cloud 微服务规范(由spring官方定义)-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR9</version>
<type>pom</type><!--假如scope是import,type必须为pom-->
<scope>import</scope><!--引入三方依赖的版本设计-->
</dependency>
<!--Spring Cloud alibaba 依赖版本管理 (参考官方说明)-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.6.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
二Nacos注册中心(为什么要用Nacos注册:为了负载均衡)
核心知识点
服务注册中心诞生背景? (服务多了,需要统一管理,例如所有公司需要在工商局进行备案)
服务注册中心的选型?(社区活跃度,稳定性,功能,性能,学习成本)
Nacos下载,安装,配置,启动,访问(http://ip:port/nacos)
基于Nacos实现服务的注册?(添加依赖,服务配置,启动服务并检查)
基于RestTemplate实现服务的简易调用?(服务消费方调用服务提供方)
为什么要将服务注册到nacos?(为了更好的查找这些服务)
在Nacos中服务提供者是如何向Nacos注册中心(Registry)续约的?(5秒心跳)
对于Nacos服务来讲它是如何判定服务实例的状态?(检测心跳包,15,30)
服务消费方是如何调用服务提供方的服务的?(RestTemplate)
基于http协议
常见问题分析
如何理解服务注册中心?(存储服务信息的一个服务)
服务注册中心诞生的背景? (服务多了,需要对服务进行更好管理)
市场上常用的注册中心?(Zookeeper,Eureka,Nacos,Consul)
如何对注册中心进行选型?(社区活跃度,稳定性,功能,性能,学习成本)
Nacos 是什么?(是Alibaba公司基于SpringBoo技术实现的一个注册中心,本质上也是一个web服务)
Nacos 的基本架构?(Client/Server架构)
Nacos 主要提供了什么核心功能?(服务的注册,发现,配置)
Nacos 服务启动需要什么前置条件?(配置JDK的JAVA_HOME目录,安装MySQL5.7以上版本,配置连接的数据库)
Nacos 服务单机模式,window平台下启动时的指令是什么?( 1,在Nacos的安装路径下找到:startup.cmd 可以在idea上配置进行启动NNacos,2,window平台下启动startup.cmd -m standalone)
实现Nacos服务注册需要添加什么依赖?(两个:web,discovery)
实现Nacos服务注册时,必须做哪些配置?(服务名,假如是本机服务注册可以省略服务地址)
Nacos如何检查服务状态?(通过心跳包实现,服务启动时会定时向nacos发送心跳包-BeatInfo)
服务之间进行服务调用时,使用了什么API?(RestTemplate,用此对象之前要先创建这个对象并交给spring管理)
三,基于Nacos实现服务发现与调用
核心知识点
负载均衡诞生背景.(网络中有一组可以提供相同服务的计算机~类似银行的各个营业点)
客户端负载均衡&服务端负载均衡的不同?(browser->nginx->…;sca-consumer->sca-provider)
基于LoadBalancerClient 对象从注册中心获取服务列表(服务发现)
基于Ribbon(一个负载均衡组件,这个组件中提供一套负载均衡算法)实现负载均衡
@Loadbalanced注解的应用(描述RestTemplate对象,为此对象的远程调用进行赋能)
常见问题分析
为什么负载均衡?(通过多个服务实例均衡处理客户端的请求,生活中有一种说法叫不患寡而患不均)
如何理解服务发现?(服务发现就是从注册中心获取服务信息,例如从nacos获取服务实例信息)
LoadBalancerClient的作用?(从nacos注册中心获取服务实例列表,然后本地基于负载均衡算法获取具体服务实例)
@Loadbalanced注解作用?(描述RestTemplate对象,让系统底层为RestTemplate对象赋能,对请求过程进行拦截)
你了解哪些负载均衡策略?(基于IRule接口去查看,快捷键ctrl+h)
我们如何修改负载均衡策略?(配置文件->例如application.yml,配置类->例如启功类)
四,基于Feign方式的服务调用
常见问题分析
为什么使用Feign方式的服务调用?(优化结构,简化服务调用过程代码的编写、)
如何基于feign方式实现远程服务调用?(依赖,配置,feign接口定义)
@EnableFeignCleints 注解的作用是什么?(描述配置类,例如启动类)
@FeignClient注解的作用是什么?(告诉Feign Starter,在项目启动时,为此注解描述的接口创建实现类-代理类)
如何理解基于Feign方式的远程服务调用?声明式远程服务调用,底层封装了服务调用过程。
Feign方式如何实现负载均衡?(底层基于ribbon组件实现)
常用服务发现、服务调用方式有哪些?
五,Nacos配置中心
常见问题分析
什么是配置中心?(存储项目配置信息的一个服务,这个服务可以实现配置的动态发布和更新)
为什么要使用配置中心?(集中管理配置信息,动态发布配置信息)
市场上有哪些主流的配置中心?(Apollo,nacos,……)
配置中心一般都会配置什么内容?(可能会经常变化的配置信息,例如连接池,日志、线程池、限流熔断规则)
什么信息一般不会写到配置中心?(服务端口,服务名,服务的注册地址,配置中心地址)
项目中为什么要定义bootstrap.yml文件?(此文件被读取的优先级比较高,可以在服务启动时读取配置中心的数据)
Nacos配置中心宕机了,我们的服务还可以读取到配置信息吗?(可以从服务的本地内存读取)
微服务应用中客户端如何感知配置中心数据变化?(1.4.x版本的nacos客户端会基于长轮询机制从nacos获取配置信息)
服务启动后没有从配置中心获取我们的配置数据是什么原因?(依赖,bootstrap.yml,配置单词,格式,配置模型)
你项目中使用的日志规范是什么?(SLF4J~门面模式)
你了解项目中的日志级别吗?(debug,info,warn,error可以基于日志级别控制日志的输出)
Nacos配置管理模型的背景?(环境不同配置不同)
Nacos配置中的管理模型是怎样的?(namespace>group>service/data-id)
Nacos客户端(微服务)是否可以读取共享配置?(可以)
六,Sentinel 限流应用
核心知识点
- 服务限流、降级的背景
- Sentinel限流入门实践(控制台8180-定义规则,客户端服务应用规则:依赖,配置)
- Sentinel常用限流模式(直接,关联->保证核心业务,链路->红绿灯)
- Sentinel降级(熔断)入门实现(出现不稳当的系统服务时,暂停对此服务的访问)
- Sentinel实现热点参数限流(热点视频,文章,…),系统规则配置(例如cpu使用率),授权配置(黑白名单)
常见问题分析
- 为什么要进行限流、降级? (系统处理能力有限,可以通过限流方式,保证系统可靠运行)
- Sentinel限流的基本原理?(底层对服务请求进行拦截,然后通过流控规则限定对资源访问)
- 你了解Sentinel限流有哪些算法? (计数器,令牌桶,漏桶,滑动窗口算法~sentinel默认)
- Sentinel常用限流模式?(直接,关联->保证核心业务,链路->红绿灯)
- @SentinelResource注解的作用,你用过哪些属性?(在链路限流中描述资源节点)
- Sentinel常用限流效果有哪些?(快速失败,预热,排队
- Sentinel中限流、降级操作被触发时出现的异常类型是什么?(都是BlockException类型的子类)
- 如何对限流结果进行处理?(有默认处理方案,我们也可以自己定义处理规则-实现BlockExceptionHandler接口)
七,Gateway 应用实践
核心知识点
API 网关(Gateway)诞生背景
市场主流微服务网关(Spring Cloud Gateway,zuul,…)
API Gateway实现服务的保护和转发(重点)
API Gateway层面的负载均衡实现(重点)
API Gateway请求处理原理分析(重点)
常见问题分析
为什么要使用api网关?(服务保护,统一url访问,统一身份认证,统一跨域设计,。。。)
网关入门实践的步骤? (依赖,配置,启动,服务访问)
Gateway 服务做请求转发时一定要在注册中心进行注册吗?(不一定,可以直接通过远端url进行服务访问)
网关进行请求转发的流程是怎样,有哪些关键对象?(XxxHandlerMapping,Handler,。。。)
网关项目中的负载均衡是如何实现?(底层基于Ribbon实现,可以在RibbonLoadBalancerClient中 加断点分析)
说说SpringCloud gateway处理请求的基本流程?(官方,断点)
八, Gateway 进阶应用实践
核心知识点
网关中常用谓词(predicate)对象及实践。
网关中过滤器(Filter)的类型及实践。
网关中基于sentinel实现服务限流(API,路由id)。
网关中基于自定义限流结果的处理(GatewayCallbackManager)。
网关中实现统一跨域配置(推荐配置文件,参考官网)。
常见问题分析
网关中的谓词对象类型?(GatewayPredicate)
网关中的谓词对象是如何创建的?(谓词工厂)
你在网关中配置过哪些常用谓词?(Path,Method,Before,Query,Header,…)
网关中的过滤器是如何分类的?(GlobalFilter,GatewayFilter:需要手动配置)
我们是否可以自定义谓词,过滤器对象?(可以,参考官方默认的定义)
网关层面如何基于sentinel实现限流?(有关sentinel的两个依赖,配置,JVM参数)
网关层面的限流类型有哪些?(路由id,API分组)
我们是否可以对限流结果进行自定义处理?(可以,了解)
网关中做跨域如何设计?(Java代码方式配置,配置文件方式-推荐)
如何将路由,跨域,负载等配置写到配置中心?(注意层级关系)
常见Bug分析
配置文件的格式?(一定要注意缩进关系)
配置中心数据读取不到?(依赖,bootstrap.yml,内容的格式,配置管理模型)
跨域配置问题?(服务于客户端的ajax请求)
九,单点登录系统初步设计及实现
核心知识点
单点登录系统诞生的背景。
Java中单点登录系统解决方案。
单点登录系统(SSO)中的服务划分及关系设计。
单点登录系统中父工程的创建及初始化。
系统基础服务(sso-system)工程的创建及基本业务实现。
常见问题分析
为什么要做单点登录设计?(业务简化,代码复用,不需要每个服务都登录一次)
你知道哪些SSO系统解决方案?(基于用户登录状态信息的存储进行方案设计)
单点登录系统中你的服务是如何设计的,工程结构是怎样的?
用户登录时,需要从数据库查询哪些信息?(用户信息以及用户的权限信息)
如何基于用户id查询用户权限,你有什么方案?(3种)
基于idea的为类自动生成序列化id?
如何将链接数据库的信息写到配置中心?
@Autowired注解描述的Mapper对象有红色波浪线,但运行没有错误,如何去除红色波浪线。
idea中如何在Database窗口打开要访问的数据库,例如
十,SSO系统中的登录逻辑基本实现
核心知识点
定义封装用户信息的User对象(一定主要包结构)
定义用户信息远程调用Feign接口(RemoteUserService~基于此接口调用sso-system服务中的用户信息)
基于Security规范定义用户业务逻辑服务对象(UserDetailsServiceImpl~调用RemoteUserService获取和封装用户信息)
定义用户认证基本配置类(SecurityConfig~配置密码加密对象,认证规则,以及登录成功或失败的处理方案)
实现自定义登录逻辑测试(校验登录正确账号和错误账户下服务端的响应结果)
熟悉SpringSecurity的认证流程?(Client->Filters->AuthenticationManager–>UserDetailService->…)
常见问题分析
为什么定义RemoteUserService 接口(Feign)?(基于此接口调用远程sso-system服务)
sso-auth服务中用户业务数据的获取在哪里?(客户端提交的用户名,sso-system服务提供的数据库数据)
为什么要构建SecurityConfig对象?(配置加密算法,认证规则)
为什么要让SecurityConfig类要继承WebSecurityConfigurerAdapter类型?(重写默认的认证规则)
认证过程中使用的密码加密对象是谁?(BCryptPasswordEncoder,不可逆加密对象)
单体架构中的用户的状态的存储是如何实现的?(了解,默认是存储到了tomcat的session对象中)
十一, SSO系统颁发令牌及资源服务实践
核心知识点
认证服务器(sso-auth)中Token设计(UUID令牌,JWT令牌)
认证服务器(sso-auth)中Oauth2规范基本配置(认证入口,为谁认证,由谁认证,认证后颁发什么令牌)
基于Postman进行认证测试?(请求方式,请求url,认证参数)
资源服务器(sso-resource)核心业务分析及认证,授权规则设计及实现(匿名,认证,授权)
常见问题分析
JWT是什么?(是JSON WEB TOKEN这几个单词的缩写,描述的是web应用的一种令牌格式)
JWT有几部分构成?(头:令牌类型,签名算法,负载:允许包含用户登录状态 ,签名:防止令牌被篡改)
为什么要采用JWT令牌?(可以存储用户登录状态信息,避免访问资源时从数据库查询认证信息)
基于Oauth2协议的认证服务器默认的令牌生成策略是什么?(UUID.randomUUID())
认证服务器中常见令牌相关设计存储方案有哪些?(Mysql,Redis,Jwt)
认证服务器对用户进行认证时,客户端提交了哪些关键信息?(username,password,client_id,grant_type,client_secret)
认证服务器完成认证操作后,服务端返回哪些信息?(访问令牌,刷新令牌,令牌类型,作用域,编号)
认证服务器中完成认证业务的关键对象有哪些?(Filter,AutenticationManager,UserDetailService,.)
资源服务器如何设计的认证,授权规则?(三个维度:匿名,登录,授权)
访问令牌与刷新令牌有什么不一样?(客户端是要携带访问令牌访问资源的,刷新令牌是为了再次生成访问令牌)
访问令牌,刷新令牌有有效时长吗?(刷新令牌有效时长一般要大于访问令牌有效时长)
十二,SSO网关,UI工程以及操作日志实践
核心知识点
SSO系统中网关服务器(sso-gateway)实现路由转发,跨域设计,负载均衡,限流。
SSO系统中UI工程中页面设计(Bootstrap+VUE+axios)及请求响应代码分析(200,401,403)。
SSO系统中访问资源时进行用户行为日志的获取和记录。(AOP,Feign,Async)
常见问题分析
网关服务器在哪里做了负载均衡(lb://)?
为什么网关层面要做跨域设计?(Ajax技术不支持跨域请求,将所有服务的跨域共性提取到网关层面)
UI工程中用户端如何提交ajax请求的?(axios,底层ajax对象为XMLHttpRequest)
为什么在资源访问时要记录用户行为日志?(便于用户行为进行分析)
你基于什么技术获取的用户行为日志?(采用了AOP的设计)
你记录日志时采用的是同步还是异步方式?(异步方式)
项目切面中如何获取请求对象?(RequestContextHolder)
项目切面中获取获取登陆用户信息?(SecurityContextHolder)
你项目中哪里用到了反射技术呢?(Spring Bean对象的创建,依赖注入,方法对象的获取,方法上注解的获取,。。)
@PreAuthorize注解的作用是什么?(描述资源方法,告诉系统底层,访问此方法需要授权)
400异常,请求参数不合法(参数个数,类型,格式)。
401异常,认证失败?(提交的数据不正确)
403异常,没有资源访问权限?(说明用户为已认证用户,但是没有资源的访问权限)
415异常,数据协议有问题?(比方说,你要json数据,但是数据格式定义的是text)
小阶段总结
一种微服务架构设计思想(分而治之~服务治理)
一套微服务解决方案(Spring Cloud Alibba)
一种项目创建方式(Maven聚合项目)
五大微服务核心组件(Nacos,Feign,Ribbon,Sentinel,Gateway)
一套单点登录(SSO)系统,三个核心业务(微服务架构+5个核心组件+3个认证和授权技术)
常用的几种设计模式(策略模式,门面模式,代理模式,工厂模式,建造模式,责任链模式,桥接模式,装饰模式,适配器模式,单例设计,模板方法模式,。。。)
版权声明
本文为[[email protected]@yxg]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_49143405/article/details/121595121
边栏推荐
- 最小生成树、最短路径、拓扑排序、关键路径
- ROS query topic specific content common instructions
- Procedure steps for burning a disc
- How about opening an account at Guojin securities? Is it safe to open an account?
- Comparing the size relationship between two objects turns out to be so fancy
- Numpy's Matplotlib
- Connected to surface test questions
- Data Encryption Standard DES security
- 分页查询、JOIN关联查询优化
- 成功解决之idea引用Lombok的@Slf4j后无法正常使用log
猜你喜欢
Properties file garbled
RSA encryption and decryption details
Data Encryption Standard DES security
Paging query and join Association query optimization
成功解决之idea引用Lombok的@Slf4j后无法正常使用log
50 lines of code to crawl TOP500 books and import TXT documents
CD-CompactDisk
vutils. make_ A little experience of grid () in relation to black and white images
Decompilation of zero time technology smart contract security series articles
IDEA收藏代码、快速打开favorites收藏窗口
随机推荐
idea中文插件chinese(simplified) language pack
How pycharm modifies multiline annotation shortcuts
同花顺开户怎么样安全吗?怎么炒股开户
Boyun, standing at the forefront of China's container industry
(multi threading knowledge points that must be mastered) understand threads, create threads, common methods and properties of using threads, and the meaning of thread state and state transition
CD-CompactDisk
Regular match same character
CLion断点单步调试
必须要掌握的面试重点——索引和事务(附讲B-树与B+树)
JVM入个门(1)
ROS查询话题具体内容常用指令
IDEA收藏代码、快速打开favorites收藏窗口
物联网协议的王者:MQTT
Numpy's Matplotlib
深度学习之Numpy篇
tag动态规划-刷题预备知识-2. 0-1背包理论基础和二维数组解法模板
JVM入個門(1)
Clion breakpoint single step debugging
Enter n integers and output the number of occurrences greater than or equal to half the length of the array
[unity] use C in unity to execute external files, such as Exe or bat