M功能-支付平台(三)
target:离开柬埔寨倒计时-221day
前言
今天周六,但是在柬埔寨还是工作日,想着国内的朋友开始休周末就羡慕呀,记不清在这边过了多少个周六了,多到我已经习惯了。而且今天技术部还停电了,真的是热的受不了呀,我感觉我写完这篇博客汗水可能会浸湿衣服呀。
接手M功能时的窘迫
2023年4月初,具体几号已经记不得了
boss:M功能还是要上演示版的,这个上了我们才好回去
我: 计划什么时候演示呢?
boss:20号左右吧,大概还有2周时间
我:…
boss:资源这边我看能不能帮你找到,你大概需要多少人呢?
我:两周时间的话,熟悉M功能的后端人员至少要3个吧,如果不熟悉的那至少要5个,前端还需要2个
boss:后端我去帮你找找看,前端你可以再想想办法
我:可以,前端我找个兼职的来帮我吧
boss:可以呀,先评估功能再报个价吧
我:好的
@@@@@@@@@@@@@@@@@@@@@ 2小时后 @@@@@@@@@@@@@@@@@@@@@
boss:后端我帮你找了4个人,他们可都是高级或架构哟
我:好的,那我先跟他们聊聊M业务吧,20号的时间我只能说尽力
boss:20号还是必须要完成的,难道你不想早点回国吗
我(内心想):我当然想早点回国呀,谁愿意呆在这鸟不拉屎的地方呀,但那么多功能,我还不知道这几个后端好不好用呢
我:想早点回呀,我先跟他们(4个后端)讨论一下吧,再确认一下,他们做我的事情的时候不会被其他事情干扰吧
boss:不会,放心吧!
实际上不仅会被干扰,还TM最后放弃让我一个人弄。
人虽然有了,但是需要改变的功能还是比较恶心的:
- 虽然我有全套的M功能代码,但是为了贴合支付平台,需要改造的地方还是很多的,特别是用户底层账户和平台币种管理
- 之前我负责做的M功能主要为APP和WEB,这次的改动需要支撑H5嵌入支付APP中
- 最大的一个改造就是M功能要做成saas,但是对不同公司主体又只需要做数据隔离,带宽、服务器资源、数据库都是集成在一起,也就是不同主体的数据是用逻辑标志来区分的
- saas对撮合引擎的影响:我之前设计的M的撮合引擎是基于交易对建立内存的,现在不同公司可以建立相同交易对,如A公司和B公司都开放交易对USD/CNY,要保证A公司的订单不能和B公司订单进行成交,那么就需要在之前的数据内存之上再做一层逻辑隔离
首次和金边这边的技术合作
当时boss给我的时间仅仅2周,并且这个功能做完,进入演示阶段我就可以回国一趟,所以当时虽然非常痛苦,但想到可以回国还是咬牙在坚持呀
金边后端技术
我们做的这个系统是这边一个银行的拓展支付软件,所以我们的办公场地一直是在银行的技术部,因为我这边做M功能需要人力资源,所以最终我的boss协调了4个银行技术后端给我使用,人虽然有了,但是他们对M功能一无所知,而且还有一个问题就是不得不说的题外话了,那就是直接到柬埔寨这边来的技术能力真的一言难尽。
前端资源
金边这边虽然给了我后端资源,但是我还缺少前端资源,于是我又找到之前跟我一起做M功能的前端同事,让他以兼职的形式来帮我做H5和简单版的后台管理系统,他同意后我这边的基础人员相当于就就位了。
克服异地异点调试
因为后端是金边这边的技术在做,前端是国内前同事在做,而国内前同事又每天下班回家之后才有时间,而我又是其中的唯一枢纽,并且我也需要确保他们提供的接口质量,所以前后端调试的事情我一直都在跟进,所有调试中遇到的问题我也会记录以及处理。特别是里M功能deadline的最后几天,这边的后端直接奔溃放弃,只能我一个人处理,我突然感慨,国内说的卷真的太对了,我TM都卷到柬埔寨来了。所以客服异地异点调试的方式就是我每天加班到很晚很晚,当时第一次萌生了离职的想法,这个在我写内心戏的时候肯定会重点描述几次萌生离职想法以及为什么内心如何建设、最后留下来的。
这里可以提一嘴我们来之后,银行这边技术的变化,还记得我们刚到银行技术部办公的时候,他们都是每天到点就下班,每天到6点以后,整层楼就只剩下我们来这边的几个人,随着时间的推移,银行的技术也开始了加班,也是常常干到很晚。扯远了,这些具体内容在生活篇来记录吧。
M功能撮合流程
M功能最主要的就是下单、撤单、撮合,而撮合流程相对复杂一点

为什么锁使用mysql
首先锁是用交易对来作为关键key的,其次是撮合是一个持续的过程,那就意味着这个锁在程序没有出现异常时要一直存在的
最开始的时候我们的锁使用的是redisson,因为redisson的锁写好了续命逻辑,可以一直保持着锁的存在,但是这个续命逻辑有一个致命的问题,在普通场景可能不容易出现,但是在撮合这里超长时间持有锁就可能会出现,因为redisson的锁续命机制是一个递归的过程,也就是说当前续命成功,才会有下一次续命的机会,而如果正好在锁续命的时候出现网络抖动或者其他一些异常问题,那么续命任务就会终止,那么那个锁到期就会自动释放了
后面会抽时间补技术的文章,就包括这里的redisson分布式锁续命问题,关于分布式锁就不单独写了,因为网上一搜一大片
综上所述,我最后还是写了个mysql的锁来支持撮合,当时时间也很仓促,可能还能更优化,但是先放上去用着再说,主要是要保证程序不出问题,这个解锁其实还有一个逻辑,就是撮合引擎重启的时候会去释放掉所有该进程ip上的所有锁,这个逻辑在k8s动态ip下就非常的不友好,当然还是有另外的解决方案

后记
今天公司是真的太热了,我能坚持写完这篇文章也是不容易呀,外面还有每天打“沙滩排球”的柬埔寨本地人,真的佩服他们,有时候也感觉他们活的很快乐

