当前位置: 首页 >  资讯  > 正文

微服务圣经1:零基础搭建一套SpringCloud微服务脚手架(SpringCloud+Dubbo+Docker+Jenkins) 快讯

  • 2023-05-18 17:01:04 来源:博客园

文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 博客园版为您奉上珍贵的学习资源 :

免费赠送 :《尼恩Java面试宝典》持续更新+ 史上最全 + 面试必备 2000页+ 面试必备 + 大厂必备 +涨薪必备免费赠送 :《尼恩技术圣经+高并发系列PDF》,帮你 实现技术自由,完成职业升级, 薪酬猛涨!加尼恩免费领免费赠送 经典图书:《Java高并发核心编程(卷1)加强版》面试必备 + 大厂必备 +涨薪必备 加尼恩免费领免费赠送 经典图书:《Java高并发核心编程(卷2)加强版》面试必备 + 大厂必备 +涨薪必备 加尼恩免费领免费赠送 经典图书:《Java高并发核心编程(卷3)加强版》面试必备 + 大厂必备 +涨薪必备 加尼恩免费领

免费赠送 资源宝库: Java 必备 百度网盘资源大合集 价值>10000元 加尼恩领取


(资料图片仅供参考)

零基础 搭建一套SpringCloud微服务脚手架(SpringCloud+ Dubbo + Docker + Jenkins)

说在前面

在40岁老架构师尼恩的读者社群(50+)中,大量的小伙伴是架构师、高级开发,大家都有丰富的开发、架构经验。

在开发过程中,一般情况下,大家都是用现有的开发框架。

导致的一个严重问题是:很少有小伙伴能从0开始 搭建一套SpringCloud微服务脚手架(SpringCloud+ Dubbo + Docker + Jenkins)。然而,零基础 搭建一套SpringCloud微服务脚手架(SpringCloud+ Dubbo + Docker + Jenkins),这个实操对大家来说,至关重要

尼恩一直在找一个契机,给大家梳理一个《零基础 搭建一套SpringCloud微服务脚手架》 博客。提升大家的实操能力,动手能力。

直到今天、契机终于来了。

从2020年开始,尼恩一直在写一本 微服务架构和开发领域的 至尊宝典 《SpringCloud 学习圣经》,全量的博客加起来全网阅读量在100W+。在这么大访问量的激励下,尼恩一直在对这本 《SpringCloud 学习圣经》进行迭代。

而且由于尼恩一人有精力有限,在尼恩的《技术自由圈》 高并发研究社群中,不断吸取有志之士的加入。咱们社群中一位资深的、华中科技大学硕士、有着10年开发和架构经验、并且管理一个20人团队的架构师 Andy加入了咱们技术迭代、技术研究的队伍。

他来给大家提供了一个优秀的微服务 基础架构实操案例,《零基础 搭建一套SpringCloud微服务脚手架》。

这,就是本文。当然,本文也收入了咱们的 10W字 至尊宝典 《SpringCloud alibaba 学习圣经》最新升级版, 《SpringCloud alibaba 学习圣经》宝典从此升级到了V3版本。

最新的 PDF 文档,可以通过 公众号 技术自由圈领取。

本文目录

目录
  • 零基础 搭建一套SpringCloud微服务脚手架(SpringCloud+ Dubbo + Docker + Jenkins)
    • 说在前面
    • 本文目录
    • 1、本文学习内容和目标
    • 2、设计微服务框架的基本原则
      • 1.解耦和独立性:
      • 2.可伸缩性和容错性:
      • 3.简化开发和部署过程:
      • 4.兼容性和可扩展性:
    • 3、搭建基础设施
      • 1.安装Java开发环境
        • 工具介绍:
        • 下载地址:
        • 安装方式:
        • 操作示例:
      • 2.安装和配置Maven
        • 工具介绍:
        • 下载地址:
        • 安装方式:
        • 操作示例:
      • 3.安装和配置Git
        • 工具介绍:
        • 下载地址:
        • 安装方式:
        • 操作示例:
      • 4.安装集成开发环境(IDE)
        • 工具介绍:
        • 下载地址:
        • 安装方式:
        • 操作示例:
      • 5.创建项目和配置构建工具
    • 4、定义微服务接口和协议
      • 1.引入JPA依赖
      • 2.示例表结构
      • 3.application.yml配置
      • 4.定义学生实体类
      • 5.定义学生信息的持久化接口
      • 6.定义学生信息的控制器接口
    • 5、实现服务注册与发现
      • 1.安装和配置Nacos
      • 2.引入Nacos相关依赖
      • 3.系统配置变更
      • 4.示例代码
    • 6、实现服务调用和负载均衡
    • 7、实现服务监控和日志管理
      • 1.Spring Boot Admin 服务监控
      • 2.ELK 日志监控
      • ELK安装
      • 微服务应用接入
    • 8、保护服务安全
    • 9、实现持续集成和部署
      • 1.Jenkins
      • 2.Docker
      • 3.配置步骤
    • 10、小结
    • 技术自由的实现路径:
      • 实现你的 架构自由:
      • 实现你的 响应式 自由:
      • 实现你的 spring cloud 自由:
      • 实现你的 linux 自由:
      • 实现你的 网络 自由:
      • 实现你的 分布式锁 自由:
      • 实现你的 王者组件 自由:
      • 实现你的 面试题 自由:
    • 免费获取11个技术圣经PDF:

1、本文学习内容和目标

微服务架构通过将复杂的单体应用拆分为一组小型、自治的服务,为构建灵活、可扩展的应用提供了一种新的方式。

微服务框架具有以下优势:

  • 模块化和可扩展性:微服务框架将应用程序拆分成多个独立的服务,每个服务可以独立开发、部署和扩展,提高了系统的灵活性和可伸缩性。
  • 技术多样性:微服务框架支持使用不同的技术栈和编程语言来构建不同的服务,使团队可以根据具体需求选择最合适的技术。
  • 高可用性和容错性:微服务框架通过服务注册与发现、负载均衡和容错机制,提供了高可用性和容错性,保证了系统的稳定性和可靠性。
  • 独立部署和快速迭代:每个服务可以独立部署,使团队可以快速迭代和发布新功能,提高了开发和交付的效率。

在构建微服务系统时,选择一个适合的框架可以加速开发过程并提高系统的稳定性和可维护性。

本文旨在通过手把手教程,引导读者从零开始搭建一套Java微服务框架。

我们将使用Spring Cloud作为基础框架,并结合Nacos作为服务注册中心,Spring Cloud Gateway作为API网关,以及Feign作为服务之间的通信方式。

此外,我们还将探讨如何使用Docker容器化和Jenkins进行持续集成和部署,以构建一个完整的微服务架构。

通过本文的学习,读者将掌握以下技能:

  • 设计和搭建微服务框架的基本原则
  • 配置和使用Spring Cloud、Nacos、Spring Cloud Gateway和Feign等关键组件
  • 实现服务注册与发现、服务调用和负载均衡、服务监控和日志管理、服务安全和认证授权等核心功能
  • 应用Docker容器化和Jenkins进行持续集成和部署

在开始构建自己的Java微服务框架之前,让我们先了解下设计微服务框架要遵守的一些基本原则。

2、设计微服务框架的基本原则

在设计微服务框架时,我们需要遵循一些基本原则,以确保系统的可扩展性、可维护性和可靠性。以下是设计微服务框架的基本原则:

1.解耦和独立性:

微服务架构的核心概念之一是服务的解耦和独立性。每个微服务应该具有清晰的边界,它们可以独立开发、部署和扩展。在设计框架时,要保证各个微服务之间的解耦,使其可以独立演化而不会对其他服务产生过多的影响。

2.可伸缩性和容错性:

微服务架构的另一个重要目标是实现可伸缩性和容错性。框架应该能够根据负载的增加或减少,自动扩展或缩减服务实例的数量。同时,要考虑到服务的容错能力,当某个服务出现故障时,框架应该能够自动将请求路由到其他可用的服务实例上。

3.简化开发和部署过程:

微服务框架应该能够简化开发和部署的过程。提供一套标准化的开发模式和工具链,使开发人员可以快速构建和部署微服务。自动化的构建、测试和部署流程能够提高开发效率,减少人为错误。

