Java

什么是微服务?

2019-06-07  本文已影响4人  我没有三颗心脏

前言:起初没有意识到自己选了这么一个对自己来说有一些“宏大”的问题,因为里面涉及到好多知识..所以砍了一些内容..

一、信息技术发展趋势


信息技术发展的三个阶段

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

1. 软件改变世界

纵观人类社会漫长的发展历史,农耕时代、工业时代与信息时代可谓是明显的三个分水岭,每个时代都会出现很多新兴的领域,作为信息时代最重要的载体,互联网越来越成为当今社会关注的焦点,互联网的基石之一——软件,正在迅速地改变着这个世界。

2. 开源改变软件

随着软件行业的成熟,相比于“重复造轮子”,“站在巨人的肩膀上”明显可以更加容易和快速地创造出优秀的新产品。随着开源文化越来越被认可,以及社区文化越来越成熟,使用优秀的开源产品作为基础架构来快速搭建系统以实现市场战略,成为当今最优的资源配比方案。

3. 云吞噬开源

仅通过开源产品搭建并运维一个高可用、高度弹性化的平台,进而实现互联网近乎100%的可用性,难度可想而知。因此,在提供技术思路的同时,进一步提供整套云解决方案以保证不断扩展的非功能需求,便成了当今新一代互联网平台的追求。

随着用户集群规模的进一步加大,单纯的分布式系统已经难以驾驭,因此技术圈开启了一个概念爆发的时代——SOA、DevOps、容器、CI/CD、微服务、Service Mesh等概念层出不穷,而 Docker、Kubernetes、Mesos、Spring Cloud、Istio 等一系列产品的出现,标志着云时代已真正到来。

互联网架构的核心问题

1. 海量用户

当今的互联网大潮,已经越来越难以估算用户量以及由此产生的自然数据增长有多少了,区别于我们日常的生活(例如商场,仅有 10 个人和有 1000 人的购物体验是明显不同的),企业如何做到无差别地为全世界所有的用户提供服务,成了一道难题。

2. 产品迅速迭代

面对当今快速增长的业务和需求,敏捷开发成为了热门的选择。在不断迭代的过程中,时间成本就显得尤为重要。如何敏捷地探知市场需求并将其实现,是互联网行业的立命之本。产品快速升级必然会推动、测试、交付甚至系统迅速迭代。

3. 7x24 小时不间断服务

我们要保证应用全天候不间断的可用,必须要考虑到随时可能发生的意外,例如光缆挖断、机房失火等,每一次宕机都可能会造成巨大的损失。另外,如果系统设计得不够健壮,对其升级和维护时就要停止服务。频繁的系统升级同样会对系统可用性产生很大的影响。

虽然随时随处可用的难度非常大,但互联网应用会尽量缩短宕机时间。通常使用 3~5 个 9(3 个 9 即 99.9%,4 个 9 即 99.99%,5 个 9 即 99.999%)作为衡量系统可用性的指标,表示系统在 1 年的运行过程中可以正常使用的时间与总运行时间的比值,下面分别计算 3~5 个 9 指标下的全年宕机时间,感受一下它们的可靠性差异:

3 个 9:(1 - 99.9%) x 365 x 24 = 8.76 小时
4 个 9:(1 - 99.99&) x 365 x 24 = 52.6 分钟
4 个 9:(1 - 99.999&) x 365 x 24 = 5.26 分钟

4. 流量突增

流量突增分为可预期型徒增和不可预期型徒增,像促销活动、有计划的热点事件等引起的流量突增属于前者,可以通过提前扩容、预案演练等方式精心为这些流量突增准备应对方案。而意料之外的热点事件(如地震)往往事发突然,系统来不及准备应对措施,因此若系统本身的可用性、弹性等非功能需求十分成熟,便可以在某种程度上应对这种突增。

5. 业务组合复杂

很多互联网公司都是跨界巨头,我们知道,即使不跨界,在单一领域编织一个大规模的成型业务系统也并不简单。

上图是我从 ProcessOn 模板里随便找的一张关于电商平台应用服务的架构图,可以看到里面交织了各种各样的业务,当行业的扩张速度超出预计的增长的时候,对底层支撑的考验要求也越来越高。

二、什么是微服务


