一文看懂微服务背后的技术演进与应用实践

简介: 2021年7月2日,阿里云用户组(AUG)第一次线下活动在济南召开。阿里云云原生资深专家李国强结合自身微服务领域经验,现场跟数十家山东企业分享了云原生的代表技术之一“微服务”的演进和应用实践。本文根据作者的现场演讲整理而成。

2021年7月2日,阿里云用户组(AUG)第一次线下活动在济南召开。阿里云云原生资深专家李国强结合自身微服务领域经验,现场跟数十家山东企业分享了云原生的代表技术之一“微服务”的演进和应用实践。本文根据作者的现场演讲整理而成。

背景

在企业内部分为运维或开发,但最终所有做的事情都是为了解决业务的问题。如果你做一件事情,只有技术目标而没有业务目标,失败是很常见的。

什么样的业务诉求会驱动一个企业去考虑微服务呢?

随着架构的演进,当你的业务越来越复杂,组件越来越多,对于每个业务组件的独立性要求或者技术栈的异构成本越来越高的时候,就会需要去考虑微服务。换言之,如果这个业务是一个比较平稳、没有什么大的挑战,其实不需要去做微服务的改造。

各企业需要结合自己的业务去进行分析是否真的需求微服务。很多企业可能为了沟通,或者架构师、CTO有自己的诉求,想要这个技术领先去做微服务,最终惨淡收场,其实这种案例是非常多的。微服务的适用性一定是从一个业务驱动的这个角度考虑的,需要考虑的是业务的复杂程度。

比较单体和微服务之间的一个区别,什么情况下需要它,和复杂程度是非常相关的。当你的一个业务的复杂程度比较低,处于单体时代的时候,前端后端数据库都是一体的,需要进行变更时,一个数据包上去,所有的这个业务都上去了。并且,当你的业务足够简单的时候,单体效率一定是最高的。

业务不断往前演进,复杂度越来越高的时候,单方面的发布可能会影响到别人。比如我有一个数据包,里边对应一个模块,在这个模块上线的时候,需要去考虑别的模块怎么上线。业务流量进行扩缩容的时候,需要对整个业务进行沟通,而不是对单个模块进行沟通,你会发现资源浪费会很高。这个时候就会到一些拐点,不管是你的发版或者是你的资源利用率都会出现一些问题,生产效率开始降低。单体应用架构的效率出现的拐点就是客户考虑是否需要微服务架构的一个时间点。

微服务的应用架构

1、应用架构的演进历程

微服务最早的时候其实还是单品为主。现在的微服务对主流的一些技术框架,像 Java 体系的四分之二的 Double 类,其他语言都没有放置。但实际上其他语言都有非常多的微服务框架可以选择,像 PDP 等都会有一些。

之前云栖大会做过一次统计,账号体系在整个后端开发中的地位,50%的投票是 Java 后端开发。但现在企业越来越多元化,之前 Java 占统治的地位已经发生了变化。规模略大的公司基本上都是多元体系,里面有很多种,不同业务线的诉求不一样,可能有的业务线是 Java;有些业务偏前端框架,会用 PAP、PYTHON;还有就是企业的并购,也会带来很多元的体系。

多元数据的解法就是用一个多种的维度方案或是用新的技术形式,再往后就是容器化,微服务带来的很多问题是通过容器来解决的。包括微服务器,有些人可能直接放弃不用了。负责人看到 Double 这个体系,直接用 K8sS Service 去做它的这个运行的暴露单元,好处是和语言无关,什么样的体系里面都可以是一个 K8s Service。但在用了微服务后暴露出来的问题会比较多,我们需要对这么多的业务组件进行治理。

K8s 本身是不强的,就是为了要进一步解决这个问题,引入了更多的网格技术。去年开始越来越多的企业开始做网格网络,这里面就包括用 Service Mesh 这个服务网解决跨语言的调研和服务治理。还有一个更新的叫做 Dapr 的技术解决供应链依赖问题。

可以发现,应用架构的演进是一个业务不断地提出问题,然后产出新框架,新的框架又可能会引入新的问题,不断推动着技术的运行过程。

阿里应用架构演进

整个阿里巴巴内部是完全走过一遍上述流程的,因为业务的快速增长,对技术团队也在不断地进行挑战。PHP 是世界上最好最早的语言,淘宝商城其实就是用的 PHP。但是后来业务发展,淘宝的体量越来越快后,不但不能够支撑这个业务,PHP 本身的扩展能力也撑不住了。

2009 年,阿里先做了分布式业务。阿里正式地从单体变成了分布式业务,那时候体量已经比较大,还没有双十一,但已经促成了阿里内部去做自己的分布式框架。除了会有分布式的服务框架,还有一些分布式的数据库和分布式的相应规定,在内部称为三辆马车,这也是从单体变成分布式框架时,必须要解决的三件事。

到 2011 年时,阿里开始探索容器化,先做了 T4 项目,是对于容器化的技术实现,最后变成 Pouch 的容器化的实现,它也是符合容器标准的容器化的实现。这体现出针对微服务后带来的运维挑战,容器是一个非常好的解决方案。

再往后到 2013 年,整个 Oracle 包括小型机在阿里下线,全部变成自己的开源的技术栈。2015 年开始,阿里全面拥抱云原生技术,包括容器技术的对外开放等业务,整个体系逐步深化。2016 年到 2019 年间,阿里做了云原生上云,包含已经全面拥抱的 K8s 体系,以及微服务的改造、治理等。

到现在这段时间,我们做的事情是图上画的最后一个阶段:基于网格进一步对服务点的支持,多语言越来越常见。阿里有很多业务是从外部合并进来的,阿里原来的整套技术战略全部都是 Java,对外部合并进来的用户非常不友好,因为他们不可能全部配好重启,不得不去适配 Java。所以,近来我们在做的事情就是基于网格的新一代微服务架构做演进,会有一些技术让微服务的框架本身对于多元的支持变得更好,包括治理也可以去解耦,这也是成本较高的一个原因。

2、Apache Dubbo 3.0

Dubbo 3.0 在 6 月底已经发布了最新版,这其实是一个很坎坷的项目。2008 年的时候Dubbo 在内部正式发布,2011 年正式开源。以前,Dubbo 和 HMPK 在阿里内部都有,但阿里希望技术上是统一的,不希望有两套技术,两边不互通。这是两个技术栈,所以进行了一次 PK,Apache Dubbo 胜出,所以阿里内部目前全是 Apache Dubbo。现在这也是国内最火的 Apache 框架。中间有段时间,阿里内部投入比较少。到 2017 年时,我们中间件团队再次去做商业化,重启整个 Dubbo 开源,才让 Apache 从完整的一个项目到前几天时完成了发布。

这个项目是非常活跃的,现在的贡献和使用率都非常高。Dubbo 3.0 里其实做了很多事去拥抱最新的一些理念,比如对 Service Mesh 的支持,它的协议也和 GRP 做了更好的兼容,做了一系列全新的服务发现模式。现在国内用得比较多的还是 2.7、2.6 的版本,3.0 发布之后,很多企业一旦用起来都比较喜欢。当时还没发布时,社区里就有一个用户在拿 3.0 开始测试了。

3、Spring Cloud Alibaba

另一个不得不夸奖的是 Cloud 体系,它和 Java 的微服务这两个体系目前还是最流行的。Spring Cloud 体系的优点是组件非常丰富。Dubbo 这两年在从 IPC 框架往主流服务器去引擎,而 Spring Cloud 诞生之初就是要把微服务数据相关部门支持起来。

随后,阿里巴巴做了 Spring Cloud Alibaba,阿里开源一系列的中间件,包括 Double 注册中心、配置中心、限流交易规律以及事务,去帮助用户解决刚才讲到的微服体系中各种各样的问题。