4.兼容性和可扩展性:

框架应该具备良好的兼容性和可扩展性,能够与其他技术和组件进行集成。例如,能够无缝地与现有的数据存储、消息队列、认证授权系统等进行整合。此外,框架本身也应该是可扩展的,可以根据需求灵活地添加新的功能模块。

设计微服务框架时,需要综合考虑这些原则,并根据实际情况进行权衡和取舍。合理的框架设计能够提高开发效率、降低系统复杂度,并为微服务架构的可持续发展打下坚实的基础。在后续的章节中,我们将深入探讨如何应用这些原则,结合Spring Cloud、Nacos、Spring Cloud Gateway、Feign等组件,构建一套高效可靠的Java微服务框架。

3、搭建基础设施

在搭建微服务框架之前,我们需要配置一些基础设施,包括Java开发环境、构建工具、版本控制和集成开发环境(IDE)。下面是一些常用的工具和配置:

1.安装Java开发环境

工具介绍:

首先,确保你的系统上已经安装了Java开发工具包,Java开发环境包括Java Development Kit(JDK),它是开发和运行Java应用程序所必需的工具包。

你可以从Oracle官方网站或OpenJDK项目中下载并安装最新版本的JDK。

安装完成后,设置JAVA_HOME环境变量,指向JDK的安装目录。

下载地址:

  • Oracle JDK: https://www.oracle.com/java/technologies/javase-jdk11-downloads.html
  • OpenJDK: https://adoptopenjdk.net/

安装方式:

  1. 根据你的操作系统选择合适的Java发行版。
  2. 下载安装程序并运行。
  3. 按照安装向导的指引完成安装。
  4. 配置JAVA_HOME环境变量:
    • Windows:在系统变量中新建一个名为JAVA_HOME的变量,值为JDK的安装路径(例如:D:\program\Java\jdk1.8.0_202)。
    • macOS/Linux:在终端中编辑~/.bashrc或~/.bash_profile文件,并添加以下行:export JAVA_HOME=/path/to/jdk。然后运行source ~/.bashrcsource ~/.bash_profile命令使配置生效。

操作示例:

  1. 打开命令行终端。
  2. 执行以下命令验证Java安装是否成功:
java -version
  1. 如果成功安装,会显示Java版本信息。

2.安装和配置Maven

工具介绍:

Apache Maven是一款流行的构建工具,用于管理Java项目的依赖和构建过程。你可以从Apache Maven官方网站下载Maven,并按照官方文档的指引进行安装和配置。配置完成后,确保你可以在命令行中使用mvn命令。

下载地址:

Maven官方网站:https://maven.apache.org/download.cgi

安装方式:

  1. 下载适用于你的操作系统的Maven二进制发行版(ZIP或tar.gz格式)。
  2. 解压下载的文件到你选择的目录。
  3. 配置MAVEN_HOME环境变量:
    • Windows:在系统变量中新建一个名为MAVEN_HOME的变量,值为Maven的安装路径(例如:C:\apache-maven-3.8.3)。
    • macOS/Linux:在终端中编辑~/.bashrc或~/.bash_profile文件,并添加以下行:export MAVEN_HOME=/path/to/maven。然后运行source ~/.bashrcsource ~/.bash_profile命令使配置生效。
  4. 将Maven的bin目录添加到系统的PATH环境变量中。

操作示例:

  1. 打开命令行终端。
  2. 执行以下命令验证Maven安装是否成功:
mvn -v
  1. 如果成功安装,会显示Maven版本信息。

3.安装和配置Git

工具介绍:

Git是一款分布式版本控制系统,常用于协作开发和代码管理。你可以从Git官方网站下载并安装Git客户端。安装完成后,通过命令行验证Git是否正确安装,并设置你的用户名和邮箱。

下载地址:

Git官方网站:https://git-scm.com/downloads

安装方式:

  1. 下载适用于你的操作系统的Git安装程序。
  2. 运行安装程序并按照安装向导的指引进行安装。
  3. 在安装过程中选择合适的选项,例如选择安装位置和默认编辑器。

操作示例:

  1. 打开命令行终端。
  2. 配置用户名和邮箱:
git config --global user.name "Your Name"git config --global user.email "your.email@example.com"
  1. 执行以下命令验证Git安装是否成功:
git --version
  1. 如果成功安装,会显示Git版本信息。

4.安装集成开发环境(IDE)

工具介绍:

推荐使用IntelliJ IDEA作为开发微服务的集成开发环境,IntelliJ IDEA是一款强大的Java集成开发环境,提供了丰富的功能和工具来开发Java应用程序。你可以从JetBrains官方网站下载并安装IntelliJ IDEA的社区版或旗舰版,一般社区版能满足基本的开发需要。安装完成后,打开IntelliJ IDEA,并根据需要进行相应的配置,例如选择主题、安装必要的插件等。

下载地址:

IntelliJ IDEA官方网站:https://www.jetbrains.com/idea/download/

安装方式:

  1. 下载适用于你的操作系统的IntelliJ IDEA安装程序。
  2. 运行安装程序并按照安装向导的指引进行安装。
  3. 在安装过程中选择合适的选项,例如选择安装位置、启动器图标等。

操作示例:

  1. 打开安装后的IntelliJ IDEA。
  2. 配置IntelliJ IDEA的插件和主题等个性化设置。

5.创建项目和配置构建工具

  1. 打开IntelliJ IDEA。

  2. 在欢迎界面中选择"Create New Project"或点击菜单栏的"File" -> "New" -> "Project"。

  3. 使用 Spring Initializr 快速生成项目结构,

    输入名称,存储位置,jdk等信息,点击下一步

    选择spring boot版本,选择所需依赖,点击创建

    项目创建后,可以在pom.xml文件里继续配置依赖和构件项。

    pom.xml示例如下:

            org.springframework.boot        spring-boot-starter-data-jpa                org.springframework.boot        spring-boot-starter-web        2.7.11                com.h2database        h2        runtime                org.projectlombok        lombok        true                org.springframework.boot        spring-boot-starter-test        test                            org.springframework.cloud            spring-cloud-dependencies            ${spring-cloud.version}            pom            import                            com.alibaba.cloud            spring-cloud-alibaba-dependencies            2021.1            pom            import                ${project.artifactId}                        org.apache.maven.plugins            maven-resources-plugin            3.0.1                            UTF-8                                                            attach-sources                                                                org.apache.maven.plugins            maven-surefire-plugin            3.0.0-M5                            methods                10                -Dfile.encoding=UTF-8                true                                        org.apache.maven.plugins            maven-assembly-plugin            3.3.0                                                jar-with-dependencies                                                                            make-assembly                    package                                            single                                                                                    org.springframework.boot            spring-boot-maven-plugin                                                                        repackage                                                                            true                -Dfile.encoding=UTF-8                true                exec                        

以上是安装和配置Java、Maven、Git和IntelliJ IDEA的详细步骤。

请按照这些步骤进行操作,确保这些工具在你的开发环境中正确安装和配置。

接下来我们就可以继续进行下一步,开始搭建Java微服务框架。

4、定义微服务接口和协议

在设计微服务框架时,定义微服务接口和协议是非常重要的一步。

接下来以学生信息为例,结合JPA(Java Persistence API),提供相关的增删改查的代码示例。

JPA(Java Persistence API)是Java EE的一部分,是一种用于对象持久化的规范。

它提供了一种以面向对象的方式进行数据库操作的方式,通过简化数据库访问和数据对象之间的映射,提高了开发效率。

JPA使用注解来描述实体类和数据库表之间的映射关系,可以轻松地进行增删改查等常见数据库操作。它支持各种关系型数据库,并提供了事务管理、缓存等功能。

在我们的示例中,我们使用JPA来定义学生实体类,并通过注解来映射学生信息表的结构。这样,我们可以通过简单的代码操作来实现对学生信息的持久化和查询。

1.引入JPA依赖

在开始之前,我们需要在项目的pom.xml文件中添加JPA的依赖。JPA是Java Persistence API的缩写,它是Java EE中持久化操作的标准规范,用于简化数据库操作和实体对象的映射关系。

