专栏首页老男孩成长之路什么是微服务?为什么会有微服务?

什么是微服务?为什么会有微服务?

2860元腾讯云代金券免费领取,付款直接抵现金,立即领取>>>

腾讯云海外服务器1折限时抢购,2核4G云主机661元/1年,立即抢购>>>

腾讯云服务器1折限时抢购,2核4G云主机698元/3年,立即抢购>>>

什么是微服务?为什么会有微服务?让我们带着这些疑问开始我们的探索。

我们先看下维基百科和百度百科给出的定义:

维基百科:2014年,Martin Fowler 与 James Lewis 共同提出了微服务的概念,定义了微服务是由以单一应用程序构成的小服务,自己拥有自己的行程与轻量化处理,服务依业务功能设计,以全自动的方式部署,与其他服务使用 HTTP API 通信。同时服务会使用最小的规模的集中管理 (例如 Docker) 能力,服务可以用不同的编程语言与数据库等组件实现。

百度百科:所谓的微服务是SOA架构下的最终产物,该架构的设计目标是为了肢解业务,使得服务能够独立运行。 微服务设计原则:1、各司其职 2、服务高可用和可扩展性

概念还是比较抽象的,接下来,我将从单体应用开始,讲解为什么会有微服务以及什么是微服务。

一、单体应用

在初期,互联网公司的应用技术栈大致分为 LAMP(Linux + Apache + MySQL + PHP)和 MVC(Spring + iBatis/Hibernate + Tomcat)两大流派。两者都是为单体应用架构设计的,其优点是学习成本低,开发上手快,测试、部署、运维也比较方便。

以 MVC 架构为例,业务通常是通过部署一个 War 包到 Tomcat 中,然后启动 Tomcat,监听某个端口即可对外提供服务。早期在业务规模不大、开发团队人员规模较小的时候,采用单体应用架构,团队的开发和运维成本都可控。

然而随着业务规模的不断扩大,团队开发人员的不断扩张,单体应用架构就会开始出现问题,大概会有以下几个方面的问题。

  • 部署效率低:当单体应用的代码越来越多,依赖的资源越来越多时,应用编译打包、部署测试一次,甚至需要 10 分钟以上。
  • 团队协作开发成本高:当团队人员扩张,多人修改代码,然后一起打包部署,测试阶段只要有一块功能有问题,就得重新编译打包部署,然后重新预览测试,所有相关的开发人员又都得参与其中,效率低下,开发成本极高。
  • 系统高可用性差:因为所有的功能开发最后都部署到同一个 War 包里,运行在同一个 Tomcat 进程之中,一旦某一功能涉及的代码或者资源有问题,那就会影响整个 WAR 包中部署的功能。
  • 线上发布变慢:一旦代码膨胀,服务启动的时间就会变长。因此,急需一种方法能够将应用的不同模块的解耦,降低开发和部署成本。

想要解决上面这些问题,服务化的思想也就应运而生。

二、服务化

服务化就是把传统的单机应用中通过 JAR 包依赖产生的本地方法调用,改造成通过 RPC 接口产生的远程方法调用。在编写业务代码时,对于通用的业务逻辑,把它抽象并独立成为专门的模块,对于代码复用和业务理解有很大的好处。

以微博系统为例,微博既包含了内容模块,也包含了消息模块和用户模块等。其中消息模块依赖内容模块,消息模块和内容模块又都依赖用户模块。当这三个模块的代码耦合在一起,应用启动时,需要同时去加载每个模块的代码并连接对应的资源。一旦任何模块的代码出现 bug,或者依赖的资源出现问题,整个单体应用都会受到影响。

为此,首先可以把用户模块从单体应用中拆分出来,独立成一个服务部署,以 RPC 接口的形式对外提供服务。微博和消息模块调用用户接口,就从进程内的调用变成远程 RPC 调用。这样,用户模块就可以独立开发、测试、上线和运维,可以交由专门的团队来做,与主模块不耦合。进一步的可以再把消息模块也拆分出来作为独立的模块,交由专门的团队来开发和维护。

可见通过服务化,可以解决单体应用膨胀、团队开发耦合度高、协作效率低下的问题。

三、微服务

从 2014 年开始,容器化技术的成熟以及 DevOps 文化的兴起,服务化的思想进一步演变为微服务。

微服务相比于服务化的不同可总结为以下四点:

  • 服务拆分粒度更细:微服务可以说是更细维度的服务化,小到一个子模块,只要该模块依赖的资源与其他模块都没有关系,那么就可以拆分为一个微服务。
  • 服务独立部署:每个微服务都严格遵循独立打包部署的准则,互不影响。比如一台物理机上可以部署多个 Docker 实例,每个 Docker 实例可以部署一个微服务的代码。
  • 服务独立维护:每个微服务都可以交由一个小团队甚至个人来开发、测试、发布和运维,并对整个生命周期负责。
  • 服务治理能力要求高:因为拆分为微服务之后,服务的数量变多,因此需要有统一的服务治理平台,来对各个服务进行管理。

以微博系统为例,可以进一步对内容模块的功能进行拆分,比如内容模块又包含了 feed 模块、评论模块和个人页模块。通过微服务化,将这三个模块变成三个独立的服务,每个服务依赖各自的资源,并独立部署在不同的服务池中,可以由不同的开发人员进行维护。当评论服务需求变更时,只需要修改评论业务相关的代码,并独立上线发布;而 feed 服务和个人页服务不需要变更,也不会受到发布可能带来的变更影响。

