本文为翻译文章,如有不合理处请查看原文:https://community.alfresco.com/community/bpm/blog/2018/12/10/getting-started-with-activiti-7-beta
Activiti 7是Alfresco经过实战考验的Activiti工作流引擎的演变,完全被采用在云环境中运行。 它是根据Cloud Native应用程序概念构建的,与之前的Activiti版本在架构方面有所不同。 还有一个新的Activiti Modeler,我们将在另一篇文章中介绍。
Activiti 7引擎的核心仍然与以前的版本非常相似。但是,它已经变得更加严格地专注于完成一项工作,并且另它出乎意料好的完成,这就是运行BPMN业务流程。Activiti运行时中内置的辅助功能,包括为引擎生成并存储在引擎数据库中的查询和审计数据的API运行时请求提供服务,已从引擎中移出并作为Spring Boot 2微服务运行,每个微服务都在各自的高度可扩展容器中运行。
Activiti引擎的核心库也已经为版本7重新构建,我们将在另一篇文章中介绍它们
本文是详细介绍Activiti 7的系列文章的一部分,应按列出的顺序阅读。
你已经安装了Docker
以下是在部署和使用Activiti 7产品时您将接触到的概念(术语)和技术列表
Hypervisor用于在本地主机上运行其他OS实例。 通常,它用于在你的计算机上运行不同的操作系统,例如Mac上的Windows。 当你在主机上运行另一个操作系统时,它称为客户操作系统,它在所谓的虚拟机(VM)中运行。
镜像是许多可用于实例化容器的软件层。 它是一个轻量级,独立,可执行的软件包,包含运行应用程序所需的一切:代码,运行时,系统工具,系统库和设置。 例如,这可以是Java + Apache Tomcat。 您可以在名为Docker Hub的公共存储库中找到各种Docker镜像。 还有私有镜像存储库(用于商业企业镜像之类的东西),例如Alfresco使用的名为Quay的存储库
镜像的实例称为容器。 你有一个一组层结构描述的镜像。 如果你要启动此镜像,你可以再一个运行的容器中运行该镜像。你可以在不同的容器中运行相同的镜像。
Docker是最受欢迎的容器平台之一。 Docker提供了基于镜像在容器中部署和运行应用程序的功能。
当有许多容器构成解决方案时,例如使用Activiti 7,并且需要配置每个容器以便它们可以很好地协同工作,那么就需要一个工具来实现这一点
Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。 使用Compose,可以使用YAML文件来配置应用程序的服务。 并且使用一个简单的命令,就可以从配置中创建并启动所有服务
Dockerfile是一个脚本,包含一系列连续的指令,指示和命令,这些指令,指令和命令将被执行以形成新的Docker镜像。 执行的每个命令都为镜像产生新的层结构,形成最终新镜像产品。 它们取代了手动和重复执行所有操作的过程。 当Dockerfile完成执行时,最终构建了一个新镜像,然后可以使用它来启动新的Docker容器。
了解使用容器和使用VM之间的区别非常重要。 这是一张图片说明:
主要区别在于,当运行容器时,并未启动全新的OS实例。这使得容器更轻便,更快速启动。容器在硬盘上占用的空间也少得多,因为它不需要运送整个操作系统,更多信息请参考What is a Container | Docker.
集群形成由服务器(具有一个或多个容器的节点)组成的共享计算环境,其中资源已集群在一起以支持集群中运行的工作负载和进程:
Docker非常适合在一台主机上运行容器,并为此提供所有必需的功能。 但在当今的分布式服务环境中,真正的挑战是跨服务器和复杂的基础架构管理资源和工作负载。
今天最常用和支持的工具是Kubernetes(希腊语中的“舵手”或“飞行员”),它最初由谷歌创建,然后是开源的。 正如单词所暗示的那样,Kubernetes利用许多有用的功能承担了在许多节点上编排容器的繁琐任务。 Kubernetes是一个开源平台,可用于在集群中运行,扩展和操作应用程序容器。
Kubernetes由几个架构组件组成:
Kubernetes Node-运行一个或多个容器的集群节点
Kubernetes Master
Kubectl-为了从命令行控制和管理kubernetes集群,我们将使用一个名为kubectl的工具。它与kubernetes主服务器中的api服务器通信,后者反过来与各个kubernetes节点通信。
Service 提供了一种低开销的方法,使用标签驱动的选择器将请求路由到集群中的一组逻辑pod后端
下图说明:
您可能也听说过Docker Swarm,它类似于Kubernetes
在Kubernetes工作过程中的创建,部署,管理和销毁不同类型的东西。 我们可以称这些东西为对象。 Kubernetes对象模型中有许多不同类型的对象,可以很好地了解。 下图说明了您可能遇到的一些对象:
其中一些对象已经很熟悉了,这里有一个列表解释其余的:
Minikube是一种工具,可以在本地轻松运行Kubernetes。 Minikube在笔记本电脑的VM中运行单节点Kubernetes集群。 它主要面向希望尝试Kubernetes或用作开发环境的用户。
当我们启动并运行了Kubernetes集群,现在可以进行容器部署了。我们可能有很多容器用于诸如数据库层,应用程序层,Web层,搜索层等等。并且它们应该具有不同的可伸缩性和故障转移配置。我们如何有效地处理这个问题?听起来很复杂。
然而,有一种名为Helm的工具可以提供帮助。 它是Kubernetes集群的包管理器。 有了它,我们可以确切地指定数据库层部署应该是什么样子,3个带MySQL的容器,2个备用故障转移容器,像这样的自动缩放等,Helm包被定义为Helm Chart。 每个Chart都是列出或定义的文件集合
其他重要的Helm概念:
Helm Charts存储在Helm存储库中,就像JAR存储在例如Maven Central中一样。 所以Helm实际上是由Client位和Server位构成的。 Helm的服务器位称为Tiller,在Kubernetes集群中运行。 Helm架构看起来像这样:
不仅是一个包管理器,它还是一个部署管理器,可以进行以下操作:
Activiti 7解决方案与Helm一起打包,Activiti提供了一个Helm存储库,其中包含与Activiti 7组件相关的charts。
为了理解Activiti 7的架构,构建和运行方式,了解一下有关Cloud Native应用程序的信息非常有用。 让我们试着通过一个例子来解释。 大约10年前,Netflix正在考虑未来客户可以点击按钮并在线观看电影。没有大量的DvDs被广泛地发送给人们,你无法在想要的地方看到你想要的东西,你只能通过邮件发送有限的DVD,DVD可能会被损坏等.Netflix以有限的方法有效地向客户推荐新电影。
要实施这种新的在线流媒体服务,Netflix必须创建一种新型的在线服务:
Netflix真正想要的是大规模的速度和访问。 电影网站需要始终开启,始终可用,几乎没有停机时间。 作为消费者,您不会接受由于技术问题而无法观看电影的情况。 他们还知道,在运行时,他们必须不断更改产品,以根据消费者需求添加新功能。 基本上他们必须越来越好,越来越快。 这是Cloud Native应用程序的关键。
那么什么是Cloud Native,它使您能够提供似乎始终在线并且可以连续添加和交付新功能的应用程序? 以下是Cloud Native应用程序的一些特征:
那么与传统应用程序开发相比有哪些主要区别:
那么,今天任何人都可以构建这样的解决方案并且需要特殊的知识和长期的经验吗?是的,你可以开发Cloud Native应用程序,如果你已经了解了有关Cloud Native应用程序的概念,并且了解了一些支持它的更突出的框架,那么你肯定可以做到。
以下是Cloud Native Applications的一些构建块:
Spring Cloud框架中提供了许多这些功能,它提供了许多可用于构建Cloud Native应用程序的工具:
云原生解决方案的典型架构如下所示:
未完待续 点我继续