编排微服务的标准模式是什么?
如果微服务只知道它自己的域,但是有一个数据流需要多个服务以某种方式进行交互,那么它的方法是什么呢?
假设我们有这样的事情:
为了论证,让我们说一旦订单发货,就应该创建发票.
在某个地方,有人按下GUI中的按钮,"我已经完成了,让我们这样做!" 在一个经典的整体服务架构中,我会说有一个ESB处理这个,或者Shipment服务知道发票服务并且只是调用它.
但是,在这个勇敢的微服务新世界中,人们处理这个问题的方式是什么?
我确实认为这可以被认为是基于意见的.但是它有一个具体的方面,因为微服务不应该做上述事情.因此,必须有一个"根据定义应该做什么而不是",这不是基于意见的.
射击.
我正在使用docker-compose来创建我的开发环境.我想构建一个特定的图像,但我不知道如何为该图像设置名称.
wildfly:
build: /path/to/dir/Dockerfile
container_name: wildfly_server
ports:
- 9990:9990
- 80:8080
environment:
- MYSQL_HOST=mysql_server
- MONGO_HOST=mongo_server
- ELASTIC_HOST=elasticsearch_server
volumes:
- /Volumes/CaseSensitive/development/wildfly/deployments/:/opt/jboss/wildfly/standalone/deployments/
links:
- mysql:mysql_server
- mongo:mongo_server
- elasticsearch:elasticsearch_server
Run Code Online (Sandbox Code Playgroud)
当我执行docker-compose
一切正常时,我得到一个新图像的随机名称.是否可以为构建映像设置名称?
我将在我的应用程序中实现一组微服务的编排.两个广泛使用的工具我发现与Apache Zookeeper和Netflix Eureka相比.
任何人都可以根据基本差异给我一个比较,这两项服务有哪些?
还有其他强大的工具吗?
architecture orchestration microservices netflix-eureka apache-zookeeper
企业服务总线(充当调解器,消息代理,服务启用器,架构转换增强器,透明位置提供程序,服务聚合器,负载平衡器,监视器以及所有这些东西的工具)是否负责协调服务?
如何在企业服务总线中放置超过一千步和几十个服务调用的自动化业务流程?
你会这样做,还是会使用编排专家如BPEL引擎?
请给你意见.
我正在寻找一个编排框架/引擎/工具包来替换/升级现有软件,主要是因为可扩展性限制。我所说的编排是指通用任务和工作流的异步和分布式执行。
更具体地说,要求几乎是这些:
现有系统是一个老式的单体服务(在 Java 中),它具有大部分功能,包括应尽可能保持不变的执行逻辑本身。
有没有人有类似问题的经验?在我看来,它应该很常见,如果我必须完全自己实现它会很奇怪。我在这里发现了一些问题(比如这个和这个)讨论编排和编排系统的理论,但不是实现它的工具的真实例子。此外,我认为我们并不是在谈论微服务 - 任务并不长且繁重,它们只是很多,在后台运行,执行多种类型的短期作业。我不会为每种工作类型创建服务。
此时我也没有在寻找云和容器服务——据我所知,部署是一个不同的问题。
我得到的最接近的是Netflix Conductor 引擎,它通过运行一个编排服务器来满足大多数需求,该服务器管理在 servlet(或任何语言的任何 Web 服务 - 加分项)中实现的任务。然而,它似乎主要是为了在工作流中安排繁重的任务而不是运行大量的小任务,这让我想知道在 servlet 中调用许多小任务的开销是多少。
有没有人对我可以使用的导体或其他工具有经验或任何意见?或者甚至是我解决问题的整个方法?
编辑:我意识到这是一种“需要的研究建议”,所以让我们简单地将其分为 3 个问题:
从版本1.3开始,Ansible支持角色依赖性以鼓励重用角色定义.要审计和维护更大的业务流程,最好有一些方法可以轻松生成依赖关系图,其中哪些角色取决于哪些其他角色.
依赖关系定义的示例可能是roles/app_node/meta/main.yml
:
---
dependencies:
- { role: common, some_parameter: 3 }
- { role: apache, port: 80 }
- { role: postgres_client,
dbname: blarg,
other_parameter: 12 }
Run Code Online (Sandbox Code Playgroud)
哪里roles/postgres_client/meta/main.yml
可能包括类似的东西
---
dependencies:
- { role: postgres_common }
- { role: stunnel,
client: yes,
local_port: 5432
remote_host: db_host
remote_port: 15432
}
Run Code Online (Sandbox Code Playgroud)
当业务流程中的角色数量增加时,这种嵌套的依赖关系可能会变得混乱.因此,我想知道是否有人找到了一种简单的方法来生成这种依赖关系的图形,无论是图形(点或neato?)还是仅作为缩进文本图形?这样的工具可以帮助降低维护复杂性.
是否可以通过UI将参数传递给Airflow的作业?
DFA中的AFAIK,'params'参数在python代码中定义,因此无法在运行时更改.
我定义了三个任务T1
,T2
和T3
,然后执行T4
如下任务:
class T4(luigi.Task)
def requires(self):
return [T1(), T2(), T3()]
Run Code Online (Sandbox Code Playgroud)
有没有一种自然的方式来告诉路易,我想这些任务T1
,T2
以及T3
在并行执行?
我目前正在尝试使用Airflow编排一个过程,其中一些运算符是动态定义的,并依赖于另一个(早期)运算符的输出.
在下面的代码中,t1更新了一个带有新记录的文本文件(这些记录实际上是从外部队列中读取的,但为简单起见,我在这里将它们硬编码为A,B和C).然后,我想为从该文本文件读取的每个记录创建单独的运算符.这些运算符将分别创建目录A,B和C,并且在Airflow UI中将被视为单独的bash进程Create_directory_A,Create_directory_B和Create_directory_C.
dag = DAG('Test_DAG',
description="Lorem ipsum.",
start_date=datetime(2017, 3, 20),
schedule_interval=None,
catchup=False)
def create_text_file(list_of_rows):
text_file = open('text_file.txt', "w")
for row in list_of_rows:
text_file.write(row + '\n')
text_file.close()
def read_text():
txt_file = open('text_file.txt', 'r')
return [element for element in txt_file.readlines()]
t1 = PythonOperator(
task_id='Create_text_file',
python_callable=create_text_file,
op_args=[['A', 'B', 'C']],
dag=dag
)
for row in read_text():
t2 = BashOperator(
task_id='Create_directory_{}'.format(row),
bash_command="mkdir {{params.dir_name}}",
params={'dir_name': row},
dag=dag
)
t1 >> t2
Run Code Online (Sandbox Code Playgroud)
在Airflow的文档中,我可以看到调度程序将定期执行它[DAG]以反映更改(如果有的话).这是否意味着存在这样的风险:即使我的t1运算符在t2之前执行,也会在更新之前为记录列表创建bash运算符(就像评估DAG时那样)?
Orchestration引擎与消息驱动系统的职责是什么.
如果我必须构建一个系统,必须将不同的独立组件(不需要公开Web服务端点的交叉技术/平台组件)串在一起,这是要选择的工具集?
有更好的选择吗?
orchestration ×10
airflow ×2
java ×2
python ×2
soa ×2
alsb ×1
ansible ×1
architecture ×1
bash ×1
bpel ×1
docker ×1
esb ×1
frameworks ×1
http ×1
hypermedia ×1
luigi ×1
scalability ×1
workflow ×1