微服务架构

  • 1.1 为什么需要微服务架构
  • 1.2 微服务架构是什么
  • 1.3 如何构建微服务架构


1.1 为什么需要微服务架构

传统单体应用架构:是模块化的设计逻辑,程序在编写完成后会被打包并部署为一个具体的应用,而应用的格式则依赖于相应的应用语言和框架

单体架构缺点:

(1)应用复杂度增加,更新,维护困难

(2)易造成系统资源浪费

(3)影响开发效率

(4)应用可靠性低

(5)不利于技术的更新

SOA(面向服务的架构):是把应用中相近的功能聚合到一起,以服务的形式提供出去,一批服务的组合

SOA优点:

(1)把项目拆分成若干个子项目,不同的团队可以负责不同的子项目,从而提高开发效率

(2)把模块拆分,使用接口通信,降低了模块之间的耦合度

(3)为企业的现有资源带来了更好的重用性

(4)能够在最新的和现有的应用之上创建应用

(5)能够使客户或服务消费者免予服务实现的改变所带来的影响

(6)能够升级单个服务或服务消费者而无需重写整个应用,也无需保留已经不再适用于新需求的现有系统

针对单体架构和SOA的问题:通过采用微处理结构模式解决了系统架构中的问题。其思路不是开发一个巨大的单体式的应用,而是将应用分解为小的,互相连接的微服务

1.2 微服务架构是什么

微服务架构:是一种架构风格和架构思想,它倡导我们在传统软件应用架构的基础上,将系统业务按照功能拆分为更加细粒度的服务,所拆分的每一个服务都是一个独立的应用,这些应用对外提高公共的API,可以独立承担对外服务的职责,通过此种思想方式所开发的软件服务实体就是微服务,而围绕着微服务思想构建的一系列体系结构(包括开发,测试,部署等)

微服务和微服务架构区别:

微服务:强调的是服务的大小,它关注的是某一个点

微服务架构:从整体上对软件系统进行全面的考虑

微服务架构优点:

(1)复杂度可控

(2)可独立部署

(3)技术选型灵活

(4)易于容错

(5)易于扩展

(6)功能特定

微服务架构缺点:

(1)开发人员必须处理创建分布式系统的复杂度

(2)部署的复杂性

(3)增加内存消耗

微服务架构与SOA区别:

微服务架构

SOA

一个系统被拆分成多个服务,细粒度

服务由多个子系统组成,粗粒度

团队级,自底向上展实施

企业级,自顶向下开展实施

无集中式总线,松散的服务架构

企业服务总线,集中式的服务架构

集成方式简单

集成方式复杂

服务能独立部署

服务相互依赖,无法独立部署

1.3 如何构建微服务架构

微服务架构:

(1)比较适合未来由一定的扩展复杂度,且由很大用户增量预期的应用,例如一些新兴的互联网公司应用

(2)对于那些项目规模较大,业务复杂度较高,且需要长期跟进的项目,也适合考虑使用微服务架构

对于微服务的拆分建议:

(1)通过业务功能分解并定义与业务功能相对应的服务

(2)将域驱动设计分解为多个子域

(3)按照动词或用例分解,并定义负责特定操作的服务,例如一个负责完成订单的航运服务

(4)通过定义一个对给定类型的实体或资源的所有操作负责的服务来分解名词或资源,例如一个负责管理用户账户的账户服务

微服务架构的组件:

(1)服务注册中心:注册系统中所有服务的地方

(2)服务注册:服务提供方将自己调用地址注册到服务注册中心,让服务调用方能够方便地找到自己

(3)服务发现:服务调用方从服务注册中心找到自己需要调用服务的地址

(4)负载均衡:服务提供方一般以多实例的形式提供服务,使用负载均衡能够让服务调用方连接到合适的服务节点

(5)服务容错:通过断路器(熔断器)等一系列的服务保护机制,保证服务调用者在调用异常服务时快速地返回结果,避免大量的同步等待

(6)服务网关:称为API网关。是服务调用的唯一入口,可以在这个组件中实现用户鉴权,动态路由,灰度发布,负载限流等功能

(7)分布式配置中心:将本地化的配置信息注册到配置中心,实现程序包在开发,测试生产环境的无差别性,方便程序包的迁移

微服务架构需要满足的要求:

(1)根据业务模块划分服务种类

(2)每个服务可独立部署且相互隔离

(3)通过轻量级API调用服务

(4)服务需保证良好的高可用性

微服务架构的技术选型:

1.微服务实例的开发:微服务的开发可以选用的架构技术有Spring团队的Spring Boot,Jboss公司的WildFly Swarm和Java EE官方的微服务框架KumuluzEE等

2.服务的注册与发现:架构中服务的注册与发现功能,可以使用的技术有Spring Cloud Eureka,Apache Zookeeper,Consul,Etcd和Dubbo等,它们都是用于服务注册和发现技术

3.负载均衡:可以使用的技术有Spring Cloud Ribbon和Dubbo等

4.服务容错:可以选用Hystrix,在Spring Cloud的子项目中包含Spring Cloud Hystrix

5.API网关:可以使用的技术有在Spring Cloud Zuul,Spring Reactor,Netty或NodeJS等

6.分布式配置中心:可以使用Spring Cloud Config

7.调试:可以使用Swagger。Swagger是当前最受欢迎的REST API文档生成工具之一,他提供了强大的页面测试功能来调试每个RESTful API

8.部署:微服务的官方文档中推荐使用Docker来打包和部署微服务。由于Docker是一个开源的应用容器引擎,具有可移植性强,启动速度快等特点,适合跑一些轻量的应用

9.持续集成:为了实现服务的自动化部署,我们可以通过Jenkins搭建自动化部署系统,并使用Docker进行容器化封装