前言

近些年越来越多的企业开始建设自己的微服务体系,在选型过程中不可避免地会产生路线之争。激进的技术派往往秉持着买新不买旧的思维,坚定地站在服务网格的一边。而相对保守的项目派则会更看重技术的稳定性和易用性,从而主张优先上马传统的微服务方案。如果是你,你会怎么选呢?

在回答之前,不如先来尝试回答几个问题:

什么是微服务?

你所在的企业尝试构建微服务体系的目的是什么?是遇到了什么挑战了吗?

你了解服务网格吗?你知道它是带着怎样的使命诞生的吗?

以上的问题如果你能快速给出答案,我相信你在微服务选型上的结论应该是经过深思熟虑的。如果以上的问题让你迷茫,不如和我一起梳理一下微服务的逻辑。

01 当我们聊起微服务时,你会想到什么?

提到微服务可能大部分人首先想到的是 Spring Cloud、Dubbo 或者 Istio。事实上,这种认识是有一定的局限性。严格来讲微服务就是它字面上的意思,是指微型的服务。而我们常说的 Spring Cloud、Dubbo 和 Istio 则是微服务架构思想的具体实践。当然,只了解这些那简直就是废话文学,我们更想要知道的是我们为什么需要微服务?微服务化可以带来什么好处?

应该说任何一种架构的衍进都会明确指向上一代架构的核心痛点,而微服务最初所针对的痛点就是集中式和紧耦合。所有经历过上一个时代的程序员恐怕都会对系统代码的“牵一发而动全身”印象深刻。

微服务通过将服务拆分成功能相对简单且能互联互通的微型模块,实现了业务的充分解耦,更具独立性的服务拆分方式也使得微服务更符合分布式部署的需求。微服务体系还带来了其他的优势,比如:故障隔离能力提升、可扩展性增强、代码复杂度降低等。从此技术大神们心心念念的高内聚、低耦合有了更亲民的实现方式,而方兴未艾的分布式也有了更多用武之地。

当然像所有的事物一样,微服务也不是完美的。彻底碎片化的服务虽然降低了代码复杂度,却使架构复杂度大大提升了,这就导致服务相互发现和质量问题的追踪变得困难。同时,分布式导致的事务问题也突显出来。对于项目的设计人员而言,如何合理地规划每一个微服务的功能,也变成了一个需要反复纠结的棘手问题。

02 服务网格是微服务2.0吗?

常常听到有人说服务网格(Service Mesh)是下一代的微服务技术,Service Mesh 会取代以 Spring Cloud 为代表的第一代微服务架构技术。对此笔者有不同的看法。

以 Spring Cloud 为代表的微服务架构与服务网格的最大差异其实在于代码的侵入性。通常情况下 Spring Cloud 架构的程序在设计时需要与业务逻辑通盘考虑,它虽然不会侵入业务,却活跃在业务代码出现的各个角落。

而服务网格技术则完全采用了非入侵的处理方式,sidecar 成为了业务服务的唯一代言人。以前需要业务系统三头六臂才能完成的服务发现、流量治理等工作,现在转为由控制面和 sidecar 组成的这个专业团队来打理了。

由此可见,在解决微服务遇到的问题方面,服务网格技术和以 Spring Cloud 为代表的微服务架构技术的基础思路并没有本质区别,只是在具体的实现路径上面存在明显的差异。

应该承认服务网格技术的出现是基于技术人员对业务与治理能力进一步分离的诉求而产生的,但由此就说服务网格是微服务的2.0时代,还为时尚早。在笔者看来,现阶段服务网格技术更像是微服务技术的半代升级款

03 让我们来解决如何选择的问题吧

山无常势,水无常形,项目中选择什么样的技术架构并没有一定之规。就像我们上面提到的,老架构必然在使用过程中弊端丛生,而新架构也同样会带来新的问题。不能说最先进的架构就是最好的,同理最古老的架构也并不是没有存在的价值。一切的选择都应该基于企业与项目的现实情况。

那么我们应该考量哪些因素呢?

1. 项目的目的或产品的发展阶段。如果项目的目的在于验证某种技术或业务方案,或者产品尚处于 MVP 验证阶段,请从微服务架构的迷思中移出你的注意力,出于快速开发的考虑单体架构是你最优的选择。

2. 业务的规模和市场预期。微服务当然有足够的优势让人心生向往,但是绝不应该为了技术而选择技术。一个日活足够高的 2C 场景当然需要微服务,一个交易量足够大的 2B 场景也离不开微服务的保障。但是小而美的垂直领域却不一定需要微服务的加持。

3. 技术人员储备。技术的核心价值在于人,对于企业而言进行微服务改造之前最好先盘盘手头的人力资源。Java 语言拥有更多的开发者,人力成本相对较低,Spring Cloud 和 Dubbo 就很适合 Java 程序员较多的企业。Kubernetes和容器技术是当下流行的云原生技术的重要基础,相关的运维人员和开发者的薪资也水涨船高,如果企业中这类人员的积累不错的话,使用与云原生亲和力更强的Service Mesh 方案也很不错。

4. 项目资源情况。项目永远是用有限的资源完成确定范围的工作。一个只会运行在虚拟机环境的项目,其实没有必要强行使用 Service Mesh。一个非 Java 语言开发的系统,也没有必要为了使用 Spring Cloud 而强行重构为 Java 系统。

