关于kubernetes:Java微服务云原生想法

当初越来越多人在探讨云原生,也就是应用Kubernetes作为部署架构,齐全抽离IASS。其实Java跟云原生并不是这么搭配的,至多Spring Cloud跟Kubernetes 不合的,有很多性能反复的。 Spring Cloud的服务发现、配置核心、负载平衡、网关这些都能够在Kubernetes找到代替。我在想如果齐全应用Kubernetes构造来解决分布式系统连贯、发现、配置问题,剩下的服务器如同只有一个Spring Boot而已,不须要引入太多组件了。

简略构建两个微服务、让后将服务发现、注册核心这些组件通通摈弃,去应用Kubernetes去实现代替成果。应用pod 探针去检测微服务存过成果,齐全是没有任何问题的。配置核心能够通过ConfigMap的卷挂载达到相似的成果,服务间的Fegin拜访,能够不依赖服务发现进行,通过配置文件设定服务拜访地址,拜访地址再由Service进行保护,就能够达到屏蔽服务之间IP变动。其实很多人都很不屑为了这一点点性能,毁坏整个残缺Spring Cloud体系,然而我想的是,要Java往云原生倒退,必须缓缓进行扭转才行的,至多当初不能齐全转向,质变促成量变。在云原生时代,对每一个服务有更高须要,更小的软件制品、更快的启动速度、更快执行速度,这些都要求在开发时尽量将每一个微服务技术依赖管制在一个可能小的范畴。我的想法能不依赖就不依赖。缩小微服务的技术依赖也有利于开发更容易参加进来,上面就能够口头吧。

我的项目编码

我的项目依赖

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.3.3.RELEASE</version>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        <finalName>${artifactId}</finalName>
    </build>

上面只展现局部代码、feign客户端连贯另一个服务

@FeignClient(name = "author",url = "${app.author.remote}")
public interface AuthorFeign {

    @GetMapping("/author/getOne")
    AuthorDTO getOne();
}

controller调用feign接口

@RestController
@RequestMapping("book")
public class BookController {

    @Autowired
    private AuthorFeign authorFeign;

    @GetMapping("getOne")
    public Book getOne(){
        Book book = new Book();
        return book;
    }
    
    @GetMapping("getAuthor")
    public AuthorDTO getAuthor(){
        return authorFeign.getOne();
    }
}

application.yml配置文件

server:
  port: 8080
spring:
  application:
  name: book
app:
  author:
    remote: localhost:8081

编译构建,Dockerfile 如下

FROM --platform=linux/amd64 docker.io/adoptopenjdk/openjdk8 AS java8
WORKDIR /opt/web
COPY target/book.jar .
ENV AUTHOR_URL author
ENTRYPOINT java -jar book.jar --app.author.remote}=${AUTHOR_URL} --server.port=80

进入book我的项目根门路, 执行命令构建镜像

docker build . -t book:1.0v

Kubernetes 配置

Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: book-deployment
  labels:
    app: book
spec:
  replicas: 1
  selector:
    matchLabels:
      app: book
  template:
    metadata:
      labels:
        app: book
    spec:
      containers:
        - name: book
          image: book:1.0v
          env:
            - name: AUTHOR_URL
              value: "author-clusterip"

ClusterIP配置

将服务端口裸露给集群内Pod拜访

apiVersion: v1
kind: Service
metadata:
  name: book-clusterip
spec:
  type: ClusterIP
  selector:
    app: book
  ports:
    - name: http
      port: 80
      targetPort: 80

NodePort配置

将内部流量接入Pod

apiVersion: v1
kind: Service
metadata:
  name: book-nodeport
spec:
  type: NodePort
  selector:
    app: book
  ports:
    - name: book-http
      port: 80
      targetPort: 80
      nodePort: 30001

如果有趣味,去github看残缺的我的项目cloud-demo

其实我对云原生Java利用也不是很理解,想听听大伙意见。

我从事Java快7年了,14年出的Java8,17年就曾经开始应用Java8作为主力开发环境,想不到6年过去了,我仍然还是在用Java8。其实Java的版本始终在更新,素来都没有应用过。没当市场呈现新潮的技术,总想蠢蠢欲动,学了很多货色,也遗记了很多货色🤦。我总是通知本人我还能学,实际上连工作快找不到了,真的迷茫了,不晓得该往什么方向走了。

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据