单体架构和微服务架构的分析
Posted _earnest
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单体架构和微服务架构的分析相关的知识,希望对你有一定的参考价值。
单体架构
1.什么是单体架构?
一个归档包(例如war包)包含所有功能的应用程序,我们通常称为单体应用。而架构单体应用的
方法论,就是单体应用架构。
2.单体架构优点
1.架构简单
2.开发、测试、部署方便
3.单体架构缺点
1.复杂性高
2.部署慢,频率低 扩展能力受限。举例:成本计算属于CPU处理密集的模块,内容属于I/O密集模块,需要更大的内存和带宽,无法针对指定模块做业务扩展
3.阻止技术创新,框架无法修改
3.单体架构结构图
微服务架构
1.什么是微服务
微服务"架构"是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用尽量级通信机制(通常用HTTP资源API)。这些服务围绕业务能力构建并且可能通过全自动部署机制独立部署。这些服务共用一个最小型的集中式的管理,服务可用不同的语言开发,使用不同的数据存储技术。
2.微服务特性
1.每个微服务可独立运行在自己的进程里,每个微服务都有自己的tomcat
2.一系列独立运行的微服务共同构建整个系统
3.每个服务为独立的业务开发,一个微服务只关注某个特定的功能,例如订单管理,用户管理。
4.可使用不同的语言和数据存储技术(契合项目情况和团队实力)
5.微服务之间通过轻量级的通信机制进行通信,例如通过REST API机型调用。
6.全自动的部署机制
3.优点
1.单个服务容易开发和维护
2.单个微服务启动快
3.局部修改容易部署
4.技术栈不受限制,比如spring mvc 切换成 Yii
5.按需伸缩,伸缩当前服务的配置不影响整个系统
4.缺点
1.运维成本比较高
2.分布式固有的复杂性,主要是各个微服务间的延时问题
3.重复劳动,比如Model类会在各个微服务重复生成
5.适用场景
1.大型、复杂的项目
2.存在快速迭代的需求
3.单个模块存在CPU处理密集、I/O访问密集的需求
6.不适合的场景
1.业务稳定
2.迭代周期长
7.微服务拆分类型
1.领域驱动设计(Domain Driven Design)
就是在可扩展性方面将复杂多变的业务排除在稳定不变的内核业务之外,从而在多变的环境中找到不变的部分,达到以不变应万变的目标,学习曲线偏高。
2.面向对象(by name./ by verb.)
by name是指面向对象的常量,by verb是指面向对象的行为。
8.拆分维度
1.职责划分,微服务只需关心以内的业务,比如订单相关业务,其他服务都让开
2.通用性划分,如用户中心、消息中心等等,这些都是其他模块必须使用到的
9.拆分粒度
1.良好的满足业务
2.幸福感,业务量不能太大、部署和维护容易
3.增量迭代,各个微服务相对独立,一次迭代只涉及到少量的微服务,发布也是对应的微服务。
4.持续进化,当前的服务是YII2开发,现在改成Spring Boot能平滑切换,还有当前的微服务进行合并和拆解。
10.微服务架构结构图
参考文献: 《面向未来微服务:Spring Cloud Alibaba》大目
Spring Cloud Alibaba - 01漫谈传统架构和微服务架构
文章目录
单体架构 VS 微服务架构
单体架构
简而言之 : war包走天下
我们来分析一下优缺点:
优点:
-
架构简单
-
开发测试部署简单
缺点:
-
随着业务扩展,代码越来越复杂,代码质量参差不齐,开发人员的水平不一,修改每一个小bug都是心惊胆战的
-
由于单体架构,功能复杂,部署慢
-
扩展成本高,根据单体架构图 假设模块A是一个CPU密集型的模块 ,而模块B是一个IO密集模块。单体架构上,无法针对单个功能模块进行扩展,那么就需要替换更牛逼的CPU + 更牛逼的内
存 + 更牛逼的磁盘,这成本… -
阻碍了新技术的发展,升级成本高~
微服务架构
英文:https://martinfowler.com/articles/microservices.html
中文:http://blog.cuicc.com/blog/2015/07/22/microservices
微服务核心就是把传统的单机应用,根据业务将单机应用拆分为一个一个的服务,彻底的解耦,每一个服务都是提供特定的功能,一个服务只做一件事,类似进程,每个服务都能够单独部署,甚至可以拥有自己的数据库。这样的一个一个的小服务就是微服务.
单体应用,非核心业务出现了重大bug导致系统内存溢出,导致整个服务宕机 。拆分之后,只是出问题的模块不可用,系统核心功能并不受影响。
单机架构扩展与微服务扩展
单机架构扩展通常都需要依赖nginx
微服务架构以及扩展可以单独扩展某个模块,无需像单体应用整体扩展。
微服务数据存储可以有自己的数据库
微服务 VS 微服务架构
微服务架构是一个架构风格, 提倡
- 将一个单一应用程序开发为一组小型服务.
- 每个服务运行在自己的进程中
- 服务之间通过轻量级的通信机制(比如http rest api)
- 每个服务都能够独立的部署
- 每个服务甚至可以拥有自己的数据库
微服务以及微服务架构的是二个完全不同的概念。
微服务强调的是服务的大小和对外提供的单一功能,而微服务架构是指把 一个一个的微服务组合管理起来,对外提供一套完整的服务。
微服务的优缺点
优点
- 每个服务足够小 , 足够内聚,代码更加容易理解 , 专注一个业务功能点
- 开发简单,一个服务只干一个事情
- 微服务能够被小团队开发,提高效率
- 按需伸缩
- 前后端分离 ,后端开发人员只要关系后端接口的安全性以及性能
- 一个服务可用拥有自己的数据库,也可以多个服务连接同一个数据库.
- …
缺点
- 增加了运维人员的工作量,以前只要部署一个war包,现在可能需要部署成百上千个jar/war包. 甚至引入docker + k8s
- 服务之间相互调用,增加通信成本
- 数据一致性问题(分布式事物问题)
- 系能监控等,问题定位…
微服务的适用场景
合适
- 大型复杂的项目
- 快速迭代的项目
- 并发高的项目
不合适
- 业务稳定,主要工作修修bug
- 迭代周期长,发版频率低
以上是关于单体架构和微服务架构的分析的主要内容,如果未能解决你的问题,请参考以下文章