第16章 局域网络
四月三日下午,某电科研究所的会议室里,白板已经被写满了两遍。
“别写‘全市统一平台’这五个字了。”坐在白板前的男人把记号笔帽咬在嘴里,含糊不清地说,“我们没那么多时间,我们今天只做一件事,让账本能运行起来就行。”
他叫赵闻川,二零所网络与系统工程方向的负责人。头发乱得像鸡窝,眼镜片上还有一块没擦干净的手印。
会议桌两边坐着十几个人。
企鹅厂习安研发中心来了两名支付后端工程师,阿狸云驻秦团队来了数据库的专家,华威来了运营商网络和终端适配研究员,字节那边也来了推荐系统研发人员,交大、工大、习电各派了老师和研究生,另外参会的还有几家本地软件公司的技术骨干。
赵闻川敲了敲桌面,
“上面给的需求很清楚。积分绑定身份,并且不能转让,不能提现。我们这次只讨论技术问题。”
企鹅厂来的徐安琪举手,她三十出头,短发,黑框眼镜,说话语速很快,
“先把账户模型敲定。积分账户通过身份证号、手机号等标签标注。”
来自字节的梁嘉树敲击键盘:“商品分类也要有。SKU需要映射成几类:食物、基础药品、日用品、特殊保障品。积分则规则按品类走,别按具体商品写死。”
阿狸云的陈柏舟靠在椅背上,手里转着笔,“账本设置一定要严谨。积分一旦扣错,整个系统都会崩溃。建议采用追加式流水,所有发放、扣减和撤销都写进ledger表,账户余额从流水聚合或者异步物化。每笔交易有全局的tranSaCtiOn id。即使POS端重复提交,后台也只能扣一次。”
交大软件学院的胡教授点头,“数据不能只存余额。余额被改了根本查不出来,只要有流水在,一切都能溯源。”
一位来自习电的研究生小声说:“那数据库用什么?MySQL够吗?”
陈柏舟看了他一眼,
“第一版足够了,别一上来搞什么复杂的分布式。核心库用POStgreSQL或者MySQL主从,冷热分离,交易库单独跑。全市一千多万人,真正同时买东西的峰值是有限的,先按每秒五千到一万笔交易设计。”
梁嘉树马上接话,“入口层面要限流。别等老太太们早上七点一起扫货,把系统搞崩溃。社区端、商超端要分不同的队列。Kafka或者PUlSar有没有现成集群?”
角落里一个工程师举手,“我们园区有卡夫卡集群,但规模不大,之前给物流系统用的。”
赵闻川在白板做下记录。
来自华威的高昊把一张网络图推到中间,
“网络这块,运营商本地核心网络还能跑,我们建议开一个专用的APN,名字就叫Xalife或者minSheng都行,商超POS、终端、社区工作机走专用的APN进政务内网。固定点位能接光纤的接光纤,不能接的用4G/5G CPE。DNS全部本地化,积分系统域名解析到市内数据中心。”
来自工大的周蔓教授问:“数据中心放哪?”
赵闻川指了指脚下,“这里放一套主要节点。交大机房、习电机房各放一套只读节点。电力优先级要提前报备上去,核心机柜外接UPS和柴油发电机。”
高昊补充:“基站供电也要考虑到,不能假设全市无线信号一直满格。主城区内的基站一定要优先保障电力供给,边缘区域的终端要支持离线交易。”
“离线交易最麻烦。”徐安琪立刻说,“商品限购,终端离线后,居民到三个店各买一次米,怎么办?”
会议室里安静了两秒。
梁嘉树抬头:“可以给终端发离线额度包。每个终端每天一个签名额度,比如只能离线扣分一百户、每户限制交易数量。风险控制在终端级别。联网后同步,超过额度直接锁死。”
陈柏舟皱眉:“这样会有时间差。某个家庭在网络端交易过,另一个离线节点数据还没有传过去。”
徐安琪说:“高价值商品必须在线交易。比如药品,肉蛋奶等。主粮和一些基础日用品可以小额度离线交易,系统不能为了绝对正确,把断网的社区全饿着。”
胡教授慢慢说:“可以设置软限制,离线只允许消耗基础包,联网后对冲。冲突时后台标记异常,不让下一次继续离线购买。这样居民不会因为系统误差被当场拦住。”
“那终端怎么搞?”
高昊说:“现有超市收银机能改的就改。扫码枪、POS机都还在。我们还可以做一个轻量化的客户端,WindOWS和安卓两版。能联网就直接调接口,不能联网就读取离线包。身份证读卡器库存要查,NFC卡也能发一批。”
一名研究员询问:“用身份证刷不就行了吗?”
徐安琪摇头。
“身份证可以做身份核验,但不能把所有流程绑死在身份证上。建议发居民积分卡,卡里不存余额,只存Card id和签名证书,后台映射用户身份。”
交大的胡教授补充:“卡里不存余额很重要。存余额就会有破解、盗刷的风险。卡只做个钥匙,账户在服务器里。”
本地软件公司的工程师有点为难,“那发卡量很大,一千多万人,来不及。”
赵闻川说:“不用那么着急,最初需要试点,后面手机二维码也可以覆盖一部分。”
梁嘉树说:“二维码要防止截屏倒卖。”
赵闻川立刻说:“动态码,三十秒刷新一次,本地局域网内生成。没有网的地方,就用卡。二维码里不放身份明文,只放tOken,tOken用SM2签名,通信走TLS,敏感字段库内加密。”
陈柏舟低声笑了一下:“终于有人说加密问题了。”
赵闻川指向他:“你负责密钥体系。”
陈柏舟脸上的笑容消失了,“我就知道。”
会议室里响起一阵低低的笑声。
陈柏舟把笔放下,认真起来。
“密钥不能散落在各个业务服务器上。我们要建立一套本地CA,签发终端证书和服务证书。交易请求必须双向TLS。终端丢失后,证书吊销。核心签名密钥放HSM或者密码机里,你们所这边应该有设备。”
赵闻川点头:“有,之前项目用过。”
“那就能做。”陈柏舟说,“积分发放、撤销都要签名。流水表加haSh链,每条记录带上一条haSh,以防后期篡改。每天零点做快照,快照打印摘要,存到离线介质。”
周蔓教授忍不住说:“打印摘要?”
陈柏舟看她:“现在这个世界,纸质媒介还是很可靠的。”
梁嘉树拍了下桌子:“这个有古典美。”
徐安琪翻了个白眼,“古典美归古典美,接口也要美一点。”
“库存系统呢?”
阿狸云陈柏舟说:“商户库存先做一个简易版。入库、出库。积分交易扣库存,现金交易也要登记。后续接通WMS,第一版给超市一个EXCel导入模板,别指望他们所有库存系统都能打通。”
梁嘉树说:“数据分析可以我们来做。实时看各区的销量、库存消耗、异常交易、排队压力,就做监控大屏和预警。比如某个社区一小时内销量异常,某个终端连续失败,某个家庭多点购买冲突,可以直接预警标记”
徐安琪看了他一眼:“你们的模型现在可推荐不了擦边舞了。”
会议室里又传来大家的笑声,
赵闻川把白板翻到空白处,“分工。”
所有人都低头准备记。
“电科所负责总体架构、机房、网络安全、本地CA、核心密钥。华威负责专用APN、终端接入、基站保障清单、CPE和POS适配。企鹅厂负责账户、交易、二维码、扣费流程和前端收银界面。阿狸负责数据库、消息队列、备份、账本和对账。字节负责风控排查、异常检测和流量压测。”
他看向高校那边。
“交大负责规则引擎和身份合并算法,别让业务代码里写一万条if。工大负责终端离线包、安全策略和设备适配测试。习电负责通信链路测试、弱网环境算法性能优化,还有终端证书批量烧录工具。”
习电的研究生愣了一下:“证书批量烧录工具也归我们?”
高昊拍了拍他肩膀,“年轻人,欢迎来到工程现场。”
白板上很快写满了任务。
赵闻川在最上面写下时间表,“今晚二十四点,核心账户和交易接口要跑通。明天上午,我们要开展试点运行。明天下午,接入十个点位进行压力测试。后天,全市重点区域上线运行第一版。”
会议室里没人说话。
这个时间节点放在平时,足够让项目组被程序员们围起来打。
现在大家只能报以沉默。
陈柏舟揉了揉有些发酸的眼睛,“需求冻结吗?”
赵闻川说:“技术需求今天冻结。政策规则可以通过配置表改,别让他们每改一次额度,我们就得发一次版。”
徐安琪忽然问:“居民端App做吗?”
赵闻川看向她:“你觉得呢?”
徐安琪沉默一秒,“先做H5,挂在本地门户。能查余额、查消费记录。App安装太慢,应用商店也废了一个一个安装要花太多时间。”
会议室外有人推门进来,送来一箱矿泉水和几袋面包。
赵闻川拿起一袋,看了看生产日期,“现代食品库存,吃一袋就少一袋。”
梁嘉树已经撕开包装,“那我缅怀着历史责任感吃。”
高昊咬了一口面包,含糊道:“说真的,以后的面包生产日期怎么写,1860年吗?”
徐安琪看着他:“不是1970年1月1日就行”
会议室里发出爆笑声。
大家陆续起身,任务已经被拆解,所有人开始忙碌起来。
窗外天色慢慢暗下来。
赵闻川站在白板前,盯着上面的板书不知道在想什么,
徐安琪抱着电脑从他旁边经过,“赵工,别发呆了。接口文档还等着你拍板呢。”
赵闻川回过神,
“走。”
他坚定地说。
http://www.bukexueyushou.com/yt135965/50868817.html
请记住本书首发域名:www.bukexueyushou.com。不科学御兽手机版阅读网址:www.bukexueyushou.com
“别写‘全市统一平台’这五个字了。”坐在白板前的男人把记号笔帽咬在嘴里,含糊不清地说,“我们没那么多时间,我们今天只做一件事,让账本能运行起来就行。”
他叫赵闻川,二零所网络与系统工程方向的负责人。头发乱得像鸡窝,眼镜片上还有一块没擦干净的手印。
会议桌两边坐着十几个人。
企鹅厂习安研发中心来了两名支付后端工程师,阿狸云驻秦团队来了数据库的专家,华威来了运营商网络和终端适配研究员,字节那边也来了推荐系统研发人员,交大、工大、习电各派了老师和研究生,另外参会的还有几家本地软件公司的技术骨干。
赵闻川敲了敲桌面,
“上面给的需求很清楚。积分绑定身份,并且不能转让,不能提现。我们这次只讨论技术问题。”
企鹅厂来的徐安琪举手,她三十出头,短发,黑框眼镜,说话语速很快,
“先把账户模型敲定。积分账户通过身份证号、手机号等标签标注。”
来自字节的梁嘉树敲击键盘:“商品分类也要有。SKU需要映射成几类:食物、基础药品、日用品、特殊保障品。积分则规则按品类走,别按具体商品写死。”
阿狸云的陈柏舟靠在椅背上,手里转着笔,“账本设置一定要严谨。积分一旦扣错,整个系统都会崩溃。建议采用追加式流水,所有发放、扣减和撤销都写进ledger表,账户余额从流水聚合或者异步物化。每笔交易有全局的tranSaCtiOn id。即使POS端重复提交,后台也只能扣一次。”
交大软件学院的胡教授点头,“数据不能只存余额。余额被改了根本查不出来,只要有流水在,一切都能溯源。”
一位来自习电的研究生小声说:“那数据库用什么?MySQL够吗?”
陈柏舟看了他一眼,
“第一版足够了,别一上来搞什么复杂的分布式。核心库用POStgreSQL或者MySQL主从,冷热分离,交易库单独跑。全市一千多万人,真正同时买东西的峰值是有限的,先按每秒五千到一万笔交易设计。”
梁嘉树马上接话,“入口层面要限流。别等老太太们早上七点一起扫货,把系统搞崩溃。社区端、商超端要分不同的队列。Kafka或者PUlSar有没有现成集群?”
角落里一个工程师举手,“我们园区有卡夫卡集群,但规模不大,之前给物流系统用的。”
赵闻川在白板做下记录。
来自华威的高昊把一张网络图推到中间,
“网络这块,运营商本地核心网络还能跑,我们建议开一个专用的APN,名字就叫Xalife或者minSheng都行,商超POS、终端、社区工作机走专用的APN进政务内网。固定点位能接光纤的接光纤,不能接的用4G/5G CPE。DNS全部本地化,积分系统域名解析到市内数据中心。”
来自工大的周蔓教授问:“数据中心放哪?”
赵闻川指了指脚下,“这里放一套主要节点。交大机房、习电机房各放一套只读节点。电力优先级要提前报备上去,核心机柜外接UPS和柴油发电机。”
高昊补充:“基站供电也要考虑到,不能假设全市无线信号一直满格。主城区内的基站一定要优先保障电力供给,边缘区域的终端要支持离线交易。”
“离线交易最麻烦。”徐安琪立刻说,“商品限购,终端离线后,居民到三个店各买一次米,怎么办?”
会议室里安静了两秒。
梁嘉树抬头:“可以给终端发离线额度包。每个终端每天一个签名额度,比如只能离线扣分一百户、每户限制交易数量。风险控制在终端级别。联网后同步,超过额度直接锁死。”
陈柏舟皱眉:“这样会有时间差。某个家庭在网络端交易过,另一个离线节点数据还没有传过去。”
徐安琪说:“高价值商品必须在线交易。比如药品,肉蛋奶等。主粮和一些基础日用品可以小额度离线交易,系统不能为了绝对正确,把断网的社区全饿着。”
胡教授慢慢说:“可以设置软限制,离线只允许消耗基础包,联网后对冲。冲突时后台标记异常,不让下一次继续离线购买。这样居民不会因为系统误差被当场拦住。”
“那终端怎么搞?”
高昊说:“现有超市收银机能改的就改。扫码枪、POS机都还在。我们还可以做一个轻量化的客户端,WindOWS和安卓两版。能联网就直接调接口,不能联网就读取离线包。身份证读卡器库存要查,NFC卡也能发一批。”
一名研究员询问:“用身份证刷不就行了吗?”
徐安琪摇头。
“身份证可以做身份核验,但不能把所有流程绑死在身份证上。建议发居民积分卡,卡里不存余额,只存Card id和签名证书,后台映射用户身份。”
交大的胡教授补充:“卡里不存余额很重要。存余额就会有破解、盗刷的风险。卡只做个钥匙,账户在服务器里。”
本地软件公司的工程师有点为难,“那发卡量很大,一千多万人,来不及。”
赵闻川说:“不用那么着急,最初需要试点,后面手机二维码也可以覆盖一部分。”
梁嘉树说:“二维码要防止截屏倒卖。”
赵闻川立刻说:“动态码,三十秒刷新一次,本地局域网内生成。没有网的地方,就用卡。二维码里不放身份明文,只放tOken,tOken用SM2签名,通信走TLS,敏感字段库内加密。”
陈柏舟低声笑了一下:“终于有人说加密问题了。”
赵闻川指向他:“你负责密钥体系。”
陈柏舟脸上的笑容消失了,“我就知道。”
会议室里响起一阵低低的笑声。
陈柏舟把笔放下,认真起来。
“密钥不能散落在各个业务服务器上。我们要建立一套本地CA,签发终端证书和服务证书。交易请求必须双向TLS。终端丢失后,证书吊销。核心签名密钥放HSM或者密码机里,你们所这边应该有设备。”
赵闻川点头:“有,之前项目用过。”
“那就能做。”陈柏舟说,“积分发放、撤销都要签名。流水表加haSh链,每条记录带上一条haSh,以防后期篡改。每天零点做快照,快照打印摘要,存到离线介质。”
周蔓教授忍不住说:“打印摘要?”
陈柏舟看她:“现在这个世界,纸质媒介还是很可靠的。”
梁嘉树拍了下桌子:“这个有古典美。”
徐安琪翻了个白眼,“古典美归古典美,接口也要美一点。”
“库存系统呢?”
阿狸云陈柏舟说:“商户库存先做一个简易版。入库、出库。积分交易扣库存,现金交易也要登记。后续接通WMS,第一版给超市一个EXCel导入模板,别指望他们所有库存系统都能打通。”
梁嘉树说:“数据分析可以我们来做。实时看各区的销量、库存消耗、异常交易、排队压力,就做监控大屏和预警。比如某个社区一小时内销量异常,某个终端连续失败,某个家庭多点购买冲突,可以直接预警标记”
徐安琪看了他一眼:“你们的模型现在可推荐不了擦边舞了。”
会议室里又传来大家的笑声,
赵闻川把白板翻到空白处,“分工。”
所有人都低头准备记。
“电科所负责总体架构、机房、网络安全、本地CA、核心密钥。华威负责专用APN、终端接入、基站保障清单、CPE和POS适配。企鹅厂负责账户、交易、二维码、扣费流程和前端收银界面。阿狸负责数据库、消息队列、备份、账本和对账。字节负责风控排查、异常检测和流量压测。”
他看向高校那边。
“交大负责规则引擎和身份合并算法,别让业务代码里写一万条if。工大负责终端离线包、安全策略和设备适配测试。习电负责通信链路测试、弱网环境算法性能优化,还有终端证书批量烧录工具。”
习电的研究生愣了一下:“证书批量烧录工具也归我们?”
高昊拍了拍他肩膀,“年轻人,欢迎来到工程现场。”
白板上很快写满了任务。
赵闻川在最上面写下时间表,“今晚二十四点,核心账户和交易接口要跑通。明天上午,我们要开展试点运行。明天下午,接入十个点位进行压力测试。后天,全市重点区域上线运行第一版。”
会议室里没人说话。
这个时间节点放在平时,足够让项目组被程序员们围起来打。
现在大家只能报以沉默。
陈柏舟揉了揉有些发酸的眼睛,“需求冻结吗?”
赵闻川说:“技术需求今天冻结。政策规则可以通过配置表改,别让他们每改一次额度,我们就得发一次版。”
徐安琪忽然问:“居民端App做吗?”
赵闻川看向她:“你觉得呢?”
徐安琪沉默一秒,“先做H5,挂在本地门户。能查余额、查消费记录。App安装太慢,应用商店也废了一个一个安装要花太多时间。”
会议室外有人推门进来,送来一箱矿泉水和几袋面包。
赵闻川拿起一袋,看了看生产日期,“现代食品库存,吃一袋就少一袋。”
梁嘉树已经撕开包装,“那我缅怀着历史责任感吃。”
高昊咬了一口面包,含糊道:“说真的,以后的面包生产日期怎么写,1860年吗?”
徐安琪看着他:“不是1970年1月1日就行”
会议室里发出爆笑声。
大家陆续起身,任务已经被拆解,所有人开始忙碌起来。
窗外天色慢慢暗下来。
赵闻川站在白板前,盯着上面的板书不知道在想什么,
徐安琪抱着电脑从他旁边经过,“赵工,别发呆了。接口文档还等着你拍板呢。”
赵闻川回过神,
“走。”
他坚定地说。
http://www.bukexueyushou.com/yt135965/50868817.html
请记住本书首发域名:www.bukexueyushou.com。不科学御兽手机版阅读网址:www.bukexueyushou.com