请在项目的pom.xml文件中添加以下依赖:

                javax.persistence        javax.persistence-api        2.2                    org.hibernate        hibernate-core        5.6.0.Final                    com.h2database        h2        1.4.200                        org.springframework.boot        spring-boot-starter-data-jpa        

这些依赖将启用JPA和Hibernate作为我们的持久化框架,并使用H2数据库作为示例数据库。你可以根据自己的需求替换为其他数据库。

2.示例表结构

在我们的示例中,我们将使用一个名为"student"的表来存储学生信息。该表包含三个列:id(主键),name和age。

请确保在你的数据库中创建了名为"student"的表,以及相应的列。以下是表的DDL示例:

CREATE TABLE student (  id INT PRIMARY KEY,  name VARCHAR(50),  age INT);

3.application.yml配置

在项目中,我们需要配置application.yml文件来连接数据库和配置JPA。

请在src/main/resources目录下创建一个名为application.yml的文件,并添加以下内容:

server:  port: 8180  servlet:    context-path: /spring:  application:    name: students-service  datasource:    url: jdbc:h2:mem:test    username: sa    password: password    driver-class-name: org.h2.Driver  jpa:    hibernate:      ddl-auto: create    show-sql: true

以上配置使用了H2内存数据库,并使用了默认的sa用户和password密码进行连接。同时,我们启用了Hibernate的DDL自动更新功能,并配置JPA显示SQL语句。

4.定义学生实体类

首先,定义一个学生实体类,用于表示学生的信息。可以包含学生的ID、姓名、年龄等属性。

import lombok.Data;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;@Entity@Datapublic class Student {    @Id    @GeneratedValue(strategy = GenerationType.AUTO)    private Long id;    private String name;    private int age;}

5.定义学生信息的持久化接口

使用JPA来管理学生信息的持久化操作。定义一个学生信息的持久化接口,提供增删改查等方法。

import org.springframework.data.jpa.repository.JpaRepository;public interface StudentRepository extends JpaRepository {    // 可以添加自定义的查询方法,如根据姓名查询学生信息等}

6.定义学生信息的控制器接口

在微服务框架中,通过HTTP协议暴露学生信息的API接口供外部调用。定义一个学生信息的控制器接口,提供增删改查等API方法。

import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.*;import java.util.List;@RestController@RequestMapping("/students")public class StudentController {    @Autowired    private StudentRepository studentRepository;    @GetMapping    public List getAllStudents() {        return studentRepository.findAll();    }    @PostMapping    public Student createStudent(@RequestBody Student student) {        return studentRepository.save(student);    }    @GetMapping("/{id}")    public Student getStudentById(@PathVariable("id") Long id) {        return studentRepository.findById(id).orElse(null);    }    @PutMapping("/{id}")    public Student updateStudent(@PathVariable("id") Long id, @RequestBody Student updatedStudent) {        Student existingStudent = studentRepository.findById(id).orElse(null);        if (existingStudent != null) {            existingStudent.setName(updatedStudent.getName());            existingStudent.setAge(updatedStudent.getAge());            return studentRepository.save(existingStudent);        }        return null;    }    @DeleteMapping("/{id}")    public void deleteStudent(@PathVariable("id") Long id) {        studentRepository.deleteById(id);    }}

通过以上代码示例,我们定义了一个学生信息的实体类、学生信息的持久化接口和学生信息的控制器接口。

这样就可以通过API来进行学生信息的增删改查操作。

在接下来的步骤中,我们将结合Spring Cloud、Nacos、Spring Cloud Gateway、Feign、Docker和Jenkins等组件,搭建一个完整的Java微服务框架。

5、实现服务注册与发现

服务注册与发现是微服务架构中非常重要的一部分,它允许我们动态地注册和发现微服务实例,从而实现微服务之间的通信。在这一节中,我们将详细介绍服务注册与发现的工作原理和实现方式。

  1. 服务注册

服务注册是指将微服务实例的信息(例如主机名、端口号、服务名称等)注册到服务注册中心,使得其他服务可以发现和调用它。下面是服务注册的步骤:

  • 微服务启动时,它会向服务注册中心发送注册请求,提供自己的信息。
  • 服务注册中心收到注册请求后,将微服务的信息保存起来,并为其生成一个唯一的标识符(例如服务ID)。
  • 其他微服务可以通过服务注册中心查询和获取已注册的微服务实例列表。
  1. 服务发现

服务发现是指在需要调用其他微服务时,通过服务注册中心来获取可用的微服务实例信息。下面是服务发现的步骤:

  • 微服务需要调用其他服务时,它向服务注册中心发送发现请求,指定需要调用的服务名称。
  • 服务注册中心根据服务名称查询已注册的微服务实例列表,并返回给调用方。
  • 调用方根据负载均衡策略选择一个可用的微服务实例进行调用。
  1. 实现方式

服务注册与发现可以采用不同的实现方式,常见的有以下几种:

  • 基于服务注册中心的实现:使用独立的服务注册中心,例如Netflix Eureka、Consul或Nacos。微服务在启动时将自己注册到注册中心,其他微服务可以通过查询注册中心获取可用的微服务实例信息。
  • 基于DNS的实现:每个微服务使用自己的主机名和端口号,其他微服务通过域名解析来发现和调用它们。这种方式通常用于较小规模的微服务架构。
  • 基于边车代理的实现:使用边车代理(例如Zuul或Spring Cloud Gateway)来代理所有的微服务请求,并在代理层进行服务发现和负载均衡。

在实现服务注册与发现时,我们通常会使用专门的框架和工具来简化开发和管理。例如,结合Spring Cloud框架和Nacos注册中心,我们可以通过使用@EnableDiscoveryClient注解启用服务注册与发现功能,并通过配置中心来配置服务注册中心的地址。然后,我们可以通过注入DiscoveryClient来获取已注册的微服务实例列表,并根据需要进行调用。

通过服务注册与发现,我们可以实现微服务架构的弹性、可扩展和高可用性,使得微服务之间的通信更加灵活和可靠。

接下来,我们将使用Nacos作为服务注册与发现的中间件,并进行安装和配置。

Nacos(Naming and Configuration Service)是一个开源的服务注册与发现中间件,由阿里巴巴集团开发和维护。它提供了服务注册、发现、配置管理和动态配置更新的功能,可以帮助我们构建弹性可伸缩的微服务架构。

Nacos支持主流的服务注册和发现协议,如Eureka、Consul和Nacos自身的服务注册协议。它还提供了灵活的配置管理功能,支持动态配置刷新,可以帮助我们实现微服务的配置中心。

1.安装和配置Nacos

首先,我们需要安装Nacos Server。请按照以下步骤进行操作:

步骤 1:下载Nacos Server

你可以从Nacos的官方GitHub仓库下载最新版本的Nacos Server。

下载地址:https://github.com/alibaba/nacos/releases

步骤 2:解压Nacos Server

将下载的Nacos压缩文件解压到你选择的目录中。

步骤 3:启动Nacos Server

进入解压后的Nacos目录,执行以下命令启动Nacos Server:

PS D:\program\nacos\bin> .\startup.cmd -m standalone"nacos is starting with standalone"         ,--.       ,--."|   ,--,:  : |                                           Nacos 2.2.2,`--."`|  " :                       ,---.               Running in stand alone mode, All function modules|   :  :  | |                      "   ,"\   .--.--.    Port: 8848:   |   \ | :  ,--.--.     ,---.  /   /   | /  /    "   Pid: 16948|   : "  "; | /       \   /     \.   ; ,. :|  :  /`./   Console: http://10.23.48.43:8848/nacos/index.html"   " ;.    ;.--.  .-. | /    / ""   | |: :|  :  ;_|   | | \   | \__\/: . ..    " / "   | .; : \  \    `.      https://nacos.io"   : |  ; ." ," .--.; |"   ; :__|   :    |  `----.   \|   | "`--"  /  /  ,.  |"   | "."|\   \  /  /  /`--"  /"   : |     ;  :   ."   \   :    : `----"  "--".     /;   |."     |  ,     .-./\   \  /            `--"---""---"        `--`---"     `----"2023-05-17 11:20:55,045 INFO Tomcat initialized with port(s): 8848 (http)

Nacos Server将在默认端口(8848)启动,并以单机模式运行。

步骤 4:访问Nacos控制台

在浏览器中访问以下地址,进入Nacos控制台:

http://10.23.48.43:8848/nacos

2.引入Nacos相关依赖

在开始之前,我们需要在项目的pom.xml文件中添加Nacos相关依赖。请添加以下依赖:

xmlCopy code                        com.alibaba.cloud            spring-cloud-starter-alibaba-nacos-discovery            2021.1                                    org.springframework.cloud            spring-cloud-starter-bootstrap                

以上依赖将引入Nacos服务注册与发现的功能。

3.系统配置变更

现在,我们需要进行一些系统配置变更,以便我们的微服务可以与Nacos进行交互。请在bootstrap.yml文件中添加以下配置:

spring:  cloud:    nacos:      discovery:        server-addr: 10.23.48.43:8848

以上配置指定了Nacos Server的地址和端口。

4.示例代码

接下来,我们将编写示例代码,实现服务注册与发现的功能。请添加以下代码到Spring Boot应用程序中的启动类上方:

import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@EnableDiscoveryClient@SpringBootApplicationpublic class StudentsServiceApplication {    public static void main(String[] args) {        SpringApplication.run(StudentsServiceApplication.class, args);    }}

在以上代码中,我们使用了@EnableDiscoveryClient注解来启用服务注册与发现功能。

现在,你的微服务将能够与Nacos进行通信,实现服务的注册和发现。

在接下来的步骤中,我们将继续编写代码来实现其他功能,如服务网关、服务间通信等。

6、实现服务调用和负载均衡

在微服务架构中,服务之间的调用是非常常见的场景。为了简化服务调用的过程并实现负载均衡,我们可以使用Feign与Nacos结合来实现。本节将详细介绍服务调用的概念以及如何使用Feign与Nacos来实现服务调用和负载均衡。

  1. 服务调用的概念

服务调用是指一个微服务向另一个微服务发起请求,获取所需的数据或执行特定的操作。在微服务架构中,服务调用可以跨越多个微服务实例,因此需要一种机制来管理和处理服务之间的通信。

  1. 使用Feign与Nacos实现服务调用和负载均衡
  • Feign是一个声明式的Web服务客户端,它可以与多种服务注册中心集成,包括Nacos。通过使用Feign,我们可以通过简单的接口定义来调用其他微服务,并且不需要手动编写具体的HTTP请求代码。

  • Nacos作为服务注册中心,提供了服务发现和负载均衡的功能。它可以自动维护微服务实例列表,并根据负载均衡策略选择合适的实例进行调用。

下面是使用Feign与Nacos结合实现服务调用和负载均衡的步骤:

  • 步骤 1: 引入依赖

在项目的pom.xml文件中添加Feign相关的依赖:

                org.springframework.cloud        spring-cloud-starter-openfeign                org.springframework.cloud        spring-cloud-starter-loadbalancer              
  • 步骤 2: 启用Feign客户端

在启动类上添加@EnableFeignClients注解,启用Feign客户端:

import org.springframework.cloud.openfeign.EnableFeignClients;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@EnableDiscoveryClient@EnableFeignClients@SpringBootApplicationpublic class StudentsServiceApplication {    public static void main(String[] args) {        SpringApplication.run(StudentsServiceApplication.class, args);    }}
  • 步骤 3: 创建Feign客户端接口

创建一个Feign客户端接口,使用@FeignClient注解指定要调用的微服务名称和相关配置:

import org.springframework.cloud.openfeign.FeignClient;import org.springframework.web.bind.annotation.GetMapping;@FeignClient(name = "students-service")public interface StudentFeignClient {    @GetMapping("/students/{id}")    Student getStudentById(@PathVariable("id") Long id);}
  • 步骤 4: 使用Feign客户端进行服务调用

通过注入Feign客户端接口,并调用相应的方法来进行服务调用:

import com.crazymaker.students.entity.Student;import com.crazymaker.students.feign.StudentFeignClient;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;@Servicepublic class StudentService {    private StudentFeignClient feignClient;    @Autowired    public StudentService(StudentFeignClient feignClient) {        this.feignClient = feignClient;    }    public Student getStudentById(Long id) {        return feignClient.getStudentById(id);    }}

在上面的示例中,通过serviceClient.getStudentById()来调用目标微服务的接口。

通过以上步骤,我们可以使用Feign与Nacos结合来实现服务调用和负载均衡。Feign将负责处理底层的HTTP通信细节,而Nacos将负责维护微服务实例列表和选择合适的实例进行调用,从而实现了服务调用和负载均衡的功能。

7、实现服务监控和日志管理

服务监控是指对微服务架构中的各个服务进行实时监控和管理,以确保系统的稳定性和可靠性。通过监控服务的运行状态、性能指标和异常情况,可以及时发现问题并采取相应措施,以提高系统的可用性和响应能力。

日志管理是指对微服务架构中生成的日志进行收集、存储、分析和展示的过程。日志是系统运行的重要记录,通过对日志进行管理和分析,可以了解系统的运行状况、故障信息和异常情况,以便于问题排查和系统优化。

服务监控和日志管理对于微服务架构具有重要的必要性和优势:

  • 实时监控和管理:通过服务监控,可以实时监测服务的运行状态、性能指标和异常情况,及时发现问题并采取措施,保证系统的稳定性和可靠性。
  • 故障排查和问题定位:通过日志管理,可以收集和分析系统生成的日志信息,帮助快速定位问题、排查故障,提高故障处理的效率。
  • 性能优化和系统优化:通过监控和分析服务的性能指标,可以发现性能瓶颈和优化空间,以提升系统的性能和响应能力。
  • 数据分析和业务洞察:通过对日志进行分析和挖掘,可以获得有价值的业务洞察,帮助优化业务流程和决策制定。

下面我们通过分别搭建和配置Spring Boot Admin 和 ELK 服务来实现性能监控和日志管理:

1.Spring Boot Admin 服务监控

Spring Boot Admin是一个开源的服务监控和管理工具,它提供了一个Web界面,用于监控和管理基于Spring Boot的应用程序。通过Spring Boot Admin,可以实时监控和管理应用程序的运行状态、健康状况、性能指标等,并提供了强大的可视化和告警功能。

安装和配置Spring Boot Admin的步骤如下:

  1. 按上文步骤新建一个Spring Boot项目, 添加Spring Boot Admin的依赖

    • 在Spring Boot应用程序的pom.xml文件中添加Spring Boot Admin的依赖:
    de.codecentric    spring-boot-admin-starter-server    3.0.3
  1. 配置bootstrap.ymlapplication.yml文件
spring:  cloud:    nacos:      discovery:        server-addr: 10.23.48.43:8848
server:  port: 8181  servlet:    context-path: /spring:  application:    name: admin-service
  1. 启动Spring Boot Admin Server
@EnableDiscoveryClient@SpringBootApplication@EnableAdminServerpublic class AdminServiceApplication {    public static void main(String[] args) {        SpringApplication.run(AdminServiceApplication.class, args);    }}

启动应用程序, 点击 http://10.23.48.43:8181/applications 访问监控页面

  1. 微服务项目配置Spring Boot Admin

1)pom.xml 里添加admin依赖

    de.codecentric    spring-boot-admin-starter-server    3.0.3    org.springframework.boot    spring-boot-starter-actuator

2)在Spring Boot应用程序的配置文件(如application.yml)中,配置Spring Boot Admin Server的相关信息:

spring:  boot:    admin:      client:        url: http://10.23.48.43:8181 # Spring Boot Admin Server的地址   management:  endpoints:    web:      exposure:        include: "*"  endpoint:    health:      show-details: ALWAYS        
  1. 重新启动应用程序

重新启动应用程序, 它将自动注册到Spring Boot Admin Server。

通过以上配置,我们可以实现Spring Boot Admin与Nacos的结合,使得应用程序能够通过Spring Boot Admin进行监控和管理。

2.ELK 日志监控

ELK是一个流行的日志管理和分析解决方案,由Elasticsearch、Logstash和Kibana三个项目组成,常用于日志收集和分析。

