在OpenShift上扩展Java EE微服务

这个小系列的前两个部分介绍了如何使用WildFly Swarm构建一个微型JAX-RS服务并将其打包到Docker映像中 。 您学习了如何将此示例部署到OpenShift ,现在该进行一点扩展了。

为什么扩展很重要

基于微服务的体系结构的关键方面之一是分解为高性能的单个服务,这些服务可以按需扩展并且在技术上很容易。 现在正在构建应用程序以扩展规模,并在必要时透明地提供基础结构帮助。 尽管Java EE开发人员过去在标准水平缩放方面做了很多工作,但它们通过将更多的物理框彼此相邻放置,或者通过在同一主机上旋转更多实例来限制垂直缩放。 微服务允许使用不同的扩展方法。 关于缩放比例不同变化的更完整定义可以在《可缩放性的艺术》一书中找到。 我将在以后的博客文章中探讨不同的方法。 为了使扩展变得更容易一点,我们今天将通过旋转更多的pod来垂直扩展我们的小型应用程序。

什么是豆荚

吊舱(例如在鲸鱼或豌豆吊舱中)是Kubernetes对象,它对应于在共享上下文中运行的同一组应用程序。 就Docker结构而言,一个容器由一组共享容器的Docker容器组成。 在前容器世界中,它们将在同一物理或虚拟主机上执行。 因此,这就是我们在本示例中要扩展的内容。 已运行的Pod。

到目前为止,我们做了什么?

当您首次部署JAX-RS示例时,OpenShift创建了很多资源。 即:

  • Imagestream :图像流类似于Docker图像存储库,其中包含一个或多个由标签标识的Docker图像。 OpenShift存储有关每个图像的完整元数据(例如,命令,入口点,环境变量等)。 OpenShift中的图像是不可变的。 OpenShift组件(例如构建和部署)可以观看图像流并在添加新图像时接收通知,例如通过执行构建或部署来做出反应。
  • 服务 :Kubernetes服务充当内部负载平衡器。 它标识一组复制的Pod,以便代理它接收到的连接。
  • DeploymentConfig :OpenShift在复制控制器的基础上,通过部署概念增加了对软件开发和部署生命周期的扩展支持。 OpenShift部署还提供了从映像的现有部署过渡到新映像的功能,并且还定义了在创建复制控制器之前或之后运行的挂钩。

因此,服务将我们的请求代理到Pod,并且在Kubernetes复制控制器之上构建了一个deployconfig,该控制器控制Pod的数量。 我们越来越近了!

请立即扩展我的微服务!

只需再延长一秒钟,就可以了:尽管服务为可能突然出现或不存在的Pod提供了路由和负载平衡,但ReplicationController(RC)用于指定并强制应存在的Pod(副本)的数量。 可以认为RC与服务处于同一级别,但是它们在pod上方提供不同的功能。 RC是Kubernetes对象.OpenShift在RC顶部提供了一个称为``部署配置(DC)''的``包装''对象。 DC不仅包含RC,而且还允许您定义映像之间的过渡以及部署后挂钩和其他部署操作的发生方式。

我们终于知道要看哪里了。 让我们看一下启动集群样本映像时创建的DeploymentConfig的外观。

oc get dc swarm-sample
NAME           TRIGGERS                    LATEST VERSION
swarm-sample   ConfigChange, ImageChange   1

即使RC控制Pod的缩放比例,它们也封装在一个更高的结构DeploymentConfig中,该结构还管理何时,何地以及如何部署这些Pod / RC。 我们仍然可以看到底层的RC :(注意:输出被截断)

oc get rc swarm-sample-1
CONTROLLER       CONTAINER(S)   IMAGE(S)                                         REPLICAS 
swarm-sample-1   swarm-sample   172.30.101.151:5000/myfear/swarm-sample@sha256:[...]    1

现在我们需要知道我们要进行的缩放是否确实有效。 我确实推送了一个curl脚本 ,该脚本从JAX-RS端点输出结果,并休眠2秒钟,然后再次请求输出。 启动它,并观察返回全部相同主机名环境变量的结果,直到执行以下命令:

oc scale dc swarm-sample --replicas=3

