dc/os

该博客将展示一个简单的Java应用程序如何使用DC / OS中的服务发现与数据库进行对话。

为什么要进行服务发现?

应用程序通常由多个组件组成,例如应用程序服务器,数据库,Web服务器,缓存和消息传递服务器。 通常,每个组件的多个副本将根据您的应用程序的需求运行。 使用容器编排框架部署此应用程序意味着每个副本都将作为容器运行。 因此,通常将应用程序部署为多容器应用程序。

每个容器在其生命周期内都分配有唯一的IP地址。 但是容器是短暂的,可以通过业务流程框架终止并重新安排在其他主机上。 在这种情况下,通常会为容器分配一个不同的IP地址。 这意味着部署在应用程序服务器中的应用程序不能依赖数据库的IP地址。 这是需要服务发现的地方。

因此,将为组件的多个副本分配一个逻辑名称。 例如,对于所有应用程序服务器容器为web ,对于所有数据库容器为db 。 现在,应用程序可以使用逻辑服务名称与数据库容器进行对话。 这使数据库容器可以在群集中的任何位置进行重新调度,也可以动态扩展和缩减。

让我们看看如何在DC / OS中使用单个应用程序服务器和数据库服务器实例来完成此任务。 该博客将使用WildFly作为应用程序服务器,并使用Couchbase作为数据库。

具有DC / OS的Mesos上的Couchbase群集提供了有关如何在DC / OS上设置Couchbase群集的更多详细信息。

该博客将使用以下主要步骤:

  • 设置DC / OS群集
  • 马拉松比赛的定义
  • 部署应用

本博客中使用的完整源代码位于github.com/arun-gupta/dcos-java-database 。

非常感谢@unterstein创建了Maven插件并帮助我了解了DC / OS的内部工作原理。

设置DC / OS群集

使用CloudFormation模板可以轻松创建DC / OS集群。 可在AWS上安装DC / OS上获得详细的说明,包括系统要求以及屏幕截图和设置。

CloudFormation输出看起来如下所示:

记下为键DnsAddressPublicSlaveDnsAddress显示的值。 第一个键的值可用于访问DC / OS GUI ,如下所示:

按照CLI中的说明配置DC / OS CLI 。 简而言之,使用以下命令:

  • dcos config set core.dcos_url http://${DnsAddress}${DnsAddress}替换${DnsAddress}输出中的相应值。
  • dcos auth login
  • dcos config show core.dcos_acs_token 。 如果尚未完成,请从github.com/arun-gupta/dcos-java-database克隆存储库 。 创建一个新文件.dcos-token并将命令的输出复制到此文件中。
  • dcos package install marathon-lb

马拉松应用定义

Marathon框架用于调度DC / OS中的容器。 可以通过提供应用程序定义来定义马拉松应用程序 。

如前所述,该博客将展示一个简单的Java应用程序如何与数据库对话。 我们将使用WildFly中部署的Java EE应用程序,并将Couchbase用作数据库。 应用程序定义如下:

{  "id":"/webapp","apps":[  {  "id":"database","cpus":4,"mem":4096,"instances":1,"container":{  "type":"DOCKER","docker":{  "image":"arungupta/couchbase:travel","network":"USER"}},"ipAddress":{  "networkName":"dcos"}},{  "id":"web","dependencies":[  "/webapp/database"],"cpus":2,"mem":4096,"instances":1,"container":{  "type":"DOCKER","docker":{  "image":"arungupta/wildfly-couchbase-javaee:travel","network":"USER","portMappings":[  {  "hostPort":0,"containerPort":8080,"protocol":"tcp"}]}},"ipAddress":{  "networkName":"dcos"},"env":{  "COUCHBASE_URI":"database-webapp.marathon.containerip.dcos.thisdcos.directory"},"labels":{  "HAPROXY_0_VHOST":"DCOS-PublicSlaveLo-DD2EGGFVCJA0-1604955948.us-west-1.elb.amazonaws.com","HAPROXY_GROUP":"external"}}]
}

此应用程序定义中的关键点是什么?

  • 应用程序具有两个容器: databaseweb 。 Web容器对使用dependencies属性定义的数据库容器具有dependencies
  • database容器使用arungupta/couchbase:travel Docker映像。 该图像是从github.com/arun-gupta/couchbase-javaee/tree/master/couchbase创建的。 它使用Couchbase基本映像,并使用Couchbase REST API来预配置数据库。 样本存储桶也被加载到数据库中。
  • web容器使用arungupta/wildfly-couchbase-javaee:travel图片。 该图像是从github.com/arun-gupta/couchbase-javaee/blob/master/Dockerfile创建的。 这是WildFly中捆绑的Java EE 7应用程序。 该应用程序使用COUCHBASE_URI作为环境变量来连接到Couchbase数据库。 该环境变量的值配置为使用DNS服务发现,并按照“ 虚拟网络”中的说明派生。