需要注意,“微服务”与“微服务架构”有着本质的区别: “微服务”强调的是服务的大小,它关注的是某一个点。而“微服务架构”则是一种架构思想,需要从整体上对软件系统进行通盘的考虑。

架构的演变

要了解微服务是如何诞生的,我们有必要对架构的演变过程有一定的了解。上面已经对架构主要面临的问题进行了阐述,下面我们来了解一下架构是如何一步一步升级并转化到“云”上的。

1. 单体架构

单体架构比较初级,典型的三级架构,前端(Web/手机端)+中间业务逻辑层+数据库层。这是一种典型的 MVC 框架的应用。

单体架构的应用比较容易部署、测试, 在项目的初期,单体应用可以很好地运行。然而,随着需求的不断增加, 越来越多的人加入开发团队,代码库也在飞速地膨胀。慢慢地,单体应用变得越来越臃肿,可维护性、灵活性逐渐降低,维护成本越来越高。下面是单体架构应用的一些缺点:

2. 分布式架构

中级架构,分布式应用,中间层分布式 + 数据库分布式,是单体架构的并发扩展,将一个大的系统划分为多个业务模块,业务模块分别部署在不同的服务器上,各个业务模块之间通过接口进行数据交互。数据库也大量采用分布式数据库,如 Redis、Elasticsearch、Solor 等。通过 LVS/Nginx 代理应用,将用户请求均衡的负载到不同的服务器上。

该架构相对于单体架构来说,这种架构提供了负载均衡的能力,大大提高了系统负载能力,解决了网站高并发的需求。另外还有以下特点:

缺点: 系统之间的交互要使用远程通信,接口开发增大工作量,但是利大于弊。

3. 微服务架构

微服务架构,主要是中间层分解,将系统拆分成很多小应用(微服务),微服务可以部署在不同的服务器上,也可以部署在相同的服务器不同的容器上。当应用的故障不会影响到其他应用,单应用的负载也不会影响到其他应用,其代表框架有 Spring cloud、Dubbo 等。

微服务虽然有很多吸引人的地方,但它并不是免费的午餐,使用它是有代价的。使用微服务架构面临的挑战。

4. Serverless 架构

当我们还在容器的浪潮中前行时,已经有一些革命先驱悄然布局另外一个云计算战场:Serverless 架构。

Serverless 架构能够让开发者在构建应用的过程中无需关注计算资源的获取和运维,由平台来按需分配计算资源并保证应用执行的SLA(服务等级协议),按照调用次数进行计费,有效的节省应用成本。

由于该架构有一定的超前性,这里不做过多介绍,感兴趣的童鞋可以戳这里:https://jimmysong.io/posts/what-is-serverless/

微服务定义

通过上面简单的介绍,我们了解了我们的架构是如何一步一步过渡到微服务的,为了解决单体应用的诸多问题,我们提出了分布式的概念,通过将单体应用拆分成诸多单独的模块来降低耦合以及提升系统性能,其实这里就涉及到一个服务化的概念,而微服务与之不同的是:

尽管微服务和微服务架构有所不同,但我们通常也可以简单理解为:

微服务是一种软件架构风格,它是以专注于单一责任与功能的小型功能区块为基础,利用模组化的方式组合出复杂的大型应用程序,各功能区块使用与语言无关的 API(例如 REST)集相互通讯,且每个服务可以被单独部署,它具备以下三个核心特点:

参考资料


1. 浅谈web网站架构演变过程 - https://www.cnblogs.com/xiaoMzjm/p/5223799.html
2. 互联网架构演进之路 - https://zhuanlan.zhihu.com/p/42115757
3. 四种软件架构演进史 - https://blog.csdn.net/xinyuan_java/article/details/88394332

  1. 《未来架构 从服务化到云原生》 - 张亮 等著

扩展阅读:
1.微服务的4个设计原则和19个解决方案 - http://p.primeton.com/articles/59b0f9244be8e61fea00be67


按照惯例黏一个尾巴:

欢迎转载,转载请注明出处!
简书ID:@我没有三颗心脏
github:wmyskxz
欢迎关注公众微信号:wmyskxz
分享自己的学习 & 学习资料 & 生活
想要交流的朋友也可以加qq群:3382693

上一篇下一篇

猜你喜欢

热点阅读