一、微服务架构概述

1.单体应用架构

 优点:比较容易部署测试,项目初期可以很好的运行
 
 存在的问题:随着需求的增加,开发人员的增加,单体应用越来越臃肿,可维护性,灵活性变低,维护成本越来越高。
 复杂性高,可靠性低,扩展能力受限,阻碍技术创新。
 
 例如:电影售票系统

2.什么是微服务?

 微服务本身并没有严格定义,每个人的理解也可能不同。
 martin fowler是这样描述的:
 微服务架构风格是一种将一个单体应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制。
 这些服务围绕业务能力构建并且可通过全自动部署机制独立部署。
 这些服务公用一个最小型的集中式管理,服务可用不同语言开发,使用不同的数据存储技术。

3.微服务架构的优点和挑战

 优点:
 1.易于开发和维护
 2.单个微服务启动快
 3.局部修改容易部署
 4.技术栈不受限
 5.按需伸缩,可根据需求,实现细粒度的扩展
 
 面对的挑战:
 1.运维要求较高
 2.分布式固有的复杂性
 3.接口调整成本高
 4.重复劳动

4.微服务设计原则

1.单一职责原则:一个单元(类、方法、服务)只关注整个系统中单独、有界限的一部分。
 单一职责可帮助我们更加敏捷的交付。
2.服务自治原则:每个微服务应具备独立的业务能力、依赖与运行环境。
3.轻量级通信机制:微服务之间通过轻量级的通信机制交互。
	体量轻和跨语言。
	如rest协议,就是典型的轻量级通信机制。
	如java的rmi则不符合轻量级通信机制的要求,绑定了java语言。
	微服务架构中,常用的协议有rest,amqp,stomp,mqtt等。
4.微服务粒度
	应使用合理的粒度划分微服务,确定边界,而不是一味做小服务。

5.如何实现微服务架构

1.技术选型

springcloud  dubbo  dropwiz-ard  armada

2.架构图及常用组件

二、微服务开发框架

1.springcloud简介

    Spring是一个轻量级的Java开发框架,它能使用基本的JavaBean代替EJB。
    SpringBoot是由Pivotal团队提供的全新框架,用来简化新Spring应用的初始搭建和开发过程。开发人员无需定义样板化配置。    
    SpringCloud是一系列框架的有序集合,它把好的东西集合到一起,这就是所谓的集大成者。同时它利用SpringBoot的开发便利性巧妙的简化了分布式系统基础设施的开发。

常用项目简介:

    Spring Cloud Config 是配置管理工具包,让你可以把配置放到远程服务器,几种化管理集群配置,目前支持本地存储,Git以及Subversion。
    Eureka 云端服务发现,一个基于 REST 的服务,用于定位服务,以实现云端中间层服务发现和故障转移。
    Hystrix 熔断器,容错管理工具,旨在通过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。
    Zuul 是在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架。Zuul 相当于是设备和 Netflix 流应用的 Web 网站后端所有请求的前门。
    Spring Cloud Bus 事件、消息总线,用于在集群(例如,配置变化事件)中传播状态变化,可与Spring Cloud Config联合实现热部署。
    Spring Cloud Data Flow 大数据操作工具,作为Spring XD的替代产品,它是一个混合计算模型,结合了流数据与批量数据的处理方式。

2.优点

SpringCloud很有可能成为未来微服务架构的标准框架。

约定优于配置
开箱即用、快速启动
适用于各种环境
轻量级的组件
组件支持丰富,功能齐全
选型中立
灵活

3.缺点

文档较少,国内研究并不成熟,相对国外较为火热,社区活跃度高。

4.springcloud版本

大多数 Spring  项目都是以“主版本号 次版本号.增量版本号.里程碑版本号” 的形式命名版本号的, 例如Spring Framework  稳定版本4.3.5.RELEASE、里程碑版本 5.0.0.M4  等。其中, 主版本号表示项目的重大重构; 次 版本号表示新特性的添加和变化; 增量版本号 一般表示 Bug 修复; 里程碑版本号表示某版本号的里程碑。
然而, Spring Cloud 并未使用这种方式管理版本。下面来详细探讨一下 Spring Cloud 的版本。
版本简介
 Spring Cloud 是以英文单词 SRX  (  X 为数字)的形式命名版本号的。那么英文单词和SR 分别表示什么呢?

Spring Cloud 是一个综合项目, 它包含很多的子项目。由千子项目也维护着自己的版本号, Spring Cloud 采用了这种版本命名方式, 从而避免与子项目的版本混淆。
其中英文单词叫作 "release train" ,   Angel 、Brixton  、Camden 等都是伦敦地铁站的名称, 它们按照字母顺序发行, 可将其理解为主版本的演进。 SR 表示 "Service Release", 一般表示Bug 修复; 在 SR 版本发布之前, 会先发布一个 Release 版本, 例如Camden RELEASE。
Spring Cloud/Spring Boot 版本兼容性
Angel 版本基千 Spring Boot 1.2.x 构建, 在一些场景下, 与 Spring Boot 1.3.x 及以上版本不兼容。
Brixton 版本基千 Spring Boot 1.3.x 构建,也 可使用 1.4.x 进行测试,与Spring Boot 1.2.x不兼容。
Camden 版本基于Spring Boot 1.4.x 构建,也可使用 1.5.x 进行测试。读者可前往h ttp://projects.spring.io/spring-cloud/查看版本兼容性。
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