确保更改HAPROXY_0_VHOST的值以匹配${PublicSlaveDnsAddress}输出中的${PublicSlaveDnsAddress}的值。 标签HAPROXY_0_VHOST指示Marathon-LB在具有虚拟主机的外部负载均衡器上公开Docker容器(在我们的情况下为WildFly应用服务器)。 标签键中的0对应于servicePort索引,从0开始。如果您有多个servicePort定义,则将其迭代为0、1、2,依此类推。 使用marathon-lb部署内部和外部负载平衡的应用程序将提供有关如何配置marathon-lb的更多详细信息。

服务发现和负载平衡提供了有关DC / OS中服务发现和负载平衡的更多详细信息。

使用Maven部署应用程序

可以使用dcos-maven-plugin部署该应用程序。

插件看起来像:

<plugin><groupId>dcos</groupId><artifactId>dcos-maven-plugin</artifactId><version>0.2</version><configuration><dcosUrl>http://DCOS-ElasticLoadBa-1TH4TXIU5P783-1163025470.us-west-1.elb.amazonaws.com/</dcosUrl><deployable>group</deployable><ignoreSslCertificate>true</ignoreSslCertificate></configuration><executions><execution><id>dcos:deploy</id><phase>install</phase><goals><goal>deploy</goal></goals></execution></executions>
</plugin>

该片段的要点是:

  • 插件版本为0.2。 这表明该插件仍处于开发的早期阶段。
  • dcosUrl${DnsAddress}输出中${DnsAddress}键的值。 该地址用于部署应用程序。
  • <deployable>元素支持不同类型的部署-应用程序,组或Pod。 该元素是对插件的提示,随着Marathon API的整合,在以后的版本中可能会消失。 遵循#11了解更多详细信息。

有关该插件的其他详细信息和配置,请参见dcos-maven-plugin 。

部署应用程序:

mvn install

显示以下输出:

[INFO] --- dcos-maven-plugin:0.2:deploy (dcos:deploy) @ dcos-java-database ---
[INFO] About to execute DC/OS deploy
[INFO] app definition: /Users/arungupta/workspaces/dcos-java-database/app-definition.json
[INFO] dcos token: /Users/arungupta/workspaces/dcos-java-database/.dcos-token
[INFO] dcos url: http://DCOS-ElasticLoadBa-1TH4TXIU5P783-1163025470.us-west-1.elb.amazonaws.com/
[INFO] ignore ssl certificate: true
[INFO] deployable: group
[INFO] Response from DC/OS [200] {"version":"2017-03-07T13:27:49.970Z","deploymentId":"dbc80f96-28cb-4040-8d0d-78452e461ec1"}

这是DC / OS控制台的一些更新输出。

首次更新的“服务”选项卡:

服务中的两个应用程序:

数据库应用程序具有一项任务:

数据库任务的状态:

来自数据库任务的日志:

它显示了来自Couchbase REST API的用于配置服务器的输出。

网络任务状态:

来自Web任务的日志:

它显示Java EE应用程序已成功部署。

访问应用程序:

curl http://DCOS-PublicSlaveLo-DD2EGGFVCJA0-1604955948.us-west-1.elb.amazonaws.com/airlines/resources/airline

该地址是${PublicSlaveDnsAddress}输出中键${PublicSlaveDnsAddress}的值。 格式化的输出(例如jq )如下所示:

[{"travel-sample": {"country": "United States","iata": "Q5","callsign": "MILE-AIR","name": "40-Mile Air","icao": "MLA","id": 10,"type": "airline"}},{"travel-sample": {"country": "United States",. . ."icao": "RLA","id": 1203,"type": "airline"}}
]

而已!

如前所述,此博客中使用的完整源代码位于github.com/arun-gupta/dcos-java-database 。

该博客显示了一个简单的Java应用程序如何使用DC / OS中的服务发现与数据库进行对话。

有关更多信息,请查看:

  • DC / OS文件
  • 容器上的Couchbase
  • Couchbase 开发人员门户
  • 在Couchbase论坛或堆栈溢出中提问
  • 下载Couchbase

翻译自: https://www.javacodegeeks.com/2017/03/service-discovery-java-database-application-dcos.html

dc/os

