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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/16538.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++11:智能指针的种类以及使用场景

指针管理困境 内存释放,指针没有置空;内存泄漏;资源重复释放 怎样解决? RAII 智能指针种类 shared_ptr 实现原理:多个指针指向同一资源,引用计数清零,再调用析构函数释放内存。 使用场景…

ASP.NET 代码审计

ASP.NET 官方文档 名词解释 IIS(Internet Information Services) IIS 是微软开发的一款 Web 服务器软件,用于在 Windows 服务器上托管和提供Web应用程序和服务。它支持 HTTP、HTTPS、FTP、SMTP 等多种协议,主要用于&#xff1a…

基于混合Transformer-CNN模型的多分辨率学习方法的解剖学标志检测

文章目录 Anatomical Landmark Detection Using a Multiresolution Learning Approach with a Hybrid Transformer-CNN Model摘要方法实验结果 Anatomical Landmark Detection Using a Multiresolution Learning Approach with a Hybrid Transformer-CNN Model 摘要 精确定位…

跨域计算芯片,一把被忽视的汽车降本尖刀

作者 |王博 编辑 |德新 2019年前后,「中央运算单元区域控制」的架构被提出。基于这一趋势,从板级的多芯片,到板级的单芯片,集成度越来越高,跨域计算芯片随之来到聚光灯下。 跨域计算芯片的特点是,与专为智…

Django 里传参给html文件

第一步:在 urls.py 文件里修改 from django.contrib import admin from django.urls import path from app01 import views # 添加这一行urlpatterns [#path(admin/, admin.site.urls),path(index/, views.index), # 添加这一行 ]第二步:在 settings…

若依框架的配置文件详解:从数据库配置到高级定制

若依框架(RuoYi)作为一个基于Spring Boot和MyBatis的快速开发平台,提供了丰富的配置选项,让开发者能够灵活地调整和扩展其功能。配置文件在若依框架中扮演着至关重要的角色,通过合理配置,可以实现对数据库连…

牛客网刷题 | BC97 回文对称数

目前主要分为三个专栏,后续还会添加: 专栏如下: C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读! 初来乍到,如有错误请指出,感谢! 描述 今天牛牛学到了回文…

锁相环的一些学习笔记--(1)

下图两组1.2.3可以对应起来; 一些分析: 1.根据这个可知最后vco_voltage停在0.5v 参考资料: 1. Matlab https://www.bilibili.com/video/BV1bR4y1Z7Xg/?spm_id_from333.1296.top_right_bar_window_history.content.click&vd_source555…

Redis RDB 持久化问题

前言 Redis 是内存数据库,它将自己的数据储存在内存里面,如果不想办法将储存在内存中的数据保存到磁盘里面,那么一旦服务器进程退出,服务器中的数据也就没了。 因此,Redis 提供了 RDB 持久化功能,这个功能…

如何将Windows PC变成Wi-Fi热点?这里提供详细步骤

序言 Windows 10和Windows 11都有内置功能,可以将你的笔记本电脑(或台式机)变成无线热点,允许其他设备连接到它并共享你的互联网连接。以下是操作指南。 由于Windows中隐藏的虚拟Wi-Fi适配器功能,你甚至可以在连接到另一个Wi-Fi网络或无线路由器时创建Wi-Fi热点,通过另…

鲁教版七年级数学上册-笔记

文章目录 第一章 三角形1 认识三角形2 图形的全等3 探索三角形全等的条件4 三角形的尺规作图5 利用三角形全等测距离 第二章 轴对称1 轴对称现象2 探索轴对称的性质4 利用轴对称进行设计 第三章 勾股定理1 探索勾股定理2 一定是直角三角形吗3 勾股定理的应用举例 第四章 实数1 …

实习生在Linux环境下如何日常使用?

那我简单来说两个我使用的场景吧 我在搭建我们的测试环境的时候,先上传jar包到测试环境对应的目录下,然后呢此时jar包是不可被执行的,所有就有了 chmod x jar包名称, 接下来,我是用 jps 查看Java的进程,获取到pid之后…

Kafka 安装教程和基本操作

一、简介 Kafka 是最初由 Linkedin 公司开发,是一个分布式、分区的、多副本的、多订阅者,基于 zookeeper 协调的分布式日志系统(也可以当做 MQ 系统),常见可以用于 web/nginx 日志、访问日志,消息服务等等…

基于YOLO算法实现网球运动实时分析(附源码)

大家好,我是小F~ 今天给大家介绍一个计算机视觉实战的项目。 该项目使用YOLO算法检测球员和网球,并利用cnn提取球场关键点。 进而分析视频中的网球运动员,测量他们的速度、击球速度和击球次数。 使用win10电脑,Python …

【源码】java + uniapp交易所源代码/带搭建教程java交易所/完整源代码

java uniapp交易所源代码/带搭建教程java交易所/完整源代码 带简洁教程,未测 java uniapp交易所源代码/带搭建教程java交易所/完整源代码 - 吾爱资源网

【古董技术】ms-dos应用程序的结构

序 制定一个MS-DOS应用程序计划需要认真分析程序的大小。这种分析可以帮助程序员确定MS-DOS支持的两种程序风格中哪一种最适合该应用程序。.EXE程序结构为大型程序提供了好处,因为所有.EXE文件之前都有额外的512字节(或更多)的文件头。另一方…

C++第十七弹---string使用(下)

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1、标准库中的string类 1.1、string类的常用接口说明 1.1.1、string类对象的修改操作 1.1.2、string类对象非成员函数重载 总结 1、标准库中的…

牛客热题:有效括号

📟作者主页:慢热的陕西人 🌴专栏链接:力扣刷题日记 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 文章目录 牛客热题:有效括号题目链接方法一&#x…

MySQL视图教程(01):创建视图

MySQL 创建视图 在 MySQL 中, CREATE VIEW 语句用于创建一个数据库视图(View)。 MySQL 是一种常用的关系型数据库管理系统,提供了 CREATE VIEW 语法,用于创建视图(View)。视图是一种虚拟的表&…

Mycat+Mysql搭建数据集群实现数据分片存储

前言 MyCAT介绍 * 一个彻底开源的,面向企业应用开发的“大数据库集群”; * 支持事务、ACID、可以替代MySQL的加强版数据库; * 一个可以视为“MySQL”集群的企业级数据库,用来替代昂贵的Oracle集群; * 一个融合内存缓存技术、Nosql技术、HDFS大数据的新型SQL; * 一个新颖…