博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
从单体架构到微服务的演变之路
阅读量:7102 次
发布时间:2019-06-28

本文共 1652 字,大约阅读时间需要 5 分钟。

单体架构

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.微服务架构的缺点

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

总结:

  • 随着互联网行业的发展,架构的进化是必然的,当然,微服务并不是终点,以后将会有更多的架构涌现出来,而目地都是为了更好的解决所面临的问题。

转载于:https://www.cnblogs.com/hhzblogs/p/10620849.html

你可能感兴趣的文章
Revit2014机电系统类型BUG
查看>>
android Handler的使用(一)
查看>>
函数指针
查看>>
数学图形之Boy surface
查看>>
linux远程连接
查看>>
最快速的Android开发环境搭建ADT-Bundle及Hello World
查看>>
一分钟制作U盘版BT3 - 有图滴儿 bt3破解教程
查看>>
Objective-C中把数组中字典中的数据转换成URL
查看>>
hdu2196
查看>>
RAD Studio 2010~XE8 官方 ISO 下载地址 (2015-03-28更新)
查看>>
【技巧篇】解决悬浮的<header>、<footer>遮挡内容的处理技巧(转)
查看>>
mysqld: unrecognized service
查看>>
Windows环境下利用github快速配置git环境
查看>>
HTML静态页面传值,HTML静态页面得到url问号后面的参数。
查看>>
WPF学习笔记-用Expression Design制作矢量图然后导出为XAML
查看>>
[裴礼文数学分析中的典型问题与方法习题参考解答]5.1.22
查看>>
Ubuntu下SVN命令行递归加入文件夹文件(免去一个一个的加入 --force)
查看>>
全局变量与全局静态变量的区别
查看>>
Android 5.1 AOSP 源码获取
查看>>
mongodb_命令行
查看>>