0.单体架构
1.优点
- 小项目开发快 成本低
- 架构简单
- 易于测试
- 易于部署
2.缺点
- 大项目模块耦合严重,不易开发,维护,沟通成本高
- 新增业务困难
- 核心业务与边缘业务混合在一块,出现问题互相影响
1.垂直架构
根据业务把项目垂直切割成多个项目,因此这种架构称之为垂直架构。
1.垂直架构的优点
- 系统拆分实现了流量分担,解决了并发问题
- 可以针对不同的模块进行优化
- 方便水平扩展,负载均衡,容错率提高
- 系统间相互独立,互不影响,新的业务迭代时更加高效
2.垂直架构的缺点
- 服务之间相互调用,如果某个服务的端口或者IP地址发生改变。调用的系统得手动变化
- 搭建集群之后,实现负载均衡比较复杂。比如:内网负载,在迁移得时候会影响调用方的路由,导致线上故障
- 服务之间调用方式不统一,基于httpclient,webservice,接口协议不统一
- 服务监控不到位
2.分布式架构(SOA)
分层:按照业务性质分层,每一层要求简单和容易维护
- 应用层(展示层):距离用户最近的一层也称为接入层,可以使用Tomcat作为web容器。接受用户请求,使用下游的dubbo提供的接口来返回数据,并且该层禁止访问数据库
- 业务服务层:根据具体的业务场景演变而来的模块,比如简历投递,职位搜书,职位推荐等
- 基础业务层:业务的核心
- 基础服务层:这一层 是与业务无关的模块 是一些通用的服务,这类服务的特点:请求量大 逻辑简单 特性明显 功能独立
- 存储层:不同的存储类型 Mysql Mongodb ES fastDFS
分级:按照业务性质分层,同一层的业务也要做好分级,依据业务的重要性进行分级,按照二八定律,网站80%的流量都在核心功能上面,要优先保证核心业务的稳定。
隔离:不同性质、不同重要性的的做好隔离,包括业务,缓存,DB,中间件都要做好隔离,比如核心业务的数据库要和活动相关的数据库隔离
调用:总体上调用是单向,可以是跨层调用,但不能逆向调用
SOA优点:
- 服务以接口为粒度,为开发者屏蔽远程调用底层细节,使用Dubbo面向接口远程方法调用,屏蔽了底层调用细节
- 业务分层以后架构更多清晰,并且每个业务模块职责单一,扩展性更强
- 数据隔离,权限回收,数据访问都通过接口,让系统更加稳定,安全
- 服务应用本身无状态化,这里的无状态化指的是应用本身不做内存级缓存,而是把数据存入db
- 服务责任易确定,每个服务可以确定责任人,这样更容易保证服务质量和稳定
SOA缺点:
- 粒度控制复杂,如果没有控制号服务的粒度,服务的模块就会越来越多,就会引发超时,分布式事务瓦内特
- 服务接口数量不宜控制,容易引发接口爆炸,所以服务接口建议以业务场景进行单位划分,并对相近的业务做抽象,防止接口爆炸
- 版本升级兼容困难,尽量不要删除方法、字段,枚举类型的新增字段也可能不兼容
- 调用链路长,服务质量不可监控,调用链路变长,下游抖动可能会影响到上游业务,最终形成连锁反应,服务质量不稳定,同时链路的变成使得服务质量的监控变得困难
3.微服务架构的优缺点和应用场景
微服务架构是SOA架构的一种拓展,这种架构模式下它拆分粒度更小,服务更独立,把应用拆分一个个微小的服务。、
微服务的关键在于微小、独立、轻量级通信
3.1微服务优点:微服务架构和微服务
- 微服务很⼩,便于特定业务功能的聚焦 A B C D
- 微服务很⼩,每个微服务都可以被⼀个⼩团队单独实施(开发、测试、部署上线、运维),团队合
- 作⼀定程度解耦,便于实施敏捷开发
- 微服务很⼩,便于重⽤和模块之间的组装
- 微服务很独⽴,那么不同的微服务可以使⽤不同的语⾔开发,松耦合
微服务架构下,我们更容易引⼊新技术 微服务架构下,我们可以更好的实现DevOps 开发运维⼀体化;
3.2微服务缺点:
- 分布式复杂难以管理,当服务量增加,管理越加复杂
- 微服务架构下,分布式链路跟踪难