程序员到架构师定会遇到的问题(3):系统要不要自研,什么时候该自研?

159 阅读6分钟

创业公司上线后,用户数开始增长,产品逐渐成熟。

突然有一天,团队开会,老板丢出一个问题:“我们是不是应该把XX系统自研了?比如支付系统、日志系统、或者推荐算法?别人家的系统能适配得了我们吗?”

这时候,技术负责人往往会陷入两难:

要不要自研?自研是不是太早了?万一用了第三方服务,后期改造成本会不会更高?

下面我们就来拆解这个问题:“到底要不要自研。什么时候该自研


一、要不要自研的核心原则:

1、聚焦核心业务,非核心的尽量买/用第三方。
2、有明确痛点时,再考虑自研,不要超前规划。
3、自研的目标是解决问题,而不是为了“技术先进”。

什么是核心业务?

  • 核心业务是你的“市场竞争力”,即产品的关键差异化。例如:
    • 外卖平台的 配送算法
    • 视频平台的 推荐系统
    • 电商平台的 商品搜索和排序
  • 非核心业务是“支持业务”,例如支付系统、日志系统、运维工具,这些可以通过第三方服务实现。

举例:

假如你在做一个短视频平台,早期最重要的是把视频播放流畅度搞好(核心竞争力)。支付系统这种非核心功能,完全可以用第三方(比如支付宝、微信支付),自研没有必要。


如果你近期准备面试跳槽,建议在cxykk.com在线刷题,涵盖 1万+ 道 Java 面试题,几乎覆盖了所有主流技术面试题、简历模板、算法刷题,全部免费

二、什么时候考虑自研?

1、当第三方解决不了你的问题时

  • 如果现有的第三方工具或框架限制了你的业务增长,就需要考虑自研。
  • 例如:有家电商平台,早期用了第三方搜索服务(ElasticSearch),后来 SKU(商品种类)规模从 1 万扩展到 100 万,搜索性能跟不上了,还需要频繁定制功能。于是决定自研搜索系统。

2、当成本过高时

  • 第三方服务虽然快,但随着用户增长,费用可能越来越高。如果长期来看自研能节省成本,就可以开始规划。
  • 例如:一家 SaaS 公司用第三方短信服务,发短信量从几千条/月涨到几百万条/月,费用高得离谱。最终搭建了自研短信通道,每年节省上百万。

3、当安全性要求较高时

  • 比如支付、用户隐私等敏感数据,可能涉及监管要求,必须自己掌控数据。
  • 例如:金融行业的支付网关、风控系统,因为涉及大量资金和隐私,几乎都是自研。

4、当系统稳定性是关键时

  • 如果依赖第三方的某个系统频繁宕机,影响了业务正常运行,就需要自研。
  • 例如:有家物流公司用第三方地图 API,结果高峰期 API 挂了,导致系统瘫痪,客户大量流失。后来决定自研地图系统。

三、自研的优缺点

优点:

1、完全掌控系统

  • 业务可以根据需要调整,不受第三方限制。 2、长期节省成本
  • 自研虽然初期投入高,但长期来看,尤其是用户量大时,成本更低。 3、提升团队技术能力
  • 自研可以让技术团队积累宝贵经验,增加技术壁垒。

缺点:

1、初期投入大

  • 自研需要人力、时间、技术储备,没有几个月是搞不定的。 2、后期维护成本高
  • 自研的东西需要自己维护,升级迭代都是你自己的责任。 3、失败风险高
  • 自研可能导致上线延迟,甚至失败,浪费宝贵资源。

举例:

假如你们自研一个支付网关,投入了 6 个月时间,发现效果还不如直接集成微信支付和支付宝,等于白白浪费资源。


四、如何判断是否具备自研条件?

在决定自研之前,先问自己以下几个问题:

1、我们是否真的需要自研?

  • 如果现有系统够用,就别折腾。
  • 例如:创业公司用阿里云日志服务完全够用,没必要上来自己造轮子。

2、我们是否有技术储备?

  • 团队是否有经验?是否能预估工作量?如果团队对相关技术不了解,风险极高。
  • 例如:如果团队没搞过推荐系统,别盲目决定自研推荐算法。

3、时间和资金是否允许?

  • 自研需要投入大量时间和资金,创业公司往往等不起。
  • 例如:你们资金只够撑 6 个月,这时候还决定花 3 个月自研系统,很可能导致产品没机会上线。

4、第三方方案的局限性有多大?

  • 如果局限性很低,用第三方是最优解;但如果局限性太高,才考虑自研。
  • 例如:你需要一个即时通讯系统,早期可以直接用环信或融云,后期用户量超百万时再考虑自研。

五、如何规划自研的过程?

假如你决定自研,记住以下几点:

1、循序渐进,不要一口气全搞定

  • 先用第三方服务快速上线,等业务稳定后再逐步替换为自研系统。
  • 例如:早期用 MySQL 搭建简单搜索,后期逐步替换成自研的分布式搜索引擎。

2、只自研痛点部分

  • 别为了自研而自研,只解决当前的关键问题。
  • 例如:如果第三方支付网关的延迟是问题,可以只优化支付流程,而不是全盘自研支付系统。

3、充分评估成本和收益

  • 自研前一定要对开发周期、人力投入、长期收益进行详细评估,避免资源浪费。
  • 例如:评估自研短信通道后,发现每年节省的费用不到 10 万元,完全不值得。

4、做好风险管理

  • 自研上线后可能出现问题,一定要有完善的回滚机制和监控系统。

总结:

“要不要自研”,关键在于权衡 业务需求成本投入
1、核心业务尽量自研,非核心业务优先用第三方
2、当现有系统无法满足需求、成本过高、或安全性要求很高时,再考虑自研
3、创业公司早期用第三方服务快速上线,业务稳定后逐步替换成自研系统。

一句话忠告:别为了技术炫酷去自研,要为了解决问题、节省成本、提升业务能力才自研。

如果你有具体场景,咱们可以结合实际问题来分析!

最后说一句(求关注,求赞,别白嫖我)

最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉,进大厂原来没那么难。 这是大佬写的 7701页的BAT大佬写的刷题笔记,让我offer拿到手软

本文,已收录于,我的技术网站 cxykk.com:程序员编程资料站,有大厂完整面经,工作技术,架构师成长之路,等经验分享

求一键三连:点赞、分享、收藏

点赞对我真的非常重要!在线求赞,加个关注我会非常感激!