微服务架构下该如何技术选型呢?

作者 | xcbeyond
责编 | 希希子
文章来源:InfoQ 写作平台,2020 年 12 月 18 日发布
文章简介:作者结合自身微服务架构研发经验进行回顾、总结,本文将介绍微服务架构中,在技术选型时需要注意哪些选型原则,会遇到哪些开源框架,又该如何选择, 进行了全面的归纳、对比,希望能够为大家提供一些思路、方向,少走一些弯路 。
一、前言
为了实现基于微服务开发的产品,或者说为了将单体应用重构为微服务架构时,将面临着众多技术框架的选择 。大公司往往会有专门的部门或团队来负责自主研发自己的框架,以满足产品的需要,但是对于一般的中小型企业,选择合适的开源框架就显得更接地气了 。本章将简单介绍微服务中,在技术选型时需要注意哪些原则,一些常用的开源技术框架,希望能够为大家在进行技术选型、调研时提供一些思路方向 。
笔者面试过很多程序员,一提及微服务,就会具体说道 Spring Boot、Spring Cloud,然后就是“背诵”各种具体的用法和配置文件 。并不是说这样不对,但我们更希望知道的是这些技术框架的原理,为什么选择它,它与其他类似框架又有何不同呢 。
至于一个技术框架该怎么用,它适用于什么场景,笔者建议可以直接阅读官方或对应的 github 上的文档,有需要时还可以阅读下关注点的源码,这样对正确的理解它,是很有必要的,毕竟官方发布的东西是相对权威的,其他地方的资料或许存在片面性,对大家的使用、理解存在一定的误导 。(这只是笔者对大家在技术选型时,查阅资料的一些建议)
二、选型原则
在软件开发领域,几乎每天都有新的技术框架诞生、更新,一些新的概念更是层出不穷,技术选型时,难免让人无从抉择 。对于技术选型,我个人有以下几点建议:
1. 有需求,再引入
在微服务架构中,各类组件 / 技术很多很多,但并不意味着所有的都应该引入你的项目,倘若单纯为了覆盖全技术栈或组件而全部引入,这将是一种很不明智的选择 。后续将会成为你项目的累赘,让你苦不堪言 。
只要你记住这六个字:“有需求,再引入”,就 OK 了 。伴随着项目体系架构的完善、功能的健全,当有某方面的需求时,在逐步考虑是否引入某些技术组件 。
2. 选择最熟悉、使用最多的技术
“一个新项目里最好不要使用超过 30% 的新技术”,我觉得这句话是有一定道理的 。对于你完全不知道、不了解的技术,你是无法预估、掌控在使用过程中会出现的任何风险,一旦出现问题,短时间内解决不了,你将会变得很难堪 。
在这里不是说拒绝使用、接触新技术,新技术是值得大家去追捧、了解、学习,一些新技术在很大程度上能给我们带来前所未有的利处,解决其他技术框架解决不了的问题 。这里所说的“新技术”,是指没有经过充分的考察、技术验证、存在种种疑惑的技术,而是一味的拿来主义,这样的风险可想而知 。
确保选择的技术,是业界使用最多的、被大家认可的技术,即使出现了问题,也能应对自如 。至少在团队内部小范围是非常认可的 。
3. 强大社区支撑的技术
GitHub 上 star 的数量是一个重要指标,同时参考近年来代码、文档、issues 等更新频率,各大技术博客是否有相关技术分享记载,这些都是能够说明该技术是否活跃、受欢迎程度、使用人群多少等 。
拥有强大社区支持的技术,在选型后,倘若使用出现疑问、问题、bug 等,能够有地方可提、可修复、可深究探讨,毕竟现在的技术社区都是足够开放的 。
慎选个人开源的技术框架、组件等,里面到底有多少坑,没几个人能说清楚的,况且说不定哪天就不复存在了呢 。
4. 从业务、项目规模出发
任何技术的出发点都是为最终业务而服务的,不同业务、不同项目规模,对技术的要求指标都是不同的 。处于初创期的业务,选型的基准是相对灵活,毕竟业务相对简单,支撑业务不是很大,只要够用、开发效率足够高就好 。处于复杂业务而重构的项目,选型就需谨慎,往往伴随着一些复杂需求诞生、规模大小的不确定性,不得不考虑选型技术可能伴随着一些小修小补或者螺旋式上升的重构,则需选型便于适配、切换、替换,耦合度低的技术 。
正因为技术选型和业务相关,我们能够观察到一些很明显的现象:新技术往往被早期创业团队或大公司的新兴业务使用;中大型公司的核心业务则更倾向于用一些稳定了几年的技术;一个公司如果长期使用一种技术,就会倾向于一直使用下去,甚至连版本都不更新的使用下去 。


推荐阅读