根据我所见,在Spring Cloud Dataflow(SCDF)中创建流将部署底层应用程序,绑定通信服务(如RabbitMQ),设置Spring Cloud Stream环境变量,并启动应用程序。这可以使用cf push命令轻松完成。
与此同时,我一直在使用Spring Cloud Dataflow遇到一些缺点:
那我错过了什么?为什么使用Spring Cloud Dataflow只对手动部署应用程序有帮助?
答案 0 :(得分:4)
根据我所见,在Spring Cloud Dataflow(SCDF)中创建流将部署底层应用程序,绑定通信服务(如RabbitMQ),设置Spring Cloud Stream环境变量,并启动应用程序。这可以使用cf push命令轻松完成。
是的 - 您可以单独编排流应用程序,这样做有好处。但是,当您尝试使用channelName
,destination
和绑定特定属性手动连接每个流应用程序时,您必须处理更多的簿记。这一切都成为Spring Cloud Data Flow(SCDF)业务流程层中的幕后工作。
特别是,当你进行缩放"或"分区"参与您的流媒体管道,您必须注意instanceCount
,instanceIndex
和相关属性。这些也是通过DSL语义在SCDF中自动完成的。
SCDF Server是PCF上的内存耗尽(我有一个只有6个应用程序的流,但我需要大约10GB的服务器)
根据我们的实验,这通常是在你进入"开发"并反复创建>部署>一天多次摧毁溪流。一般来说,服务器应该只需要1G。
普遍认为,PCF中的JVM报告内存并非真正使用;这必须与java rt.jar
做一些事情。围绕“内存使用情况报告”进行了一些新的内核更改。 PCF中的功能,以便在JVM启动后(使用大量资源),它不会继续报告错误数据。我们正密切关注这一点。
也就是说,我们也在分析服务器,以确保没有任何内存泄漏。原样,服务器没有任何内存中状态 - 服务器需要的最小元数据状态(例如:流定义)保存在RDBMS中。请密切注意#107的发展。
应用程序命名,内存,实例等没有灵活性(通常在manifest.yml中设置的所有内容)
不清楚你的意思是"应用程序命名"。如果必须处理服务器名称,您可以通过manifest.yml
或其他方式轻松更改服务器名称。如果它与流应用程序名称有关,则会自动使用" stream name"作为前缀,因此在您查看来自CF CLI或Apps-Mgr的应用程序时很容易识别。
对于内存和磁盘使用情况,您可以通过SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_STREAM_MEMORY
和SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_STREAM_DISK
令牌在每个应用程序级别进行控制。更多细节here。
与构建工具(如Bamboo)的集成将需要额外的工作,因为我们必须使用SCDF CLI而不仅仅是PCF CLI
您正在流/任务应用程序上运行CI构建,因为它们是您的开发工作流程的一部分。 SCDF只是提供编排机制来管理这些应用程序。我们还在与Netflix's Spinnaker工具进行原生集成,以便在不久的将来提供开箱即用的体验。
无法修改现有流。要执行蓝绿部署,您必须手动部署应用程序(绑定服务并手动设置环境变量)。然后,一旦进行蓝绿色部署,SCDF会将流显示为失败,因为它不知道其中一个底层应用程序已更改。
您可以单独在应用上执行蓝绿色,如rolling upgrades。还有一个活跃的w-i-p可以适应SCDF中不断变化的流/任务应用状态。另外,Spinnaker集成将进一步简化自定义应用程序位的滚动升级,SCDF将适应动态变化 - 这是此要求的最终目标。
我遇到的各种错误,例如尝试重新部署失败的流时的MySQL主键约束错误
我们很乐意听取您的反馈意见;具体而言,请考虑在backlog中报告这些问题。对此方面的任何帮助都非常感谢。
那我错过了什么?为什么使用Spring Cloud Dataflow只对手动部署应用程序有帮助?
architecture section涵盖了一般功能。如果您拥有大量流或任务应用程序(与任何其他微服务设置一样),则您需要使用集中编排工具在云设置中管理它们。 SCDF提供DSL,REST-API,仪表板,Flo,当然还有开箱即用的安全层。流和任务之间的互操作性是涉及闭环分析的用例的另一个重要要求 - 围绕这一点的DSL工具。当Spinnaker集成成为一等公民时,我们预计将通过数据管道进行端到端的持续交付。最后,Cloud Foundry的SCDF-tile将与Spring Cloud Services互操作,以进一步实现配置方面的自动化以及全面的安全覆盖。
希望这有帮助。