微服务架构诞生历程:从单元化架构到SOA架构再到微服务架构的设计详解

926 阅读5分钟

这是我参与8月更文挑战的第21天,活动详情查看:8月更文挑战

单元化架构

什么是单元化

  • 单元化架构师是从并行计算领域发展而来
  • 在分布式架构领域:
    • 一个单元Cell: 满足某个分区所有业务操作的自包含的包装
    • 一个分区Shard: 整体数据集的一个子集. 比如如果是用尾号来划分用户,那么同样尾号的那部分用户就可以认为是一个分区
  • 单元化就是将一个服务设计改造成符合单元特征的过程

单元化的必要性

  • 随着硬件的不断升级,计算机硬件能力已经越来越强,CPU越来越快,内存越来越大,网络越来越宽.这样就有了在单台机器上进行垂直扩展的能力
  • 当遇到一个性能要求和容量增长可以预期的业务,单元化可以有效降低资源的使用,提供更高的性能服务
  • 经过单元化改造,可以只使用一半的机器,获得比原来接近百倍的性能
  • 性能的提升很大部分原因在于服务本地化,而服务的集成部署又进一步降低了资源的使用
  • 单元化除了性能收益,还有更好的隔离性,包括请求隔离和资源隔离.更友好的升级,产品可以灰度发布
  • 单元化改造后可以对高峰的应对以及扩容方式的解决

如何实现单元化

  • 传统的服务架构:
    • 服务是分层的
    • 每一层使用不同的分区算法
    • 每一层都有不同数量的节点
    • 上层节点随机选择下层节点
  • 单元化架构:
    • 服务虽然分层划分,但是每个单元自成一体
    • 所有层次使用相同的分区算法,每一层都有相同数量的节点,上层节点也会访问指定的下层节点 在这里插入图片描述

SOA架构

SOA架构基本概念

  • SOA: Service-Oritented Architecture
    • 面向服务的架构
    • 是一个组件模型
    • 将应用程序的不同功能单元,即服务.通过这些服务之间定义良好的接口和契约联系起来
  • 接口采用中立的方式进行定义的,独立于实现服务的硬件平台,操作系统和编程语言
  • 这样使得构建在各种个样的系统中的服务可以以一种统一和通用的方式进行交互
  • 面向服务架构,可以根据需求通过网络对松散耦合的粗粒度应用组件进行分布式部署,组合和使用
  • 服务层是SOA的基础,可以直接被应用调用,从而有效控制系统中与软件代理交互的人为依赖性

SOA实施基本特征

  • 实施SOA的关键目标是实现企业IT资产的最大化作用.要实现这一目标,就要在实施SOA的过程中牢记以下特征:
    • 可以从企业外部访问
    • 随时可用
    • 粗粒度的服务接口分级
    • 松散耦合
    • 可重用的服务
    • 服务接口设计管理
    • 标准化的服务接口
    • 支持各种消息模式
    • 精确定义各种服务契约 在这里插入图片描述
  • 服务消费者Service Consumer可以通过发送消息来调用服务
  • 这些消息由一个服务总线Service Bus转换后发送给适当的服务实现
  • SOA架构可以提供一个业务规则引擎Business Rules Engine允许业务规则被合并在一个服务或者多个服务里
  • SOA架构也提供了一个服务管理基础Service Management Infrastructure用来管理服务,比如审核,列表和日志等功能
  • SOA架构给企业提供了灵活的业务流程,更好地处理控制请求Regulatory Requirement. 比如Sarbanes Oxley(SOX), 并且可以在不影响其余服务的情况下更改某项服务

微服务架构

传统的Web开发方式

  • 所有的功能打包在一个war包里
  • 除了容器之外,基本没有外部依赖
  • 部署在一个JEE容器里,比如Tomcat, JBossWebLogic
  • 包含了DO或者DAO,Service,UI等所有逻辑 在这里插入图片描述

优点

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

缺点

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

系统架构的标准

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

基于微服务的架构设计

  • 目的: 有效拆分应用,实现敏捷开发和部署 在这里插入图片描述
  • 微服务: 在这里插入图片描述
  • X轴: 运行多个负载均衡器之后的运行实例
  • Y轴: 将应用进一步分解为微服务 - 分库
  • Z轴: 大数据时,将服务分区 - 分表

SOA和微服务的区别

  • SOA偏重重用,微服务偏重重写
  • SOA偏重水平服务,微服务偏重垂直服务
  • SOA偏重自上而下,微服务偏重自下而上