日志主要包括系统日志、应用程序日志和安全日志。运维和开发人员可以通过日志了解服务器运行过程中发生的错误及错误产生的原因。定期分析日志可以了解服务器的运行情况、性能、安全性等。

每台服务器或应用程序都会产生日志,如果每次都登录这些服务器查看日志并分析会耗费大量时间,而且效率低下,这时我们就需要思考如何将日志汇总起来统一查看。日志集中管理之后又会产生新的问题,日志量太大,日志统计和检索又成为新的问题,如何能实现高性能的检索统计呢?ELK能完美解决我们的问题。

  • Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
  • Logstash是一个完全开源的工具,他可以对你的日志进行收集、分析,并将其存储供以后使用。
  • kibana 也是一个开源和免费的工具,它可以为 Logstash 和 Elasticsearch 提供的日志分析友好的 Web 界面,可以汇总、分析和搜索重要数据日志。

关于ELK的原理和实操,强烈推荐:

ELK日志平台(elasticsearch +logstash+kibana)原理和实操(史上最全):

https://www.cnblogs.com/crazymakercircle/p/16732034.html

ELK安装

本文这里为了方便演示,仅演示利用docker容器在本机部署ELK,在实际生产环境下,推荐使用多台linux服务器,安装ELK集群。

首先新建elk目录,在目录下新建相关文件夹:

docker-compose.yml内容如下:

version: "3.2"services:    elasticsearch:        image: elasticsearch:7.17.4        volumes:            - ./es/plugins:/usr/share/elasticsearch/plugins #插件文件挂载            - ./es/data:/usr/share/elasticsearch/data #数据文件挂载            - ./es/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml #配置        ports:            - "9200:9200"            - "9300:9300"        container_name: elasticsearch        environment:            - "cluster.name=elasticsearch" #设置集群名称为elasticsearch            - "discovery.type=single-node" #以单一节点模式启动            - "ES_JAVA_OPTS=-Xms1024m -Xmx1024m" #设置使用jvm内存大小        networks:            - elk    logstash:        image: logstash:7.17.4        container_name: logstash        volumes:            - "./logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf"        ports:            - "5044:5044"            - "50000:50000/tcp"            - "50000:5000/udp"            - "9600:9600"        environment:            LS_JAVA_OPTS: -Xms1024m -Xmx1024m            TZ: Asia/Shanghai            MONITORING_ENABLED: false        links:            - elasticsearch:es #可以用es这个域名访问elasticsearch服务        networks:            - elk        depends_on:            - elasticsearch    kibana:        image: kibana:7.17.4        container_name: kibana        volumes:            - ./kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml        ports:            - "5601:5601"        links:            - elasticsearch:es #可以用es这个域名访问elasticsearch服务        environment:            - ELASTICSEARCH_URL=http://elasticsearch:9200 #设置访问elasticsearch的地址            - "elasticsearch.hosts=http://es:9200" #设置访问elasticsearch的地址            - I18N_LOCALE=zh-CN        networks:            - elk        depends_on:            - elasticsearchnetworks:    elk:        name: elk        driver:            bridge           

在es目录下新建 data、plugins 文件夹, 以及elasticsearch.yml文件,内容如下:

cluster.name: elasticsearch # 集群名称node.name: node-1 # 节点名称network.host: 0.0.0.0 # 监听地址http.port: 9200 # 监听端口http.cors.enabled: truehttp.cors.allow-origin: "*"

在logstash目录下新建logstash.conf文件, 内容如下:

