说框架设计思路
其旨在打造一个集应用开发、大数据存储、处理、分布式计算、自动化部署的无节点微服务集中开发与运行平台,以响应业务的快速变更,满足系统对大数据,大并发与开发效率的需求;
平台设计以数据为核,以groovy脚本为基础,通过提供api、异步消息处理、调度等基础构件来支持应用的快速开发;
核心是通过整合现有开源项目来实现的,其主要用到的技术栈包括:spring cloud, zookeeper, kafka, elasticsearch, mysql, kudu(hadoop系列), fastdfs,redis, quartz, maxwell, groovy, activitiy,couchdb等。
核心概念介绍
项目 - project
其对应一个微服务应用,一个项目定义了一个应用的边界,每个项目有唯一的代码与请求上下文路径,所有资源,接口,调度,通道或触发器都必需归属一个项目,项目与项目之间的调用需要授权。
模块 - module
其对应项目下的一个模块,每个模块可以由一系列的节点组成,方便进行管理。
资源 - resource
资源定义了项目中可以使用的数据库,消息,缓存,文件存储等服务,项目资源只能引用平台上配置的全局资源,在后续的api等脚本中,可以通过资源脚本对象对资源进行操作。
计划支持的资源类型:mysql,oracle,kudu,es(elasticsearch),redis,kafka,filestore,couchdb
外部接口 - restapi
restapi定义了项目对外提供的rest接口;其通过urlmapping来映射外部访问地址,urlmapping为ant表达式,例如:/foo/**或/foo/*/bar
rest接口可以绑定授权,你实现权限验证;rest接口也可以支持mockscript,实现mock;支持通过docapi来指定接口文档。
本地接口 - localapi
本地接口,主要用于在项目内定义一些公共方法,以便其它脚本使用,内部接口可以通过项目脚本对象的call方法来调用,例如:def robj = prj.call('foo', name:'abc');
项目过滤器 - filter
过滤器用于拦截请求,其分为项目filter与全局filter
项目filter只能对当前项目的restapi或filter进行拦截,其通过urlmapping来指定拦截路径。
全局过滤器 - globalfilter
全局filter可以拦截所有项目的restapi或filter进行拦截,项目中如需要配置全局filter必需获得管理员为其配置的“全局filter"定义的授权。
项目通道 - channel
通道主要用于异步处理,其对应一个kafka的topic,在脚本中可以通过prj.sendchannel('foo', 'valuestr')的方式触发channel脚本的执行。
channel默认是有序单队列的,如果需要支持无序并发处理,请将配置的hostnum设置大于1,考虑到资源占用,暂时最高不能大于100。
全局通道 - publicchannel
全局通道主要用于向其它项目广播,例如在产品主数据修改后,联采,交易,结算等都需要同步数据。
其它项目如需要监听当前通道,需要通过allowpullprojects为其它项目授权,其它项目可以使用publicreciver来监听其它项目的广播。
其它项目如需要发送数据到当前通道,可以通过prj.sendpublicchannel('project', 'channelname', 'valuestr')来实现,同时当前通道需要设置allowpushprojects来授权。
全局消息处理器 - publicreciver
用于接收全局广播,其对应publicchannel
触发器 - trigger
监听数据库的变动,当前只支持mysql;
调度 - schedule
用于定义项目中的调度,通过定义cron表达式来指定执行周期。
es数据集 - dataset
用于定义elasticsearch的索引库,其可以通过copyfromtable来同步某个数据库表的结构;
dataset变更后需要重建索引才会生效。
数据库表 - table
用于定义数据库资源中的表。
数据初始化 - datainit
用于定义数据库资源中的初始化数据。
——————————————
推荐阅读: