使用BDOS构建数据驱动服务的闭环

1. 教程概述

数据驱动的服务,不仅仅是一个简单的数据处理和报表生成系统,而是能够支持大量的实时的数据驱动的场景服务。本教程将以一个典型的数据驱动的服务场景,如电商系统,在BDOS平台搭建数据驱动服务,部署外部应用提供对外接口接收外部业务数据,如客户订单数据;部署内部应用,对外部应用产生的业务数据进行分析处理,如实时的基于地图的区域性订单分析系统;通过这两个应用的配合,为管理部门评估和提升业务的运营状况提供准确的数字化依据,让运营部门清晰地掌握各地区实时的订单状况,从而有效地调配物流资源。

本文档适用于任何需要体验武汉智领云科技有限公司BDOS大数据平台产品的用户,文档将以教程的形式,一步一步指导您来完成这一数据驱动服务闭环的搭建过程:

应用架构图

大屏应用展示

2. 教程准备

联系你的管理员

BDOS 支持多用户,使用教程之前请联系你的管理员(或 BDOS售前)帮助你创建一个账号,并加入到相应的安全组 本教程使用一个演示账号: demouser01

查看并下载程序包

教程提供一个完整的大屏应用所需程序包和源代码作为实例参考,推荐阅读代码结构,然后编写自己的应用程序

编号 文件名 备注 下载 链接
01 senddata.zip 构建镜像发送数据到 Redis 下载链接 http://linktime-public.oss-cn-qingdao.aliyuncs.com/bdos-tutorial-1/docker-%E4%BD%BF%E7%94%A8%E9%85%8D%E7%BD%AE/senddata.zip
02 screen.zip 构建镜像从Redis读取数据制作大屏 下载链接 http://linktime-public.oss-cn-qingdao.aliyuncs.com/bdos-tutorial-1/docker-%E4%BD%BF%E7%94%A8%E9%85%8D%E7%BD%AE/screen.zip

senddata.zip(包含)

screen.zip(包含)

部署应用方式

BDOS 提供4种方式,允许用户发布自动以应用

本教程采用是第一种方式,通过配置来安装 Docker 应用,客户通过配置文件来安装 Docker 应用会非常的便捷,无需在本地将用于构建镜像的包(package)做好,通过在线编写 Docker file,以及上传主程序,和用于构建镜像的辅助文件,即可发布一个应用。

最后,用户进行试验时针对 API name,API 分组,程序名字,使用自定义的名字,以免造成同组重名

3. 步骤详解

3.1 查看主程序

通过配置安装 Docker 应用,允许用户通过界面来配置数据服务 API,使其作为一个变量传入程序,这样用户在编写主程序的时候可以更加独立

阅读实验里面的两个主程序的源代码,查看程序编写的方法,帮助编写之后的自己的应用

编号 文件名 备注 下载 链接
marketDemo.jar 主程序-01 第一个应用(senddata)的主程序 阅读源码 http://linktime-public.oss-cn-qingdao.aliyuncs.com/bdos-tutorial-1/marketDemo%E6%BA%90%E7%A0%81.tgz
serviceDemo-1.0.tgz 主程序-02 第二个应用(screen)的主程序 阅读源码 http://linktime-public.oss-cn-qingdao.aliyuncs.com/bdos-tutorial-1/screenDemo%E6%BA%90%E7%A0%81.tgz

打开两个主程序的源码,查看下面的代码片段,参考示例程序的写法,用户可以构建自己的程序

marketDemo.jar

public class Util {
public static String getRedisServer(){
String redis_server = Constant.DEFAULT_REDIS_SERVER;
String env_redis_server = System.getenv(Constant.SERVER_REDIS);
if(StringUtils.isNotBlank(env_redis_server)){
redis_server = ens_redis_server;
}
return redis_server;
}
}

serviceDemo-1.0.tgz

public static String getDataServiceSumUrl(){
String urlPrefix = System.getenv(Constant.REDIS.PREFIX_SUM);
return urlPrefix;
}

public static String getDataServiceInventoryUrl(){
String urlPrefix = System.getenv(Constant.REDIS_PREFIX_INVENTORY);
return urlPrefix;
}

3.2 通过界面来发布第一个应用程序(发送数据给Redis)

使用管理员配置的账号,登录BDOS,本教程使用 demouser01 作为演示账号进行登录

用户进入【应用管理-当前运行应用-自定义Maranthon应用】请先确认图示的两个应用处于Inactive的状态,如仍在运行,请先暂停两个应用,如未运行,则可以忽略此步骤

Step1-进入自定义应用安装

在 BDOS 界面,在侧边栏选择「应用管理-自定义应用」,点击自定义应用安装,选择安装 Docker 应用 (通过配置)

Step2-填写基本配置

参考截图和下面表格

条目 内容 备注
安全组 demo 下拉框选择,默认选项
全新安装 开启 用于控制应用的版本
应用名称 senddata 固定使用,因为和实验提供的域名绑定了,实际中可以替换

Step3-填写 Dockerfile

参考截图和下面表格

FROM openjdk:8-jdk-stretch

WORKDIR /workdir

COPY marketDemo.jar ./
ADD checkAlive.sh ./
ADD launch.sh ./

CMD chmod +x ./*.sh && ./launch.sh

img

Step4: 添加资源文件

参考截图和下面表格,此处上载从实验准备章节下载的程序包

小技巧: 在一个目录下,按住shift建全选,可一次性加入

条目 内容
marketDemo.jar 应用的主程序
checkAlive.sh 应用健康检查脚本
launch.sh 启动主程序的脚本

img

Step5-修改通用配置

参考截图和下面表格

条目 内容 备注
CPU 0.5 根据实际来修改
MEM 1024 根据实际来修改
DISK 1024 根据实际来修改
Instance 1 根据实际来修改

Step6-添加环境变量

点击“+添加”,参考截图和下面表格

环境变量的名字,取决于程序

条目 内容 备注
KRB5_USER demouser01 替换成自己的用户名
REDIS_SERVER 6.3.7.9:16379 固定使用实验提供的地址,实际中可以修改

img

Step7-添加主页配置

参考截图和下面表格

条目 内容 备注
主机 https://demo-senddata.linktimecloud.com 为实验预先配置的域名,实际场景可预先配置域名

img

点击右上角安装按钮,安装应用

Step8-查看安装状态

点击「记录-操作记录」通过日志来查看安装应用状态

3.3 启动 senddata 应用

Step1-进入自定义应用管理

参考截图和下面表格,点击「应用管理-自定义应用管理」,通过应用名称demo-senddata查找刚刚被安装的应用

注: 本系统的机制是会在被安装的应用前面加上用户所在的安全组作为前缀,此处demouser01 所在的安全组是demo,实际根据用户填入的用户信息和安全组而定

Step2-启动程序

选择最新的版本并点击启用按钮

注: 用户在下拉框选择最新的版本号,最新的版本即为用户最近时间最后创建的应用版本

Step3-查看进程

点击「记录-操作记录」通过来查看应用启动状态

Step4-查看运行应用

点击「应用管理-当前运行应用-自定义Marathon应用」查看运行应用

3.4 使用数据服务,自定义生成第一个 API(为商超大屏提供商品销量数据的API)

为商超大屏提供一个可消费的商品销量数据的数据服务API,进行显示实时销量信息显示。此处命名为 getSum

Step1-进入数据服务

通过导航点击快速入口里面的数据服务 (BDOS Data Service) logo,在新弹出的浏览器页面来到数据服务页面(参考截图)

Step2-建立第一个API

导航至「服务管理」菜单,创建第一个API,用于获取统计信息

进入API创建界面后,请先创建一个 API 分组

参考截图,填写表单

条目 内容 备注
名称 demouser01_market 使用用户名_替换demouser01
描述 分组-demo 用户自定义

参考下表,进行表单填写

条目 内容 备注
API 名称 getSum
API 分组 demouser01_market 选择自己创建的组名
请求方式 get 默认为get
API 路径 /demouser01 用户名替换demouser01(需要和创建的第一个Docker应用的变量名保持一致)
描述 这是一个获取统计数据的API接口 可替换
数据源 linktime-redis(redis) 实验内置 Redis 源
数据库 0 由 Redis 配置决定
类型之 hash 由实际 Redis 配置决定
数据前缀 demouser01_sum 使用用户名_替换demouser01_

添加Redis数据源

参数名 参数说明 参数内容 备注
name 数据源名称 linktime-redis 可自定义
type 数据源类型 redis 目前版本仅支持Redis/MySQL
url 数据源连接地址 6.3.7.9:16379 根据数据源填入相应的地址
user MySQL 数据源连接用户 Redis数据该字段值为空

API 访问控制

利用KONG网关实现针对用户和API两个维度的访问控制,用户可通过界面操作对访问权限和访问流量进行精细控制,如对 API 访问进行安全控制的 JWT 安全组件,分析监控插件 Datadog 等等,使接口背后的数据共享成为可能。

参数名 参数内容 备注
每秒 10000
每小时 0
每天 0

填写好后点击保存

Step3-测试第一个API

创建成功,在真实使用前,必须(平台强制)测试API的可用性,参考下面截图,API测试通过,检查是否有数据流入Redis。用户从【服务管理】点击进入,选择需要测试的API,点击右侧的测试图标按钮,参考示例截图:

Step4-提交通过测试的API进行审核

测试成功后返回服务管理界面,点击提交审核,等待有管理员权限的人员在【审批】界面对API审核通过。

注:如需要对API进行审核的权限,可通知系统管理员在【审批者管理】界面进行审批权限添加,Admin权限用户可在【审批者管理】界面中自行添加权限。

添加权限后,即可在【审批】界面对提交的API进行审批。

Step5-发布通过审核的API

Step6-获取API地址

在【服务管理界面】点击服务名称进行查看,在 HTTP 接口信息 的Tab 获取 API 调用地址

复制并保存这个地址在之后小节使用,调用地址:http://admin-kong.marathon.l4lb.thisdcos.directory:8000/prentiss02

注: 不同用户获取到的 API 是不一样的,用户需要复制自己实验里面得到的 API

3.5 创建第二个 API(为商超大屏提供商品库存数据的API)

为商超大屏提供一个可消费的商品库存数据数据的数据服务API,进行显示实时库存信息显示,此处命名为 getInventory

Step1-创建第二个API

和生成 getSum 一样的步骤,在数据服务的页面通过导航来到「服务管理」,点击创建 API 参考截图,填写表单内容, 点击保存

条目 内容 备注
API 名称 getInventory 可以替换
API 分组 demouser01_market 和 getSum 选择同一个组(可替换)
请求方式 get 默认为get
API 路径 /demouser01_getinventory 使用用户名替换demouser01_
描述 这是一个获取库存数据的API接口 可替换
数据源 linktime-redis(redis) 选择实验内置数据源
数据库 0 由实验的 Redis 配置决定,实际中会不一样
类型之 hash 由实验的 Redis 配置决定,实际中会不一样
字段前缀 demouser01_inventory 使用用户名替换demouser01_

API 访问控制

参数名 参数内容 备注
每秒 10000
每小时 0
每天 0

img

填写好后点击保存

Step2-测试第二个API

参考截图点击测试

查看测试数据结果

Step3-提交通过测试的API进行审核

测试成功后返回服务管理界面,点击提交审核,等待有管理员权限的人员在【审批】界面对API审核通过

注:如需要对API进行审核的权限,可通知系统管理员在【审批者管理】界面进行审批权限添加

Step4-发布通过审核的API

Step5-获取API地址

参考截图,在操作栏点击查看,在 HTTP 接口信息 Tab 获取 API 调用地址

复制并保存这个地址在之后小节使用,调用地址:http://admin-kong.marathon.l4lb.thisdcos.directory:8000/prentiss02_getinventory

注: 不同用户获取到的 API 是不一样的,用户需要复制自己实验里面得到的 API

3.6 发布第二个应用(通过大屏看到实时商超数据)

Step1-进入自定义应用安装

回到 BDOS 界面,在侧边栏选择「应用管理-自定义应用」,点击自定义应用安装,选择安装 Docker 应用 (通过配置)

Step2-填写基本配置

参考截图,填写基本配置

条目 内容 备注
安全组 demo 下拉框选择,默认选项
全新安装 开启 用于控制应用的版本
应用名称 screen 固定使用,因为和实验提供的域名绑定了,实际中可以替换

Step3-填写 Dockerfile

参考截图,填写 Dockerfile

FROM tomcat:9.0.1-jre8

RUN echo "Asia/Shanghai" > /etc/timezone
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime


WORKDIR /tomcat.wordir

ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && \
apt-get install -y jq && \
apt-get install -y openssh-server wget curl vim

COPY serviceDemo-1.0.tgz ./

RUN tar -xzvf serviceDemo-1.0.tgz -C ./ \
&& mv serviceDemo-1.0 serviceDemo \
&& rm serviceDemo-1.0.tgz

COPY server.xml /usr/local/tomcat/conf/
COPY launch.sh ./
COPY check_data.sh ./
RUN rm -fr /usr/local/tomcat/webapps/examples || true

EXPOSE 8080 8081

CMD chmod +x ./*.sh && ./launch.sh

img

Step4-添加资源文件

参考截图,上传主程序和用于构建镜像的辅助脚本 此处上载从实验准备章节下载的程序包

小技巧: 在一个目录下,按住 shift 一起添加

条目 内容
serviceDemo-1.0.zip 应用的主程序
check_data.sh 应用健康检查脚本
launch.sh 启动主程序的脚本
server.xml 需要的配置文件

img

Step5-填写网络配置

点击+添加,参考截图和下面表格,填写参数

条目 内容
网络模式 container/bridge
容器端口 8080
Protocol TCP
负载均衡 勾选
保持会话 不勾选

img

Step6-修改通用配置

参考截图和下面表格

条目 内容 备注
CPU 0.5 根据实际来修改
MEM 1024 根据实际来修改
DISK 1024 根据实际来修改
Instance 1 根据实际来修改

img

Step7-添加环境变量

点击“+添加”,参考截图和下面表格

注: 这里的环境变量,要和程序当中的变量匹配,URL使用由数据服务生成的 URL,即从上面步骤生成的 API,下面仅是示例

类目 内容 描述
KRB5_USER demouser01 使用自己用户名进行替换(和第一个应用的变量名保持一致)
REDIS_PREFIX_SUM http://admin-kong.marathon.l4lb.thisdcos.directory:8000/prentiss02 使用第一个API地址
REDIS_PREFIX_INVENTORY http://admin-kong.marathon.l4lb.thisdcos.directory:8000/prentiss02_getinventory 使用第二个API地址

Step8-添加主页配置

参考截图和下面表格

条目 内容 备注
主机 https://demo-screen.linktimecloud.com 为实验预先配置的域名,实际场景可预先配置域名

img

点击安装

Step9-查看安装状态

点击「记录-操作记录」通过日志来查看安装应用状态

3.7 启动 Screen 应用

Step1-进入自定义应用管理

点击「应用管理-自定义应用管理」,可以查看刚刚被安装的应用demo-screen

注: 本系统的机制是会在被安装的应用前面加上用户所在的安全组做作为前缀,此处demouser01 所在的安全组是demo

Step2-启动程序

点击启动按钮

注:用户通过下拉框,选择当前最新的版本进行安装

Step3-查看进程

点击「记录-操作记录」通过来查看应用启动状态

Step4-打开应用

如图所示,点击「应用管理-当前运行应用」查看自定义应用,点击应用名字,进入详情页(此处点击demo-screen)

注:demo-screen运行后需等待片刻,即可在「当前运行应用-自定义应用」中查看到应用列表,用户点击demo-screen应用名称进入后,点击 “应用首页” 即以打开应用