2110-微服务核心知识点及问题分析

2110-微服务核心知识点及问题分析,第1张

2110-微服务核心知识点及问题分析

文章目录

Day01~微服务架构入门

核心知识点常见问题分析常见Bug分析课堂练习课后作业 Day02~Nacos注册中心入门

核心知识点常见问题分析常见Bug分析课后作业 Day03~远程服务调用实践

核心知识点常见问题分析常见Bug分析课后作业

Day01~微服务架构入门 核心知识点

微服务架构诞生的背景(软件即服务,将一个大型软件,拆成若干个小系统;分而治之~北京一个火车站到多个火车站)微服务架构解决方案(大厂基本自研~自己研发各种组件,中小公司用Spring Cloud Netflix,Alibaba,…)微服务架构下Maven聚合项目的创建方式?(Maven聚合项目~资源复用:extends,import,简化编译,打包,部署方式)微服务架构入门聚合项目机构分析及创建?(01-sca,sca-consumer,sca-provider,sca-gateway) 常见问题分析

为什么需要微服务?(对系统分而治,解决因并发访问过大带来的系统复杂性(例如:业务,开发,测试,升级,可靠性等)微服务设计的特点?(单一职责,独立进程,开发测试效率高,可靠性高,升级难度小,但会带来一定的维护成本)微服务解决方案有哪些?(大厂自研,中小企业采用开源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)Maven工程pom.xml文件有删除线怎么解决?(修改idea中maven的配置) 常见Bug分析

maven配置错误(检查idea中你指定的本地库是否正确)maven依赖无法下载(首先要确保你的依赖的是正确,maven配置是正确,都正确就清idea缓存重启) 课堂练习

删除聚合工程中的子工程模块.
第一步:在项目结构中删除,例如

第二步:将项目从idea工作区中删除,例如

第三步:将项目从父工程的pom文件中删除,例如
移除重建项目module中的pom文件删除线,例如:
构建01-sca的子工程(maven 模块),模块名为sca-ui,其具体业务实现如下:
第一步:在sca-ui工程的pom.xml文件中添加一个spring-boot-starter-web依赖.


    
        org.springframework.boot
        spring-boot-starter-web
    

第二步:在sca-ui工程中创建一个springboot启动类,类全名为com.jt.DemoUIApplication.

package com.jt;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoUIApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoUIApplication.class, args);
    }
}

第三步:在sca-ui工程的resources目录下创建一个static目录,并在此目录中创建一个index.html页面

第四步:启动sca-ui工程,在浏览器中输入http://localhost:8080/index.html进行测试.

课后作业

总结课上知识点(养成好习惯)检查并设置JDK环境变量JAVA_HOME.升级MySQL的版本为5.7或以上版本(Mariadb 10.3或以上版本)预习04-nacos服务注册中心应用实践. Day02~Nacos注册中心入门 核心知识点