加油吧littlehow
金边时间:2024-05-25 15:21
北京时间:2024-05-25 16:21
相关文章:
M功能-支付平台(三)
target:离开柬埔寨倒计时-221day 前言 今天周六,但是在柬埔寨还是工作日,想着国内的朋友开始休周末就羡慕呀,记不清在这边过了多少个周六了,多到我已经习惯了。而且今天技术部还停电了,真的是热的受不了呀…...
5G工厂长啥样
5G工厂是一种新型的工业互联网基础设施,利用5G为代表的新一代信息通信技术集成,打造新型工业互联网基础设施。在5G工厂中,自动化和智能化设备广泛使用,高度互联的工厂网络得以实现,远程监控和管理成为可能,…...
使用Python操作Jenkins
大家好,Python作为一种简洁、灵活且功能丰富的编程语言,可以与各种API轻松集成,Jenkins的API也不例外。借助于Python中的python-jenkins模块,我们可以轻松地编写脚本来连接到Jenkins服务器,并执行各种操作,…...
网络协议测试仪设计方案:474-便携式手提万兆网络协议测试仪
便携式手提万兆网络协议测试仪 一、平台简介 便携式手提万兆网络协议测试仪,以FPGA万兆卡和X86主板为基础,构建便携式的手提设备。 FPGA万兆卡是以Kintex-7XC7K325T PCIeX4的双路万兆光纤网络卡,支持万兆网络数据的收发和网络协议…...
使用numpy手写一个神经网络
本文主要包含以下内容: 推导神经网络的误差反向传播过程使用numpy编写简单的神经网络,并使用iris数据集和california_housing数据集分别进行分类和回归任务,最终将训练过程可视化。 1. BP算法的推导过程 1.1 导入 前向传播和反向传播的总体…...
使用Spring AOP实现接口参数变更前后对比和日志记录
推荐一个程序员的常用工具网站,效率加倍,嘎嘎好用:程序员常用工具云服务器限时免费领:轻量服务器2核4G腾讯云:2核2G4M云服务器新老同享99元/年,续费同价阿里云:2核2G3M的ECS服务器只需99元/年,续费同价记录接口调用前后的参数变化是一个常见的需求,这不仅有助于调试和…...
免费无限换脸,火了,图片/视频/直播都行!
最强换脸AI工具Facefusion软件在近期更新到了2.6.0版本,带来了一系列的更新和改进,今天为大家分享一下最新的整合包。 Facefusion2.6.0版本介绍 FaceFusion不仅仅是一款换脸软件,它更是一个多功能的数字人和实时直播助手,真正开启…...
无线领夹麦克风哪个品牌好?本期文章揭秘无线麦克风哪个品牌好用
在当下这个全民皆为媒体的时代大潮中,视频分享已然成为了引领风尚的指向标。在自媒体领域竞争愈发激烈的态势下,若要在这片广阔海洋中扬帆远航,优秀的作品毫无疑问是吸引观众的关键所在。而想要塑造出这样的卓越之作,除了需要创…...
操作系统实验--终极逃课方法
找到图片里的这个路径下的文件 ,结合当前题目名称,把文件内容全部删除,改为print print的内容为下图左下角的预期输出的内容...
C语言实现正弦信号扫频
C语言实现正弦信号扫频 包含必要的头文件:首先,你需要包含 <stdio.h> 和 <math.h> 头文件,分别用于输入输出和数学函数的使用。 定义扫频参数:定义正弦扫频的参数,例如起始频率、结束频率、扫频时间等。 生成正弦波信号:使用正弦函数生成扫频信号,可以根…...
实用篇| huggingface网络不通
之前文章《Transformer原理》中介绍过,Transformers 是由 Hugging Face 开发的一个包,支持加载目前绝大部分的预训练模型。随着 BERT、GPT 等大规模语言模型的兴起,越来越多的公司和研究者采用 Transformers 库来构建应用。 Hugging Face是一家美国公司…...
NLP与训练模型-GPT-3:探索人工智能语言生成的新纪元
在人工智能领域,自然语言处理(NLP)一直是备受关注的研究方向之一。随着深度学习技术的发展,尤其是Transformer模型的出现,NLP领域取得了巨大的进步。其中,由OpenAI推出的GPT-3模型更是引起了广泛的关注和热…...
iOS内购欺诈漏洞
iOS内购欺诈漏洞 1.iOS内购欺诈漏洞概述2.伪造的凭证3.漏洞修复方案 1.iOS内购欺诈漏洞概述 黑产别的App上低价充值(比如1元)换取苹果真实凭证,再在目标App上下单高价(648元)商品,传入该凭证,如…...
【网络服务】正向代理和反向代理到底是什么意思
🚀 个人主页 极客小俊 ✍🏻 作者简介:程序猿、设计师、技术分享 🐋 希望大家多多支持, 我们一起学习和进步! 🏅 欢迎评论 ❤️点赞💬评论 📂收藏 📂加关注 前言 在学习和…...
【算法】记忆化搜索
快乐的流畅:个人主页 个人专栏:《算法神殿》《数据结构世界》《进击的C》 远方有一堆篝火,在为久候之人燃烧! 文章目录 引言一、不同路径二、最长递增子序列三、猜数字大小 ||四、矩阵中的最长递增路径总结 引言 记忆化搜索&…...
博客系统多模块开发
创建工程 创建父工程 删除src目录,在pom.xml添加依赖: <!--统一版本 字符编码--><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.b…...
pdf阅读器哪个好用?五款PDF阅读器大比拼
pdf阅读器哪个好用?在数字化时代,PDF文档因其跨平台、跨设备的便捷性,已成为工作、学习和生活中不可或缺的一部分。而一款优秀的PDF阅读器,则能极大地提升我们处理PDF文档的效率与体验。今天,就让我们一起探索五款备受…...
C#实现Queue的加锁和解锁
在C#中,可以使用lock语句来对队列进行加锁和解锁,以确保在多线程环境下的线程安全。以下是一个简单的示例: using System; using System.Collections.Generic; using System.Threading;public class ThreadSafeQueue<T> {private read…...
北京邮电大学人工智能考数据结构,均分370!北京邮电大学计算机考研考情分析!
北京邮电大学(Beijing University of Posts and Telecommunications),简称北邮,是中华人民共和国教育部直属、工业和信息化部共建的全国重点大学,位列国家“211工程”、“985工程优势学科创新平台”、“世界一流学科建…...
1. lambda初体验
首先声明一个函数式接口,就只接口内只有一个抽象方法 //函数式接口 public interface Factory {Object getObject();}接口实现类 public class SubClass implements Factory {Overridepublic Object getObject() {return new User();}}User类 public class User …...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...
2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
如何应对敏捷转型中的团队阻力
应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中,明确沟通敏捷转型目的尤为关键,团队成员只有清晰理解转型背后的原因和利益,才能降低对变化的…...
