微服务这一词这几年特别特别火,经常能在各种公众号和视频里看见它。以后软件开发也是这个趋势。今天就来简单记录一下它。
在介绍微服务前,我们先回顾一下以前的软件开发是怎样的模式。
简单说就是一个单体架构,以javaweb开发
为例,将一个应用分为web层
、service层
、dao层
,以及各种公用代码块。每一层各司其职,层与层之间相互调用。最终处理浏览器发来的请求。
在学习了SpringBoot之后,我们构建一个应用程序的速度是非常快的,(如果只涉及增删改查的话)。因为约定大于配置,它帮我们免去了很多繁琐的xml/注解配置。
但这种单体的应用程序有一个问题,当应用的访问量高了以后,服务器它顶不住呀。
这里举一个例子:试想一下,一个电商平台它会有很多模块吧(用户模块、订单模块、商品模块、购物车模块...
),几个模块都堆在一个工程里面写,用户在浏览器先登录验证,那要先发请求到服务器里,验证之后再返回结果给浏览器,之后浏览商品,又发一个请求到同一个服务器里,处理完成后在返回结果给浏览器,之后…
几个用户还可以接受,如果碰上双十一,六一八这样的购物节,几十万上百万的用户所有请求都往同一个服务器里面发,那服务器不崩了才怪勒。
社会都是由需求推动的嘛!
这个时候有那么一个大神提出了微服务这一词,就是今天的主角,并发表了一篇论文,详情可以查看Martin fowler的官网
关于这一概念,网上有很多解读了。今天就以直白的话语讲解一下下。
微服务就是专注于服务本身。以往我们将所有的模块都堆在一个应用里面。但是现在,我们会把模块拆出来,不同的模块放在不同的服务器里。
换个说法,以前所有代码都写在一个project
里面,现在我们一个project
只写一种模块的代码。假设AProject
写用户模块的代码,那BProject
写订单模块的代码,以此类推。
那不同的project
之间怎么调用呢?比如电商平台里,一个用户要查询购物车里有什么东西,它向浏览器发送一个查询请求,这个请求经过一系列的操作,来到了专门处理购物车模块的shopping project
里面。它接受到了查询请求,但是你总要告诉我是要查询哪一个用户的购物车吧?于是浏览器发送请求时还需要带上当前用户的信息(比如用户id)。购物车拿到这个用户信息后,就远程调用专门处理用户模块的project
,得到用户的具体信息后,知道你是谁了之后,就再去查询该用户下的购物车。
扯了这么多,其实不同的模块之间是通过远程调用的。为什么前面加一个远程呢?因为呀,不同的模块即project
是部署在不同的服务器上的。服务器都不同了,那互相调用的话加一个远程二字也不过分吧?
讲到这里了,不知道大家发现没有,前面那个电商平台的问题已经解决了。现在一个电商平台的很多模块(用户模块、订单模块、购物车模块、商品模块...
)都部署在不同的服务器上,这样所有的用户请求原本往一个服务器走,现在被分了出去。和用户有关的请求往部署了用户模块
的服务器上走,别的也同理。
这样子,一个系统的健壮性大大增加。服务器由单个变成了服务器群。处理起高并发也得心应手了。
到这里先小总结一下:
微服务是一种架构模式或者一种架构风格,提倡将单一应用程序划分成一组小的服务独立部署,服务之间相互配合、相互协调,每个服务运行于自己的进程中。
每一个东西都有两面性,微服务也一样.
优点:
缺点:
总的来说,微服务是未来软件开发的趋势了。他的硬件开销也不高,大公司可以使用它的理念来解决高并发的问题,小公司也因为它的成本低而完成架构的升级,进入分布式的行列。
最大的挑战应该是咱们准程序员和各位程序员吧,当一个新技术来临时,是危机也是机遇。我们需要把握住现在的趋势,现在java程序员只靠以前ssm
怕很难走天下了。微服务也出现几年了,开源社区也算完善,咱们一起好好共勉吧~