微服务SpringC...微服务

微服务 一:微服务架构概述

2019-05-15  本文已影响60人  码道功臣

单体架构存在的问题

在传统的软件技术架构系统中,基本上将业务功能集中在单一应用内,或者是单一进程中。尽管现代化的软件架构理论以及设计原则已推广多年,但实际技术衍化的速度迟缓并且变革动力不足。 其中的原因存在着复杂性以及多样性,我想主要的原因是没有一套整体的解决方案能够让工程师在面临稳定性风险下,毅然决然地实施系统重构。当系统应用规模随着业务的迅速发展时,系统的重要性愈发突出,开发人员将对系统的改造尤为敏感,从之前的徘徊犹豫,随之变得更加保守,只能延续过去的技术方案,将功能不断地累积在原有的系统架构上。这样的系统好比是豆腐叠罗汉,叠得越高越危险。因此,当面临巨大的服务压力时,系统不得不通过扩容的方式,来支撑应对。俗话说,“船小好调头”,“头病医头,脚病医脚”。臃肿的系统使得扩容变得毫无针对性,牵一发而动全身。由于服务运行情况存在差异性,具体哪个功能存在性能瓶颈,又因服务并非孤立而存在,使得评估结果存在着主观臆断性和不确定性,这种相互影响和作用下,使得扩容变得异常的困难,扩容无法量化,最终导致“水桶效应”。

当应用场景规模增大时,为了提高了开发以及执行的效率,并且使得更优雅或者合适的解决问题成为可能,开发人员将会评估和选择更先进的技术,推动演进。由于系统应用过分地集中了所有功能,其功能所需依赖服务以及执行库文件也随之变得庞大,当需要适配新的技术时,不仅依赖冲突难存在不确定性并且难以应付,进而使代码重构变得异常困难,增加了适配新技术的难度。

正因为功能集中于一身,让应用资源占用率变得越来越大,使得持续集成、回归测试、以及分发部署变得愈发困难。比如,应用部署包磁盘占变多,让编译、打包、分发以及启动时间变长,不确定性因素变得更大。当应用发布上线后,存在功能性缺陷,需要回滚时,这样的试错和时间成本变得更加昂贵。

越是功能集中式的系统架构,在开发工程中,越依赖于与执行环境。这种执行环境承载着数据、服务以及配置,如若其中那个环节出现问题,开发进程不得不被迫中断,而不断地诊断问题和调试环境,使得快速开发变得要不可及,更不要说在本地开发。由于对环境的过分依赖,使得系统的稳定性变得更不确定性。其一,由于服务相互依赖,而服务又依赖环境,开发人员对单元测试职业习惯以及依赖程度降低,使得测试环节减少,或者说更依赖于集成测试。其二,当测试人员在部署测试环境执行集成测试时,不但部署成功率不断地降低,而且执行过程时间不断地增加,压缩了开发时间,也可能导致项目滞后。不仅提高了系统风险,并且增加了心理负担。这么说来,无论是快速开发和测试都变得更加艰难。

以上分析还只是停留在那些熟悉业务和技术的成员,当业务快速发展时,其发展速度与开发效率比不断扩大,招募和发展新人是必不可少的手段。当面对如此巨大和复杂的系统应用时,业务和技术所需的知识变得特别杂糅,让新人有一种“独上高楼望,尽天涯路”之感,学习曲线陡峭。在实际的实施过程中,文档完整性以及指导的系统性皆存在不足。

如何解决单体架构存在的问题

单体应用给我们带来的现实问题:

实际上,在解决单体应用的问题上,数年前,就出现了相应的解决方法,比如SOA的技术路线。

SOA解决一个现实的问题,那就是服务与服务之间解耦,将古老的进程内服务调用,通过网络协议转化成服务之间的调用。从早期发明了CORBA、RMI、COM+、XML-PPC等技术,不过问题也随之出现,由于这些技术绑定在某种技术或者平台,比如RMI属于Java 平台技术,COM+属于微软技术体系,XML=PRC没有统一的协议标准,因此对平台无关性的通讯需要的协议呼声强烈,这时一些典型的技术陆续出现,如WebServices以及MessageQueue。以及它们的集大成技术ESB。

其中的代表技术有:WSDL(Web Service Definition Language)、SOAP(Simple Object Access Prototol)等技术。由于这些通讯协议标准相对笨重,虽然目前仍在被广泛的使用,但逐步被淘汰是大势所趋。

为什么不选SOA而选微服务

面向服务架构(SOA) VS 微服务

类同

差异

微服务是粒度小的SOA,正由于SOA体系庞大,不可能实现更好的原子性,并且它采用了统一统治的方式,例如ESB那样的大型解决方案。这样技术选型,针对单一的服务无法实现自行管理,无形之中增加了团队运维成本。开发人员不能很好的实施DevOps技术手段。同时,SOA采用了WSDL、SOAP等重量级的通讯协议,增加了开发成本以及性能损耗。在微服务中,大多数服务API通过REST的方式暴露,这样大大地降低了适配的成本。

微服务是趋势

让我们看看google和百度统计的结果吧

图片.png

图(1)Google中spring boot的搜索热度

spring boot和spring cloud是做微服务的最佳搭档。从图(1)上,我们能够看到spring boot 2013年在全球开始流行,一直到2017年2月到了100的热度。

图片.png

图(2)google中spring cloud的搜索热度

从图(2)上,我们可以看到spring cloud从2012年开始热度都是比较平和,在2015年6月之后,也就是微服务开始兴起的时候,spring cloud开始迅速增长,在2017年2月达到了100的搜索热度。(地图上没有中国,估计是因为中国被墙掉了的原因)

图片.png

图(3)百度搜索中spring boot的搜索热度

图(3)是百度地图统计的结果,我们可以看到spring boot在国内是2015年6月开始流行的,2017年增长尤为突出。

图片.png

图(4)百度搜索中spring cloud的搜索热度

图(4)我们可以看到,spring cloud是从2016年6月开始在中国流行,往往新技术要在中国流行,都会落后硅谷一年,看看一年前的硅谷,就是现在的中国,所以大家也就能够判断到了spring cloud在中国的发展曲线了,也就是2018年2月spring cloud在中国的热度将达到顶峰。

虽然流行并不代表你需要。但是,既然流行就有他流行的原因,就有他优点。后面我们将回来认识下微服务。

什么是微服务

微服务是用一组小服务的方式来构建一个应用,服务独立运行在不同的进程中,服务之间通过轻量的通讯机制(如RESTful接口)来交互,并且服务可以通过自动化部署方式独立部署。正因为微服务架构中,服务之间是相互独立的,所以不同的服务可以使用不同的语言来开发,或者根据业务的需求使用不同类型的数据库。

微服务架构的优点与挑战

优势

挑战

微服务设计原则

上一篇 下一篇

猜你喜欢

热点阅读