单体应用开发
传统的web应用开发是将所有的功能模块都打包到一个包中一起部署运行,单体应用集成简洁部署简单,但是随着项目复杂的的增加,单体应用会变得越来越大越来越臃肿,每次进行小功能的更新都需要更新整个包重新部署。
什么是微服务?
微服务没有一个标准的定义,它是一种架构思想,核心思想是将一个单体应用切分成多个粒度更小的服务,每个服务单独部署,都运行在自己的进程中,服务之间可以互相调用(dubbo使用RPC调用,SpringCloud使用基于http api)。
微服务是一套更为复杂的架构模式,常用的微服务组件有:
-
服务注册与发行:服务之间进行调用时首先需要知道目标服务在哪。服务提供方会将自己的地址注册到注册中心到,而服务调用方则从服务中心获取这部分信息,从而知道服务的位置,进行交互。每个服务可以是服务提供方也可以是调用方。常用的注册中心有:eureka、consul、zookeeper
-
负载均衡:服务提供方一般会有多个应用实例(一个服务部署多个实例,提供相同的服务,缓解单个实例的负载压力),负载均衡就是在选择服务提供方的时候,选择一个合适的实例,避免单个实例负载过高。
-
服务网关:服务网关是服务调用的唯一入口,可以再这个组件中实现用户鉴权动态路由负载限流等功能。
-
配置中心:将本地化的配置信息注册到配置中心,consul支持在线动态配置
-
集成框架:集成框架以配置的形式将所有微服务组件集成到统一的界面框架下,使得用户能够更方便使用。
微服务是一把双刃剑,能解决很多单体应用的问题,同时也带来了很多的挑战:
优点:
- 解决单体应用扩大之后出现的问题:持续开发性查、项目臃肿
- 提高开发效率,多个服务可并行开发
- 系统易于拓展
缺点:
- 分布式系统开发复杂度高于单体应用
- 运维要求更高,单体应用只需要维护一个应用,微服务需要维护多个应用
- 接口调整成本更高。
SpringCloud
SpringCloud是一个基于springboot实现的云应用开发工具,它是一系列框架的集合。
SpringCloud利用springboot的开发便利性,简化了分布式系统基础组件的开发。SpringCloud的核心功能主要有:
- 分布式/版本管理
- 服务注册与发现
- 服务路由
- 服务之间的调用
- 负载均衡
- 断路器
- 分布式消息传递
- api网关
- 消息驱动消息总线
- 认证与授权
- 服务链路追踪。
开发一个简单的SpringCloud微服务应用实例
基于springboot进行开发,springboot选择的版本为2.0.6.RELEASE ,SpringCloud版本为 Finchley.RELEASE,一共有三个服务:
- 服务注册中心:eureka
- 服务提供者:producer
- 服务调用者:consumer
eureka开发
- 新建一个基于springboot的项目,项目名:eureka。
- 在pom.xml文件中导入SpringCloud依赖:
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-