我们公司的软件架构埋了一枚“定时炸弹”,软件自用没有问题,可是我们老板偏偏想要在未来搞商业化授权,我可以说,只要他搞商业化授权,那么这颗“定时炸弹”就可能会在某一刻引爆,给他带来灭顶之灾!而正因为有这颗“定时炸弹”在,加上老板一直没有放弃商业化的构想,使得我们公司整个研发部人心都不稳,事情到底是怎么回事呢?
我进入现在的公司的时候,我们公司自研的软件已经投入使用了,但是我一翻公司软件源码,只感觉头大,因为这就是一个可以外连数据库的单机软件!
简单地说,软件没有区分前后端,所有逻辑都写在了客户端里,在客户端可以配置数据库的连接字符串,以达到所有软件客户端共用一个数据库的目的。
我开始很疑惑,问当时设计软件架构的同事,为什么要这么设计软件架构,他给我的回答就是:“老板当时也没说要商业化,所以我就干脆把所有逻辑都写在了客户端里面了!”
木已成舟,我也不好说些什么,直到后面,我才感觉事情越来越离谱。
最头疼的就是老板一直坚持商业化,他的设想是软件可以通过“后台”配置企业账号,然后给企业账号设置各种权限和到期时间,甚至还要做企业充值。
他每次说起他的设想我就怕,因为所有东西都是在客户端里面做的,但凡是任何一个程序员都是有能力篡改数据的。
这话怎么说呢?
简单得说,我们的软件分为了三层,就是大家都知道的表现层、业务逻辑层、数据处理层,其中每层编译以后分别会被编译成一个单独的dll,客户端通过调用dll来达到处理业务逻辑和增删改查数据的目的。
恐怖的是,因为都是在客户端调用,而且每层都没有做权限管理,且每层都可以直接访问数据库,因此,只要我是一个程序员,会调用dll,我就可以直接调用dll里面的任何方法,包括获取数据库连接串!
在这种软件架构下,想要做商业化,几乎就相当于把自己的所有底子都暴露给了客户,但凡客户那有一位会点编程的人,就可以直接绕过我们的系统,直接访问数据库,甚至直接破坏数据库都有可能!最重要的是,我们公司一些可以访问第三方平台的密钥也是存在数据库里面的,一旦暴露后果不堪设想!
所以,说到这里,您应该知道我为什么特别怕老板走商业化那一步了吧?
在我的旁敲侧击下,老板后来才知道事情的严重性。于是,就问我们几个研发有什么好的办法。
我跟老板说,如果老板坚持要商业化,那么就得把软件架构重新设计,做成前后端分离。
老板眼看软件还有救,于是问我把软件架构重新设计大概需要多久。
我仔细琢磨了下,重新设计架构倒不是什么难事,但是,还需要将现在软件的所有业务逻辑重新整合到新的架构中,再做好权限设置,直至没问题的话,至少也需要半年!
老板看我这么说,立马坐不住了,于是就否决了我的建议,说半年太久了,问我一个月行不行,我跟老板说,一个月连设计架构的时间都不够。所以,这个事情最后也就不了了之了!
虽然事情不了了之了,但老板的商业化构想却一直没有放弃,于是他就病急乱投医,问了一些懂技术的人,人家给他支了一招,那就是对软件进行加壳!并且对于加壳后软件无法进行破解这个说法深信不疑!
但是,只有我知道,软件加壳其实解决不了根本问题!
其次,即使加壳管用,还有一个问题需要解决,那就是数据库问题。
目前,我们的软件架构并不支持分库,意味着,如果老板决定商业化,那么所有数据都会存储在同一个数据库当中,到时候的数据并发量一大,后果可想而知!
我曾经在我们软件里面的数据看板功能里面写了一个定时器,客户端每十秒查询一次数据库,用来实时显示系统数据,结果,整个公司的软件访问数据库都变慢了!
要知道,我们公司也就十几个员工而已,就这个数据查询效率,想要做商业化可能吗?
当然,数据查询慢的问题可以通过增加数据库所在服务器的内存和CPU还有带宽来解决,但这仅仅只能支持小规模应用,否则每年的服务器费用就是一笔不小的开支。
在我们公司研发人员心里很清楚,老板决定商业化的那天,就是软件彻底崩盘的那天!真到那天,我可能还好点,因为我无时无刻不在告诉老板,我们的软件想要商业化,必须改架构,但是其他程序员是一问一个不知声,尤其是当初设计这套软件的那个程序员,是已经无时无刻做好了“跑路”的准备!
结语
时至今日,我还在无时无刻想着怎么才能挽救公司的软件,并为此做了一些努力,比如说我在进入公司以后,已经将公司软件的一部分功能转移到了后端处理,为此我还专门写了一个后端服务。
但是,因为同事已经“破罐子破摔”了,他们对于我想要一边新增软件功能的同时一边重新设计架构和将现有逻辑转移到新的架构中这个事情嗤之以鼻,觉得我这么做等于在打他们的脸。
为此,我也承担了很大的压力,老板的不知情,同事的排斥,搞得我里外不是人!
同事们现在的心态很简单,那就是撑到老板决定商业化的那天,实在不行就重新找工作,老板因为不懂技术,也不知道接下来面临的是什么!