微服务架构与Spring Cloud
近几年大家都在谈论云原生和微服务,例如
© 云原生技术能够帮助公司和机构在私有云、公有云和混有云等新型动态环境中,构建和运行可弹性扩展的应用。
微服务架构是一项在云端部署应用和服务的新技术。
诸如此类,不一而足。
而在实际中,我们也同样可以看到,越来越多的企业和机构都使用了基于 Spring Cloud架的技术开发微服务,组建基于云端服务器的应用平台。
那么对于一个企业、一个系统架师,或者从事 IT 行业的人员来说,对这些技术应该如何选择,架构设计应该如何定位,才能顺应技术潮流,处于技术的领先水平。
在这些新概念、新技术“满天飞”的环境中,我们需要理清思维,才能确定方向,从而在我们的企业应用开发中发挥更好的效能。
微服务架构的特点
在介绍微服务架构之前,我们先来看看云原生的概念。
云原生的概念,最早由 Pivotal 团队的 Matt Stine 2013 年提出。这个概念提出之后,在各大社区掀起了讨论的热潮,并得到了社区的不断完善。顾名思义,云原生是指专门为云平台部署和运行而设计的应用。云原生包含的内容非常多,包括DevOps (开发运维一体化〉、持续交付、微服务、敏捷基础设施和12要素等几大主题。
2015 年, Linux 基金会领头成立了云原生应用基金会( Cloud Native Computing Foundation,CNC凹,它致力于云原生技术的普及和可持续发展。 CNCF 认为云原生系统必须包含的属性有容器化封装、自动化管理和面向微服务。
现在我们来看看微服务架构的概念。
据说早在 2011 月,在威尼斯附近的一个软件架构师研讨会上,就有人提出了微服务架构设计的概念,用它来描述与会者所看见的一种通用的架构设计风格。时隔一年之后,在同一个研讨会上,大家决定将这种架构设计风格用微服务架构来表示。
刚开始,对于微服务架构是没有一个完整的描述的,其可以看到的主要特征就是小型化、细粒度,以及使用轻量的 HTTP 通信等。
2014 月,在 James Lewis Martin Fowler 发表的一篇博客文章中,总结了微服务架构设计的一些共同特点。下面摘录的一段描述,被普遍认为可以作为微服务架构的定义:“简而言之,微服务架构是将单个应用程序作为一组小型服务开发的方法,每个服务程序都在自己的进程中运行,并与轻量级机制(通常是 Hπ?资源 API) 进行通信。这些服务是围绕业务功能构建的,可以通过全自动部署机器独立部署。这些服务可能用不同的编程语言编写,使用不同的数据存储技术,并尽量不用集中式方式进行管理。
上面提到的单个应用程序是指传统设计中的一个应用系统,或者一个大型应用,现在大家流行把它叫作单体应用。
可以看出,微服务架构是将一个大型系统使用小型化分割的方法,按业务功能拆分成各种独立的小应用。在各个小应用之间,可以使用轻量机制,即基于 RESTful HTTP 进行通信,并以这种通信方式替换原来在程序之间直接调用的方式。微服务就是通过这种架构设计方法拆分出来的一个个独立的小型应用。
将一个大型系统分割成一些小型应用,而小型应用之间通过 Hη?进行整合,这就是微服务架构的精髓所在。我们可以用一句通俗易懂的话来概括,那就是“分而治之,合而用之”。
从上面微服务架构的描述中,我们可以概括出微服务架构的几个显著特点。
1. 小型化
微服务架构的的突出之处就是小型化应用设计、最显著的特点就是应用程序变小了,以小为美。小型化的方式,使每个程序只负责完成一定范围内的业务功能,可以更加专一地做好一件事情。这是我们日常解决复杂问题的常用手法,即“大事化小,小事化无”。
2.自治化
每个微服务都是一个独立的应用,独立使用数据库,独立部署,独立运行。这种独立性符合高内聚松搞合的设计原则。在微服务开发和维护过程中,每个微服务都是独立自治的,一个服务的更新和迭代不会依赖于其他服务,同时也可以尽可能做到不对其他服务造成影响,或者可以将这种影响降到最小。
3. 扁平化
去中心化的扁平化管理,可以更加自由地发挥每一个微服务的优势。但是这种自由并不是随意的混搭和组合,而是使用智能化的服务治理,让更多的微服务在发挥个性优势的同时,处在一种杂而不乱的有序可控的范围之内。虽然从整体上微服务已 没有 中管理的概念,但是微服务可以从全局范围出发,发挥更佳的性能优势。
4. 轻量级设计
微服务小型化的特点,就是轻 级设计方法的最好体现。这种轻量级的设计同样体现在微服务的通信设计之中。微服务之间的常用通 方式有两种,一种是使用轻 REST 协议进行API 式的同步通信,另一种是使用轻量的异步消息通信
5. 渐进式设计
一个产品从成型到成熟是要经历 个过程的,这个过程是渐进式设计的。由于微服务小型而独立的特点,使得微服务设计可以以业务驱动的方式进行快速迭代,从而不断 正和调整,使产品趋于成熟。所以,微服务非常适合敏捷开发。
微服务架构与整体式架构的区别
如果是一个小型项目,则使用整体式(单体式)架构设计,其好处非常明显,因为它的设计和开发,以及测试和部署,都可以在一个项目上完成。
如果一个业务复杂的大型项目也使用整体式架构设计,就会存在很多问题。可能刚开始的时候,还感觉不到什么,但是随着时间的推移,加入的功能越来越多了,一个项目就变成了一块巨大的石头,笨重而丑陋。
面对一个巨大的项目,开发人员想要弄清楚它的代码逻辑,就必须花费很多的时间。而针对某一项功能的更改,极有可能“牵一发而动全身”,这会让实施人员变得举步维艰。所以这种项目将会变得越来越难以维护,越来越不便更新。
整体式架构的稳定性也不能得到有效的保障,如果其中的一个模块出现问题,将会影响整个系统的正常运行,甚至造成整个系统的崩溃。而在对问题进行跟踪时,因为系统庞大,往往难上加难。
另外,一个巨大的项目,也不方便进行持续开发,它不能适应需求的快速变更,无法使用快速迭代的敏捷开发方法,也不便在某些方面进行新技术的更替,所以这样的项目最终就变成了业务发展的绊脚石。
相比之下,大型项目使用微服务架构的优势非常明显。
微服务架构设计,就是把复杂事情进行简单化处理。它将一个复杂的系统,拆分成一些小型的应用来开发,首先就将问题进行了分层和简化。因为小型而变得简单,代码的逻辑会变得更加清晰,这无疑解放了程序员繁重的劳动:因为简单,所以能够专注,能够将每一件事情都做好,做到极致。
微服务架构中独立的小型应用,非常适合使用敏捷开发方法,即快速响应需求的变化,进行快速的更新、迭代。
因为每个微服务都是独立自治的,即一个服务的故障不会影响全局系统的正常运行,或者说可以将这种影响降到最低。并且,微服务架构的容错设计,可以避免这种情况的发生。
微服务架构高可用的特点,是系统稳定性的最好保障。微服务能够支持高并发的调用、高流量的访问,能够持续满足平台规模化发展的要求,可以很容易地使用弹性化设计,所有这些是整体式架构无法做到的。
如果我们用一个六边形结构来表示整体式架构,则可以绘制出如图 1-1 所示的结构图。
这个六边形的核心是整体式架构的领域业务模型,它通过系统接口使用各种适配器,如数据库适配器、文件适配器等,与外部管理系统进行连接:然后又通过接口,使用诸如 RESTAPI适配器、 WebUI 适配器等给外部 App 和终端用户提供接口调用和 Web 访问等服务。
从图1-1中可以看出,整体式架构是一个大而全的系统。在微服务架构设计中,我们可以使用一个小正方体来表示每个微服务,它相当于对整体式架构进行拆分之后得到的结果,如图1-2所示。
小正方体的微服务同样使用接口,同样通过各种适配器连接外部管理系统,而微服务之间也可以通过接口,使用阻 API 适配器进行通信。对于 App 和终端用户,将分别由不同的微服务提供相应的适配器及服务。
通过对上面这两种结构图形的比较可以非常明显地看出整体式架构与微服务架构的区别。
- 还没有人评论,欢迎说说您的想法!