说微服务以前须要先讲解下以前的MVC架构下的单体应用。php
单体应用:html
当用户访问量变大致使一台服务器没法支撑时怎么办呢?加服务器加负载均衡,架构就变成这样了:前端
后面发现把静态文件独立出来,经过CDN等手段进行加速,能够提高应用的总体相应,单体应用的架构就变成:好比不少开源项目里面用到的缓存技术、页面缓存技术,常见的就是html缓存,常见于不少php开发的项目里面如:织梦网docker
以上就是单体应用的架构图,下面给出这些架构的缺点:数据库
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这两样工具,前者能够做为构建工具,然后者能够构建包含微服务的服务器镜像。