使用BDOS构建数据驱动服务的闭环
1. 教程概述
数据驱动的服务,不仅仅是一个简单的数据处理和报表生成系统,而是能够支持大量的实时的数据驱动的场景服务。本教程将以一个典型的数据驱动的服务场景,如电商系统,在BDOS平台搭建数据驱动服务,部署外部应用提供对外接口接收外部业务数据,如客户订单数据;部署内部应用,对外部应用产生的业务数据进行分析处理,如实时的基于地图的区域性订单分析系统;通过这两个应用的配合,为管理部门评估和提升业务的运营状况提供准确的数字化依据,让运营部门清晰地掌握各地区实时的订单状况,从而有效地调配物流资源。
本文档适用于任何需要体验武汉智领云科技有限公司BDOS大数据平台产品的用户,文档将以教程的形式,一步一步指导您来完成这一数据驱动服务闭环的搭建过程:
- 在 BDOS平台发布一个自定义应用模拟外部服务,向Redis发送业务数据;
- 通过数据服务平台定义一个数据服务接口,使得Redis存储的业务数据能够以标准简单的方式被消费;
- 在BDOS平台发布一个自定义应用模拟内部分析系统,通过数据服务接口消费Redis中的业务数据,以大屏方式展示实时状况。
应用架构图
大屏应用展示
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(包含)
- marketDemo.jar: 应用
senddata
主程序 - checkAlive.sh : 应用健康检查脚本
- launch.sh: 启动主程序的脚本
screen.zip(包含)
- serviceDemo-1.0.tgz: 应用
screen
主程序 - check_data.sh : 应用健康检查脚本
- launch.sh: 启动主程序的脚本
- server.xml: tomcat需要的配置文件
部署应用方式
BDOS 提供4种方式,允许用户发布自动以应用
- 安装 Docker 应用 (通过配置)
- 安装 Docker 应用 (通过镜像)
- 安装 Tomcat 应用
- 安装 Spring Boot 应用
本教程采用是第一种方式,通过配置来安装 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 { |
serviceDemo-1.0.tgz
public static String getDataServiceSumUrl(){ |
3.2 通过界面来发布第一个应用程序(发送数据给Redis)
使用管理员配置的账号,登录BDOS,本教程使用 demouser01 作为演示账号进行登录
用户进入【应用管理-当前运行应用-自定义Maranthon应用】请先确认图示的两个应用处于Inactive的状态,如仍在运行,请先暂停两个应用,如未运行,则可以忽略此步骤
Step1-进入自定义应用安装
在 BDOS 界面,在侧边栏选择「应用管理-自定义应用」,点击自定义应用安装,选择安装 Docker 应用 (通过配置)
Step2-填写基本配置
参考截图和下面表格
条目 | 内容 | 备注 |
---|---|---|
安全组 | demo | 下拉框选择,默认选项 |
全新安装 | 开启 | 用于控制应用的版本 |
应用名称 | senddata | 固定使用,因为和实验提供的域名绑定了,实际中可以替换 |
Step3-填写 Dockerfile
参考截图和下面表格
FROM openjdk:8-jdk-stretch |
Step4: 添加资源文件
参考截图和下面表格,此处上载从实验准备章节下载的程序包
小技巧: 在一个目录下,按住shift建全选,可一次性加入
条目 | 内容 |
---|---|
marketDemo.jar | 应用的主程序 |
checkAlive.sh | 应用健康检查脚本 |
launch.sh | 启动主程序的脚本 |
Step5-修改通用配置
参考截图和下面表格
条目 | 内容 | 备注 |
---|---|---|
CPU | 0.5 | 根据实际来修改 |
MEM | 1024 | 根据实际来修改 |
DISK | 1024 | 根据实际来修改 |
Instance | 1 | 根据实际来修改 |
Step6-添加环境变量
点击“+添加”,参考截图和下面表格
环境变量的名字,取决于程序
条目 | 内容 | 备注 |
---|---|---|
KRB5_USER | demouser01 | 替换成自己的用户名 |
REDIS_SERVER | 6.3.7.9:16379 | 固定使用实验提供的地址,实际中可以修改 |
Step7-添加主页配置
参考截图和下面表格
条目 | 内容 | 备注 |
---|---|---|
主机 | https://demo-senddata.linktimecloud.com | 为实验预先配置的域名,实际场景可预先配置域名 |
点击右上角安装按钮,安装应用
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 |
填写好后点击保存
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 |
Step4-添加资源文件
参考截图,上传主程序和用于构建镜像的辅助脚本 此处上载从实验准备章节下载的程序包
小技巧: 在一个目录下,按住 shift 一起添加
条目 | 内容 |
---|---|
serviceDemo-1.0.zip | 应用的主程序 |
check_data.sh | 应用健康检查脚本 |
launch.sh | 启动主程序的脚本 |
server.xml | 需要的配置文件 |
Step5-填写网络配置
点击+添加,参考截图和下面表格,填写参数
条目 | 内容 |
---|---|
网络模式 | container/bridge |
容器端口 | 8080 |
Protocol | TCP |
负载均衡 | 勾选 |
保持会话 | 不勾选 |
Step6-修改通用配置
参考截图和下面表格
条目 | 内容 | 备注 |
---|---|---|
CPU | 0.5 | 根据实际来修改 |
MEM | 1024 | 根据实际来修改 |
DISK | 1024 | 根据实际来修改 |
Instance | 1 | 根据实际来修改 |
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 | 为实验预先配置的域名,实际场景可预先配置域名 |
点击安装
Step9-查看安装状态
点击「记录-操作记录」通过日志来查看安装应用状态
3.7 启动 Screen 应用
Step1-进入自定义应用管理
点击「应用管理-自定义应用管理」,可以查看刚刚被安装的应用demo-screen
注: 本系统的机制是会在被安装的应用前面加上用户所在的安全组做作为前缀,此处
demouser01
所在的安全组是demo
Step2-启动程序
点击启动按钮
注:用户通过下拉框,选择当前最新的版本进行安装
Step3-查看进程
点击「记录-操作记录」通过来查看应用启动状态
Step4-打开应用
如图所示,点击「应用管理-当前运行应用」查看自定义应用
,点击应用名字,进入详情页(此处点击demo-screen)
注:demo-screen运行后需等待片刻,即可在「当前运行应用-自定义应用」中查看到应用列表,用户点击demo-screen应用名称进入后,点击 “应用首页” 即以打开应用