单体架构
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》大目