我在M2公司做架构之技术选型

一、我们公司所做的产品是属于什么类型?

我们公司所做的产品属于针对某一行业的解决方案。而这一解决方案适应国家的十四五规划中的某一项内容。换言之是一套基于大数据分析的SaaS平台。

二、基于产品类型,我们所做的技术选型又是怎样的?

明确了产品的类型后,作为公司架构的主要负责人和执行人,我是如何进行技术选型的呢?首先任何的技术选型不能脱离业务这个前提,技术导向业务,避免为了技术而技术这样的情况。

我个人曾主导某创业公司的技术选型以及参与某教育SaaS公司某一项新产品线的技术选型,对于技术选型方面,经验相对比较丰富。创业公司的技术选型是我当初失败的案例,而某教育SaaS公司的某一项新产品线的技术选型以及当前M2公司的技术选型是我相对成功的案例。

为了避免我一个人可能有的一叶障目,在阅读了公司业务的需求文档、产品文档、1代的技术文档以及与技术顾问、项目经理和其他成员的沟通前提下,我做出了一个初步的技术选型方案,出了方案后,开了技术评审会,虽然会议上就一些问题有过争论,但最终赞同我提出的技术选型方案,而后,项目非常紧急,需要出一个最小可用性产品能够演示,于是我放弃了从头开始写,项目经理给了一个开源项目参考,于是我花了两天的时间在其基础上开始做各种试验,以确保能够与我们的业务紧密结合且问题可控。毕竟在开源项目基础上二次开发,加入一些我们的东西,要想不出问题,很难,即便遇到问题,也是没办法的事情,不过呢,我很喜欢一次又一次将这些问题解决的感觉。

最终我们的技术选型方案确定如下:

  • Java开发和运行环境:JDK8;
  • 项目依赖管理:Maven;
  • 版本控制:Git;
  • 项目文档管理:SVN;
  • 分布式框架:SpringCloud+SpringCloud Alibaba;
  • 微服务框架:SpringBoot;
  • 接口鉴权:SpringSecurity+OAuth2.0;
  • 分布式服务注册中心:Nacos;
  • 缓存数据库:Redis;
  • 关系型数据库:MySQL;
  • 接口在线文档管理:Swagger-Bootstrap-UI;
  • 持久层框架:MyBatis/MyBatis-Plus均采用;
  • 数据库连接池:Druid;
  • 第三方工具类库:Hutool;
  • 限流熔断:Sentinel;
  • 分库分表:MyCat;
  • 链路追踪:Zipkin。

至于为何选择这一套技术方案,我是经过深思熟虑以及综合多方面的意见来考虑的,方法论可参考我写的如下文章:
深入理解SaaS之架构篇
从单体架构到分布式微服务架构的思考

文章目录
  1. 一、我们公司所做的产品是属于什么类型?
  2. 二、基于产品类型,我们所做的技术选型又是怎样的?