点击上方“蓝色字体”,选择“设为星标”,

可以防止走失!


1 简单说一下springboot?

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程。 -使用springboot以后,搭建一个spring应用和开发,部署变得很简单.

2 怎么简单实现一个springboot应用

1)新建maven项目

2)让项目以spring-boot-starter-parent为父模块

<parent><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-parentartifactId><version>2.0.5.RELEASEversion>parent>

3)根据场景选择一些starter

<dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-webartifactId>dependency><dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-testartifactId>dependency>

4)进行application.yml/application.properties配置

server:
  port: 8080

5)写入口类

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

6)测试

启动main,通过localhost:8080启动不报错

3 springboot怎么实现多环境配置

1)什么是多环境配置

   就是一套代码,有可能要在多个环境使用。就要对多种环境进行配置。

2)怎么进行多环境配置

   ①在一个文件中配置多个环境

spring:application:name: springboot-multienv-config-testprofiles:active: dev #默认激活开发
---server:port: 8081spring:profiles: dev # 开发环境---server:port: 8082spring:profiles: test # 测试环境---server:port: 8083spring:profiles: prod # 线上环境

   ②多个文件(application-环境名.yml/properties)

java springboot 获取用户电脑mac地址 springboot获取用户ip_springboot 获取客户端ip

 

3)怎么指定具体的环境

   ①默认启动

 application.yml 中配置

spring:application:name: springboot-multienv-config-testprofiles:active: dev #默认激活开发

   ②指定启动环境

     开发时:

java springboot 获取用户电脑mac地址 springboot获取用户ip_springboot获取请求ip_02

 

  部署时:

java  -jar xxx.jar --spring.profiles.active=prod

4 springboot项目怎么部署

   Springboot默认已经集成了内置的Tomcat,对它进行打包jar后,里面就有tomcat。直接以jar包方式运行就ok。

1)打包

pom.xml加入打包插件
<build><plugins><plugin><groupId>org.springframework.bootgroupId><artifactId>spring-boot-maven-pluginartifactId>plugin>plugins>build>
打包:
mvn clean package

2)部署

 windows: java -jar xxx.jar

 Linux:后台运行nohup  java -jar xxx.jar

5 springboot自动配置原理

当我们引入了starter,就会使用springboot自动配置原理,对这种场景进行配置。

java springboot 获取用户电脑mac地址 springboot获取用户ip_springboot获取请求ip_03

 

①Springboot应用入口类通过@SpringBootApplication注解简介使用@EnableAutoConfiguration(是父注解)

②使用@EnableAutoConfiguration后,会扫描所有jar中的spring.factories文件,加载所有的配置类(加了 @Configuration的类)

③配置类(加了@Configuration的类)使用XxxProperties以@Bean的方式完成对应场景的配置

④XxxPropereis里面的配置信息有默认值,但是我们可以在application.properties/application.yml中获取

6 Monolith是什么

通常情况下,这个项目所对应的代码由可以多个模块所组成,各个模块会根据自身所提供功能的不同具有一个明确的边界。在编译时,这些项目将被打包成为一个个JAR包,并最终合并在一起形成一个jar或WAR包

java springboot 获取用户电脑mac地址 springboot获取用户ip_springboot 获取客户端ip_04

 

 在项目很小的情况下这种单体应用比较简单,但是随着项目越变越大,代码越来越多。就会存在以下缺点。

       ①编译难,部署难,测试难

         代码量变多,即使更改一行代码,也需花大量时间编译,部署前要编译打包,解压等所以部署难,部署完了还要测试所以测试难。

       ②技术选择难

        在变得越来越大的同时,我们的应用所使用的技术也会变得越来越多。这些技术有些是不兼容的,就比如在一个项目中大范围地混合使用C++和Java几乎是不可能的事情。在这种情况下,我们就需要抛弃对某些不兼容技术的使用,而选择一种不是那么适合的技术来实现特定的功能。

  ③扩展难

    哪怕只有一个功能并发高,也要全部扩展

java springboot 获取用户电脑mac地址 springboot获取用户ip_springboot 获取客户端ip_05

 

7 MicroService是什么

微服务架构是一种架构风格,一个大型复杂软件应由一个或多个微服务组成。系统中的各个微服务可被独立技术选型,独立开发,独立部署,独立运维,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。

java springboot 获取用户电脑mac地址 springboot获取用户ip_springboot 获取请求ip_06

 

8 Monolith&MicroService选型

   

java springboot 获取用户电脑mac地址 springboot获取用户ip_springboot 获取客户端ip_07

   从上图中可以看到,在刚开始的阶段,使用Microservice架构模式开发应用的效率明显低于Monolith。但是随着应用规模的增大,基于Microservice架构模式的开发效率将明显上升,而基于Monolith模式开发的效率将逐步下降。

  单体应用架构:中小型项目(功能相对较少),公司官网,管理系统等

    微服务架构:大型项目(功能比较多) 商城 erp,人力资源,宠物乐园等-互联网项目

9 MicroService拆分微服务注意些什么

1. 单一职责、高内聚低耦合

2. 服务粒度适中

3. 考虑团队结构

4. 以业务模型切入

5. 演进式拆分

6. 避免环形依赖与双向依赖

10 MicroService核心需要解决的问题

1. 服务注册与发现-注册中心

2. 微服务的统一入口-API网管

3. 服务容错限流

4. 服务的集中式配置中心

5. 服务调用链追踪

6. 服务部署

7. 服务监控

11 MicroService常见的解决方案

1. Springcloud Netflix

2.Springcloud alibaba

3.Dubbo

4. Kubernates-k8s

5. Service mesh-istio

6.其他

12 简单说一下Springcloud

微服务架构是一种思想,需要技术落地, 在spring微服务解决方案中,springboot使用用来实现单个服务,而服务间协调调用要使用服务治理框架springcloud netflix/alibaba来实现。下面主要讲netflix常用组件如下:

五大神兽:

服务注册发现(注册中心)——Netflix Eureka :帮我们管理服务的通信地址(ip,端口)

客户端负载均衡——Netflix Ribbon\Feign : 解决服务调用的

断路器——Netflix Hystrix :解决微服务故障的,保护微服务的

服务网关——Netflix Zuul :统一访问入口,微服务的大门(安保部门)

分布式配置——Spring Cloud Config :统一管理微服务的配置

13 简单说一下Springcloud Netflix eureka

Eureka是netflix的一个子模块,也是核心模块之一。

Eureka是一个服务注册与发现组件,简单说就是用来统一管理微服务的通信地址,它包含了EurekaServer服务端(也叫注册中心)和EurekaClient客户端两部分组成,EureakServer是独立的服务,而EurekaClient需要继承到每个微服务中。

微服务(EurekaClient)在启动的时候会向EureakServer提交自己的通信地址清单如:服务名,ip,端口,在EurekaServer会形成一个微服务的通信地址列表 --- 这叫服务注册

微服务(EurekaClient)会定期的从EureakServer拉取一份微服务通信地址列表缓存到本地。一个微服务在向另一个微服务发起调用的时候会根据目标服务的服务名找到其通信地址清单,然后基于HTTP协议向目标服务发起请求。---这叫服务发现

另外,微服务(EurekaClient)采用“心跳”机制向EureakServer发请求进行服务续约,其实就是定时向EureakServer发请求报告自己的健康状况,告诉EureakServer自己还活着,不要把自己从服务地址清单中掉,那么当微服务(EurekaClient)宕机未向EureakServer续约,或者续约请求超时,注册中心机会从地址清单中剔除该续约失败的服务

14 简单说一下Springcloud Netflix ribbon/feign

Ribbon是Netflix发布的云中间层服务开源项目,主要功能是提供客户端负载均衡算法。

Ribbon是一个客户端负载均衡器,它可以按照一定规则来完成多台服务器负载均衡调用,这些规则还支持自定义。

Feign是一个声明式的Web Service客户端,它的目的就是让Web Service调用更加简单。Feign提供了HTTP请求的接口模板(上面标的有访问地址),通过编写简单的接口和插入注解,就可以定义好HTTP请求的参数、格式、地址等信息。而Feign则会完全代理HTTP请求,我们只需要像调用方法一样调用它就可以完成服务请求及相关处理。Feign整合了Ribbon和Hystrix(关于Hystrix我们后面再讲),可以让我们不再需要显式地使用这两个组件。

15 简单说一下Springcloud Netflix hystrix

Hystrix是国外知名的视频网站Netflix所开源的非常流行的高可用架构框架。Hystrix能够完美的解决分布式系统架构中打造高可用服务面临的一系列技术难题。

Hystrix “豪猪”,具有自我保护的能力。hystrix 通过如下机制来解决雪崩效应问题。

1 资源隔离(限流):包括线程池隔离和信号量隔离,限制调用分布式服务的资源使用,某一个调用的服务出现问题不会影响其他服务调用。

2 熔断:当失败率达到阀值自动触发降级(如因网络故障/超时造成的失败率高),熔断器触发的快速失败会进行快速恢复。

3降级机制:超时降级、资源不足时(线程或信号量)降级,降级后可以配合降级接口返回托底数据。

4 缓存:提供了请求缓存、请求合并实现。

16 简单说一下Springcloud Netflix zuul

Zuul 是netflix开源的一个API Gateway 服务器。主要功能如下:

1. 动态路由 通过不同的地址区分调用哪个具体的服务

2. 过滤器   通过过滤器可以实现登录拦截,权限判断等

3. 负载均衡  底层通过ribbon实现负载均衡调用

4. 熔断降级  底层通过hystrix实现熔断降级等服务保障措施

5. ...

17 简单说一下Springcloud Netflix Config server

在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。在Spring Cloud中,有分布式配置中心组件spring cloud config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中。在spring cloud config 组件中,分两个角色,一是config server,二是config client。

18 MicroService架构-链路追踪

   在微服务架构中,存在服务之间的相互调用,需要做服务调用链监控。市场上存在的产品很多,具体优缺点如下:

       

java springboot 获取用户电脑mac地址 springboot获取用户ip_springboot配置统一请求头_08

19 MicroService架构-部署

   微服务架构中,有众多的服务,所以需要对众多服务进行快速部署与快速升级。所以一般都会使用docker部署,并且需要cicd流水线。具体流程如下:

java springboot 获取用户电脑mac地址 springboot获取用户ip_springboot获取请求ip_09