在软件开发的过程中,我们经常会遇到软件选型的问题。因为业务需求不同,有的需要使用消息中间件,有的需要使用缓存,有的需要使用新的框架,那么面对这么多的技术,我们应该如何选择模型呢?今天就和大家聊一聊技术选型事宜,怎么选,怎么用。选型需求来源于业务需求。模型选择总是由业务驱动。相信业务用好,没有性能瓶颈,没有合规性要求,也没有新的需求要开发,就不会想着换框架或组件。当业务有真正的需求时,比如数据同步、业务解耦、削峰填谷、分布式事务等,我们需要研究相应的解决方案。这个时候,我们经常会面对很多软件。我们应该选择哪一个,应该使用哪一个?如果有一个团队成员比较熟悉的以前使用过的软件,他们大概率会选择它。毕竟他们有使用经验,遇到问题就知道。如何处理。但是如果之前团队成员都没有用过,此时面对这么多的软件,而且时间有限,我们应该如何选择呢?或者我们在软件选择上应该考虑什么?今天,我将与您分享我的个人经历,希望对我们有所帮助。选择研究对象在开始模型选择之前,我们需要知道要研究的对象是什么。如果要使用消息中间件,可能需要考察RabbitMQ、RocketMQ、Kafka等,有数据同步的需求,需要考察的对象可能有otter、Datax、canal等,如果要使用rpc服务,研究对象可能有Dubbo、gRPC、Thrift等,这里不一一赘述。其实我想说的是,首先我们要知道研究的对象,然后要看研究什么内容。研究内容(1)系统架构软件的系统架构在很大程度上决定了软件难以改变的属性,如简单性或复杂性、可扩展性、高可用性等。因此,我们在选型的时候,需要关注软件架构。软件的官网一般都有相应的架构图,从中我们可以看出软件的基本组成,架构的简洁性等等。例如下图是RocketMQ的架构图,从图中我们可以看出RocketMQ的基本组件包括NameServerCluster和BrokerCluster,进一步可以看出NameServerCluster的基本职责是BrokerDiscovery,和Broker集群可以通过数据同步等内容实现高可用。除了系统架构,我们可能还需要关注软件的实现语言。如果以后需要定制化开发,团队成员是否具备相应的能力。(2)软件的社区情况软件的社区情况是我个人在选择软件时考虑的一个点。一个活跃的社区对于开源软件来说非常重要,因为一个活跃的社区意味着这个软件的用户很多。如果用户多,就会有很多实践经验可供参考和交流。当你遇到问题时,你可以有一个交流平台。总之,一个活跃的社区可以帮助你解决很多在使用软件过程中遇到的问题。那么我们可以从哪些方面来考虑软件的社区情况呢?这里主要说说对开源软件社区情况的考虑。我个人一般会查看软件最后一次提交的时间,问题数量和回复数量,此外,你还可以查看软件邮件列表的内容。(3)文档产品的文档太重要了。再好的产品,如果没有文档,也不会有人使用。详细的产品文档包括但不限于软件架构、用户手册、性能测试、FAQ等,如果您正在研究对应的软件,查找了半天没有找到架构图、用户手册等,那你就得好好想想自己是不是该用这个软件了。通读产品文档可能需要一些时间,但非常值得。通读产品文档,可以让你对整个产品有一个大概的了解,有什么特点、功能、性能等等,这些你都可以知道。Spring的文档是我个人认为非常好的文档。毫不夸张的说,如果你能把Spring的文档看完,80%的Spring问题对你来说都不是问题。另外,最好看一下官方文档。如果是国外软件,尽量看英文。(4)其他包括但不限于合规、法律、生态工具等。例如,如果使用的开源软件协议是GPL,根据协议,所有二次开发都应该重新开源。特性或功能验证在考察完产品后,我们应该对软件有了一个大概的了解,现在我们需要回归业务。产品的特性或功能能否满足业务需求是我们选择的最重要原因。总的原则是能够满足当前和可预见的未来需求的软件是最合适的,因为这样的软件不需要太复杂就可以满足需求。这个阶段一般会进入体能活动环节,需要进行各种测试,比如基础功能测试、高可用测试、性能测试等,在测试的过程中,测试尽可能脚本化和自动化,因为这个过程可能会重复很多次,没有人愿意一次又一次地手动去做。这里的测试一般需要给出一个结论,即当前的软件是否能够满足业务的各种需求。这个阶段一般会遇到很多问题,活跃的社区和详细的文档可以帮你解决这些问题。同时,团队成员要尽量积累本阶段软件使用的过程资产。在应用阶段,根据选型软件的性质,在应用阶段有不同的应用方法。如果软件是数据库等基础软件,一般会先进行试点应用,因为基础软件的影响比较大,选择试点应用不仅可以规避较大的风险,还可以通过实践积累经验,方便后续全面升级。如果该软件只是针对当前业务使用,影响比较小,那你应该有信心,不要犹豫,直接上手吧~帮助别人完成软件调研,功能特性验证,项目正式使用。可以说现在你也成为了软件社区的一份子。如果您是官方人士,请不要忘记分享您的经验并帮助其他软件用户。毕竟,首先是社区帮助您解决了问题。写在最后,今天跟大家分享软件选型和应用的那些事。软件研究阶段需要关注产品架构、社区、文档与合规、生态工具。研究完软件后,还需要回归业务,验证功能特性,看能否满足业务需求。各种测试应尽可能编写脚本和自动化。最后就是申请了,申请过程中记得积累经验。并且不要忘记帮助他人。
