一、什么是微服务
说微服务之前需要先讲解下之前的MVC架构下的单体应用。
单体应用:
当用户访问量变大导致一台服务器无法支撑时怎么办呢?加服务器加负载均衡,架构就变成这样了:
后面发现把静态文件独立出来,通过CDN等手段进行加速,可以提升应用的整体相应,单体应用的架构就变成:比如很多开源项目里面用到的缓存技术、页面缓存技术,常见的就是html缓存,常见于很多php开发的项目里面如:织梦网
以上就是单体应用的架构图,下面给出这些架构的缺点:
1. 开发方面-代码复杂、人员要求技术高、需要从前端到后台都要有较高的能力、开发协作困难,通过SVN工具管理在开发人员过多的情况下过于复杂、测试周期长、bug修改需要较长时间;
2. 应用使用方面-程序启动缓慢、数据库需专人维护、要求硬件设备配置较高;
3.人员建设方面-UI、业务、后台、数据库都需要专人维护;
下面给出整体框架图
那到底微服务能够解决上述框架哪些问题。
名字解释:微服务是一个小的、松耦合的分布式服务,可以把各个分布式的服务看做是不同职责的组件,或者上升为不同的系统来统一管理。相当于把复杂的业务系统分解、分离成不同职责的分布式系统。
特点:
1.明确定义了职责范围的细粒度组件,这些组件互相协调提供解决方案。
2.每个组件都有一个小的职责领域,并且完全独立部署。
3.一个微服务应该可以跨多个应用程序复用。
4.采用HTTP和JSON(JavaScript Object Notation)这样的轻量级通信协议,在服务消费者和服务提供者之间进行数据交换。
5. 明确责任领域的小型开发团队。
6.依赖注入框架(如Spring),允许用户通过约定(以及注解)将应用程序对象之间的关系外部化,而不是在对象内部彼此硬编码实例化代码
优点:
1.灵活性-更快速的交付,软件更新速度即时软件上线速度,中间可以无缝切换;
2.性能更高,分布式多服务,不抢占资源;
3.可伸缩性-可以根据业务场景的多少,在不同时间段进行快速横向扩充服务器,在小业务场景下,收缩服务器供其他使用;
4.有弹性-蝴蝶效应失效,不会有这牵一发而动全身的场景;
总结=小型的、简单的和解耦的服务=可伸缩的、有弹性的和灵活的应用程序
二、微服务与云的关系
为什么说微服务之间和硬件无关,能够做到快速部署应用呢?关键是虚拟化技术。
容器技术:将Docker容器(或等效的容器技术)部署
以弹性的概念为中心-做到快速部署、快速应用的目的;
三、微服务模式
1.Spring Boot是微服务实现中使用的核心技术,简化构建基于REST的微服务的核心任务;
2.Spring Cloud Config集中式服务来处理应用程序配置数据的管理,应用程序配置数据与部署的微服务完全分离;
3.Spring Cloud服务发现,开发人员可以从客户端消费的服务中抽象出部署服务器的物理位置(IP或服务器名称);
4.Spring Cloud与Netflix Hystrix和Netflix Ribbon
Netflix Hystrix库,开发人员可以快速实现服务客户端弹性模式,如断路器模式和舱壁模式;
Netflix Ribbon项目简化了与诸如Eureka这样的服务发现代理的集成,但它也为服务消费者提供了客户端对服务调用的负载均衡;
5.Spring Cloud与Netflix Zuul,Netflix Zuul项目为微服务应用程序提供服务路由功能。Zuul是代理服务请求的服务网关,确保在调用目标服务之前,对微服务的所有调用都经过一个“前门”。通过集中的服务调用,开发人员可以强制执行标准服务策略,如安全授权验证、内容过滤和路由规则。
6.Spring Cloud Stream轻量级消息处理集成到微服务中的支持技术,使用异步事件,快速将微服务与消息代理进行整合,如RabbitMQ和Kafka;
7.Spring Cloud Sleuth允许将唯一跟踪标识符集成到应用程序所使用的HTTP调用和消息通道(RabbitMQ、Apache Kafka)之中。这些跟踪号码(有时称为关联ID或跟踪ID)能够让开发人员在事务流经应用程序中的不同服务时跟踪事务。
与日志聚合技术工具(如Papertrail)和跟踪工具(如Zipkin)结合时,能够展现出真正的威力。Papertail是一个基于云的日志记录平台,用于将日志从不同的微服务实时聚合到一个可查询的数据库中。Zipkin可以获取Spring Cloud Sleuth生成的数据,并允许开发人员可视化单个事务涉及的服务调用流程。
8.Spring Cloud Security是一个验证和授权框架,可以控制哪些人可以访问服务,以及他们可以用服务做什么。Spring Cloud Security是基于令牌的,允许服务通过验证服务器发出的令牌彼此进行通信。接收调用的每个服务可以检查HTTP调用中提供的令牌,以确认用户的身份以及用户对该服务的访问权限。
Spring Cloud Security支持JSON Web Token。JSON Web Token(JWT)框架标准化了创建OAuth2令牌的格式,并为创建的令牌进行数字签名提供了标准。
9.docker代码供应实现一个“构建和部署”管道,开发人员需要使用Travis CI和Docker这两样工具,前者可以作为构建工具,而后者可以构建包含微服务的服务器镜像。