dc/os_DC / OS中具有Java和数据库应用程序的服务发现相关推荐

  1. DC / OS中具有Java和数据库应用程序的服务发现

    该博客将展示一个简单的Java应用程序如何使用DC / OS中的服务发现与数据库进行对话. 为什么要进行服务发现? 应用程序通常由多个组件组成,例如应用程序服务器,数据库,Web服务器,缓存和消息传递 ...

  2. 在VC中使用ADO开发数据库应用程序

    在VC中使用ADO开发数据库应用程序 一.ADO概述 ADO是Microsoft为最新和最强大的数据访问范例 OLE DB 而设计的,是一个便于使用的应用程序层接口.ADO 使您能够编写应用程序以通过 ...

  3. linux中启动 java -jar 后台运行程序

    ps -ef | grep java  查询java 端口占用 linux中启动 java -jar 后台运行程序 直接用java -jar xxx.jar,当退出或关闭shell时,程序就会停止掉. ...

  4. java rds 数据库_Java程序如何连接RDS MySQL

    您可以通过代码连接云数据库RDS MySQL版的测试程序,示例代码如下. import java.sql.Connection; import java.sql.DriverManager; impo ...

  5. windows中启动 java -jar 后台运行程序

    第一种需要一直开着dos界面: java -jar jar文件路径 第二种无需一直开着dos界面: 1.新建my-service.bat文件,内容如下:@echo off START "my ...

  6. Java实现微信小程序发送服务通知

    Java代码实现发送微信小程序服务通知 笔者在上个月接到一个需求,大概是需要计算一条数据的最大办理时间从而发送任务超期的微信小程序服务通知,俺也是第一次接触到需要调用微信的API去进行发送消息,该博客 ...

  7. Java开源数据库分类列表整理

    HSQLDB HSQLDB(Hypersonic SQL)是纯Java开发的关系型数据库,并提供JDBC驱动存取数据.支持ANSI-92 标准 SQL语法.而且他占的空间很小.大约只有160K,拥有快 ...

  8. java检测ubuntu_在Ubuntu、Debian、CentOS Linux中检查Java版本的方法

    本文介绍在Linux操作系统中使用命令行来检查所安装的Java版本(Java Version),当安装需要特定版本的Java的应用程序时,这很有用.该方法适用于Ubuntu.Debian.CentOS ...

  9. 在Blazor中构建数据库应用程序——第3部分——UI中的CRUD编辑和查看操作

    目录 介绍 示例项目.代码和链接 基本表单 RecordFormBase EditRecordFormBase 实现表单 WeatherForecastViewerForm WeatherForeca ...

最新文章

  1. mybatis自动生成bean
  2. opencv计算亮度
  3. 栈----生产者消费者实例
  4. 【EF学习笔记09】----------使用 EntityState 枚举标记实体状态,实现增删改查
  5. SQL Server2012 安装方法
  6. AI助手智商测评Siri进步最大,无人驾驶打车服务已在美国试行
  7. 多名员工拉横幅讨薪却跑错地方?暴风集团回应...
  8. 【Win 10应用开发】认识一下UAP项目
  9. Linux centos6 命令行配置网络连接
  10. matlab信源编码,常见无失真信源编码算法及Matlab实现比较(27页)-原创力文档
  11. 服务器lsass状态代码c0000005,lsass.exe是什么进程?Win7系统提示Lsass.exe系统错误的原因及解决方法...
  12. cmd操作 以及几个常用快捷键
  13. JavaScript 格式化日期 年月日星期时分秒
  14. Linux基础命令实例
  15. killer Linux驱动下载,The Linux Killer
  16. 京东注册页开发 HTML5 1014
  17. 超算优化重在存储,DAOS助力瑞金打造先进的生信大数据平台
  18. js正则表达式验证字符串只包括大小写字母下划线和-
  19. windows系统无法保存文件的解决方案
  20. 【DBC专题】-5-DBC文件格式解析

热门文章

  1. [2-sat专练]poj 3683,hdu 1814,hdu 1824,hdu 3622,hdu 4115,hdu 4421
  2. 学习三分 (概念 + 模板 + 例题:曲线)
  3. CF889E-Mod Mod Mod【dp】
  4. AGC002(D~F)【Kruskal重构树,博弈论,dp】
  5. 牛客挑战赛53G-同源数组(Easy Version)【NTT】
  6. P5305-[GXOI/GZOI2019]旧词【树链剖分,线段树】
  7. P2611-[ZJOI2012]小蓝的好友【Treap,扫描线】
  8. jzoj2292-PPMM【模拟,堆】
  9. P1801-黑匣子_NOI导刊2010提高【堆】
  10. ZOJ1101-赌徒【二分查找】