服务注册中心诞生背景? (服务多了,需要统一管理,例如所有公司需要在工商局进行备案)服务注册中心的选型?(社区活跃度,稳定性,功能,性能,学习成本)Nacos下载,安装(解压),配置(application.properties),启动(startup.cmd),访问(http://ip:port/nacos)基于Nacos实现服务的注册?(添加依赖,服务配置,启动服务并检查)基于RestTemplate实现服务的简易调用?(服务消费方调用服务提供方) 常见问题分析

如何理解服务注册中心?(存储服务信息的一个服务)服务注册中心诞生的背景? (服务多了,需要对服务进行更好管理)市场上常用的注册中心?(Zookeeper,Eureka,Nacos,Consul)如何对注册中心进行选型?(社区活跃度,稳定性,功能,性能,学习成本)Nacos 是什么?(是Alibaba公司基于SpringBoot技术实现的一个注册中心,本质上也是一个web服务)Nacos 的基本架构?(Client/Server架构)Nacos 主要提供了什么核心功能?(服务的注册,发现,配置)Nacos 服务启动需要什么前置条件?(配置JDK的JAVA_HOME目录,安装MySQL5.7以上版本,配置连接的数据库)Nacos 服务单机模式,window平台下启动时的指令是什么?(startup.cmd -m standalone)实现Nacos服务注册需要添加什么依赖?(两个:web,discovery)实现Nacos服务注册时,必须做哪些配置?(服务名,假如是本机服务注册可以省略服务地址)Nacos如何检查服务状态?(通过心跳包实现,服务启动时会定时向nacos发送心跳包-BeatInfo)服务之间进行服务调用时,使用了什么API?(RestTemplate,用此对象之前要先创建这个对象并交给spring管理)服务调用过程是怎样的?
常见Bug分析

JAVA_HOME环境变量定义错误,例如:

说明,这里一定要注意JAVA_HOME单词的拼写,JAVA_HOME中定义的JDK是存在的,还有后面的路径不能有分号“;”.

MySQL版本比较低(建议mysql5.7或mariadb10.5及以上版本),例如:
当执行nacos-mysql.sql文件时,出现如下错误:

sql文件不存在,例如

SQL文件应用错误,例如:

Nacos的application.properties配置文件中,连接数据库的配置错误.

数据库的名字配置错误,例如:

nacos配置文件application.properties配置错误,例如:

服务启动时,端口被占用了。例如:

服务注册时,服务名不正确,格式不正确,配置文件名字不正确,或者没有配置文件,例如:

磁盘写权限问题(nacos服务启动时会在当前磁盘目录写日志),例如:

基于Nacos实现服务注册失败,例如

客户端500异常,例如

服务调用时,连接异常,例如:

客户端404异常,例如:

服务调用时底层404问题,例如:

服务访问问题,例如:

依赖注入异常,例如:

客户端请求方式与服务端不匹配,例如:

依赖版本问题,例如:

服务配置读取问题,例如:

课后作业

总结课堂知识点完成基于nacos的服务注册完成基于RestTemplate对象实现服务调用。预习04-nacos中的负载均衡设计及实现.尝试实现基于idea启动nacos,自己查询然后进行实践.
尝试实现基于idea连接指定数据库,例如:
第一步:打开DataSource,找到mysql,例如:

第二步:配置连接的数据库,例如:


Day03~远程服务调用实践 核心知识点

LoadBalancerClient对象的作用以及应用.@Loadbalanced注解的作用以及应用.Feign 诞生的背景,应用方式,常见问题以及原理. 常见问题分析

LoadBalancerClient对象的作用是什么?(基于负载均衡算法获取服务实例)@LoadBalanced注解作用?(描述RestTemplate对象,让系统底层为RestTemplate对象赋能,对请求过程进行拦截)Ribbon是什么,基于Ribbon可以解决什么问题?(一个负载均衡组件,这个组件中提供一套负载均衡算法)为什么要负载均衡?(网络中有一组可以提供相同服务的计算机~类似银行的各个营业点)你了解哪些负载均衡策略?(基于IRule接口去查看,快捷键ctrl+h)我们如何修改负载均衡策略?(配置文件->例如application.yml,配置类->例如启功类)为什么使用Feign方式的服务调用?(声明式远程调用,优化结构,简化服务调用过程代码的编写)如何基于feign方式实现远程服务调用?(依赖-openfeign,配置,feign接口定义)@EnableFeignCleints 注解的作用是什么?(描述配置类,例如启动类,告诉底层启动feign starter组件)@FeignClient注解的作用是什么?(告诉Feign Starter,在项目启动时,为此注解描述的接口创建实现类-代理类)如何理解基于Feign方式的远程服务调用?(声明式远程服务调用,底层封装了服务调用过程。)Feign方式如何实现负载均衡?(底层基于ribbon组件实现)Feign接口指向的对象是谁?(代理对象-feign接口的实现类对象)
常用服务发现、服务调用方式有哪些?
常见Bug分析

SocketTimeoutException,例如:

NullPointerException,例如:

负载均衡类的配置问题,例如:

端口被占用,例如

UnknownHostException,例如

Fien接口对象依赖注入异常,例如:

数据读取超时,例如:

服务访问时的404异常,例如:

Feign接口方法中@PathVariable注解参数定义问题,例如:

读数据超时,例如:

依赖注入异常,例如:

课后作业

完成课上知识点总结。实践基于RestTemplate和Feign方式的服务调用。预习05-Nacos配置中心应用实践。尝试完成Idea中Http Client 工具的应用?(基于此工具进行restful风格的请求测试)

修改sca-consumer端默认的负载均衡策略?(自己查资料实现)

方案1:修改sca-consumer配置文件(application.yml),添加如下语句,例如:

sca-provider: #这个是要进行远程调用的服务id(服务名)
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #负载均衡算法

对于方案1写法,在写的过程没有提示,编写困难,但是将来的可运维性会比较好,我们这部分配置写到配置中心,不需要重启服务即可实现配置的动态发布,动态更新。

方案2:修改sca-consumer的启动类,在启动类中添加如下方法,例如:

@Bean
public IRule ribbonRule() {
    return new RandomRule();
}

对于方案2的写法,编写相对简单,编写过程都有提示,但是将来的可运维性比较差,项目打包以后,我们无法再修改负载均衡算法。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5707128.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存