微信号:david-share

介绍:乐于分享,才有进步.

新一代企业应用平台的探究(上):只拿干货说话

2018-03-28 17:51 魏新宇

一、EAP以及的两种模式


EAP,Enterprise Application Platform,目前的版本是7。


EAP6基于tomcat,EAP7基于Undertow。关于tomcat和undertow的性能对比,我们看一下github上的测速数据(https://github.com/arcadius/java-rest-api-web-container-benchmark):

Concurrent number of Users = 1 (并发用户数为1)


响应时间:Undertow优于tomcat;

吞吐量:Undertow优于tomcat;


Concurrent number of Users = 128(并发用户数为128)

响应时间:Undertow优于tomcat;

吞吐量:Undertow优于tomcat;



整体上看Undertow性能优于tomcat。因此EAP7的性能应比EAP6更强。


EAP有两种模式:单机模式和domain模式。



EAP单机模式部署、启动、停止都很简单方便。


启动EAP单机模式:

通过浏览器使用8080端口访问EAP:


接下来,我们在EAP中部署应用。


在EAP中部署应用,可以有两种格式。对于压缩的war/ear包,EAP检测到以后,可以直接部署,对于解压的war/ear目录,需要手工部署。

  1. 压缩的war/ear包

  2. 解压的war/ear目录


接下来,我们看看这两种部署方式。


在没用应用的情况下,$JBOSS_HOME/standalone/deployments/目录下没有内容:

我们将一个war压缩包拷贝到该目录下,应用会自动部署:

我们再次查看deployment目录:

example.war.deployed 就是被部署的应用。

我们通过浏览器访问这个应用:

在成功部署了一个war包以后,我们部署一个解压的war目录。


version.war是一个解压的war文件,是一个目录:

我们将这个目录拷贝到deployment下:

 [org.jboss.as.server.deployment.scanner] (DeploymentScanner-threads - 1) WFLYDS0004: Found version.war in deployment directory. To trigger deployment create a file called version.war.dodeploy


拷贝解压的war目录不会自动触发应用部署,需要手工触发。


手工创建一个version.war.dodeploy文件:

应用部署会被自动触发。通过浏览器访问部署好的应用:


在EAP中,删除应用的方法很简单,对于第一个应用,删除example.war文件即可。

对于第二个应用,删除version.war.dodeploy文件即可:


二、EAP的Domain模式


Domain模式是EAP的高可用模式,其架构见下图:

Host Controller管理同一台Host(可以是物理机或者虚拟机)上的Server

Domain Controller通过Host Controller管理Domain中的所有Server

同一个Domain中的一个或多个Server组成一个 Server Group


在本实验中,我们模拟三个服务器:host0、host1、host2(通过使用不同的端口,在一个虚拟机上模拟多个host)

host0上部署Domain Controller,Domain Controller不包含任何应用。

host1上部署第一个Host Controller,它包含两个应用服务器(Server11 and Server12)
host2上部署第二个Host Controller,它包含三个应用服务器( Server21, Server22, and Server23)。



Server11 and Server12属于primary-server-group

Server12 and Server22 属于secondary-server-group

Server23属于ingleton-server-group


准备实验环境(在一个虚拟机上模拟三个host):

配置domain controller配置文件:

vi host0/domain/configuration/domain.xml,增加server group的配置信息:

修改host-master.xml配置文件:

vi host0/domain/configuration/host-master.xml

为web console增加账户:

启动domain controller:

然后通过浏览器访问console,已经可以看到server group和host0-master:


接下来,配置host1和host2,先配置host1

vi host1/domain/configuration/host-slave.xml

为了避免端口冲突,将native interface 从9999修改成 10999.

将domain master的IP设置成127.0.0.1(因为domain master在本地)

配置server group信息:

接下来,启动host1 master:

接下来,我们确认一下host1上的server11和server12是否已经启动:

接下来在console上进行查看,host1上的server11和server12已经启动:


接下来,配置host2:

vi host2/domain/configuration/host-slave.xml

将native interface 端口号设置成11999

将domain master配置成本地地址:

配置server group:

接下来,启动host2:

可以看到server21和server22、server23在启动:

确认三个server已经启动:


通过web console进行查看,截至到目前,5个server已经运行起来了:



三、基于Domain模式部署应用

实验环境:

一个domain master;

两个VM:servera和serverb;

两个server group:Group1、Group2

四个web server:servera.1、servera.2、serverb.1、serverb.2

Group1中包含:servera.1和serverb.2

Group2中包含:servera.2和serverb.1

将应用部署到Group1上:


接下来,可以看到,只有Group1上的两个server可以访问应用,Group2上的两个server无法访问:


五、配置JDBC


本实验继续第四节的实验:

实验环境:

一个domain master;

两个VM:servera和serverb;

两个server group:Group1、Group2

四个web server:servera.1、servera.2、serverb.1、serverb.2

Group1中包含:servera.1和serverb.2

Group2中包含:servera.2和serverb.1



为应用配置mysql数据源。

加载jdbc driver:


确认加载成功:

同样,在另外两个节点上也进行操作:


启动domain master、servera和serverb:


登录到domain master cli模式注册jdbc driver:


创建bookstore MySQL数据源:

检测数据源:


接下来,部署bookstore应用,部署到servergoup名称为Group1的组上:

然后,通过浏览器可以访问.10和.11两个server(属于Group1)。

为了验证数据源被加载,我在网站里注册一个账户:davidwei,并购书:

    可以成功操作:


六、Log的管理

实验环境:

一个domain master;

两个VM:servera和serverb;

两个server group:Group1、Group2

四个web server:servera.1、servera.2、serverb.1、serverb.2

Group1中包含:servera.1和serverb.2

Group2中包含:servera.2和serverb.1



在domain模式下,log如下:

如果运行在standlone模式下,日志如下:

接下来,通过实验进行验证。

在实验中,我们会部署一个应用bookstore:

配置日志路径:

为应用配置日志:

确认配置:

接下来,为应用bookstore配置一个新的logger category:

将ROOT logger的级别修改为WARN:

重新加载Group1的配置:


查看log:

可以看到log是debug级别的,说明之前的配置是生效的。


七、消息子系统

实验环境:

一个domain master;

两个VM:servera和serverb;

两个server group:Group1、Group2

四个web server:servera.1、servera.2、serverb.1、serverb.2

Group1中包含:servera.1和serverb.2

Group2中包含:servera.2和serverb.1


JBoss A-MQ7产品,基于ActiveMQ项目。但未来会基于Artemis项目。


EAP7内嵌了一个messaging server,支持AMQP和STOMP等协议。


接下来,我们通过实验进行验证。


为了增加日志的数量,修改级别:


进入一个server的日志子系统:

查看cluster-connection对象的拓扑结构:

接下来,基于full-ha创建JMS Resources:

创建TestQueue:

接下来,在Group1中部署一个message producer:

在Group1中部署一个message consumer:

通过浏览器访问刚刚部署好的message producer应用:


发布一个测试消息:

很快Group1中的两个server已经收到了信息:

大魏分享:

魏新宇

"大魏分享"运营者、红帽资深解决方案架构师

专注开源云计算、容器及自动化运维在金融行业的推广

拥有红帽RHCE/RHCA、VMware VCP-DCV、VCP-DT、VCP-Network、VCP-Cloud、ITIL V3、Cobit5、C-STAR、AIX、HPUX等相关认证。



 
大卫分享 更多文章 Ceph创始人Sage给我的纸条上到底写了啥?及老专家的分享. 云应用部署方式的未来方向! Openshift容器云安全加固措施70项 从一张图看Devops全流程 企业级容器云安全,你需要考虑的九个方面!
猜您喜欢 美团App iOS开发与FRP 该如何选择框架? VSAN实践经验-03: (图文)详解VSAN 6.2里Repair Objects Immediately功能 深度分析国产龙芯新架构CPU [20160905]大家都是怎么管理线上的配置,配置变更的分发?