微服务是一整个体系,而不仅仅是简单的调用框架。微服务在大家使用的落地过程中碰到的问题,阿里非常重视。它把其中一些重要的点进行开源,同时通过与阿里云结合做 SDK 的分装,把这两部分合在一起。主要目的之一是帮助用户去使用 Spring Cloud 体系,另一个目的是帮助用户在阿里云上更好地运行 Spring Cloud。所以,这是阿里巴巴的 Cloud。

大部分的用户知道的 Nacos、Sentinel 等中间件,实际上和云的一些产品间有非常好的基础。我们也会和其他公司去联合开发,不断地演进项目。因为在阿里,我们会认为开源和商业化是同样重要的,一个团队既需要承担开源项目,也需要承担商业化的服务。

微服务不是免费的午餐

1、微服务会带来复杂度的提升

微服务不是免费的,它会带来很大的复杂度提升,包括服务框架的选型、注册中心的稳定性等。当一个客户足够大的时候,他会面临一个很大的问题,就是注册中心的稳定性可能会成为一个业务的瓶颈,包括应用的监控、统一的配置管理、任务调度等一系列的东西都会成微服务落地过程中需要考虑的问题。

在这个过程中,对整个企业挑战还是比较大的,不是每个企业都有能力去把整个微服务的开发组件全部自己运维起来。这一大堆组件如果全部靠自己运维起来,要求还是比较高的。所以,在里面更多地是希望企业更关注业务的一些相对偏运维的事情,云厂商才可能通过用其他方式进行解决,或者是如果企业足够强大,也可以去通过开源自建的方式去解决。

2、软件架构诉求与基础设施能力间存在“步调差 ”

刚才讲到 Spring Cloud、 Dubbo 挺好用,但实际上也存在问题,即 SDK 的升级会变得非常困难,因为这个升级对业务没有任何价值,业务方不愿意去配合。很多时候都是系统来说 2.6 有 bug,需要升一下 2.7 版本。这个时候就需要推动业务方去做,因为他把 SDK 引用进去了,引了之后如果有 bug 或者做一个增强,都需要在 SDK 做,这时业务方往往是不愿意的。在阿里内部这个问题也同样存在。

实际上这涉及到一个比较大的话题,即业务开发人员和基础设施的运维人员的边界在哪。SDK 这件事情到底属于业务人员还是属于基础知识,这个问题问起来很抽象,是大家的一个责任边界的问题。业务开发人员认为 SDK 是运维测试的,因为我只要接口,剩下更新、治理、工程上和业务开发没关系。运维人员又不得不让研发人员去配合业务研发,这是模糊的边界,必然会发生冲突。

所以从云的角度或从计算的角度出发,我们在探讨所谓的软件架构速度和基础设施能力丰富度的问题时,能不能把业务和完成业务没有那么相关的所有能力都下降到基础设施的运维团队,这是一直在思考的一个问题。在演练中经历过几代:

  • 第一代是云计算。它把基础设施的这个东西从业务侧翻下来,业务人员就不需要再去关心基础资源。
  • 第二个是容器和推广安全。运维这件事情变得更简单后,开发人员就不会关心这一层了,但是 SDK 侵入这件事对于业务开发员来讲,就是一个侵略。
  • 剥离的问题也是在 Service Mesh 这个技术上来做的。它把所有运行态的治理能力、流量管理能力全部从用户侧、开发测的 SDK 过滤出来,而不再需要去做 SDK 的生产。这个也就意味着用了 Service Mesh 之后,用户是不需要做语言绑定,也就解决了刚才说的那个模糊地带很难解决的问题。这个可能对于现在在用 Spring Cloud 的企业都可以考虑,这个东西会不会成为替代掉现在任何一个单语言的微服务框架技术。
  • 再往后讲其实还有一种依赖。比如当你需要一个中间件时,你一定要去做选型,这需要业务开发人员的配合。单独的一个理念就是我能让你把这个中间件下沉到基础设施。到这时所有的业务开发人员真的只需要关心业务代码,所有的这些基础设施就全部下载下来,是不断地去让基础设施能力更加丰富,来满足上层业务这样一个自主发展趋势。

