当前位置: 首页 > news >正文

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 开发的一个包&#xff0c;支持加载目前绝大部分的预训练模型。随着 BERT、GPT 等大规模语言模型的兴起&#xff0c;越来越多的公司和研究者采用 Transformers 库来构建应用。 Hugging Face是一家美国公司…...

NLP与训练模型-GPT-3:探索人工智能语言生成的新纪元

在人工智能领域&#xff0c;自然语言处理&#xff08;NLP&#xff09;一直是备受关注的研究方向之一。随着深度学习技术的发展&#xff0c;尤其是Transformer模型的出现&#xff0c;NLP领域取得了巨大的进步。其中&#xff0c;由OpenAI推出的GPT-3模型更是引起了广泛的关注和热…...

iOS内购欺诈漏洞

iOS内购欺诈漏洞 1.iOS内购欺诈漏洞概述2.伪造的凭证3.漏洞修复方案 1.iOS内购欺诈漏洞概述 黑产别的App上低价充值&#xff08;比如1元&#xff09;换取苹果真实凭证&#xff0c;再在目标App上下单高价&#xff08;648元&#xff09;商品&#xff0c;传入该凭证&#xff0c;如…...

【网络服务】正向代理和反向代理到底是什么意思

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;程序猿、设计师、技术分享 &#x1f40b; 希望大家多多支持, 我们一起学习和进步&#xff01; &#x1f3c5; 欢迎评论 ❤️点赞&#x1f4ac;评论 &#x1f4c2;收藏 &#x1f4c2;加关注 前言 在学习和…...

【算法】记忆化搜索

快乐的流畅&#xff1a;个人主页 个人专栏&#xff1a;《算法神殿》《数据结构世界》《进击的C》 远方有一堆篝火&#xff0c;在为久候之人燃烧&#xff01; 文章目录 引言一、不同路径二、最长递增子序列三、猜数字大小 ||四、矩阵中的最长递增路径总结 引言 记忆化搜索&…...

博客系统多模块开发

创建工程 创建父工程 删除src目录&#xff0c;在pom.xml添加依赖&#xff1a; <!--统一版本 字符编码--><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.b…...

pdf阅读器哪个好用?五款PDF阅读器大比拼

pdf阅读器哪个好用&#xff1f;在数字化时代&#xff0c;PDF文档因其跨平台、跨设备的便捷性&#xff0c;已成为工作、学习和生活中不可或缺的一部分。而一款优秀的PDF阅读器&#xff0c;则能极大地提升我们处理PDF文档的效率与体验。今天&#xff0c;就让我们一起探索五款备受…...

C#实现Queue的加锁和解锁

在C#中&#xff0c;可以使用lock语句来对队列进行加锁和解锁&#xff0c;以确保在多线程环境下的线程安全。以下是一个简单的示例&#xff1a; using System; using System.Collections.Generic; using System.Threading;public class ThreadSafeQueue<T> {private read…...

北京邮电大学人工智能考数据结构,均分370!北京邮电大学计算机考研考情分析!

北京邮电大学&#xff08;Beijing University of Posts and Telecommunications&#xff09;&#xff0c;简称北邮&#xff0c;是中华人民共和国教育部直属、工业和信息化部共建的全国重点大学&#xff0c;位列国家“211工程”、“985工程优势学科创新平台”、“世界一流学科建…...

1. lambda初体验

首先声明一个函数式接口&#xff0c;就只接口内只有一个抽象方法 //函数式接口 public interface Factory {Object getObject();}接口实现类 public class SubClass implements Factory {Overridepublic Object getObject() {return new User();}}User类 public class User …...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...

android RelativeLayout布局

<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...

vue3 daterange正则踩坑

<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...