现在一切都发生了变化,过了一会儿,您将看到返回了三个不同的主机名。 可能需要一段时间(具体取决于您的计算机以及OpenShift旋转新Pod的速度。您还可以在管理控制台中看到更改,该控制台现在显示三个Pod。

我们可以通过将副本数设置回1来还原行为。

oc scale dc swarm-sample --replicas=1

那很简单。 并没有完全被认为是最佳实践。 因为所有Pod共享相同的上下文,所以它们永远不应在同一台物理计算机上运行。 相反,最好在同一RC内的三个Pod上运行完整的微服务(前端,后端,数据库)。 但这是更多博客文章发表的主题。 现在您已经了解了如何在OpenShift上缩放Pod,我们可以继续进一步扩展示例应用程序,并在以后进行更多缩放示例。

翻译自: https://www.javacodegeeks.com/2015/10/scaling-java-ee-microservices-on-openshift.html

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

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

相关文章

mssql 远程无法连接mysql_在本地 怎么远程连接MSSQL数据库

hp连接mssql数据库有几个注意事项,尤其mssql的多个版本、32位、64位都有区别。首先,php.ini文件中;extensionphp_pdo_mssql.dll ;extensionphp_pdo_odbc.dll 前面的分号去掉,对应的使哪种方式连接mssql。注意要重启服务使其生效。一、建立连接…

jQuery 一些小技巧

1. 返回顶部按钮 可以利用 animate 和 scrollTop 来实现返回顶部的动画,而不需要使用其他插件。 // Back to top $(a.ktop).click(function () { $(document.body).animate({scrollTop: 0}, 800);…

OpenMap教程第2部分–使用MapHandler构建基本地图应用程序–第1部分

1.简介 在第一个教程中,我们创建了一个基本的OpenMap GIS应用程序,该应用程序在JFrame中显示一个从文件系统加载的具有一个形状图层的地图。 该教程基于com.bbn.openmap.app.example.SimpleMap 。 在该教程中,我们使用了以下OpenMap类&#x…

JS实战 · 复选框全选操作

思路&#xff1a;1、获取被选中checkbox&#xff0c;通过checked属性的状态完成&#xff1b;2、获取被选中的checkbox的value值&#xff1b;3、求所有value的和sum&#xff1b;4、定义span区域存储和sum&#xff1b;代码如下&#xff1a;<html><head><meta http…

java二叉树删除子树_132-BST删除有一颗子树的结点

2.网上数据结构和算法的课程不少&#xff0c;但存在两个问题&#xff1a;1)授课方式单一&#xff0c;大多是照着代码念一遍&#xff0c;数据结构和算法本身就比较难理解&#xff0c;对基础好的学员来说&#xff0c;还好一点&#xff0c;对基础不好的学生来说&#xff0c;基本上…

使用djcproxy创建代理对象

在过去的几周中&#xff0c;我展示了如何使用Java Reflection API和cglib创建代理对象。 在本文中&#xff0c;我将向您展示如何使用djcproxy做到这一点。 哦&#xff0c;不是&#xff0c;另一个代理实现&#xff01; 除了我创建此代理的自私事实之外&#xff0c;还要写些什么…

lightoj1145 【DP优化求方案】

题意&#xff1a; 有一个k面的骰子&#xff0c;然后问你n个骰子朝上的面数字之和s的方案&#xff1b;思路&#xff1a;dp[i][j] 代表 前 i 个骰子组成 j 有多少种方案&#xff1b;显然dp[i][j] dp[i - 1][j - 1] dp[i - 1][j - 2] ... dp[i - 1][j - k];我们算 dp[i][j] 的…

java rx.observable_Rxjava2 Observable的条件操作符详解及实例

简要&#xff1a;需求了解&#xff1a;在使用 Rxjava 开发中&#xff0c;经常有一些各种条件的操作 &#xff0c;如比较两个 Observable 谁先发射了数据、跳过指定条件的 Observable 等一系列的条件操作需求&#xff0c;那么很幸运&#xff0c; Rxjava 中已经有了很多条件操作符…

Linux poll 和 select 机制

poll select 介绍 使用非阻塞 I/O 的应用程序常常使用 poll, select, 和 epoll 系统调用. poll, select 和 epoll 本质上有相同的功能: 每个允许一个进程来决定它是否可读或者写一个 或多个文件而不阻塞. 这些调用也可阻塞进程直到任何一个给定集合的文件描述符可用来 读或写.…

hprof 不大 泄露_HPROF –内存泄漏分析教程

hprof 不大 泄露本文将为您提供有关如何通过生成和分析Sun HotSpot JVM HPROF堆转储文件来分析JVM内存泄漏问题的教程。 一个现实的案例研究将用于此目的&#xff1a;Weblogic 9.2内存泄漏影响Weblogic Admin服务器。 环境规格 Java EE服务器&#xff1a;Oracle Weblogic Ser…

java枚举怎么编译不行的_java枚举类型

public classTestEnum {/*最普通的枚举*/public enumColorSelect {red, green, yellow, blue;}/*枚举也可以象一般的类一样添加方法和属性,你可以为它添加静态和非静态的属性或方法,这一切都象你在一般的类中做的那样.*/public enumSeason {//枚举列表必须写在最前面&#xff0…

eclipse光标变成黑块变粗解决办法

就是按下了键盘的insert按键转载于:https://www.cnblogs.com/panxuejun/p/6170717.html

投资银行对Java进行的二十大核心面试问答

这是在金融领域&#xff08;主要是大型投资银行&#xff09;共享Java核心访谈问题和答案的新系列。 在JP Morgan&#xff0c;Morgan Stanley&#xff0c;Barclays或Goldman Sachs上会问许多这些Java面试问题。 银行主要从多线程 &#xff0c; 集合 &#xff0c;序列化&#xff…

java 支付重复问题_Airbnb支付系统如何在分布式环境下避免重复打款

原文链接&#xff1a;https://medium.com/airbnb-engineering/avoiding-double-payments-in-a-distributed-payments-system-2981f6b070bbAirbnb一直在将其基础架构迁移到面向服务的体系结构(SOA)。 SOA具有许多优势&#xff0c;例如使开发人员能够专业化并具有更快迭代的能力。…

用注解方式写定时任务

spring里加上 </context:component-scan><!-- 任务自动扫描 --><task:annotation-driven/><!-- 扫描位置 --><context:annotation-config/> <context:component-scan base-package"com.xxx.xxx"/>然后在类上面添加注解 Compon…

myeclipse配置java8_MyEclipse 2017配置Tomcat8

MyEclipse 2017的配置其实跟MyEclipse 2015的比较一致&#xff0c;再往之前的就有出入了。不得不吐槽其卡&#xff0c;跟Eclipse不在一个量级上呀。。。一、配置转自&#xff1a;http://www.xuexila.com/diannao/diy/2788109.html工具/原料myeclipse 2017tomcat8 服务器方法/步…

moxy json介绍_MOXy作为您的JAX-RS JSON提供程序–服务器端

moxy json介绍在之前的系列文章中&#xff0c;我介绍了如何利用EclipseLink JAXB&#xff08;MOXy&#xff09;创建RESTful数据访问服务。 在本文中&#xff0c;我将介绍在服务器端利用MOXy的新JSON绑定添加对基于JAXB映射的JSON消息的支持有多么容易。 MOXy作为您的JAX-RS JSO…

mysql教程清华课后答案_mysql学习之路_sql

查看数据库&#xff1a;Show databases;查看指定部分数据库&#xff1a;模糊查询Show databases like ‘patten’;--paatten是匹配模式%&#xff1a;表示是匹配模式_&#xff1a;表示匹配单个字符&#xff1b;查看数据库创建语句&#xff1a;Show create database 数据库名[库选…

那么您想做微服务吗? 请观看微服务以防万一

Bert Ertman在本次有关微服务的演示中提供了许多有效的观点。 您是否正在考虑在项目&#xff0c;团队或公司中遵循此路径&#xff1f; 请拿起咖啡&#xff0c;记事本&#xff08;如果您喜欢手写笔记&#xff09;并观看。 看到许多公司和团队确实很痛苦&#xff0c;精力浪费&…

MDX中Filter 与Exist的区别

获得一个集合&#xff0c;这个一般用来筛选出一个自定义的set&#xff0c;比如在中国的餐厅 该set返回所有MSDNteam下并且在Fact Thread度量上有记录的products 用Exists实现 select Exists( [Dim Queue].[Product - Queue].MEMBERS, [Dim Engineer].[Team - Engineer].[Team N…