当前位置: 首页 > 后端技术 > Java

微服务低代码Serverless平台(Starlink)应用实践

时间:2023-04-01 16:27:24 Java

指南Starlink是京东开发的一款研发效率提升工具平台。场景化和定制化不是太难,但是相对繁琐的需求,比如服务前后端(BFF)、服务流程编排、异步消息处理、定时任务、运行后台、工作流自动化、临时需求等。以低代码的方式,以声明式的方式实现Serverless部署,使研发人员可以专注于业务逻辑而不是各种细节,大大提高研发效率,降低成本,提高效率。1什么是星链?Starlink是京东科技消费金融基础研发部为提升研发效率而开发的工具平台。服务前端后端(BFF)、服务流程编排、异步消息处理、定时任务、运行后台、工作流自动化、临时需求等更繁琐的需求,低代码开发微服务Serverless部署使得研发人员可以专注于业务逻辑而不是各种细节,大大提高研发效率,降低成本,提高效率。Starlink提供统一的Web界面,用户可以通过该界面完成微服务开发、调试、构建、测试、部署的完整流程。在开发方面,除了支持可视化配置和组件化流程编排外,还支持Java/JavaScript/Groovy等语言,支持引入第三方包,并与Git集成,在不降低灵活性和可控性的同时减少代码。在部署方面,实现了声明式部署,用户无需关注服务器细节。系统对跨集群组的共享计算资源进行统一智能调度,自动满足部署需求,同时节省计算成本。此外,星链热加载,实现秒级部署。此外,Starlink充分考虑了大中型企业内部的实际情况。不同团队的服务完全隔离,测试、预发布、生产服务完全隔离。传统虚拟机也支持K8s,支持部署到私有云和其他公有云,实现企业级Serverless。Starlink第一版自2019年3月上线以来,不断迭代完善。除了广泛支持消费金融各种场景外,还支持集团其他多个部门的业务,如财富、支付、营销中台、保险等。多次618、双11性能和稳定性测试。为了支持外部交付,应用到更广泛的场景,Starlink在21年进行了模块化和产品转型,不再依赖京东特有的中间件,并于3月22日上线京东公有云,支持外部服务。2Starlink核心概念Starlink有两个核心概念:VMS和Serverless,下面分别介绍。2.1VMSVMS指的是可视化微服务(VisualMicroService),意为轻量级的微服务应用,是星链中开发部署的基本单元。之所以称为“可视化”,主要是因为Starlink支持和提倡可视化编排微服务逻辑,VMS也代表了一种简单灵活的微服务编程模型,如图1所示。图1VMS编程模型该模型的基本思想是组件化并配置微服务应用的内外部依赖,让开发者可以专注于业务逻辑,包括三个核心概念:函数、连接器和触发器。函数封装了业务逻辑,由标准输入/输出和函数体组成,支持代码函数和BPMN函数。代码功能支持Java、Groovy、JavaScript三种语言,未来会支持更多语言。BPMN函数使用BPMN标准可视化地安排业务逻辑,可以参考代码函数或其他BPMN函数构建复杂的业务流程。连接器封装了第三方服务,包括RPC服务、HTTP服务、异步消息、缓存服务、配置服务、数据库等。触发器封装功能对外提供服务的方式支持RPC、HTTPRESTAPI、定时任务、MQ消息触发器。每个触发器都与一个函数相关联。Starlink将继续扩大对新型触发器和连接器的支持。未来还将开放SDK,允许用户自定义Starlink不支持的类型。2.2ServerlessStarlink的serverless概念并不是没有服务器,而是尽可能的抽象,让用户尽量减少对服务器细节的关注。用户还是需要关注计算资源,尤其是在企业中,用户需要关注资源成本分配,需要关注资源所在的机房,保证高可用。Starlink将用户需要关注的东西抽象出来,建立计算资源模型和Declarative部署模型。Starlink计算资源模型如图2所示。图2计算资源模型该模型同时支持传统虚拟机和K8s。集群和组都是计算资源的抽象,一个集群下有多个组。集群主要是为了方便管理多个组。主要属性是名称和备注。组具有环境属性:测试、预发布或生产,以及资源类型属性。资源类型支持虚拟机和K8s。对于K8s类型,一个group关联一个K8snamespace,Starlink自动创建和管理计算引擎Pod。对于虚拟机,需要通过其他方式创建计算引擎,然后将引擎IP关联到Starlink组。用户在开发、调试、测试阶段无需申请任何计算资源。生产部署时需要自己申请K8s资源或者虚拟机资源,然后关联到Starlink集群和组。每个团队只需申请和配置一次。声明式部署对于K8s分组和虚拟机分组是相同的,模型如图3所示。图3.声明式部署模型每个环境(测试、暂存、生产)都有不同的部署配置。每个环境可以有多个部署配置,以流量入口区分。每个条目配置可能包括多个条目,每个条目声明要对哪个集群进行分组、要部署哪个版本、要配置的所需实例数等。系统将智能分配计算资源,监控运行状态,确保满足部署语句要求。3Starlink应用场景Starlink有很多应用场景,下面分别介绍。3.1业务流程编排在微服务系统中,微服务的种类很多,但大致可以分为两类,一类是相对稳定的领域原子微服务,与场景关系不大,一类是相对多变的,面向场景,大量基于场景的微服务。场景化微服务通常通过集成和编排原子化的微服务来实现业务流程。针对不同的场景,流程是不同的。对于新的Scenarios,通过创建VMS,可以快速可靠地编排流程,实现流程可视化,让业务、产品、测试也能理解流程,提高协同效率。同时,每个新场景都是独立开发和部署的,易于管理,不影响现有业务。3.2服务前端后台(BFF)有多种媒体,如PC、手机APP、H5、小程序等,每种媒体需要的接口可能不同。前端需要的数据格式和后端微服务的数据格式不一样也可能不一样。另外,前端一个接口所需要的数据,往往需要后端多个微服务的组合来提供。可以创建VMS来快速满足这些前端接口数据聚合和接口数据适配的需求。3.3异步消息处理在微服务架构中,不同的微服务往往依赖异步消息进行协作。一个系统中往往会有大量的消息监听逻辑,而很多处理逻辑往往都比较简单,比如维护缓存、同步状态、转换消息格式等,而把这些胶层的消息处理逻辑在VMS中进行开发和管理。3.4运营后台服务运营后台往往有很多定制需求。这些需求往往只是一些查询需求,或者一些简单的更新逻辑。实现这些要求并不难,但繁琐且耗时。通过VMS实现这些需求,使用流程整理配置数据库相关的连接器,无需编写代码即可满足需求。3.5定时批处理任务在一个微服务架构系统中,往往会有很多定时批处理任务。这些任务通常只在清晨执行。将这些任务构建到VMS和Serverless部署中可以大大节省计算资源。3.6临时业务需求在实际业务中,往往会有很多临时业务需求,比如提供临时的操作活动接口、报表、临时的数据处理等,通过VMS来实现这些需求,一方面可以交付很快,另一方面,在Serverless部署方面,不需要关注计算资源。此外,与现有稳定的业务代码隔离,独立开发部署,易于管理,不用时可随时下线。3.7工作流自动化在日常工作中,经常会有一些工作需要自动化,比如异常日志管理:每天在线查询异常日志,总结重要的异常日志,通过邮件发送给团队成员,团队成员进行反馈。传统的方式是人工操作,用程序实现起来繁琐繁琐,也没有合适的应用/服务器来承载这些功能。工作流程通过Starlink开发部署实现自动化,开发方便,部署简单。3.8工作流自动化在一个VMS中可以创建多个触发器、函数和连接器,可以编写Java/Groovy/JavaScript代码,可以引用第三方库,可以通过配置访问数据库,支持事务。这样,业务逻辑不是太复杂的常见业务需求都可以通过VMS来实现。4Starlink的优势Starlink能做的,通过传统的开发部署也能做到,那么使用Starlink有哪些优势呢?以下是大量用户的反馈。快速开发:比如以前开发一个功能需要四五天,现在只需要两三天,而且流程可视化,功能逻辑一目了然。部署快速省心:过去部署需要1-2小时,现在几秒即可完成;VMS部署粒度更小,独立部署,不像原来大型应用改了部分公共代码,一直担心影响其他业务流程。无需管理服务器:无需为每个应用申请计算资源,团队只需申请一次。节约成本:大部分服务器对计算资源的利用率都比较低。Starlink通过让多个VMS共享计算引擎和动态调度,可以大大提高计算资源的利用率,节省成本。常用库和中间件升级方便:公司内部各种中间件升级频繁,各种常用库也因为安全漏洞等原因需要频繁升级。使用星链不需要用户修改代码,只需要一键更新星链引擎。好的。促进协作:通过统一的Web视图在产品、研发和测试方面进行协作。程序审查和代码审查不需要单独画流程图。BPMN图才是真正的流程,你可以点击一个节点查看实现细节。赋能前端研发:很多后端服务只有JavaSDK,没有Node.jsSDK。BFF层的工作,即使前端研发有时间做,也因为缺乏Java技能而无法完成。Starlink提供了一个低代码平台,并且支持JavaScript,这样前端研发也可以做后端必须做的事情。促进更好的设计:通过BPMN图表达业务逻辑,可以让用户更容易思考和梳理整体逻辑,将实现细节封装到具体的节点中,从而使设计更清晰、更完整。5星链产品功能下面介绍星链提供的各种功能和特性。5.1可视化低代码CloudWebIDEStarlink提供了一个低代码CloudWebIDE,通过可视化微服务编排提高开发效率,如图4所示。图4CloudWebIDEStarlinkIDE支持以下特性。可视化BPMN编排:支持各种连接器方法、代码函数等BPMN功能的编排,支持分支、异常处理,支持DB事务,自动提示请求参数、环境变量、中间节点输出结果等上下文信息,以及支持使用表达式Express复杂的条件分支,输入变量。自定义DB/HTTP连接器:您可以自定义连接器方法列表。输入输出参数的定义支持三种模式:table、YAML、CSV。它支持基于JSON示例推断参数定义。配置的连接器方法可用于BPMN布局和代码功能,数据库连接器方法可参与事务。可视化触发器配置:可以通过接口配置各种触发器,配置触发机制和调用的函数,无需开发。表达式编辑器:支持语法高亮、代码提示,有方便的示例和帮助文档,内置丰富的函数库,可以方便地构造由Map和List组成的复杂对象,支持多种操作。代码函数在线开发:可视化定义函数输入输出参数,支持Java/JavaScript/Groovy、语法高亮、内置API访问日志、各种连接器、环境变量等功能在线调试:可以直接在函数上运行函数Web,查看运行结果,查看日志,诊断问题。对于BPMN函数,可以可视化展示执行轨迹,展示执行过程中经过的每个节点的输入、输出或异常信息。支持设置远程调用的Mock返回值,方便联调。多标签页编辑:可同时编辑多个功能,调试和运行历史独立。实时保存和验证:实时保存用户对云工作区的修改,实时验证和提示。在DB/HTTP连接器中,可以自定义方法列表。图5显示了自定义数据库连接器的示例。用户只需要定义SQL和输入输出参数就可以生成一个方法。在定义过程中,可以随时对它们进行测试,以验证定义是否正确。目前用户需要使用MyBatis语法来输入SQL。未来,Starlink将提供一种更易于使用和更智能的方式来定义DB连接器。图5自定义DB连接器示例图6为自定义HTTP连接器示例,熟悉HTTP基本协议可以快速定义方法。未来,Starlink将提供更易用、更丰富的功能,并支持OpenAPI规范,导入OpenAPI定义文件生成HTTP连接器。图6自定义HTTP连接器示例在线调试BPMN功能时,Starlink会直观显示执行轨迹,方便用户定位问题。正确的执行显示为绿色,错误的显示为红色,并显示错误信息,如图7所示。未来,Starlink将支持BPMN断点调试。图7BPMN函数执行轨迹示例5.2自定义业务组件库Starlink提供了独有的业务组件库功能,Starlink除了提供系统公共组件外,还支持自定义团队组件。公共组件由系统维护并可供每个用户使用。系统将不断完善公共组件库建设。在私有化部署中,客户可以定制系统组件。团队组件由团队自己维护,对其他团队不可见。用户在VMS中自定义的连接器组件(如DB/HTTP连接器)可以导出为团队组件。用户可以在Starlink控制台维护团队组件,包括组件分组等。在BPMN编排中,用户可以浏览查询团队或公共组件,直接拖拽到编排面板中。如图8所示。图8业务组件库5.3支持本地IDE开发不同于大多数低代码平台是黑盒子,Starlink开发的VMS存储在Git代码仓库中,源代码完全可见。用户可以clone到本地,使用本地IDE进行开发、Debug和运行单元测试。在本地开发中,可以引入第三方包(如Java语言的jar包,JavaScript语言的npm包等),在代码功能中使用这些包。而且,在本地提交后,在IDE上也是完全兼容可见的。CloudWebIDE也支持Git操作,包括切换分支、提交、查看提交历史、比较变化等,如图9图9基于Git的本地和云端协同开发5.4集成构建和发布流程Starlink支持一键在线构建打包,实时查看构建日志。为了控制上线质量,Starlink集成了上线审批流程,如图10所示。图10集成构建发布流程5.5企业级Serveless在Starlink中开发、测试、部署,无需关注服务器细节。部署时只需要说明要部署的集群组、部署的实例数、部署的版本即可,可以在一次部署中声明多个集群组,这些组可以位于不同的机房和可用区,系统自动调度。声明式部署可以轻松支持灰度发布、扩缩容,只需要修改版本声明和实例数,系统会自动调整。支持部署环境隔离,区分测试、预发布、生产环境。复用计算引擎资源,无冷启动,热加载,快速部署。支持部署态环境变量加密,敏感变量加密存储,确保安全。示例部署配置如图11所示。图11声明式部署配置Starlink具有独立的无服务器部署控制网关和计算引擎模块,可以部署到私有云和其他公共云。对于用户创建的计算资源,系统提供多种管理功能,包括添加引擎、禁用引擎、启用引擎等,系统会根据可用的引擎动态调度VMS。5.6IntegratedObservabilityStarlink部署状态一目了然,包括整体状态是否符合预期、部署的集群、组、引擎详情等,如图12所示。图12DeploymentstatusStarlink自动添加日志到主执行节点的功能。在部署状态下可以设置日志级别,在Starlink上可以直接查看和搜索日志,方便问题诊断,如图13所示。图13集成日志在京东和京东公有云中,Starlink集成了京东的日志、监控等更专业的服务。用户可以使用这些工具来查看日志、监控和报警。5.7高性能可扩展多语言执行引擎Starlink执行引擎自2019年3月上线以来,在京东内部应用中经历了多次618和双11测试。Starlink引擎专为高性能和低延迟场景而设计。如果用户没有配置有状态节点(比如在进程中间等待异步消息),Starlink是通过无状态内存执行的。与大多数行业相比,它基于数据库或消息系统。先进的编排引擎,延迟低,更适合业务编排。广泛应用于C端用户的高并发低延迟场景。此外,Starlink引擎是一个多语言执行引擎,目前支持Java、JavaScript和Groovy。每种语言都支持调用各种连接器方法并提供通用的API。它还计划支持更多语言(例如Python)。此外,星链引擎采用微内核和模块化架构,可根据场景轻松扩展和调整。未来,还将允许用户自定义触发器、连接器和其他功能组件。5.8团队协作与管理Starlink提供便捷的VMS协作与管理功能。在Starlink中,VMS和计算资源属于一个团队。团队中的成员有四种角色:开发、测试、访问者和管理员。每个角色都有不同的权限,管理员可以添加/删除成员。一个用户可以加入多个团队。默认有专属个人团队可以试用Starlink,同时也会默认添加demo团队,方便查看系统提供的示例VMS。创建虚拟机时,您可以通过克隆现有虚拟机来快速创建新的虚拟机。VMS支持分组和分级管理。管理员可以将VMS迁移到其他团队,以方便大中型企业经常出现的组织和业务调整需求。6小结本文介绍了星链的功能、核心概念、应用场景、优势和主要产品功能。简而言之,Starlink是一个用于微服务的低代码无服务器平台。用户可以通过统一的Web界面完成可视化微服务(VMS)。)开发、调试、构建、测试、部署全流程,可视化、组件编排微服务低代码开发,声明式无服务器部署,服务前后端(BFF)、服务等快速交付流程编排、异步场景化、定制化的消息处理、定时任务、运营后台、工作流自动化、临时需求等业务研发需求降本增效。Starlink的特点是满足高并发低延迟的C端服务需求,低代码不牺牲灵活性和可控性,支持企业级Serverless,计算资源利用率高,成本低。