1、优化背景 最近在做一个隐私号相关的服务,其中一个主要的接口遇到了性能瓶颈,本文把优化的思路、过程和结果记录下来,以供备忘和之后参考。
基础概念
隐私号服务:隐私保护通话(Private Number),针对企业的各种商业场景,在不增加SIM卡的情况下,为企业的用户增加隐私号码,使其既能享受优质的通话和短信服务,又能隐藏真实号码,保护个人隐私。—华为云
AXB:三个号码的绑定关系,其中X为隐私号码,A号码和B号码之间通过X号码进行通话。比如,在打车场景下,司机端为A号码,乘客端为B号码,之间通过X号码通话,两端看到的也都是X号码。(PS. 此处先不引入透传概念)
AX:两个号码的绑定关系,其中X为隐私号码,任意B号码呼叫X号码,都可以呼叫到A号码。
绑定冲突:假设同时存在号码A1X1B1与A1X1B2,那么A1拨打X1的时候,就不知道应该转给B1还是B2了,这种情况就是一种绑定冲突。同理假设同时存在A2X2与A3X2,也会出现绑定冲突。
所以在同一个X号码的前提下,旧AXB关系中AB不允许与该X建立任何关系,旧AX关系中的X不允许建立任何关系,如下所示:
新AXB关系 新AX关系 旧AXB关系 AB号码有一个相同即冲突 冲突 旧AX关系 冲突 冲突 2、接口逻辑 隐私号服务提供绑定接口,该接口既支持AX绑定,也支持AXB绑定,除了要建立绑定关系之外,还要进行绑定冲突的校验,保证数据的正确性。主要逻辑如下所示:
如上图所示,主要逻辑包括幂等校验和冲突校验,且全部借助DB实现,简略版sql(忽略过期时间等附加参数)如下所示:
幂等校验
select * from 绑定关系表 where 状态 = 已绑定 and A = A and X = X and B = B AX冲突校验...
今天是 2019-01-26,等明天过完就是放假的日子了,今天坐 9 点的班车到公司,空空荡荡的,借此机会总结下我的 2018 吧。
2018 年记忆深刻的事情 1.换工作 3 月份水上德州因为政策原因不再经营,我也换了工作来到瓜子,从事供应链开发相关。 这次找工作给我带来的感触颇多,总结下。
面试题要多刷。很多知识在平时的工作中可能会用不到,但并不代表你可以不了解,等遇到的时候至少要有一个思路吧。这也就是有人说的’面试造火箭,工作拧螺丝',但是事实就是这么个理。 基础肯定要都复习一遍。下层基础决定上层建筑嘛,差距除了表面上的框架使用经验,最大的还是在基础,这也是判断一个人能否深入了解和研究的依据吧。 尽量不要去小公司了吧。不是说小公司不好,而是很多东西是小公司学不到,也没有机会让你去学的,反而装系统、装软件等很多繁琐的小事回去占据你的时间。还有一点,小公司的工作经验可能没有大公司的值钱,你的简历上肯定会写上家公司,‘某某公司前员工’可能会成为面试官给你的第一个标签。小公司可能经不太起风浪,前家公司到现在也没有跟我结清工资。 筛选公司去面试。boss、拉钩什么的软件都用起来,猎头、内推也搞起来。但是也不要海投了吧,精力不允许啊,适当的筛选下。 2.买房子 5 月份的时候去青岛看了下房子,其实在 17 年的时候我就有来看过。伏董租了辆车,带我逛了逛各个售楼处。出于多个方向的考虑,最后在城阳买了房子。然后接下来的一段时间,经常往青岛跑,什么网签、办贷款、拿合同,最后还好都顺利搞定了。9 月份的时候顺利办理了公积金的提取,一切顺利。
3.结婚证 12 月份,去了趟青岛。终于跟孙彩云把证给领了,我们恋爱了 5 年,不长也不短,感觉怎么说呢,很幸运😄。
2018 年没做的事情 1.旅游 答应带孙彩云去旅旅游,散散心。最后也没来得及做,公司的事情有点忙。
2.技术 怎么说呢,技术没有达到自己预期的那个高度吧。
2019 年要去做的事情 1.结婚 婚礼已经定了,过年回家的时候再把详细的事情看下。
2.旅游 肯定要带孙彩云出去耍耍了,不能再拖了。不能让自己一直处于一个工作,吃饭,睡觉的循环里面。人毕竟不是机器吗,偶尔懈怠下,放松一下也未尝不可了。
3.技术 技术是无止境的,刷刷题{:target="_blank"}吧。
一、 什么是 PWA PWA(Progressive Web App)是一种理念,使用多种技术来增强 web app 的功能,可以让网站的体验变得更好,能够模拟一些原生功能,比如通知推送。在移动端利用标准化框架,让网页应用呈现和原生应用相似的体验。
就目前而言,PWA 对我产生最直接的影响有以下几点
速度的提升,缓存的使用使文章和博客的速度大大提升。 离线状态下,缓存过的文章也可以正常浏览。 PWA 应用可以表现的像原生系统一样。 二、如何配置 2.1 查询资料 在开始之间查询了一些资料,因为使用的 jekyll,尝试使用了 jekyll 的相关插件,效果并不理想。然后搜索了下 PWA 的相关资料后,发现并不是很难,于是尝试搞了下。所以建议大家也可以尝试按照我接下来的步骤配置,并不繁琐。
2.2 配置步骤 下面记录下我配置的步骤。
首先 PWA 需要一个描述文件 manifest.json,具体配置可以参考这个文档{:target="_blank"},也可以参考我的配置 manifest.json{:target="_blank"}。 在你的 html 文件中声明出来(因为我用的 jekyll,所以我在 _includes/header.html{:target="_blank"} 文件中声明)。 <head> ... <link rel="manifest" href="/manifest.json"> ... </head> 然后我们需要一个 service-worker 文件来处理 PWA 的额外功能,例如缓存。可以参考这个文档{:target="_blank"},也可以参考我的代码 manifest.json{:target="_blank"}。 其中缓存对应着一个版本号,因为我不想每次提交都重新修改下版本,比较麻烦。所以在这里我直接使用了 jekyll 的变量 site.time 把构建的时间作为版本号。 最后我们需要在 html 文件中注册这个 service-worker 文件,也可以参照我的文件_includes/footer.html{:target="_blank"},如下所示。 // 检测浏览器是否支持SW if(navigator.serviceWorker !...
0. 起因 发博客链接给朋友看的时候,反馈说访问特别慢。之前博客仅部署在 github 上,由于众所周知的原因,国外的服务器在国内访问就是有点慢,这个时候就需要一些 “奇淫巧技” 来帮忙了。
1. 经过 1.1 方案选择 首先是对问题分析,博客访问慢的原因是因为服务器在国外,经过一番查询后,基本上有一下 3 种解决方案。
在国内租台服务器 CDN 加速服务 部署到国内的服务器上 然后分析下这些方案。
租服务器的方案对于我来说是不乐观的,因为我就是为了不租服务器才选择的 github pages。一方面是因为价格,另一方面是因为维护起来比较麻烦,什么都需要自己去搞,时间和精力都不允许。 本来想通过 CDN 来解决,但是腾讯云的 CDN 需要备案,但我又没有服务器,所以也备不了案,所以这个方案也无法执行了。 国内也有一些类似 github 的代码托管,同时也支持 pages 服务,例如 coding{:target="_blank"}。我们只需要在 push 到 github 的时候同时 push 到 coding 上就可以了。 1.2 具体实施 在开始之前需要准备一些东西:
域名(国内买的域名需要实名认证,推荐在 godaddy{:target="_blank"} 买) coding 的账号 (coding 注册地址{:target="_blank"}) 具体步骤如下:
首先我们需要在 coding 建立一个跟你原来 github 库名完全一致的仓库。例如我的是 sunbufu.github.io{:target="_blank"}。 我们肯定不想发布一个文章的时候,push多次,所以我们需要修改本地 git 的配置文件,添加新的远程仓库地址,使一次 push 可以到多个远程仓库。在你的工程目录里有个隐藏目录 ....
一、起因 源于学生时期对互联网的理解,当时觉得对着电脑打字发博客是件酷酷的事情。后来参加工作后也多次萌生出创建个博客的念头,可都因为考虑到费用和精力问题迟迟没有开始。直到了解到github pages,我觉得这是一个机会了。
二、过程 2.1 对比 为什么选择 github,我想这是程序员共同的选择吧。国内的许多git仓库也很有诱惑力,但是需要花费额外的时间和精力去维护,反而觉得有点买椟还珠吧。 为什么选择 jekyll,我想是因为这个程序比较成熟吧,随便一搜都是各种介绍,我也没有多余的时间去比较了,就它吧。 2.2 开始 首先得有个 github 账号,这个就不用细说了。 克隆一个你喜欢的博客,我克隆的是https://github.com/mzlogin/mzlogin.github.io 安装 jekyll,可以参考它的网站https://www.jekyll.com.cn/ 配置你的配置,因为是克隆的 mzlogin 的项目,所以我就按他的 readme 一步一步操作的。 配置 gitalk ,这个 github 的一个插件,实现留言功能。 三、总结 首先感谢 mzlogin 的分享,感谢这个伟大的时代吧。 接下来我会把我在 CSDN 上的博客一点一点的转过来吧。