# 微服务的概念

# 概述

微服务架构是一种架构思想,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦。它的主要作用是将功能分解到离散的各个服务当中,从而降低系统的耦合性,并提供更加灵活的服务支持。

# 概念

把一个大型的单个应用程序和服务拆分为数个甚至数十个的支持微服务,它可扩展单个组件而不是整个的应用程序堆栈,从而满足服务等级协议。

# 定义

围绕业务领域组件来创建应用,这些应用可独立地进行开发、管理和迭代。在分散的组件中使用云架构和平台式部署、管理和服务功能,使产品交付变得更加简单。

# 本质

用一些功能比较明确、业务比较精练的服务去解决更大、更实际的问题。

备注: 微服务这个概念是 2012 年出现的,作为加快 Web 和移动应用程序开发进程的一种方法,2014 年开始受到各方的关注,同年为微服务的元年;

# 与传统架构的区别

# 系统架构需要遵循的三个标准

  • 提高敏捷性:及时响应业务需求,促进企业发展
  • 提升用户体验:提升用户体验,减少用户流失
  • 降低成本:降低增加产品、客户或业务方案的成本

# 传统的开发模式

先来看看传统的 WEB 开发方式,通过对比比较容易理解什么是 微服务架构。和 微服务 相对应的,这种方式一般被称为 单体式开发(Monolithic)

既所有的功能打包在一个 WAR 包里,基本没有外部依赖(除了容器),部署在一个 JavaEE 容器(Tomcat,JBoss,WebLogic)里,包含了 DO/DAO,Service,UI 等所有逻辑。

# 优点

  • 开发简单,集中式管理
  • 基本不会重复开发
  • 功能都在本地,没有分布式的管理和调用消耗

# 缺点

  • 效率低:开发都在同一个项目改代码,相互等待,冲突不断
  • 维护难:代码功功能耦合在一起,新人不知道何从下手
  • 不灵活:构建时间长,任何小修改都要重构整个项目,耗时
  • 稳定性差:一个微小的问题,都可能导致整个应用挂掉
  • 扩展性不够:无法满足高并发下的业务需求

# 微服务架构

# 目的

有效的拆分应用,实现敏捷开发和部署

# 微服务的特征

# 官方的定义

  • 一系列的独立的服务共同组成系统
  • 单独部署,跑在自己的进程中
  • 每个服务为独立的业务开发
  • 分布式管理
  • 非常强调隔离性

# 大概的标准

  • 分布式服务组成的系统
  • 按照业务,而不是技术来划分组织
  • 做有生命的产品而不是项目
  • 强服务个体和弱通信( Smart endpoints and dumb pipes )
  • 自动化运维( DevOps )
  • 高度容错性
  • 快速演化和迭代