单体架构与分布式架构
- 单体架构:
- 概述:业务中所有的功能都集中在一个项目中进行开发,最后打包成为一个包来进行部署。
- 优点:架构简单,只有一个工程,想实现什么功能向工程里面添加代码就可以了;部署成本低,项目打包后部署到一台服务器即可运行,不用考虑负载均衡等问题
- 缺点:代码耦合度高,各个功能代码间边界模糊,修改代码时牵一线而动全身,难以修改维护和进行功能升级。
- 适用范围:适用于一些小型项目如:学生管理系统等
- 分布式架构:
- 概述:根据业务不同的功能来对系统进行拆分。每一个业务功能模块都作为一个独立的项目来进行开发,称为一个服务。
- 优点:代码耦合度低,每个服务都是一个独立的项目,使用时根据不同的业务调用不同的服务来完成对应功能,且各个服务之间互不影响;有利于服务升级拓展,不同服务进行修改时只会影响到当前服务,对其他服务没有影响。
- 缺点:部署更加复杂,每一个服务都要独立进行部署。
- 适用范围:诸如淘宝、京东等功能模块多,代码量巨大的大型互联网项目开发时的必选方案
什么是微服务
- 概述:微服务是一种经过良好架构设计的
分布式
架构方案, - 特征:
- 单一职责:微服务粒度小,每一个服务都对应唯一的业务。
- 面向服务:微服务对外暴露业务接口,供不同服务之间调用
- 自治:团队独立(一个服务由一个团队开发)、技术独立(不同服务之间可以使用不同的技术)、数据独立(每个服务都可以有自己的数据库)、部署独立(每个服务都是自行部署,相互之间无影响)
- 隔离性强:服务调用需要做好隔离、容错和降级,避免出现A服务出现问题不能正常工作,B服务调用A服务时因为B服务出现的问题导致B服务运行时出现问题从而导致B服务也不能正常工作这种级联错误
- 优点:拆分粒度更小、各个服务之间独立性更高、代码耦合度更低
- 缺点:架构更加复杂,运维、监控、部署的难度也更高
微服务组成
- 服务集群:微服务架构会将单体式架构的系统根据功能模块拆分成一个个的服务,这些服务相互独立进行部署,最后共同构成了服务集群。
- 注册中心:负责拉取和注册服务信息,对服务集群中的错综复杂服务进行管理
- 配置中心:拉取管理服务的配置文件信息
- 网关:用户发送的请求统一由网关进行处理,将不同的请求发送根据负载均衡的策略发送给对应的服务器来完成对应功能;同时对用户身份进行校验,如果用户没有权限(非法)执行目标服务,则对请求进行拦截
- 分布式缓存:将一部分数据库信息存放到内存中,减轻数据库压力
- 分布式查询:快速实现海量数据的查找
- 消息队列:实现服务之间的异步通信
- 分布式日志服务:记录服务运行过程中产生的各种日志,并生成统计报表
- 系统监控链路追踪:可以监控系统运行过程中每一个节点的运行状态
服务拆分注意事项
- 不同的微服务,不能重复开发相同的业务。如:A服务开发了商品查询的功能,B服务就不能重复开发商品查询的功能,否则将A服务与B服务拆分开就显得毫无意义
- 微服务之间数据应该独立,每个微服务都不能对其他微服务的数据进行访问,以此来从根源上杜绝不同微服务重复开发相同的业务,降低代码耦合。
- 微服务应该将自己的业务暴露为接口,供其他微服务嗲用。如:A服务想要完成一个业务,但在实现过程中需要进行商品查询,但B已经完成过商品查询的功能,此时A不能对商品查询功能进行重复开发,但可以调用B暴露出来的完成商品查询功能的接口来完成商品查询的功能。A仅仅调用B提供的接口,具体实现代码由B来完成。