3、Service Mesh的剥离了服务和流量治理能力

Service Mesh 就是服务治理、流量治理框架。在原有的设计里,它属于业务的一部分,上面是业务代码,下面是这些能力。Service Mesh 能做的最重要的一件事,就是把这些能力剥离到 Istio 里来,业务带中就是纯业务功能,边界很清晰,服务治理、流量治理框架由运维团队来服务。

上层所有的语言和下层所有的基础设施,通过一层层统一的接口进行抽象。不管用 Rock MQ 还是 Rabbit MQ,对上层业务是无感的,它会给上层业务一个统一抽象的 API ,而且是 HTTP 或者 gRPC 这样的一个企业的 API 。开发人员不再关心底下到底是什么,进一步地让开发人员和下面进行解耦。

目标理想架构

最后真正理想的框架是什么样的呢?开发人员和业务人员边界到底在哪呢?我们画了一个理想的框架。

  • 对上层来讲的话,我们会期望不同的业务单元可以选择不同的语言和框架。比如说有的是单体,有的是 Spring Cloud 或者 Dubbo,从调用层面来讲,完全是互通的,可以接入 Service Mesh 的技术,或者现有的这个框架
  • 对于中间的容器服务,会让业务不再感知具体的中间件。
  • 再往下是容器服务,作为整个位置的一个支撑。
  • 右边是它的支撑体系,如微服务会带来一些复杂性,需要通过可观测性监控你的 Devops 的流程 CICD 或者安全性支撑。

这时候就可以让你的业务开发人员用他喜欢的语言去开发他想的业务,而不再关心这些所有的基础设施团队需要去解决的问题,这其实也是从应用框架或微服务上来讲的最终目标。

微服务化实践案例

1、微服务引擎(MSE)

我们去做微服务时会碰到一些问题,有一种解决方式是进行全国自建,这对于一些企业来说工作量比较大。阿里云会把其中一些共性的东西变成产品来提供。比如说你去搭建一个微服务,你需要配置功能、网关、治理能力,阿里云会用一个产品的形态直接给到你,不用自己建了。就好像我原来是自建的,现在是影响他启动的数据不一样,那对于你原来是自建的 Nacos,现在就是一个云产品的提供。

2、畅捷通

另外有一个案例,畅捷通是用友的一个全资子公司,这个客户专门做小微企业的财务系统。它全面上到阿里云,把自己的财务系统全部变成 SaaS 化的模式交付。大家都知道传统的财务系统 ERP 等都是偏单体的架构,畅捷通的整个财务系统也经历了从虚机到 K8s 的转变。一开始,是从虚机跑了微服务,后来从虚机转到了 K8s。整体来看,在云上的规模非常大,也服务了非常多的客户。

从容器化到微服务这样一个过程,它基本上也是这个难题,希望提升系统微服务治理能力和监控能力,在新业务快速上线、频繁的版本迭代中确保系统的稳定健壮。它一开始用了阿里云的一些项目,后来想把它变成 Spring Cloud,现在是两个结合在一起使用。 

3、阿里云服务网格ASM

服务网格这个产品技术大概是在去年发布用于生产,但实际上真正在生产上落地的企业还在不断地去尝试。阿里云也一样,通过一个产品去降低用户使用 Service Mesh,因为 Mesh 这件事情对于很多企业来讲只是个技术概念,企业要的是一种多元微服务的能力,而 ASM 服务网的产品会帮助用户去做服务网的一个落地。

4、商米科技通过 Service Mesh 完成微服务化

上海的商品科技是做各种物联网设备的,它碰到的问题是内部技术框架和语言体系比较复杂,各种各样的语言和服务都遇到了困难。它希望对这些业务能够进行一个统一的流量管理,包括发布时的流量管理,所以它最终选择用 Service Mesh 这个技术去解决多元微服务。从这些业务价值的数据可以看出,比如更新迭代、异常排查、控制面资源成本都有了较大的优化。 

以上就是关于微服务的演进和实践分享,希望有带给大家一些微服务的体系的梳理。

原文链接

本文为阿里云原创内容,未经允许不得转载。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/512265.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1 分钟记住 docker 镜像和容器常用基本命令

作者 | xiaochuhe来源 | CSDN博客镜像常用基本命令查看自己服务器中docker 镜像列表docker images搜索镜像docker search 镜像名 docker search --filterSTARS9000 mysql 搜索 STARS >9000的 mysql 镜像拉取镜像docker pull 镜像名 docker pull 镜像名:tag运行镜像docker ru…

业界首个机密计算容器运行时—Inclavare Containers正式进入CNCF!

简介: Inclavare Containers 通过云原生计算基金会(CNCF)TOC 投票正式成为 CNCF 官方沙箱项目。 作者|彦荣 2021 年 9月 15 日,Inclavare Containers 通过云原生计算基金会(CNCF)TOC 投票正式成…

python 矩阵库_NumPy 矩阵库(Matrix)

NumPy 中包含了一个矩阵库 numpy.matlib,该模块中的函数返回的是一个矩阵,而不是 ndarray 对象。由 m n 个数aij排成的 m 行 n 列的数表称为 m 行 n 列的矩阵,简称 m n 矩阵。记作这 mn 个数称为矩阵 A的元素,简称为元&#xff…

顺丰科技 Hudi on Flink 实时数仓实践

简介: 介绍了顺丰科技数仓的架构,趟过的一些问题、使用 Hudi 来优化整个 job 状态的实践细节,以及未来的一些规划。 本文作者为刘杰,介绍了顺丰科技数仓的架构,趟过的一些问题、使用 Hudi 来优化整个 job 状态的实践细…

Paillier半同态加密:原理、高效实现方法和应用

简介: 《数据安全法》已于9月1日起正式实施,两个月后《个人信息保护法》也将开始施行,意味着数据安全和隐私保护方面的监管将会在年内陆续到位。在合规收紧大背景下,“数据孤岛”现象日渐明显。如何实现安全的数据流通&#xff0c…

django给mysql配主从_django中的mysql主从读写分离:一、配置mysql主从分离

一、配置mysql主从同步的步骤:(1) 在主服务器上,必须开启二进制日志机制和配置一个独立的ID(2) 在每一个从服务器上,配置一个唯一的ID,创建一个用来专门复制主服务器数据的账号(3) 在开始复制进程前,在主服务器上记录二…

从 40% 跌至 4%,“糊”了的 Firefox 还能重回巅峰吗?

作者 | 丁广辉 责编 | 张红月出品 | CSDN(ID:CSDNnews)Mozilla Firefox,通常简称为Firefox,中文名叫做火狐,是由Mozilla基金会及其子公司Mozilla公司开发的一款自由、开源的网页浏览器。2004年&#x…

如何发现 Kubernetes 中服务和工作负载的异常

简介: 本次分享为Kubernetes 监控公开课的第二节内容:如何发现 Kubernetes 中服务和工作负载的异常。 分享由三个部分组成: 一、Kubernetes 异常定位存在痛点; 二、针对这些痛点,Kubernetes 监控如何更快、更准、更全的…

内含干货PPT下载|一站式数据管理DMS及最新解决方案发布

简介: 今天主要给大家介绍一站式数据管理平台DMS以及解决方案的发布。议题包含企业数据管理当前的一些痛,DMS一站式数据管理平台以及其核心技术,实时数仓解决方案以及相应的应用实践。 “数聚云端智驭未来”——阿里云数据库创新上云峰会暨第…

java 数组数据类型_java基本数据类型和数组

第一类:逻辑型boolean第二类:文本型char第三类:整数型(byte、short、int、long)char类型占2个字节short从-32768到32767int从-2147483648,到2147483647共10位long从-9223372036854775808到9223372036854775807共19位第四类:浮点型(float、double)在数学中0到1有无数个浮点数&am…

kube-scheduler 磁盘调度源码分析

作者 | leadersnowy来源 | CSDN博客kube-scheduler介绍首先我们知道,kube-scheduler的根本工作任务是根据各种调度算法将Pod调度到最合适的工作节点上一、整个调度流程分为两个阶段:1、预选(Predicates):输入是所有节点…

开放搜索查询分析服务架构解读

简介: 搜索行为在后端都会有大量的数据计算和处理才会召回符合用户需求的搜索结果,本次分享结合自建搜索业务中查询分析服务常见的问题及难点,介绍阿里云开放搜索查询分析具备的能力及解决方案,并深度解读阿里巴巴查询分析服务架构…

多任务多目标CTR预估技术

简介: 多目标(Multi Objective Learning)是MTL中的一种。在业务场景中,经常面临既要又要的多目标问题。而多个目标常常会有冲突。如何使多个目标同时得到提升,是多任务多目标在真实业务场景中存在的意义。 作者 | 志阳…

Veeam 发布 2022 年数据保护趋势报告,开发者需关注哪些点?

如今数据作为重要的生产要素,成为数字经济高速发展的关键驱动力之一。越来越多开发者和企业认识到数据保护的重要性,关注数据保护发展趋势,以通过相关的技术解决方案来制定应对策略。 为帮助企业捋请思路,加快数字化转型步伐&…

blazeds调用java_Flex使用Blazeds与Java交互及自定义对象转换详解(转)

一、建立Flex与Java交互的工程。本文中讲到的交互是利用Blazeds的,因为这个是免费的,呵呵,我是穷人。首先就是去下载Blazeds的压缩包,这个可以从官网或者CSDN、JavaEye上下到。解压缩这个包,将里面的Blazeds.war解压&a…

从行业应用到智慧城市,升哲科技Alpha协议如何保障物理世界的数据传输

随着国家《“十四五”信息通信行业发展规划》和《物联网新型基础设施建设三年行动计划(2021-2023年)》的政策出台,物联网的产业发展迎来了新一波浪潮。在农业、制造业、生态环境、智慧消防等场景下,以数字化转型、智能化升级为动力…

Serverless 工程实践 | 零基础上手 Knative 应用

简介: Knative 是一款基于 Kubernetes 的 Serverless 框架。其目标是制定云原生、跨平台的 Serverless 编排标准。 Knative 介绍 Knative 通过整合容器构建(或者函数)、工作负载管理(动态扩缩)以及事件模型这三者实现…

DataWorks功能实践速览 05——循环与遍历

简介: DataWorks功能实践系列,帮助您解析业务实现过程中的痛点,提高业务功能使用效率!通过往期的介绍,您已经了解到在DataWorks上进行任务运行的最关键的几个知识点,其中上期参数透传中为您介绍了可以将上游…

阿里安全开源顶尖技术“猎豹” 计算更快数据更安全

两家公司想开展合作,发挥各自优势联合开发一款产品,如何以“隐私计算”的形式,在保护隐私的情况下,高效地实现两方联合计算,便成为解决这一问题的关键。 最近,阿里安全最新研发的Cheetah(猎豹&…

PaddlePaddle:在 Serverless 架构上十几行代码实现 OCR 能力

简介: 飞桨深度学习框架采用基于编程逻辑的组网范式,对于普通开发者而言更容易上手,同时支持声明式和命令式编程,兼具开发的灵活性和高性能。 飞桨 (PaddlePaddle) 以百度多年的深度学习技术研究和业务应用为基础,是中…