说框架设计思路


     其旨在打造一个集应用开发、大数据存储、处理、分布式计算、自动化部署的无节点微服务集中开发与运行平台,以响应业务的快速变更,满足系统对大数据,大并发与开发效率的需求;

        平台设计以数据为核,以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

用于定义数据库资源中的初始化数据。

 

——————————————

推荐阅读:

Kafka 入门教程

你可以不懂但一定要知道的代码审查 Code Review

ELK Stack 实战教程

filebeat+kafka+strom+logstash+es 舆情采集系统

安全漏洞扫描,风险原因分析及解决方案


作者:CTO老王,发布于:2019/01/23
原文:https://www.cnblogs.com/Javame/p/10308358.html