50、Windows 与 WSL 2 及 Ubuntu 的安装配置与 Java 原生编译微服务指南

Windows 与 WSL 2 及 Ubuntu 的安装配置与 Java 原生编译微服务指南

1. Windows 环境下 Docker Desktop 的安装配置

在 Windows 系统上安装并配置 Docker Desktop,可按以下步骤操作:
1. 从 https://hub.docker.com/editions/community/docker-ce-desktop-windows/ 下载并安装 Docker Desktop for Windows。
2. 安装过程中若提示启用 WSL 2,选择“是”。
3. 安装完成后,从开始菜单启动 Docker Desktop。
4. 从 Docker 菜单中选择“Settings”,在设置窗口中选择“General”选项卡:
- 确保选中“Use the WSL 2 based engine”复选框。
- 若想避免每次重启电脑后手动启动 Docker Desktop,建议选中“Start Docker Desktop when you log in”复选框。
5. 点击“Apply & Restart”按钮完成配置。

2. Visual Studio Code 及其 Remote WSL 扩展的安装

为简化在 Linux 服务器中编辑源代码的操作,推荐使用 Visual Studio Code 及其 Remote WSL 扩展。安装和配置步骤如下:
1. 从 https://code.visualstudio.com 下载并安装 Visual Studio Code。安装时,在“Select Additional Tasks”中选择“Add to PATH”选项,这样就能在 Linux 服务器中使用 code 命令在 Visual Studio Code 中打开文件夹。
2. 安装完成后,从开始菜单启动 Visual Studio Code。
3. 使用 https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-wsl 安装 Remote WSL 扩展。

3. WSL 2 中 Linux 服务器工具的安装

接下来,在 WSL 2 的 Linux 服务器中安装所需工具。从开始菜单启动 Windows Terminal,并打开 Linux 服务器的终端。Ubuntu 中已预装 git curl 工具,其余工具可使用 apt install sdk install curl install 组合的方式进行安装。

3.1 使用 apt install 安装工具

使用以下命令安装 jq zip unzip siege

sudo apt update
sudo apt install -y jq
sudo apt install -y zip
sudo apt install -y unzip
sudo apt install -y siege

安装 Helm,运行以下命令:

curl -s https://baltocdn.com/helm/signing.asc | \
gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null 
sudo apt-get install apt-transport-https --yes 
echo "deb [arch=$(dpkg --print-architecture) \
  signed-by=/usr/share/keyrings/helm.gpg] \
  https://baltocdn.com/helm/stable/debian/ all main" | \
  sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt install -y helm
3.2 使用 SDKman 安装 Java 和 Spring Boot CLI

使用 SDKman( https://sdkman.io )安装 Java 和 Spring Boot CLI,按以下步骤操作:

curl -s "https://get.sdkman.io" | bash
source "$HOME/.sdkman/bin/sdkman-init.sh"

验证 SDKman 是否正确安装:

sdk version

安装 Java:

sdk install java 17.0.6-tem

安装 Spring Boot CLI:

sdk install springboot 3.0.4
3.3 使用 curl 和 install 安装其余工具

使用 curl 下载可执行文件,再用 install 命令将文件复制到文件系统的正确位置,并确保所有者和访问权限配置正确。安装特定版本的 kubectl minikube istioctl ,可运行以下命令:

# 安装 kubectl
curl -LO "https://dl.k8s.io/release/v1.26.1/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
rm kubectl

# 安装 minikube
curl -LO https://storage.googleapis.com/minikube/releases/v1.29.0/minikube-linux-amd64
sudo install -o root -g root -m 0755 minikube-linux-amd64 /usr/local/bin/minikube
rm minikube-linux-amd64

# 安装 istioctl
curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.17.0 TARGET_ARCH=x86_64 sh -
sudo install -o root -g root -m 0755 istio-1.17.0/bin/istioctl /usr/local/bin/istioctl
rm -r istio-1.17.0
4. 工具安装验证

运行以下命令验证工具是否正确安装:

git version && \
docker version -f json | jq -r .Client.Version && \
java -version 2>&1 | grep "openjdk version" && \
curl --version | grep "curl" | sed 's/(.*//' && \
jq --version && \
spring --version && \
siege --version 2>&1 | grep SIEGE && \
helm version --short && \
kubectl version --client -o json | \
  jq -r .clientVersion.gitVersion && \
minikube version | grep "minikube" && \
istioctl version --remote=false
5. 源代码的获取与访问

源代码可从 https://github.com/PacktPublishing/Microservices-with-Spring-Boot-and-Spring-Cloud-Third-Edition 获取。为能在 WSL 2 的 Linux 服务器中运行相关命令,需将源代码下载到一个文件夹,并设置环境变量 $BOOK_HOME 指向该文件夹。示例命令如下:

export BOOK_HOME=~/Microservices-with-Spring-Boot-and-Spring-Cloud-Third-Edition
git clone https://github.com/PacktPublishing/Microservices-with-Spring-Boot-and-Spring-Cloud-Third-Edition.git $BOOK_HOME

要验证从 Visual Studio Code 访问下载到 WSL 2 中 Linux 服务器的源代码,可运行以下命令:

cd $BOOK_HOME
code .

在 Visual Studio Code 中,可通过“Terminal → New Terminal”菜单选项打开终端,运行 bash 命令。

6. 代码结构

每个章节包含多个 Java 项目,每个微服务和 Spring Cloud 服务对应一个项目,还有几个供其他项目使用的库项目。以第 14 章为例,项目结构如下:

├── api
├── microservices
│   ├── product-composite-service
│   ├── product-service
│   ├── recommendation-service
│   └── review-service
├── spring-cloud
│   ├── authorization-server
│   ├── config-server
│   ├── eureka-server
│   └── gateway
└── util

所有项目使用 Gradle 构建,文件结构遵循 Gradle 标准约定:

├── build.gradle
├── settings.gradle
└── src
    ├── main
    │   ├── java
    │   └── resources
    └── test
        ├── java
        └── resources
7. Java 原生编译微服务概述

将微服务中的 Java 源代码编译成二进制可执行文件(即 Native Images),能显著缩短启动时间并减少内存消耗。下面将介绍何时适合进行 Java 源代码的原生编译,以及 GraalVM 项目和 Spring AOT 引擎。

8. 何时进行 Java 源代码的原生编译

Java 以“一次构建,随处运行”的特性提供了出色的跨平台支持。但在微服务时代,对微服务的快速升级、灵活伸缩以及零伸缩的需求,使得快速启动成为更关键的要求。同时,容器技术的使用降低了应用本身跨平台支持的重要性。因此,将 Java 源代码在构建时编译成目标平台的二进制格式(即 AOT 编译)变得尤为重要。

9. GraalVM 项目介绍

Oracle 多年来致力于开发高性能 Java VM 及相关工具,即 GraalVM 项目( https://www.graalvm.org )。GraalVM 的 VM 是多语言的,支持多种语言。我们关注的是其 Native Image 编译器,它可将 Java 字节码编译成特定操作系统和硬件平台的 Native Image。Native Image 无需 Java VM 即可运行,包含二进制编译的应用类和依赖类,还包括 Substrate VM 运行时系统。

为构建 Native Image,原生编译器基于封闭世界假设进行静态代码分析,这意味着运行时可调用的所有字节码在构建时必须可达。GraalVM Native Image 编译器存在一些限制,如反射和动态代理的使用,且编译时间较长。不过,GraalVM 项目提供了配置选项,可提供可达性元数据来克服这些限制。

10. Spring AOT 引擎介绍

Spring 团队也在支持 Spring 应用的原生编译。Spring Framework 6 和 Spring Boot 3 增加了对构建 Native Images 的官方支持,使用 GraalVM 的 Native Image 编译器进行实际编译。Spring 的 AOT 引擎在构建时分析 Spring Boot 应用,生成 GraalVM Native Image 编译器所需的初始化源代码和可达性元数据。

创建 Spring Boot 应用的 Native Image 过程如下:
1. 应用源代码由 Java 编译器编译成字节码。
2. Spring 的 AOT 引擎在封闭世界假设下分析代码,生成 AOT 源代码和可达性元数据。
3. AOT 生成的代码使用 Java 编译器编译成字节码。
4. 应用的字节码、可达性元数据和 AOT 引擎生成的字节码被发送到 GraalVM 的 Native Image 编译器,创建 Native Image。

构建 Native Image 有两种方式:
- 创建当前操作系统的 Native Image:使用 Gradle 的 nativeImage 任务。
- 创建作为 Docker 镜像的 Native Image。

以下是创建 Native Image 的流程 mermaid 图:

graph LR
    A[应用源代码] --> B(Java 编译器编译成字节码)
    B --> C(Spring AOT 引擎分析生成 AOT 代码和元数据)
    C --> D(Java 编译器编译 AOT 代码成字节码)
    D --> E(应用字节码、元数据和 AOT 字节码)
    E --> F(GraalVM Native Image 编译器创建 Native Image)

综上所述,通过上述步骤和工具,我们可以在 Windows 环境下配置开发环境,获取并访问源代码,同时了解 Java 原生编译微服务的相关知识和工具。

Windows 与 WSL 2 及 Ubuntu 的安装配置与 Java 原生编译微服务指南

11. 处理原生编译问题

在进行 Java 源代码的原生编译时,会遇到一些问题,主要源于 GraalVM Native Image 编译器的限制,如反射和动态代理的使用。为解决这些问题,可利用 GraalVM 项目提供的配置选项,提供可达性元数据。以下是几种创建所需可达性元数据的方法:
- 手动配置 :根据项目中反射和动态代理的使用情况,手动编写配置文件,描述这些动态特性的使用。
- 自动工具 :使用 GraalVM 提供的工具,在运行时自动收集可达性信息,生成元数据。

12. 测试和编译 Native Images

在编译 Native Images 之前,需要进行充分的测试,确保代码在原生编译后能正常运行。以下是测试和编译的步骤:
1. 单元测试 :使用 JUnit 等测试框架编写单元测试,确保每个模块的功能正常。
2. 集成测试 :使用 Docker Compose 或 Kubernetes 进行集成测试,验证微服务之间的交互。
3. 编译 Native Images :使用 Gradle 的 nativeImage 任务或创建 Docker 镜像的方式编译 Native Images。

以下是使用 Gradle 编译 Native Image 的示例:

./gradlew nativeImage
13. 使用 Docker Compose 进行测试

Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。使用 Docker Compose 可以方便地测试 Native Images。以下是使用 Docker Compose 进行测试的步骤:
1. 编写 Docker Compose 文件 :定义微服务的容器化配置,包括镜像、端口映射、环境变量等。

version: '3'
services:
  service1:
    image: my-native-image-1
    ports:
      - "8080:8080"
  service2:
    image: my-native-image-2
    ports:
      - "8081:8081"
  1. 启动 Docker Compose :使用以下命令启动 Docker Compose:
docker-compose up -d
  1. 进行测试 :使用 curl 等工具对微服务进行测试,验证其功能。
14. 使用 Kubernetes 进行测试

Kubernetes 是一个用于自动化部署、扩展和管理容器化应用的开源平台。使用 Kubernetes 可以更复杂地测试 Native Images。以下是使用 Kubernetes 进行测试的步骤:
1. 编写 Kubernetes 配置文件 :定义微服务的部署、服务等资源。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-native-service
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-native-service
  template:
    metadata:
      labels:
        app: my-native-service
    spec:
      containers:
      - name: my-native-container
        image: my-native-image
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: my-native-service
spec:
  selector:
    app: my-native-service
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
  type: LoadBalancer
  1. 部署到 Kubernetes :使用以下命令将配置文件部署到 Kubernetes:
kubectl apply -f my-native-service.yaml
  1. 进行测试 :使用 kubectl 命令或浏览器访问服务的外部 IP 地址进行测试。
15. 总结

通过前面的介绍,我们了解了在 Windows 环境下,借助 WSL 2 和 Ubuntu 进行开发环境的搭建,包括 Docker Desktop、Visual Studio Code 及其扩展、各种开发工具的安装与配置,还掌握了源代码的获取、访问以及代码结构。同时,深入学习了 Java 原生编译微服务的相关知识,如何时进行原生编译、GraalVM 项目和 Spring AOT 引擎的使用,以及处理原生编译问题、测试和编译 Native Images 的方法,还介绍了使用 Docker Compose 和 Kubernetes 进行测试的步骤。

以下是整个流程的表格总结:
| 步骤 | 内容 |
| ---- | ---- |
| 1 | 在 Windows 安装 Docker Desktop 并配置 WSL 2 |
| 2 | 安装 Visual Studio Code 及其 Remote WSL 扩展 |
| 3 | 在 WSL 2 的 Linux 服务器安装工具 |
| 4 | 验证工具安装 |
| 5 | 获取并访问源代码 |
| 6 | 了解代码结构 |
| 7 | 学习 Java 原生编译微服务知识 |
| 8 | 处理原生编译问题 |
| 9 | 测试和编译 Native Images |
| 10 | 使用 Docker Compose 测试 |
| 11 | 使用 Kubernetes 测试 |

通过这些步骤和方法,我们可以构建高效、快速启动的 Java 微服务应用,满足现代软件开发的需求。

以下是整个过程的 mermaid 流程图:

graph LR
    A[Windows 环境] --> B(安装 Docker Desktop 和配置 WSL 2)
    B --> C(安装 Visual Studio Code 及扩展)
    C --> D(在 WSL 2 安装工具)
    D --> E(验证工具安装)
    E --> F(获取并访问源代码)
    F --> G(了解代码结构)
    G --> H(学习 Java 原生编译知识)
    H --> I(处理编译问题)
    I --> J(测试和编译 Native Images)
    J --> K(使用 Docker Compose 测试)
    J --> L(使用 Kubernetes 测试)

总之,掌握这些技术和方法,能够帮助开发者更好地应对现代微服务开发的挑战,提高开发效率和应用性能。

同步定位地图构建(SLAM)技术为移动机器人或自主载具在未知空间中的导航提供了核心支撑。借助该技术,机器人能够在探索过程中实时构建环境地图并确定自身位置。典型的SLAM流程涵盖传感器数据采集、数据处理、状态估计及地图生成等环节,其核心挑战在于有效处理定位环境建模中的各类不确定性。 Matlab作为工程计算数据可视化领域广泛应用的数学软件,具备丰富的内置函数专用工具箱,尤其适用于算法开发仿真验证。在SLAM研究方面,Matlab可用于模拟传感器输出、实现定位建图算法,并进行系统性能评估。其仿真环境能显著降低实验成本,加速算法开发验证周期。 本次“SLAM-基于Matlab的同步定位建图仿真实践项目”通过Matlab平台完整再现了SLAM的关键流程,包括数据采集、滤波估计、特征提取、数据关联地图更新等核心模块。该项目不仅呈现了SLAM技术的实际应用场景,更为机器人导航自主移动领域的研究人员提供了系统的实践参考。 项目涉及的核心技术要点主要包括:传感器模型(如激光雷达视觉传感器)的建立应用、特征匹配数据关联方法、滤波器设计(如扩展卡尔曼滤波粒子滤波)、图优化框架(如GTSAMCeres Solver)以及路径规划避障策略。通过项目实践,参者可深入掌握SLAM算法的实现原理,并提升相关算法的设计调试能力。 该项目同时注重理论向工程实践的转化,为机器人技术领域的学习者提供了宝贵的实操经验。Matlab仿真环境将复杂的技术问题可视化可操作化,显著降低了学习门槛,提升了学习效率质量。 实践过程中,学习者将直面SLAM技术在实际应用中遇到的典型问题,包括传感器误差补偿、动态环境下的建图定位挑战以及计算资源优化等。这些问题的解决对推动SLAM技术的产业化应用具有重要价值。 SLAM技术在工业自动化、服务机器人、自动驾驶及无人机等领域的应用前景广阔。掌握该项技术不仅有助于提升个人专业能力,也为相关行业的技术发展提供了重要支撑。随着技术进步应用场景的持续拓展,SLAM技术的重要性将日益凸显。 本实践项目作为综合性学习资源,为机器人技术领域的专业人员提供了深入研习SLAM技术的实践平台。通过Matlab这一高效工具,参者能够直观理解SLAM的实现过程,掌握关键算法,并将理论知识系统应用于实际工程问题的解决之中。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值