5. 对请求延迟的容忍程度。Sidecar 在带来便利性的同时,也带来了额外的延时。以 Istio 使用的 Envoy 为例,官方的测试结论为每经过一次 sidecar 就会产生 3ms 左右的延迟,对于一般的应用系统而言 3ms 是一个完全可以接受的数字。但是对于调用链路极深的复杂业务系统而言,链路上的 sidecar 所积累出来的延时将是一个较大的数字。而在一个对延时非常敏感的场景中,3ms 是不是一个可以接受的数字也需要充分考虑。

篇幅有限笔者无法也不可能穷尽所有的情况,以上内容只是抛砖引玉。技术终不过是我们实现现实目的的一种手段而已,善加利用砖头也是一代神兵利器。

激进技术派 vs 项目保守派的微服务架构之争相关推荐

  1. java开源项目及spring微服务架构

    开源项目地址:weiit - NO.1的数字化零售SaaS开源方案商(Java企业级开源SaaS服务商) 1.1 软件架构演进 软件架构的发展经历了从单体结构.垂直架构.SOA 架构到微服务架构的过程 ...

  2. 大项目微服务架构设计

    根据目前产品存在的问题,针对快速开发.海量用户.大量数据.低延迟等互联网应用的实际需要,通过对业务架构.系统架构.基础架构.技术架构进行分析,采用先进实用的微服务SOA架构重构智慧校园.数字化校园等产 ...

  3. SpringCloud 微服务架构开源项目,适合接私活、毕业设计(附源码)

    今天给大家推荐一个牛逼的接私活项目,SpringCloud微服务架构项目! 一个由商业级项目升级优化而来的微服务架构,采用SpringBoot 2.5 .SpringCloud 等核心技术构建,提供基 ...

  4. 视频教程-C++微服务架构及安全云盘项目实训-C/C++

    C++微服务架构及安全云盘项目实训 夏曹俊:南京捷帝科技有限公司创始人,南京大学计算机硕士毕业,有15年c++跨平台项目研发的经验,领导开发过大量的c++虚拟仿真,计算机视觉,嵌入式图像处理,云安全审 ...

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

    点击上方"服务端思维",选择"设为星标" 回复"669"获取独家整理的精选资料集 回复"加群"加入全国服务端高端社群「后 ...

  6. 从0开始的微服务架构:(一)重识微服务架构

    2019独角兽企业重金招聘Python工程师标准>>> 导语 虽然已经红了很久,但是"微服务架构"正变得越来越重要,也将继续火下去. 各个公司与技术人员都在分享微 ...

  7. Re:从0开始的微服务架构:(一)重识微服务架构--转

    原文地址:http://www.infoq.com/cn/articles/micro-service-architecture-from-zero?utm_source=infoq&utm_ ...

  8. Re:从0开始的微服务架构:(一)重识微服务架构

    导语 虽然已经红了很久,但是"微服务架构"正变得越来越重要,也将继续火下去. 各个公司与技术人员都在分享微服务架构的相关知识与实践经验,但我们发现,目前网上的这些相关文章中,要么上 ...

  9. SpringCloud 微服务架构,适合接私活(附源码)

    欢迎关注方志朋的博客,回复"666"获面试宝典 今天给大家推荐一个牛逼的接私活项目,SpringCloud微服务架构项目! 一个由商业级项目升级优化而来的微服务架构,采用Sprin ...

最新文章

  1. output_buffering详细介绍
  2. 华硕k555l拆光驱_2L大小的迷你电脑用起来有什么区别?华硕VC66
  3. 两杯咖啡只卖2.5?瑞幸价格出错被“薅羊毛” 官方道歉了...
  4. Linux进阶之环境变量文件/etc/profile、/etc/bashrc、/etc/environment
  5. 上传excel,并保存excel内容
  6. 矢量字体合并《注意事项》
  7. 象棋程序 android,中国象棋人机对弈程序在Android系统上的设计与实现
  8. android 面试算法题 实现单链表反转
  9. 如何Word中修改Normal样式模板
  10. 调试 MQL5 程序
  11. MacOS Big Sur 开启 HIDPI
  12. 笔记木计算机自动关机怎么办,为什么笔记本电脑自动关机 笔记本电脑自动关机解决方法...
  13. netty实现http服务器
  14. pandas 筛选行 整行复制粘贴
  15. Python 用一个脚本来控制另一个脚本的运行、关闭
  16. cpu选择K还是f?哪个更靠谱?
  17. 3GPP TS 23501-g51 中英文对照 | 4.2.3 Non-roaming reference architecture
  18. gpu服务器厂家_嵌入式主板厂家告诉你选择GPU服务器的5大标准
  19. k-means算法及改进
  20. “超女民-主”?“画饼充饥”!

热门文章

  1. 瑞幸的咖啡 奈雪的茶
  2. graphics画图
  3. 人工智能在模拟空战中击落人类飞行员
  4. Gazebo——仿真平台搭建(基于Ubuntu20.04)
  5. 电脑我的世界java要什么版本_我的世界配置要求 电脑版要什么样的配置
  6. mkisofs------制作iso文件
  7. 【交易技术前沿】实时计算系统建设经验分享
  8. 中文巨量模型“源1.0”的模型结构与生成效果解析
  9. git clone 问题 destination path ‘xxx’ already exists and is not an empty directory.
  10. SC0096—AT32F403A/407 MSC IAP SpiFlash As Disk