Skip to content
Magge-LinPublic

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Latest commit

 

History

11 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

Project

用于记录做过的项目,从需求、设计、编码、测试、优化等方面记录使用的技术以及当时的思考方式。

1、XX有轨电车项目,数据转发服务器

等我离职了再把XX有轨名字写出来~~

关键字:

  • io多路复用
  • reactor
  • ACE网络库
  • C++ 协程
  • hook
  • 无锁消息队列
  • 线程池

主要内容

简单的系统流程(不涉及业务,只保留简化的技术相关描述):
接收 A 公司服务器 SRS_A 网络数据包:1234,做解包组包处理为:23451,发送给 B 公司服务器 SRS_B
接收 B 公司服务器 SRS_B 网络数据包:abc ,做解包组包处理为:bca1,发送给 A 公司服务器 SRS_A

另外,服务器 SRS_A有子系统 SRS_A1、SRS_A2、SRS_A3、SRS_A4....
服务器 SRS_B 有子系统 SRS_B1、SRS_B2、SRS_B3、SRS_B4...
其中SRS_A 、 SRS_B 有R网J网做红蓝网,有SRS_A_a、SRS_A_b、SRS_B_a、SRS_B_b 做主备服务器.

2、XXX有轨电车项目,多客户端登录相同用户,同时下发相同命令给服务器导致多次执行相同命令

问题场景描述:
一个24小时不间断运营的电车,业主添加需求多客户端可以同时登录相同命令,并且共享控制区域权限,有一天两名调度几乎同时下发给列车分配班次命令(时间间隔10ms内)。
分配班次命令检查条件:
XX、XX
当前列车有运行线任务,但是可以再次分配班次、运行线任务作为待办,列车运行到最近的交集站台后自动激活待办任务;
当前列车没有已分配的班次;

客户端检查条件都满足,客户端1分配班次命令到达服务端开始执行:给列车分配班次.
客户端2在 客户端1一点击下发但是服务器未执行或执行结果未反馈给客户端2 的时候,下发分配班次给列车.

服务器重复收到两个分配班次命令,将第二个任务当作待办任务执行,导致其他模块功能死锁宕机,被要求对当前多进程临界竞争条件进行修复.

本来是一个概率很低的事件,但是,现场两名调度心有灵犀,一个月触发3次。

想要解决这个问题,有两个难点:
1、如何复现的问题,多客户端临界时间10ms内是个很难的点;
2、如何在不影响其他正常功能的场景下,给部分命令添加分布式锁,并且尽可能小的影响性能。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages