一、概要
梳理现有SaaS前后端项目整体架构,文章内容主要以耘田Saas架构介绍(商照架构设计参照基本上是参照耘田)
二、整体框架
系统分层
整体分为5层
- 展现层,主要是暴露到用户侧的页面,底层全部为web,框架:ts+react
- portal层,负责页面和接口露出,流量分发,登录权限管控等
- 业务层,主要负责应用功能实现
- 服务层,主要包含云产品服务及能力依赖
- 数据层,包含应用数据,数仓数据,文件资源
用户链路
注意:
- 小程序端放弃RAX,目前全部是H5的模式
- 每次新增应用的小二管理,都需要改动小二后端服务代码
三、架构细分
1. 账号与登录
基于钉钉组织账号 使用uc进行数据同步及登录验证 同时支持扫码登录、手机号登录
账号隔离
引用OneID 领域架构图 https://yuque.alibaba-inc.com/uo5zv0/manual/lpe08b#abAgD

- 云账号、租户:1对1
- 钉钉组织、公司:1对1
- 公司在UC全局唯一
注意点
- 一个钉钉组织对应一个公司,已经开通过耘田saas的组织无法再开通商照
登录流程时序图
人员组织以钉钉为主,登录时需将钉钉登录态转换为iot登录态

钉钉组织账号数据同步
目前钉钉回调接入分三种
- http推送:使用HTTP的方式注册钉钉的回调事件,用于接收钉钉推送的消息。 概述:https://open.dingtalk.com/document/orgapp-server/callback-overview
- rds推送:钉钉云数据库同步
- SyncHttp推送:直接推送业务数据的最终状态,如人员变更信息等
注意点:
- 耘田及商照都是用http推送,但是该形式钉钉已不推荐
http推送链路图

相关配置信息
主要是将项目信息及小程序信息等注册到UC中

2. 设备数据上报与下发
- 自有设备数据上报、下发通过LP实现
- 授权设备需通过LP同学配置白名单(配置授权账号ID)后才可以获取
- 设备数据统计分两种
- 在DataWorks中从LP原始数据中筛选数据进行处理
- 通过LP的数据流转到flink中进行处理
- 页面设备状态变更通过轮询实现
3. 数据统计
流程
- 离线数据T+1
- 将需要在统计中使用的业务数据通过flink任务同步到holo中
- 在由holo导入到MaxCompute中
- MaxCompute基于设备ods及导入数据多次处理后导出到holo中
- 实时数据
- LP添加云产品流转把设备实时数据传到kafka中,再由flink任务处理后导出到holo中
- saas层从holo中获取离线和实时数据,组合使用
4. 三方应用中心
负责内部应用及外部应用接入到耘田saas中
- omp接口调用,数据获取权限
- 子应用免登

- 主子应用数据通信 https://yuque.alibaba-inc.com/vcasht/ul525i/ykoxa5#LBoNp
// 发送消息
// 退出登录
window.parent.postMessage({ type:'logout' }, '*');
// 登录失效,重新获取授权码
window.parent.postMessage({ type:'auth' }, '*');
// 子应用接收消息
window.addEventListener('message', (event)=> {
console.log(event.data); // { type: 'auth', data: { authCode: 'xxxxxxx' } }
});
注意点
- 外部应用体验无法可控(外部发布不感知)
- 外部域名需添加到我们网站白名单中
5. 前端架构
框架统一:React+TS
脚手架统一:umi

四、后续规划点
saas个性化支持
背景: 对于SaaS提供商而言,如果不能以标准化、规模化的方式提供服务,SaaS在经济上的优势是无法体现出来的;但企业管理往往是个性化的,这跟提供标准化产品服务的SaaS模式相互矛盾
个性化分类:
- 数据个性化
- 界面个性化
- 功能个性化
耘田saas的核心:生产种植+设备 结合
解决方案:
- 产品标准化,通过流程化方案解决一类需求(受限具体需求,受限产品能力)
- 集成外部三方应用,将非核心功能通过集成的形式接入
- 二次开发,基于项目定制化开发交付
- 项目配置,提供多种能力,提供开关能力
- 低代码 交付前管理功能搭建
- UI配置
- 功能配置
- paas
个性化反馈问题,统计,百分比
技术点:
- 耘田外部能力:完善三方应用接入(基于paas开发,可接入耘田)
- 耘田内部能力:配置能力
- 系统设置
- UI搭建:用于大屏,设备场景等页面展示
- 插件配置:采收功能,果蔬种植,蔬菜种植等(影响种植主流程)
通用能力抽象
- 账户相关
- 用户,组织,权限、数据同步等
- saas通用功能
- 操作日志
- 数据统计链路
- 交互层通用能力
- 登录,人员角色管理
- 小二管理