指令队列设计

最近有时间赶紧开始NC项目的开发,今天刚写到指令队列的处理,我的最初的设计是让整个VPN系统能够自动运转,分多个线程不断的处理数据,类似流水线工厂,外界通过压入数据包供处理线程加解密,或者压入指令包,处理线程识别并且执行,方便服务器客户端之间互相控制,也可在本地直接压入指令包控制,当时觉得这种设计是非常和谐的,而现在看来这样虽然能让系统更易扩展,但却不利于即时控制。

这种方法给我的感觉是我无法接触核心的控制,外界只是简单的send几个指令包而已,对外界调用是方便很多,而且扩展性更强,不过有种拿不住核心的感觉,调用send指令包函数返回,所要执行的功能并未立即实现,而是有一定的延时性,这种延时性会造成几个问题:

  • 系统反应迟钝,因为不是函数返回就会即时生效,而且甚至都不知道何时开始生效;
  • 如果执行功能出错,虽然有重试机制,但不可预知的错误随时可能发生,最终结果如何也未可知;
  • 增加了系统的不可预知性,因为有延时存在,如果同时执行若干命令,相互之间是否会有影响;

当然,这样处理的优点就是简洁性,所有事件的处理过程都经过统一的分发处理,像一个命令处理工厂,不断的接受命令,执行命令即可,不用抽取各种操作接口,命令本身也更易扩展,而且不用区分是本地指令还是服务器指令或者客户端之间点对点协议,想来这种设计的优点还是大于缺点的,要看如何处理各种让人纠结的问题了。现在感觉项目处于悬浮状态,是易扩展还是易崩溃,就得看这里的实现如何了。

Built with Hugo
主题 StackJimmy 设计