• 从单体架构到微服务的演变之路


    单体架构

    1.描述:

    • 一个包含了应用所有功能的应用程序,我们通常称之为 单体架构 。这是一种传统的架构风格,比如经典三层架构(UI,BLL,DAL)就是一个单体架构

    2.示例图:

    3.单体架构的特点:

    • 所有功能都集中在一个项目中。
    • 所有的功能打成一个war包部署到服务器。
    • 应用与数据库分开部署
    • 通过集群来提高服务器性能
    • 技术栈受到限制

    war包是一个可以直接运行的web模块,通常用于网站,打成包部署到容器中

    4.单体架构的优点

    • 单体架构简单,前期开发成本低,周期短,小型项目首选

    5.单体架构的缺点

    • 全部功能集中在一个项目中,随着项目的变大,变的不易开发,扩展,维护
    • 提高服务器性能只能扩展集群节点,成本太高

    垂直架构

    1.描述

    • 访问量逐渐增大,单体架构单加集群节点带来服务器性能越来越小时,我们通常将应用拆成互不相干的几个应用,这就称之为 垂直架构

    2.示例图

    3.垂直架构的特点

    • 以单体架构规模的项目为单位进行垂直划分项目,即将一个大项目拆分成一个一个单体结构项目。
    • 项目与项目之间的存在数据冗余,耦合性较大,比如上图中三个项目都存在客户信息。
    • 项目之间的接口多为数据同步功能,如:数据库之间的数据库,通过网络接口进行数据库同步。

    4.垂直架构的优点

    • 项目架构简单,前期开发成本低,周期短,小型项目的首选。
    • 通过垂直拆分,原来的单体项目不至于无限扩大。
    • 不同的项目可采用不同的技术。

    5.垂直架构的缺点

    • 复杂应用的开发维护成本变高,部署效率逐渐降低。因为随着业务功能的不断膨胀,代码全量编译和部署一次所需的时间非常长。
    • 团队协作效率差,部分公共功能重复开发,代码重复率居高不下。
    • 系统可靠性变差。垂直架构将所有的应用模块都部署到一个进程中,如果某个应用接口发生故障,例如内存泄漏,会导致整个节点宕机。

    SOA架构

    1.描述

    • SOA是 Service-Oriented Architecture 英文的缩写,也就是 面向服务的架构 。

    2.示例图

    3.SOA架构的特点

    • 基于SOA的架构思想将重复公用的功能抽取为组件,以服务的方式给各各系统提供服务。
    • 各个项目(系统)与服务之间采用webservice、rpc等方式进行通信。
    • ESB(企业服务总线)作为项目与服务之间通信的桥梁。

    4.SOA架构的优点

    • 将重复的功能抽取为服务,提高开发效率,提高系统的可重用性、可维护性。
    • 可以针对不同服务的特点制定集群及优化方案。
    • 采用ESB减少系统中的接口耦合。

    5.SOA架构的缺点

    • 系统与服务的界限模糊,不利于开发及维护。
    • 虽然使用了ESB,但是服务的接口协议不固定,种类繁多,不利于系统维护。
    • 抽取的服务的粒度过大,系统与服务之间耦合性高。

    微服务架构

    1.描述

    • 微服务架构 风格的开发方法,是以开发一组小型服务的方式来开发一个独立的应用系统的。其中每个小型服务都运行在自己的进程中,并经常采用HTTP资源API轻量的机制来相互通信。

    2.示例图

    3.微服务架构的特点

    • 将系统服务层完全独立出来,并将服务层抽取为一个一个的微服务。
    • 微服务遵循单一原则(一个服务做一件事)。
    • 微服务之间采用RESTful等轻量协议传输。

    4.微服务架构的优点

    • 服务拆分粒度更细,有利于资源重复利用,提高开发效率。
    • 可以更加精准的制定每个服务的优化方案,提高系统可维护性。
    • 微服务架构采用去中心化思想,服务之间采用RESTful等轻量协议通信,相比ESB更轻量。
    • 适用于互联网时代,产品迭代周期更短。
    • 单个微服务启动较快
    • 技术栈不受限

    5.微服务架构的缺点

    • 微服务过多,服务治理成本高,不利于系统维护。
    • 分布式系统开发的技术成本高(容错、分布式事务等),对团队挑战大。

    总结:

    • 随着互联网行业的发展,架构的进化是必然的,当然,微服务并不是终点,以后将会有更多的架构涌现出来,而目地都是为了更好的解决所面临的问题。
  • 相关阅读:
    Maven中使用描述文件切换环境配置
    整合MyBatis到Spring中实现Dao层自动装配
    使用MyBatis搭建项目时报 java.io.IOException: Could not find resource
    数据库CPU占用高排查
    JS 根据时区获取时间
    国外服务器 winserver2012 安装IIS后,安装urlrewrite模块总是自动停止应用程序池
    sql中char(9) char(10) char(13)
    通过 Microsoft.Ace.OLEDB 接口导入 EXCEL 到SQLSERVER
    SDL 当前连接查询脚本
    C# System.Drawing.Graphics 画图后,如何保存一个低质量的图片,一个占用空间较小的图片
  • 原文地址:https://www.cnblogs.com/hhzblogs/p/10620849.html
Copyright © 2020-2023  润新知