input {  tcp {    port => 5000    codec => json  }}filter {  # 进行过滤和转换规则的配置}output {  elasticsearch {    hosts => ["es:9200"] # Elasticsearch的地址    index => "my-application-%{+YYYY.MM.dd}" # 索引名称,可按日期划分  }}

在kibana目录下,创建config文件夹,并新建kibana.yml文件,内容如下:

# Default Kibana configuration for docker targetserver.host: "0.0.0.0"server.shutdownTimeout: "5s"elasticsearch.hosts: ["http://elasticsearch:9200"]monitoring.ui.container.elasticsearch.enabled: trueserver.port: 5601 # 监听端口

启动:

docker-compose -f docker-compose.yml up -d

微服务应用接入

  • 在应用系统中,将日志输出到Logstash的监听端口。以下是一个Logback配置的示例logback-spring.xml
            10.23.48.43:5000                            
  • 引入logstash依赖
    net.logstash.logback    logstash-logback-encoder    7.2
  • 使用Kibana访问Elasticsearch,配置索引模式、定义可视化仪表板和图表等,以展示和分析日志数据。

通过以上步骤,我们可以搭建起ELK Stack,并将应用系统接入到ELK Stack中进行日志的收集、存储、分析和可视化展示。这样,我们可以方便地对日志进行搜索、过滤、聚合和可视化,帮助我们快速定位问题、监控系统的运行状况,并提供数据支持进行性能优化和故障排查。

通过结合这些开源中间件,我们可以实现对微服务的全面监控和日志管理,帮助我们及时发现问题、优化性能,并提供可视化的展示和分析工具,从而提升微服务架构的可靠性和稳定性。

8、保护服务安全

在微服务架构中,服务安全保护是至关重要的,它们可以保护微服务免受未经授权的访问,并确保只有经过身份验证和授权的用户才能访问受保护的资源。

Spring Cloud Gateway是一个基于Spring Framework 5、Project Reactor和Spring Boot 2构建的轻量级网关服务,用于构建和管理微服务架构中的API网关。

API网关在微服务架构中安全方面扮演着重要的角色,它作为系统的入口,它可以提供以下安全功能:

  1. 访问控制:API网关可以对传入的请求进行访问控制,确保只有经过身份验证和授权的用户能够访问受保护的资源。它可以验证请求中的身份验证令牌或证书,并根据配置的权限规则进行访问控制。

  2. 安全认证和授权:API网关可以与认证和授权中间件(如OAuth2)集成,实现对微服务的安全认证和授权。它可以验证请求中的访问令牌,并将认证和授权信息传递给后端的微服务,以确保只有具有足够权限的用户能够访问特定的资源。

  3. 保护后端服务:API网关可以隐藏后端的微服务架构,只暴露必要的接口给外部客户端,从而降低了被恶意攻击的风险。它可以阻止未经授权的请求直接访问后端服务,并提供请求的限流和缓冲功能,以保护后端服务免受过载或恶意攻击。

  4. 安全审计和日志记录:API网关可以记录请求和响应的详细信息,包括访问时间、来源IP、请求内容等,以便进行安全审计和故障排查。它可以将日志记录到集中的日志管理系统中,方便监控和分析。

  5. 攻击防护:API网关可以实施一些安全防护措施,如防止跨站脚本攻击(XSS)、跨站请求伪造(CSRF)和注入攻击等。它可以对传入的请求进行验证和过滤,以识别和阻止潜在的恶意行为。

综上所述,API网关在安全方面具有重要的作用。它可以提供访问控制、安全认证和授权、保护后端服务、安全审计和日志记录以及攻击防护等功能,帮助确保微服务架构的安全性和可靠性。

通过合理配置和使用适当的安全机制,API网关可以成为微服务架构中的首道防线,保护系统免受潜在的安全威胁。

下面是搭建和配置Spring Cloud Gateway的步骤示例:

首先创建一个Spring Boot应用, 在项目的pom.xml文件中添加相应的依赖配置。

                org.springframework.cloud        spring-cloud-starter-gateway                    org.springframework.cloud        spring-cloud-starter-alibaba-nacos-discovery    

接下来,在application.yml文件中配置Spring Cloud Gateway和Nacos的相关信息。

# Spring Cloud Gateway配置server:  port: 8182spring:  cloud:    gateway:      discovery:        locator:          enabled: true          lower-case-service-id: true# Nacos配置spring:  cloud:    nacos:      discovery:        server-addr: ${nacos.server-addr} # Nacos Server地址# 网关路由配置spring:  cloud:    gateway:      routes:        - id: sample-service # 路由ID          uri: lb://student-service # 后端服务名          predicates:            - Path=/student/** # 匹配的路径          filters:            - StripPrefix=1 # 去除前缀

以上配置中,需要将nacos.server-addr替换为实际的Nacos Server地址。

然后,创建一个启动类并添加@EnableDiscoveryClient注解,启用服务发现功能。

import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplication@EnableDiscoveryClientpublic class GatewayApplication {    public static void main(String[] args) {        SpringApplication.run(GatewayApplication.class, args);    }}

最后,通过配置路由规则,将请求转发到后端的微服务。可以使用@Bean注解在配置类中定义路由规则,或者使用配置文件中的spring.cloud.gateway.routes属性进行配置。

import org.springframework.cloud.gateway.route.RouteLocator;import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class GatewayConfig {    @Bean    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {        return builder.routes()                .route("student-service", r -> r.path("/student/**")                        .uri("lb://student-service"))                .build();    }}

通过以上配置,Spring Cloud Gateway将根据路由规则将/sample/**路径的请求转发到名为sample-service的后端微服务。

请注意,示例中的sample-service是一个示意的后端微服务名称,需要根据实际情况替换为真实的微服务名称。

这样,结合Spring Cloud Gateway和Nacos的示例就完成了。启动应用后,它将根据配置的路由规则将请求转发到相应的后端微服务,并通过Nacos进行服务的注册和发现。

Spring Cloud Gateway作为微服务架构的入口,除了提供了路由转发,还提供了负载均衡、过滤器、安全认证、请求限流和监控等功能,

关于服务保护,本圣经后面有专栏介绍。当然,有兴趣的小伙伴可以阅读

SpringCloud gateway (史上最全) - 疯狂创客圈:https://www.cnblogs.com/crazymakercircle/p/11704077.html

进一步学习和掌握相关知识。

9、实现持续集成和部署

持续集成(Continuous Integration)是一种软件开发实践,旨在频繁地将代码集成到主干版本控制系统中。持续部署(Continuous Deployment)是持续集成的延伸,自动将通过持续集成构建的可部署软件包发布到生产环境。

以下是一种基本的实现方式:

  1. 版本控制:使用版本控制系统(如Git)管理代码,确保团队成员可以协同开发,并且每个更改都有明确的记录。

  2. 自动化构建:使用构建工具(如Maven)配置构建脚本,定义项目的编译、打包、测试等步骤。

  3. 持续集成服务器:使用持续集成服务器(如Jenkins)来触发构建,并执行自动化构建过程。

  4. 自动化测试:编写并执行自动化测试脚本,包括单元测试、集成测试和端到端测试等,以确保代码质量和功能稳定性。

  5. 自动化部署:使用容器化技术(如Docker)打包应用程序,并将其部署到预先定义的环境中,如开发环境、测试环境和生产环境。

接下来,我们将分别介绍Jenkins和Docker,然后提供详细的配置步骤来实现持续集成和部署。

1.Jenkins

Jenkins是一个开源的持续集成工具,它提供了一系列功能和插件,用于自动化构建、测试和部署软件。以下是Jenkins的基本概念和特点:

  • 作业(Job):Jenkins中的最小单位,代表一个构建或部署任务。
  • 构建(Build):Jenkins执行的一次构建过程,包括编译代码、运行测试、生成构建报告等。
  • 插件(Plugin):Jenkins提供了丰富的插件生态系统,用于扩展其功能,例如集成不同的版本控制系统、构建工具和部署平台等。

2.Docker

Docker是一个开源的容器化平台,它可以将应用程序及其依赖项打包到容器中,提供了一致、可重复和可移植的部署环境。以下是Docker的基本概念和特点:

  • 镜像(Image):Docker容器的基础组件,包含了一个完整的操作系统和应用程序的运行环境。
  • 容器(Container):基于镜像创建的运行实例,每个容器都是相互

隔离的,拥有自己的文件系统、进程空间和网络接口。

  • 仓库(Repository):用于存储和分享镜像的中央注册表,Docker Hub是最常用的公共仓库

3.配置步骤

  1. 微服务应用新增Dockerfile文件
FROM openjdk:8-jreRUN mkdir /appCOPY students-service-exec.jar /app/app.jarENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app/app.jar"]EXPOSE 8180
  1. 安装和配置Jenkins:
  • 下载Jenkins:访问Jenkins官方网站(Jenkins download and deployment)下载适合您操作系统的Jenkins安装包。

  • 安装Jenkins:按照官方文档提供的步骤,安装Jenkins并完成初始化配置。

  • 安装插件:通过Jenkins的插件管理界面,安装必要的插件,如Git插件、Maven插件、docker插件等。

    安装过程可参考 https://zhuanlan.zhihu.com/p/566398364

  1. 配置Jenkins构建任务:
  • 创建新任务:在Jenkins主界面,选择"新建任务",输入任务名称,并选择自由风格的软件项目。
  • 配置源代码管理:在任务配置界面,选择Git作为源代码管理工具,提供代码仓库的URL和凭据。
  • 配置构建步骤:在构建步骤中,可以定义构建脚本,如编译代码、运行测试、打包构建等。
  1. 安装和配置Docker:
  • 安装Docker:根据您的操作系统,参考Docker官方文档(https://docs.docker.com/get-docker/)进行Docker的安装。
  • 配置Docker构建环境:在Jenkins任务配置界面,选择"添加构建步骤",选择"Execute shell"或"Execute Windows batch command",然后在脚本中使用Docker命令构建和发布镜像。

构建成功后,我们可以在docker桌面端看到students-service服务已启动,

通过以上步骤,您可以使用Jenkins和Docker实现持续集成和部署。

Jenkins将根据配置的触发器自动执行构建任务,通过Docker构建和发布镜像,实现持续集成和部署的流程。

您可以根据具体的项目需求和环境配置Jenkins任务和Docker构建脚本,以实现自动化的软件交付流程。

10、小结

在本文中,我们首先讨论了微服务框架的基本原则,然后通过安装和配置Java、Maven、Git和IDEA等工具,为搭建基础设施做好准备。接着,我们定义了微服务接口和协议,并使用JPA提供了增删改查的代码示例。通过集成Nacos,我们实现了服务注册与发现,以及使用Feign实现服务调用和负载均衡。

我们还介绍了Spring Boot Admin和Elasticsearch,用于实现服务监控和日志管理。最后,我们使用Spring Cloud Gateway实现了服务安全保护,并通过Jenkins和Docker实现了持续集成和部署。

通过这个搭建过程,我们达到了构建一个完整的Java微服务框架的目标。

我们建立了基础设施,定义了接口和协议,实现了服务注册与发现、服务调用和负载均衡、服务监控和日志管理、服务安全和认证授权,并实现了持续集成和部署。

搭建过程存在的不足和改进的方向如下:

  1. 性能监控和报警:在服务监控和日志管理部分,我们可以进一步改进,引入Prometheus和Grafana来实现更全面的性能监控和报警功能。Prometheus是一个开源的监控系统,可以收集和存储各种指标数据,并提供强大的查询和报警功能。Grafana是一个数据可视化工具,可以将Prometheus收集的数据以图表的形式展示出来,帮助我们更直观地了解系统的性能状况。通过使用Prometheus和Grafana,我们可以实时监控系统的指标,并设置报警规则,及时发现并解决潜在的性能问题。

  2. 为了保障微服务系统的稳定性和可靠性,你还需要考虑服务的熔断、限流、降级等策略。可以使用 Hystrix 或者 Resilience4j 等库来实现这些功能。

  3. 容器化部署:在持续集成和部署部分,我们可以进一步改进,引入Kubernetes(K8s)来实现容器化部署。Kubernetes是一个开源的容器编排平台,可以简化和自动化应用程序的部署、扩展和管理。通过使用Kubernetes,我们可以将微服务框架中的各个服务容器化,并通过K8s进行部署、伸缩和管理,提供更高效、可靠和弹性的部署方案。

  4. 自动化和流程改进:在持续集成和部署部分,我们可以进一步改进和优化自动化流程。通过使用更先进的CI/CD工具和技术,如Jenkins Pipeline、GitOps等,可以实现更高度的自动化和流程改进。例如,可以通过编写自动化的流水线脚本,实现代码的构建、测试、打包和部署的自动化,并与版本控制系统(如Git)进行集成,实现代码的自动触发和持续交付。

通过上述改进,我们可以进一步提升微服务框架的性能监控、报警能力,以及部署和管理的效率和可靠性。这将有助于更好地满足不断变化的业务需求,并提升系统的可靠性和稳定性。

技术自由的实现路径:

实现你的 架构自由:

《吃透8图1模板,人人可以做架构》

《10Wqps评论中台,如何架构?B站是这么做的!!!》

《阿里二面:千万级、亿级数据,如何性能优化? 教科书级 答案来了》

《峰值21WQps、亿级DAU,小游戏《羊了个羊》是怎么架构的?》

《100亿级订单怎么调度,来一个大厂的极品方案》

《2个大厂 100亿级 超大流量 红包 架构方案》

… 更多架构文章,正在添加中

实现你的 响应式 自由:

《响应式圣经:10W字,实现Spring响应式编程自由》

这是老版本 《Flux、Mono、Reactor 实战(史上最全)》

实现你的 spring cloud 自由:

《Spring cloud Alibaba 学习圣经》 PDF

《分库分表 Sharding-JDBC 底层原理、核心实战(史上最全)》

《一文搞定:SpringBoot、SLF4j、Log4j、Logback、Netty之间混乱关系(史上最全)》

实现你的 linux 自由:

《Linux命令大全:2W多字,一次实现Linux自由》

实现你的 网络 自由:

《TCP协议详解 (史上最全)》

《网络三张表:ARP表, MAC表, 路由表,实现你的网络自由!!》

实现你的 分布式锁 自由:

《Redis分布式锁(图解 - 秒懂 - 史上最全)》

《Zookeeper 分布式锁 - 图解 - 秒懂》

实现你的 王者组件 自由:

《队列之王: Disruptor 原理、架构、源码 一文穿透》

《缓存之王:Caffeine 源码、架构、原理(史上最全,10W字 超级长文)》

《缓存之王:Caffeine 的使用(史上最全)》

《Java Agent 探针、字节码增强 ByteBuddy(史上最全)》

实现你的 面试题 自由:

4000页《尼恩Java面试宝典 》 40个专题

免费获取11个技术圣经PDF:

关键词:

最新推荐

环球讯息:15亿收入不要了,再见巴黎!3大线索指向加盟曼联,英超争冠变天

今日凌晨,据《队报》、天空体育、《电讯报》等多家媒体的消息,姆巴佩

LPL饭堂灵魂提问,近五年最强中单,Faker难进前十,JDG有望绝杀_焦点热文

这九人评选最强中单和TOP3,为此观众们进行了一系列的讨论,不同人有不

世界要闻:坐不住了!催化剂正式发挥作用,姆巴佩被迫决定,皇马或成大赢家

今天凌晨,来自队报的消息,姆巴佩团队已经通过书面的形式正式通知大巴

天天热头条丨最新世界排名公布!国乒蝉联5项第一,樊振东、孙颖莎面临挑战

德班世乒赛结束后,乒乓球世界排名迎来了新的变化,中国队重新夺回五大

宣传缉枪治爆_天天新消息

本报讯为切实加强缉枪治爆工作,近日,铁岭市公安局工人分局组织民警在

全球时讯:专项行动清理违规渔具

本报讯为切实维护营口市伏季休渔秩序,确保增殖放流取得实效,保障广大

统计:海南旅游收入高于疫前2019 年同期水平

统计数据显示,海南旅游市场旅游收入高于疫情前2019年同期水平,游客消

端午节发朋友圈文案怎么写吸引人?以端午节为主题的文案看这里

端午文案1)粽子飘香,佳人安康。(粽子 祝福)2)粽子是端午限定,你我是命中注定。(爱情 结婚)3)粽子之...

冬至名言有哪些?冬至的古诗10首看这里

冬至佳句七绝·冬至一,枫叶红时信已传,梅心雪意亦如前。阳生莫问春何处,夜永应知又一年。二,夜阑风...

课文匆匆的体裁是什么?课文匆匆教材分析怎么写?

课文匆匆原文燕子去了,有再来的时候;杨柳枯了,有再青的时候;桃花谢了,有再开的时候。但是,聪明的,...

【宁夏】隆德县七名农民晋升高素质农民职称资格

本网讯近日,经宁夏回族自治区固原市农业系列职称评审委员会评审、市人

usual反义词是什么?active的反义词有哪些?

lucky的反义词是什么lucky的反义词是unlucky。lucky的意思以及用法:一、作为形容词1、幸运的,好运的一...

世界动态:@高考生,成绩即将揭晓,志愿如何填报?指南来了!

祝福考生考入理想大学,学上喜欢的专业!

最近的天气也太热了吧!快趁“热”收下这份防中暑指南

在夏季,气温过高、湿度大、风速小等条件下,非常容易引发中暑。“热死

营造学青会氛围!广西体育明星团走进多所小学校园 快看点

“迎接学青会健康新广西”广西新时代文明实践活动暨全民健身志愿服务活

天天微速讯:最新国家级一流本科课程名单公布!广西有这些

日前,教育部公布第二批国家级一流本科课程名单,共有5750门课程获认定

广西科学守护“海上森林” 努力实现“双碳”目标

近日,广西海洋环境监测中心站对平陆运河入海口(位于钦州茅尾海一带)

国四柴油车报废新规定_柴油车报废新规定

1、具体要看什么种类的车,不同种类的车报废年限不同。2、各类机动车使

OEM厂家共同成长黄金搭档 仙佑集团贴心服务共创美好未来

近年来,随着人们健康意识的提高,各种膏药产品市场需求不断增长。在这样的市场背景下,仙佑医药膏药代...

东亚的互不侵犯条约-聚看点

时至今日,我觉得中国可以考虑对日本和韩国提出签订互不侵犯条约。其主

小罗缅怀贝卢斯科尼:你的名字将永远镌刻在AC米兰|世界实时

直播吧6月13日讯贝卢斯科尼因病离世,小罗社媒晒合照缅怀。小罗写道:

埃姆雷-詹:整座城市为多特夺冠做好准备,不知如何消化这种辜负

在《法兰克福汇报》的采访中,埃姆雷-詹对于错失冠军表示:“我依然还

世界报道:基米希回应哈维称赞:我和拜仁还有两年合同,我们有很伟大的计划

直播吧6月13日讯此前哈维曾公开称赞基米希,对此球员进行了回应。在被

挺硬气!21岁女网新星父亲放出豪言:我女儿要拿单打大满贯冠军_环球热点评

只是双打的大满贯冠军,但王欣瑜能够夺冠,同样是非常了不起的,这个小

谈谈你今后的努力方向怎么写?孩子努力的方向和改进措施看这里

今后的努力方向和改进措施1、针对员工提出的推荐,我采取的措施是:①合理安排工作,要放得下一些追求,...

等待下一次重逢的诗句有哪些?形容迟早会见面的文案看这里

依依惜别的诗句1、黄鹤楼送孟浩然之广陵 唐 李白故人西辞黄鹤楼,烟花三月下扬州。孤帆远影碧空尽,唯...

兰波诗集经典句子集锦来了!兰波写得最好的诗看这里

兰波的诗句1、唯一无法忍受即事事可忍受。——兰波2、你隐没在梦中,宛如雪化在火中。——兰波3、天才就...

王昌龄最出名的三首诗你知道吗?最著名的十首边塞诗都在这儿

岑参的边塞诗1、最动人的想家诗:《逢入京使》《逢入京使》故园东望路漫漫,双袖龙钟泪不干。马上相逢无...

当前要闻:贵州电商云公司“一码贵州”平台入选2022年《中国电子商务报告》商业科技创新应用优秀案例

近日,商务部发布《中国电子商务报告(2022)》,多彩贵州网旗下贵州电子

古代经商谚语大全来了!生意高手十句口诀在这儿

经商名言警句1、越是巨大的冒险,越是需要巨大的谨慎。2、如果注定要做一个商人,那么就要随时准备接受...

小学生关于成长的诗歌有哪些?关于成长的诗歌朗诵稿在这儿

关于成长的诗歌《成长的方向》所有的河流都朝着东方不拒细流浩浩汤汤只是为了汇入大海汪洋所有的禾苗破...

哈姆雷特摘抄及感悟怎么写?哈姆雷特读书心得看这里

哈姆雷特读书笔记一杯毒酒,一把毒剑。结局被鲜血浸染。哈姆雷特最终被众人抬放于高台,在沉重的葬礼进...

观天下!兰州举办新就业群体心理健康辅导讲座

本报讯5月25日,甘肃省兰州市非公有制企业党委在兰州奔马集团举办针对

全民tv怎么直播 全民tv申请认证主播教程 全民怎么开通直播_全球独家

很多玩游戏的人都知道全民TV。我们看到上面很多直播,各种各样的都有。

【全球速看料】微信app天天领红包在哪 天天领红包小程序

我们知道支付宝有个天天领红包,微信从1月1日起到1月31日,每天在门店

火山直播怎么开通直播间 火山直播怎么开通呢

火山直播是一款手机直播平台,主打网红娱乐生活直播。当然,我们在火山

京东上面怎么查看自己的年度账单 京东怎么看年度账单2020

京东上面怎么查看自己的年度账单呢,下面小编介绍一下。具体如下:1 打

在ps软件中怎么绘制直线 ps软件里怎么画直线

当我们需要对图片进行一些调整时,可以使用ps工具。在ps中是否可以绘制

6月13日生意社糠醛基准价为11425.00元/吨

6月13日,生意社糠醛基准价为11425 00元 吨,与本月初持平。生意社基准

简讯:有黑的意思的字_黝黑的意思

1、黝黑读:yǒuhēi意思:皮肤暴露在太阳光下而晒成的青黑色。2、2、

环球今头条!疯狂24小时!皇马计中计欺骗全欧,姆巴佩摊牌,1.2亿巨星恐被打压

这无疑是足坛的又一个重磅炸弹:姆巴佩向巴黎圣日耳曼摊牌了,他不会行

全球新动态:曼城挖角国米中场全能神将,瓜帅情有独钟,两大障碍能否克服?

目前,曼城已经找到了一个非常心仪的引援目标,他就是意甲豪门国际米兰

疯狂24小时!皇马计中计欺骗全欧,姆巴佩摊牌,1.2亿巨星恐被打压-最资讯

这无疑是足坛的又一个重磅炸弹:姆巴佩向巴黎圣日耳曼摊牌了,他不会行

谜一样的巴蒂!世界排名第一突然退役,巨大悬念留给万千球迷

2022年3月23日,现女子世界排名第一的澳大利亚球员巴蒂宣布退出网坛,

全球简讯:是否存在有注册资本的分公司

一、是否存在有注册资本的分公司?不存在,任何分公司都没有注册资本的

logo著作权登记费用是多少?

每个公司在设立成功后都有其独特的名称,商品在生产后也有唯一的logo。

奥海科技:接受兴证全球基金等机构调研_报资讯

奥海科技(SZ002993,收盘价:33 92元)发布公告称,2023年6月12日,奥

【机构调研记录】北信瑞丰调研鹭燕医药

个股亮点:旗下厦门燕来福医院为一级医疗机构,开设了口腔科,目前开展

赛博朋克2077发售日期介绍 赛博朋克2077具体发售时间

赛博朋克2077“波兰蠢驴”的又一力作,那么这款游戏到底会在什么时候发

当前动态:GOAT德约斩获生涯第23座大满贯&3圈大满贯第一人

北京时间昨日凌晨,2023年法网男单决赛,36岁的塞尔维亚名将德约科维奇

精彩放送

中网总奖金公布:1175万美元 ,同级别赛事奖金第一,其中WTA赛事803.97万美元 世界今热点

世界观点:中国金花夺冠+豪夺335万,德约科维奇收获1768万巨奖,23冠超纳达尔

短讯!孙颖莎惹争议!参加低级赛事,球迷质疑国乒吃相难看,帮忙抢积分

【新视野】多家上市公司进军新能源产业 跨界“奔赴”合理性引监管层关注

国内单机容量最大的冲击式水电机组完成国产化改造 成功并网发电 环球即时看

环球热消息:奥运积分排名更新!梁王暂居男双榜首,何冰娇高居女单第3

得加钱?记者:除皇马外,巴黎愿今夏将姆巴佩出售给任何球队

德约科维奇与穆雷同一日双双夺冠,球迷梦回四巨头时代,不见费纳!-全球最资讯

【环球热闻】海峡组合法网逆袭夺冠 小将王欣瑜未来可期

美元指数12日上涨

世界速读:沙特能源大臣:沙特想与中国合作,不会理会西方的“担忧”

海南发展(002163):6月12日北向资金增持25.24万股|环球要闻

天天热资讯!牛白_牛白藤别名

天府烤卤官网 天府烤卤总部地址-短讯

专班保障

张志丹:特斯拉FSD渐行渐近!新能源车能否迎来第二春?

热点聚焦:演员张龄心:不结婚不生子,老了就去养老院,如今她打了自己的脸_天天动态

中超之光!巴萨4000万清洗曼城天才,1600万签大连神锋,1年10球

【环球时快讯】记者:迪亚斯新赛季将身穿皇马21号球衣

即时:纳乔:如果我能决定,我会在今夏把姆巴佩带到皇马

世界时讯:皇马拒绝哈弗茨,迪巴拉拒绝沙特亿元高薪,穆里尼奥再收顶薪报价

天天热点评!对话|续写茶香传奇,90后非遗新人有一套

皇马新7号确认!亿元先生接班阿扎尔挑战C罗,10号留给姆巴佩?|环球即时看

饶明受伤,德约鲁德再战法网火枪手杯!

马琳难再指导陈梦,刘国梁布局,主教练放权,主管教练负责场边-世界速讯

【世界时快讯】陈梦丢大满贯有原因!官方杂志透露世乒赛前情况,一姐身体出问题

全球连线|红酒为媒推动中外交流_环球百事通

每日消息!事关买菜! 2023年7月1日,柳州这一新规实施

每日报道:降雨范围更大!13日起,广西将进入“龙舟水”集中期

天天微资讯!硅藻泥优缺点大揭秘_硅藻泥优缺点

恭喜内马尔!利雅得新月为内马尔提出报价,年薪2.5亿欧元

体坛3大GOAT齐聚!梅西德约却只能在两边,詹姆斯丢冠却是居中C位

德天空记者:于帕梅卡诺在拜仁过得不开心,但无意在今夏离队_焦点快看

江瀚新材: 第一届董事会第十四次会议决议公告 今日快讯

“蔚小理”一季度交卷:理想连续盈利 蔚来小鹏各有“焦虑”

新闻发布如何取信于民

【天天播资讯】好听的闽南语歌曲排行2019_好听的闽南语歌曲有哪些

人数破500万!梅西现身直播间,平台遭疯狂吐槽:吃相太难看

助攻绝杀升意甲!国米300万卖小麦孔亏了,7+9飞翼想重回蓝黑军团

环球百事通!hang发挥不佳泪洒现场,LNG2:1险胜FPX状态堪忧,打野tarzan难顶大梁

中国金花单打9连败,吞下一根油条,张帅状态低迷已无任何竞争力

历史上陈轸是一个怎样的人(春秋战国陈轸的人物形象分析)

美赞臣中国牵手微生态领军企业未知君加速布局精准营养健康管理

像蛇但不是蛇,广西大明山保护区发现新记录物种

全球微速讯:高清图:贵南高铁广西段新建站房外部装修全面完成

滚动:广西积极参与全国碳排放权交易市场,交易额逐年上升

每周行业动态一览 新视野

hang发挥不佳泪洒现场,LNG2:1险胜FPX状态堪忧,打野tarzan难顶大梁

今头条!海峡两岸选手王欣瑜/谢淑薇法网女双夺冠 健身房两分钟闲聊促成冠军档

【全球快播报】王欣瑜/谢淑薇夺得法网女双冠军

联系我们:55 16 53 8@qq.com
关于我们| 联系方式| 版权声明| 供稿服务| 友情链接

塞北网 版权所有,未经书面授权禁止使用

京ICP备2021034106号-10 营业执照公示信息

Copyright©2008-2020 By www.saibeinews.com All Rights Reserved