微服务架构基础之轻量级部署

栏目: 服务器 · 发布时间: 6年前

内容简介:-- Josh Long

在J2EE开发中,通常将应用部署到Tomcat或者Jetty等Servlet容器中。而在SpringBoot中则提供了更加轻量级的方案,就是将应用打包成内嵌Servlet容器的jar包,可以直接通过 java -jar  app.jar 命令运行。因为在微服务架构中,会涉及大量服务的部署,这种轻量级方案无疑会简化部署,并且极大提高微服务的部署效率。

1 可执行的jar包

make Jar, not War      

-- Josh Long

将应用打包成*.jar包,需要使用SpringBoot的maven插件:

1<plugin>
2    <groupId>org.springframework.boot</groupId>
3    <artifactId>spring-boot-maven-plugin</artifactId>
4</plugin>

直接使用 mvn package 命令进行打包,此时,得到的jar包,我们可以通过 java -jar  app.jar 命令运行。

Linux 系统中,我们还可以进一步打成可执行的jar包,可以直接通过 ./app.jar 命令直接运行,只要只要配置maven插件:

1<plugin>
2    <groupId>org.springframework.boot</groupId>
3    <artifactId>spring-boot-maven-plugin</artifactId>
4    <configuration>
5        <executable>true</executable>
6    </configuration>
7</plugin>

打包:

微服务架构基础之轻量级部署

在每个模块的 target 目录下,生成可行执行的jar包。

2 部署

对于SpringBoot应用打成的jar包,可以方便的进行部署,很多Paas平台都是支持的,这里还是用一台Linux虚拟机进行部署,Ubuntu16 64位系统,并且只要安装好JDK1.8即可。

将打包好的jar包,比如上图中的 user-service/target/user-service-1.0-SNAPSHOT.jar ,上传到服务器的 opt/app 目录,运行:

./user-service-1.0-SNAPSHOT.jar

这种运行比较简单,同时,也会缺乏对应用进程的控制。为了更好的控制应用程序的进程,方便启动,重新,停机等操作,可以使用进程的管理工具。

3 管理应用进程

可以使用 supervisor 等第三方工具,不过,SpringBoot更加推荐集成到系统自带的 init.d 或者 systemd 中。Ubuntu16已经支持 systemd ,所以,我们将应用集成到 systemd 中。

创建配置 /etc/systemd/system/user.service

 1[Unit]
 2Description=user service
 3After=syslog.target
 4
 5[Service]
 6User=noone
 7ExecStart=/opt/app/user-service-1.0-SNAPSHOT.jar
 8SuccessExitStatus=143
 9
10[Install]
11WantedBy=multi-user.target

使用systemd启动:

sudo systemctl daemon-reload
sudo systemctl start user.service

首先刷新一下配置,然后启动服务。对于配置文件发生的更改,需要使用此命令。

启动完成后,使用命令查看服务状态:

1noone@ubuntu:/opt/app$ sudo systemctl status user.service
2● user.service - user service
3   Loaded: loaded (/etc/systemd/system/user.service; disabled; vendor preset: enabled)
4   Active: active (running) since Sat 2018-09-01 18:38:14 PDT; 6min ago
5 Main PID: 10819 (user-service-1.)
6   CGroup: /system.slice/user.service
7           ├─10819 /bin/bash /opt/app/user-service-1.0-SNAPSHOT.jar
8           └─10833 /usr/bin/java -Dsun.misc.URLClassPath.disableJarChecking=true -jar /opt/app/user-service-1.0-SNAPSHOT.jar

停止服务:

1noone@ubuntu:/opt/app$ sudo systemctl stop user.service
2noone@ubuntu:/opt/app$ sudo systemctl status user.service
3● user.service - user service
4   Loaded: loaded (/etc/systemd/system/user.service; disabled; vendor preset: enabled)
5   Active: inactive (dead)

也可以将该服务设置开机启动,如果出现服务器重启,那应用可以自动重启。

sudo systemctl enable user.service

4 设置应用启动参数

对于 Java 应用,通常都需要设置一些JVM参数,特别是堆栈空间大小等参数。SpringBoot也支持设置参数,我们只需要遵循约定进行配置即可。

在服务的同目录下,添加配置文件 user-service-1.0-SNAPSHOT.conf ,注意配置文件名要和服务保持一致,如下:

noone@ubuntu:/opt/app$ tree
.
├── user-service-1.0-SNAPSHOT.conf
└── user-service-1.0-SNAPSHOT.jar

配置文件内容:

1JAVA_OPTS="-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m"

5 小结

使用基于jar包的部署方式更加简单,很多Pass平台也都是支持这种方式。同时,如果在公司内部的部署平台集成,这种方式也比较简单。进一步,如果使用 Docker 或者K8等技术,这种部署方案也可以很容易集成。所以,在微服务架构中,轻量级的部署方案,可以让服务的发布更加高效。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

大话设计模式

大话设计模式

程杰 / 清华大学出版社 / 2007-12-1 / 45.00元

本书通篇都是以情景对话的形式,用多个小故事或编程示例来组织讲解GOF(设计模式的经典名著——Design Patterns:Elements of Reusable Object-Oriented Software,中译本名为《设计模式——可复用面向对象软件的基础》的四位作者EIich Gamma、Richard Helm、Ralph Johnson,以及John Vlissides,这四人常被称......一起来看看 《大话设计模式》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

URL 编码/解码
URL 编码/解码

URL 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具