由此可见,微服务化给服务的发布和部署,以及服务的保障带来了诸多好处。

四、单体应用和微服务应用的区别

单体式应用

微服务应用

进程数

将所有功能放到同一个进程中

将功能的每个元素放置到分离的多个服务进程中

拓展方式

通过复制整个应用到多台服务器实现拓展

通过将不同的服务分布于不同的服务器,并按需复制服务的方式实现拓展

快速响应变更

部分更新,都需要重新部署整个应用

部署和升级都是独立的,有助于大大提高系统变更的敏捷性

团队结构

团队结构呈现垂直化,每个团队专门负责专门的一块

团队结构呈现扁平化,每个团队服务一整个业务能力

可用性

一个服务的不稳定可能导致整个应用出现问题

一个服务不稳定,影响范围比较小

创新性

很难引入新的技术和框架,所有功能都使用的同一种框架

每个微服务可以使用不同的语言和框架,引入新技术方便

五、总结

由单体应用进化到服务化拆分部署,随着移动互联网规模的不断扩大,敏捷开发、持续交付、DevOps 理论的发展和实践,以及容器化技术的成熟,微服务架构开始流行。

微服务的核心在于服务治理,微服务架构是将复杂臃肿的单体应用进行细粒度的服务化拆分,每个拆分出来的服务各自独立打包部署,并交由小团队进行开发和运维,从而极大地提高了应用交付的效率。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 什么是微服务?为什么你要用微服务?

    最近几年微服务很火,大家都在建设微服务,仿佛不谈点微服务相关的技术,都显得不是那么主流了。

    phoenix.xiao
  • 2021升级版微服务教程—为什么会有微服务?什么是SpringCloud?

    2021升级版SpringCloud教程从入门到实战精通「H版&alibaba&链路追踪&日志&事务&锁」

    鹿老师的Java笔记
  • 2021升级版微服务教程1—为什么会有微服务?什么是SpringCloud?

    **2021升级版SpringCloud教程从入门到实战精通「H版&alibaba&链路追踪&日志&事务&锁」**

    鹿老师的Java笔记
  • 【微服务】133:什么是微服务?

    当然系统架构肯定不是说我一篇文章就能学好的,只能说我作为一名初学者,是如何去理解这些概念的。

    刘小爱
  • 什么是微服务

    《POJOs in Action》作者,CloudFoundry.com的创建者之一

    羽客
  • 什么是微服务?

    信息技术从出现到逐渐成为主流,主要经历了软件、开源、云三个阶段的发展。从软件到开源,再到云,这也是信息技术的发展趋势。

    我没有三颗心脏
  • 什么是微服务

    在介绍微服务时,首先得先理解什么是微服务,顾名思义,微服务得从两个方面去理解,什么是"微"、什么是"服务", 微 狭义来讲就是体积小、著名的"2 p...

    前朝楚水
  • 什么是微服务?

    自2011年以来,微服务一直是软件社区的重要组成部分,但与许多其他架构和设计理念一样,自从成立以来,围绕这种架构风格的争论不断。与许多这些炒作一样,有一种倾向于...

    Hi胡瀚
  • 什么是微服务

    海仔
  • 什么是微服务?

    微服务(Microservice)这个概念是2012年出现的,作为加快Web和移动应用程序开发进程的一种方法,2014年开始受到各方的关注,而2015年,可以说...

    分母为零
  • 什么是微服务?

    信息技术从出现到逐渐成为主流,主要经历了软件、开源、云三个阶段的发展。从软件到开源,再到云,这也是信息技术的发展趋势。

    乔戈里
  • 什么是微服务?

    在介绍微服务时,首先得先理解什么是微服务,顾名思义,微服务得从两个方面去理解,什么是"微"、什么是"服务", 微 狭义来讲就是体积小、著名的"2 pizza 团...

    芋道源码
  • 什么是微服务?

    维基百科:2014年,Martin Fowler 与 James Lewis 共同提出了微服务的概念,定义了微服务是由以单一应用程序构成的小服务,自己拥有自己的...

    武培轩
  • 微服务架构: 什么是微服务, 是什么时候和怎么使用微服务

    程序你好
  • .NET Core with 微服务 - 什么是微服务

    微服务是这几年最流行的架构,说起架构不提微服务都不好意思跟人家打招呼。最近想要再梳理一下关于微服务的知识,并且结合本人的一些实践经验来做一些总结与分享。前面会分...

    kklldog
  • JAVA | 什么是微服务

    最近公司某个项目的架构越来越庞大,维护起来非常难受。我主动想领导提出要把这个项目重构在工作中需要把原来的项目重构成微服务架构,因此学习微服务相关知识,在这里记录...

    一个优秀的废人
  • 什么是微服务?什么是服务注册与发现

    冬夜先生
  • 什么是微服务架构

    什么是微服务? 微服务(Microservices Architecture)是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被...

    搜云库
  • 微服务架构是什么

    架构师在软件行业一直有很高的位置,并且在开会中的架构师都带有主角光环。 架构师是可以说是软件的设计者,运用我们学会就会忘记的23种设计模式、企业架构模式、面向对...

    Java架构师历程

扫码关注云+社区

领取腾讯云代金券


http://www.vxiaotou.com