Spring微服务实战1
- 了解微服务
- 使用Spring、Spring Boot和Spring Cloud来搭建微服务
- 在微服务开发中使用Spring Boot和Spring Cloud
1.1 什么是微服务
在单体架构中,应用程序作为单个可部署的软件制品交付,所有的UI(用户接口)、业务、数据库访问逻辑都被打包在一个应用程序制品中并且部署在一个应用程序服务器上。
大多数情况下会有多个开发团队开发这个应用程序,每个开发团队负责应用程序的不同部分。随着单体应用的规模和复杂度的增长,在该应用程序上进行开发的各个团队的沟通与合作成本没有减少。每当各个团队需要修改代码时,整个应用程序都需要重新构建、重新测试和重新部署。
微服务是一个小的、松耦合的分布式服务。将一个大型的应用分解为具有严格职责定义的便于管理的组件。
微服务的特征:
- 应用程序逻辑分解为具有明确定义了职责范围的细粒度组件,这些组件互相协调提供解决方案
- 每个组件都有一个小的职责领域,并且完全独立部署。微服务应该对业务领域的单个部分负责,此外,一个微服务应该可以跨多个应用程序复用
- 微服务通信基于一些基本原则,并采用HTTP和JSON这样的轻量级通信协议,在服务消费者和服务提供者之间进行数据交换
- 服务的底层采用什么技术实现并没有什么影响,因为应用程序始终使用技术中立的协议进行通信。这意味着构建在微服务之上的应用程序能够使用多种编程语言和技术进行构建
- 微服务利用小、独立和分布式的性质,使组织拥有明确责任领域的小型开发团队。这些团队可能为同一个目标工作,如交付一个应用程序,但是每个团队只负责他们在做的服务
1.2 Spring
Spring的核心是建立在依赖注入的概念上的。依赖注入框架通过约定(注解)将应用程序对象之间的关系外部化,而不是在对象内部彼此硬编码实例化代码。
1.3 使用Spring Boot来构建微服务
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.PathVariable;
@SpringBootApplication //告诉Spring Boot框架,该类是Spring Boot服务的入口点
@RestController //告诉Spring Boot ,要将该类中的代码公开为Spring RestController类
@RequestMapping(value="hello") //此应用程序中公开的所有URL将以/hello前缀开头
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@RequestMapping(value="/{firstName}/{lastName}",method = RequestMethod.GET)//Spring Boot公开一个基于GET方法的REST端点,它将使用两个参数,即firstName和LastName
public String hello( @PathVariable("firstName") String firstName,//将URL中传入的firstName和LastName参数映射为传递给hello方法的两个变量
@PathVariable("lastName") String lastName) {
return String.format("{\"message\":\"Hello %s %s\"}", firstName, lastName);//返回一个手动构建的简单JSON字符串。
//return helloRemoteServiceCall(firstName,lastName);
}
}
1.4 云到底是什么
云计算有3种基本模式,分别是
- 基础设施即服务(IaaS)
- 平台即服务(PaaS)
- 软件即服务(SaaS)
举个例子,当你想吃饭时,有4种选择:
- 在家做饭(内部自建)
- 去食品杂货店买一顿预先做好的膳食,然后加热(IaaS)
- 叫外卖送到家里(PaaS)
- 开车去餐厅吃饭(SaaS)
新的云平台类型也在出现,比如函数即服务(FaaS)容器即服务(CaaS)
FaaS的应用程序会使用像亚马逊的Lambda技术和Google Cloud函数这样的设施,应用会将代码块以“无服务器”(serverless)的形式部署,这些代码会完全在云提供商的平台计算设施上运行。使用FaaS平台,无须管理任何服务器基础设施,只需支付执行函数所需的计算周期
容器即服务模型,开发人员将微服务作为便携式虚拟容器(Docker)进行构建并部署到云供应商。与IaaS模型不同,使用IaaS的开发人员必须管理部署服务的虚拟机,而CaaS则是将服务部署在轻量级的虚拟容器中。云供应商会提供运行容器的虚拟服务器,以及用于构建、部署、监控和伸缩容器的综合工具。
1.5 微服务不只是编写代码
- 大小适当—如何确保正确地划分微服务的大小,以避免微服务承担太多的职责?适当的大小允许快速更改应用程序并降低整个应用程序中断的总体风险
- 位置透明—在微服务应用程序中,多个服务实例可以快速启动和关闭时,如何管理服务调用的物理细节
- 有弹性—如何通过绕过失败的服务,确保采取“快速失败”的方法来保护微服务消费者和应用程序的整体完整性
- 可重复—如何确保提供的每个新服务实例与生产环境中的所有其他服务实例具有相同的配置和代码库
- 可伸缩—如何使用异步处理和事件来最小化服务之间的直接依赖关系,并确保可以优雅地扩展微服务?