云计算时代,如何快速搭建微服务?云计算时代,如何快速搭建微服务?
近十年来,Spring 因其提供的依赖注入功能而广受 Java 开发者的欢迎,因其可以帮助大家开发出松散耦合的系统。简单来
说,用户只需要专注于接口所提供的抽象,即可获得具体的实例。如今随着云计算越发流行,如何充分利用云环境提供的自动
伸缩能力,并与特定云供应商实现松散的耦合,这已成为一个非常有趣的挑战。“云原生”这个概念应运而生。我们先来看看“云
原生”和“微服务”到底是什么?
云原生和微服务
“云原生”你了解吗?
很多人认为,云原生仅仅是用云提供商的服务来运行你的现有应用?
答案不是这么简单。云原生会全面改变应用程序的设计、实现、部署和运维过程。
现在比较流行的云原生定义如下:
在开发 Spring 框架和云平台的软件公司 Pivotal 看来,云原生的定义是:
云原生是一种构建和运行应用程序的方法,这种方法可以完全发挥出云计算模型的优势。
致力于创建和推动云原生编程范式的组织 CNCF (Cloud Native Computing Foundation),对云原生的定义是:
云原生技术可以帮助企业通过公有云、私有云、混合云等现代化的动态环境构建并运行可伸缩的应用。例如:容器、服务网格
(Service Mesh)、微服务、不可变基础架构(Immutable infrastructure)以及声明式 API。
总结一下,云原生应用能充分利用云计算模型带来的各种优势, 而微服务是其中的一种实现形式。下面的定义会帮助你更清
晰地理解:
云原生应用是专门面向云计算环境设计的应用,而非简单的应用迁移上云。
“微服务”来啦!
“微服务架构风格是一种将单个应用程序开发成一套小型服务的方法,每个小型服务都在自己的进程中运行,并通过轻量级机
制(通常为 HTTP 资源 API)相互通信。这些服务围绕业务功能构建,可通过全自动部署机制独立部署。此外,这些服务至少
应该能集中管理,可以用不同编程语言编写,并可以使用不同的数据存储技术。”
——知名软件工程师,敏捷开发方法创始人之一,Martin Fowler
由此可见微服务是一种可以协同工作的小型、专注、自治的服务。
小型、专注体现了微服务的单一职责(Single Responsibility)。一个服务只需要将一件事做好就够了。自治则意味着容错能
力,每个服务可以彼此独立地演化和部署。
微服务就其本质来说与云计算平台的关联极为密切,但微服务这个概念本身并不是新事物。这个概念多年前就出现了。
微服务的概念虽然出现已久,但并未真正流行。主要是因为传统的本地化部署使微服务的落地相当困难。而云计算的出现提供
了更好的扩展性、可靠性和可维护性,所以基于云计算的微服务实现和维护更加便利,也就流行起来。目前我们可以从微服务
里获得收益包括但不限于这些:
弹性:一个组件出现问题不会拖累整个系统,这通常是通过清晰定义的服务边界实现的。
可伸缩性:如果只有一个组件的性能达到上限,可单独进行扩容,而无需对整个系统进行扩容。
易于部署:可只改动一个服务,进而加快发布周期并简化排错过程。
可组合性:每个服务只做一件事,因此可以像 Unix 管道那样轻松实现服务的复用。
可替换性:每个小型的服务都可以更容易地使用更好的实现或技术来替换。
Spring Cloud
微服务有很多优点,但是构建微服务的过程依然相当复杂。为了使微服务架构轻松实现,业界定义了一些通用的模式。比较知
名的有,集中化的中心化配置管理、服务注册和发现、异步消息驱动以及分布式追踪。Spring Cloud 将这些微服务架构模式融
合到具体实践中,帮助我们更好地遵循云原生最佳实践。如下图: