最近在帮公司国际部做一个APP.
面向的用户是 东南亚和非洲.
涉及到了APP-中台-下游多服务系统 之间的时间同步问题.
之前完全没有处理过,记一下.
项目结构简述
项目的整体服务结构很简单,
依托现有的 国际服务,对国际部提供的dubbo进行封装,然后统一由中台去内网调用和分发.
东南亚地区中台服务部署在香港阿里云,APP只通过HTTPS与中台进行交互, 中台对所有上/下游服务进行封装,内网dubbo调用.
- 各服务需要的 常规信息(用户,所属站点,countryCode等),
- 各服务给予的 token,
全部由中台持有,中台下发自己的token给APP
后续所有系统服务调用,中台根据自己的token去进行补充.
问题
1. APP时间篡改
这个问题很好解决,
APP使用的扫描数据的时间统一以 登录后返回服务器为准,避免Android设备自行设置时间,导致快件扫描时间混乱.
2.服务时间不同步,跨时区问题
想一想这个问题
当你在中国寄了一个快递 寄往越南的.
越南是东7区,中国大部分区域为东8区.
比如 我中国中心收件是 东8区 3:00PM,到了越南中心到件,因为是东7区,早一个小时,2:50 PM,其实相当于 东8区的 3:50PM,但是因为时区问题,反倒是 下一个中心的到件时间比上一个中心的收件时间还早.
当然这种极端情况不太可能发生,但是这终究会牵扯到 因为时区导致时间差异的问题.
况且后续会将APP推广到东南亚甚至非洲其他国家,因为时区这个问题,导致快件时间出现差错,会影响快件的物流轨迹.
直接说解决问题办法.
-
统一中台服务器,上下游所有依赖服务 时区,指定设置 统一时区.
-
APP登录时,传入时区,APP中台根据APP传入的时区,将当前服务器的时间进行时区校准后传递给APP,后续一律使用 校准后的时间+APP的时区.
在登录时,传递设备当前时区. 如当前为 东7区.
服务器统一为 东8区,当前服务器时间为 10:00 AM.
通过2个时区之间的校准,那么给设备返回当前 服务器时间为 9:00 AM (东7区 比 东8区 早一个小时).
后续设备所有接口请求,统一传递的时间为 经过服务器校准过的时间 加上 当前的设备时区 即可.