目标:开发人员在这个SDK的基础上开发,不用关注技术细节,只需要开发对应业务消息处理函数即可
1.每个进程SDK包括一个系统服务和多个业务服务,对外发布服务ID,每个服务有一个请求队列和一个反馈队列,接收线程负责接收请求队列消息,消息处理线程调用相应的消息处理函数并将结果发送到反馈队列,如果是其他服务器过来的消息则将结果发送到对外反馈队列,消息处理线程数量可自定义。
2.队列SDK自带定时器线程,可定期处理超时消息,可阻塞规定时间接收消息(阻塞接收队列消息,在规定时间内没有收到消息则发送超时消息退出)。
3.每个进程启动时发送消息到BBL队列注册服务,BBL进程采用共享内存哈希表存储所有服务和队列的关联信息,其他进程调用服务则根据服务ID查找共享内存中对应的队列信息,发送消息到请求队列,如果需要同步返回则阻塞规定时间接收反馈队列消息。
4.监控进程相当所有进程的总管,接收终端消息启动或者停止相关进程。
5.所有进程写日志通过发送消息到日志队列,日志进程接收消息并写日志,解决多进程写日志的混乱。
6.针对集群调用服务,每台服务器配置消息路由器进程,消息路由器进程由几个线程组成 1)开放统一的监听端口,接收其他服务器消息并写入相应的业务请求队列,并负责将发送缓冲的区的数据发出; 2)接收对外反馈队列消息,写入对应的发送缓冲区; 3)接收对外请求队列消息,建立对外连接发送数据。
7.对外接收消息前置机进程,负责接收外部消息、解析并重组内部消息包发送到不同服务器的业务请求队列: 1)采用nginx多进程监听并接收消息,单线程accept客户端socket,采用多线程epoll机制接收消息并发送到每个进程专属的对外请求队列,并负责将发送缓冲的区的数据发出; 2)接收每个进程专属的对外反馈队列消息,写入对应的发送缓冲区,实现异步处理网络数据请求。
目前正在完善相关技术细节,后续有合适的将会公开部分代码。
|
请发表评论