重新造轮子(Reinventing The Wheel)是重新创造一个已有的或是早已被优化过的基本方法。在软件开发领域中,轮子通常指通用的库、包、中间件或框架,这些和实际业务没有直接关系的代码。随着微服务概念的普及,我们越来越多的在使用微服务开发新应用或者将传统应用微服务化,碰到的第一个问题往往是微服务框架的选型问题。也许有的企业开发人员为满足自身的开发需求,重新造一个微服务框架的轮子,但更多的企业以及开发人员则会为了更多的关注业务本身,而选择一个现有的微服务框架。Oracle不久前推出的微服务框架Helidon,以其开源、简洁、易用的特性,成为企业及开发人员的选择之一。
Helidon是希腊语中的一种燕子,根据维基百科的说法,它具有“细长,流线型的身体和长长的翅膀,可以实现极佳的机动性和非常高效的飞行”,非常适合穿越云层。我们可以利用这只燕子Helidon,来很好的开发我们将要部署在云中的应用。

现有的Java微服务框架,按照应用的规模从小到大分为Microframeworks/ MicroProfileBased以及Full-Stack三大类,这三大类微服务框架各有特点及自己的适用范围。
Microframeworks:
简单、轻量级的Java 微服务框架, 例如Spark,Javalin,Micronaut等。
MicroProfile Based:
对Java EE开发人员友好,其中一些构建在功能齐全的Java EE应用程序服务器之上。 例如Thorntail(Wildfly Swarm),OpenLiberty,Payara。
Full-Stack:
功能完备的Java 微服务框架,整个框架有些重,例如Spring Boot。
Helidon有两种类型,包括两个类别 – Microframeworks(SE)和MicroProfile(MP), 由开发人员选择使用哪种类别的Helidon类型 。
Helidon SE 与 Helidon MP 介绍:

Helidon SE是用于编写微服务的Java库的集合,由三部分组成:
WebServer
一个基于Netty的响应式的http的服务器,来处理api调用请求。
Config
灵活的配置框架,支持多种源和格式。
Security
用于处理身份验证,授权和上下文传播的工具链。
Helidon MP 由Java EE Jakarta EE组件库组成,这些这些组件库包含JAX-RS Jersey,JSON-P和CDI,这些组件是MicroProfile实现所需要的标准组件。Helidon MP基于Helidon SE组件之上提供服务。Oracle Cloud Integration,位于Helidon SE 和Helidon MP之下,为其上的应用程序提供与Oracle Cloud集成的服务。
Docker与Kubernetes支持:
Helidon提供自动生成的Docker与Kubernetes配置文件,将应用程序部署到Docker容器运行环境或者Kubernetes集群当中。同时通过配置到方式,支持将zipkin/prometheus 等容器运行监控插件加入到Helidon应用中。

1.根据应用情况,选择Helidon 类型:
Helidon SE:
WebServer.create(
Routing.builder()
.get("/greet", (req, res)
-> res.send("HelloWorld!"))
.build())
.start();
Helidon MP
public classGreetService {
@GET
@Path("/greet")
public String getMsg() {
return "Hello World!";
}
}
2.编译/运行/测试Helidon 应用:
编译:$ mvnpackage
运行:$ java -jartarget/myapp.jar
测试;
$ curl -X GEThttp://localhost:8080/greet
Hello World!
3.部署应用到Docker容器或Kubernetes集群环境。
此示例将同时如何通过Helidon开发简单的 Helidon SE 和Helidon MP应用程序,并且将应用发布部署到Docker及Kubernetes环境中运行。
1.开发环境准备:
1. JavaSE 8/OpenJdk 8
2. Maven3
3. Docker
4. Kubernetes
2.通过maven 生成框架程序:
通过maven模版原型生成Helidon应用程序框架。
2.1通过maven生成Helidon SE框架程序:
mvnarchetype:generate -DinteractiveMode=false \
-DarchetypeGroupId=io.helidon.archetypes \
-DarchetypeArtifactId=helidon-quickstart-se\
-DarchetypeVersion=0.10.5 \
-DgroupId=io.helidon.examples \
-DartifactId=quickstart-se \
-Dpackage=io.helidon.examples.quickstart.se
2.2通过maven生成Helidon MP框架程序:
mvn archetype:generate-DinteractiveMode=false \
-DarchetypeGroupId=io.helidon.archetypes \
-DarchetypeArtifactId=helidon-quickstart-mp\
-DarchetypeVersion=0.10.5 \
-DgroupId=io.helidon.examples \
-DartifactId=quickstart-mp \
-Dpackage=io.helidon.examples.quickstart.mp
3.Helidon应用打包:
进入Helidon SE应用目录,运行:
mvn package

进入Helidon MP应用目录,运行:
mvn package

本地测试:
java -jartarget/quickstart-se.jar
java -jartarget/quickstart-mp.jar
测试结果:

4.部署到Docker容器:
构建docker镜像文件:
docker build -tquickstart-se target

docker run --rm -p8080:8080 quickstart-se:latest

docker build -t quickstart-mptarget

docker run --rm -p8080:8080 quickstart-mp:latest

5.部署到Kubernetes集群:
部署 Helidon SE 程序到 Kubernetes集群:
kubectl create -ftarget/app.yaml

部署 Helidon MP 程序到 Kubernetes集群:

在kubernetesdashboard中看到应Helidon应用quickstart-se和quickstart-mp部署成功。

访问测试部署到kubernetes集群中的应用
kubectl get servicequickstart-se

kubectl get servicequickstart-mp

通过以上示例我们可以看到,适用Helidon框架开发部署一个Java的微服务程序一个简单的过程,我们只需要更多的关注应用开发本身,为客户提供更多的业务价值。
Helidon是Oracle开源的Java 轻量级微服务框架,所有代码均已公开托管在:https://github.com/oracle/helidon。
更多信息请访问:https://helidon.io/

作者简介
向志华,甲骨文PaaS专家团队高级咨询顾问,专注 Application PaaS 产品及服务,同时关注Docker容器产品及Kubernetes容器调度产品方向。13年IT行业从业经验,擅长J2EE产品架构及开发,参与过Openstack相关产品研发工作。您可以通过george.xiang@oracle.com,与他联系。
扫描二维码或点击阅读原文
快速预约精选云解决方案演示






