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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334953.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python进阶项目设计_Python进阶循环设计

之前在“循环”一节&#xff0c;我们已经讨论了Python最基本的循环语法。这一节&#xff0c;我们将接触更加灵活的循环方式。1. 利用range(), 得到下标在Python中&#xff0c;for循环后的in跟随一个序列的话&#xff0c;循环每次使用的序列元素&#xff0c;而不是序列的下标。之…

Struts2请求处理的内部流程图/结构图/原理图(版本二)

文章目录请求处理流程图流程说明请求处理流程图 流程说明 第 1 步&#xff1a; 客户端初始化一个指向 Servlet 容器&#xff08;例如 Tomcat&#xff09;的请求&#xff0c;例如&#xff1a;在浏览器中输入 http:localhost:8080/Struts2/helloworld/helloworldAction.action …

xampp mysql 查询很慢_如何开启mysql的慢查询机制

1 在mysql中默认是不会开启慢查询日志功能的&#xff0c;我们可以使用show variables like ‘%slow%‘来查看一下。结果如下&#xff1a;参数说明&#xff1a;log_slow_queries表示服务器端是否开启慢查询日志记录功能&#xff0c;slow_query_log表示mysql监测满查询的功能是否…

uaa 授权_使用UAA OAuth2授权服务器–客户端和资源

uaa 授权在上一篇文章中&#xff0c;我介绍了如何使用Cloud Foundry UAA项目启动OAuth2授权服务器&#xff0c;以及如何使用OAuth2授权代码流程中涉及的一些参与者来填充它。 我在Digital Ocean网站上发现这篇文章在描述OAuth2授权代码流方面做得很好&#xff0c;因此&#xf…

ps背景不变换字_PS教程:复杂背景中,如何利用通道轻松抠出发丝?

点击图片 1元抢购 PS、PR、AE等课程活动无缝抠图复杂背景当我们常用的钢笔抠图解决不了细碎的头发丝时我们可以用通道进行抠图&#xff0c;换背景在复杂的背景中把头发丝抠出来配套PS素材请到QQ群&#xff1a;565256668下载首先打开素材&#xff0c;我们发现背景比较复杂&…

阿里云 ram 容器镜像_容器中Java RAM的使用:不会丢失内存的5大技巧

阿里云 ram 容器镜像在本文中&#xff0c;我们希望分享Java内存管理的细节以及容器内部的弹性&#xff0c;这些细节乍一看并不明显。 在下面&#xff0c;您将找到要注意的问题列表以及即将发布的JDK版本中的重要更新&#xff0c;以及针对核心痛点的现有解决方法。 我们收集了5…

java堆内存剩余多少合理_Java堆内存的10个要点

我刚开始学习Java编程时&#xff0c;可不知道什么是堆内存或堆空间(heap space)&#xff0c;甚至根本不管对象创建时都放在哪里去了。正式了写一些程序后&#xff0c;经常会遇到java.lang.outOfMemoryError等错误&#xff0c;我才开始关注堆内存。对大多数程序员都经历过这样的…

Struts2请求处理的内部流程图/结构图/原理图(版本一)

流程说明&#xff1a; 1.客户端浏览器&#xff08;Client&#xff09;向服务器发送一个 http 请求&#xff08;HttpServletRequest&#xff09; 2.Container&#xff08;容器&#xff09; 通过 web.xml 映射请求&#xff0c;并获得控制器&#xff08;Controller&#xff09;的…

java中springdi_java中spring入门

1、spring的概念apache推出的java企业框架&#xff0c;提供了基于ioc的对象工厂、aop面向切面编程等功能及其他增强功能。当前版本4.xxx&#xff0c;支持注解的配置。 springmvc。2、控制反转(ioc):inversion of control。用来描述框架的重要特征spring针对ioc的具体实现&#…

tableau选择计算_干货 | 年薪40W, 掌握Tableau的留学生真的赚翻了

文章来源&#xff1a;UniCareer Tableau作为一款数据分析工具向来被视为文科转行Data必学因为它不需要你有Coding经验而且极易上手那么&#xff0c;Tableau究竟该怎么学&#xff1f;学会Tableau可以胜任哪些岗位&#xff1f;1Tableau: 学到就是赚到Tableau作为一款数据可视化工…

Java Servlet 编程,重定向介绍

文章目录什么是重定向重定向流程演示图如何重定向注意的问题重定向的特点重定向演示什么是重定向 服务器向浏览器发送一个状态码 302 及一个消息头 location&#xff0c;浏览器收到后&#xff0c;会立即向 location 所指向的地址发送请求。 重定向流程演示图 &#xff08;1&a…

java platform_Java Platform Module系统中的可选依赖项

java platformJava平台模块系统&#xff08;JPMS&#xff09;对依赖项有很强的见解&#xff1a;默认情况下&#xff0c;需要它们&#xff08;可以访问&#xff09;&#xff0c;然后在编译时和运行时都将它们存在。 但是&#xff0c;这不适用于可选的依赖项&#xff0c;因为代码…

hibernate删除记录_Hibernate记录:常见问题的提示和解决方案

hibernate删除记录如何通过适当的日志记录解决一些最常见的Hibernate问题&#xff1f; Hibernate的日志记录配置是一个重要但很少讨论的主题。 正确的配置可以帮助您在开发过程中发现潜在的问题&#xff0c;而错误的配置则可以在生产中导致严重的性能问题。 这就是我在新书《 …

java velocity详解_[velocity] velocity详解

(1)为什么要使用模版语言&#xff1f;在服务器端可以使用 Velocity处理模板和生成的动态内容(HTML、XML等)。这和JSP技术的目标非常接近。但是&#xff0c;JSP模型可以毫无阻碍地访问底层的Servlet API和Java编程语言。它基本上是一种在很大程度上开放的访问模型。而作为一种完…

pc端游戏修改器_原神:不要吐槽手机内存了,想要获得最佳游戏体验,PC端最合适...

想必大家这段时间都被一个米哈游公司的游戏给刷屏了吧&#xff0c;它就是号称用时三年&#xff0c;斥资一亿美元打造的《原神》&#xff0c;正是这种情况下&#xff0c;原神的关注远远要高于其他游戏&#xff0c;并且玩家的期望值也是和关注度成正比。但是&#xff0c;一经发布…

java调用命令行命令_Java命令行界面(第4部分):命令行

java调用命令行命令我的Java命令行解析系列的第四部分介绍了Commandline &#xff0c;它被描述为 “用于解析命令行参数的Java库”&#xff0c;它“基于使用注释从命令行参数到对象的映射”。 像以前介绍的args4j和jbock一样&#xff0c; Commandline使用注释来提供潜在命令行…

JVM 内存示意图(内存结构图/内存解析图)

图 1&#xff1a; 图 2&#xff1a; 图 3&#xff1a; 图 4&#xff1a;

java登录界面命令_Java命令行界面(第8部分):Argparse4j

java登录界面命令Argparse4j是“ Java命令行参数解析器库”&#xff0c;其主页将其描述为“基于Python的argparse模块的Java命令行参数解析器库”。 在本文中&#xff0c;我将简要介绍如何使用Argparse4j 0.7.0处理命令行参数&#xff0c;该参数类似于本系列中的前七篇文章中有…

协议管理模块设计

文章目录协议和合同的区别协议表说明协议签署日志协议和合同的区别 如果协议的内容写得比较明确、具体、详细、齐全&#xff0c;并涉及到违约责任&#xff0c;即使其名称写的是协议&#xff0c;也是合同&#xff1b;如果协议的内容写得比较概括、原则、很不具体&#xff0c;也…