微服务
文章目录
为什么要用微服务
小项目发展到大项目过程中,出于维护、稳定性等考虑,将一个整体项目分为多个微小服务。
为什么说做好微服务很难
要想做好微服务,我们需要理解和掌握的知识点非常多,从几个维度上来说:
基本功能层面
- 并发控制&限流,避免服务被突发流量击垮
- 服务注册与服务发现,确保能够动态侦测增减的节点
- 负载均衡,需要根据节点承受能力分发流量
- 超时控制,避免对已超时请求做无用功
- 熔断设计,快速失败,保障故障节点的恢复能力
高阶功能层面
- 请求认证,确保每个用户只能访问自己的数据
- 链路追踪,用于理解整个系统和快速定位特定请求的问题
- 日志,用于数据收集和问题定位
- 可观测性,没有度量就没有优化
微服务系统如何拆分
- 先粗后细,切忌过细,切忌一个请求一个服务
- 横向拆分,而非纵向,我们一般不会超过三层
- 单向调用,严禁循环调用
- 禁止接口类型透传,如 model 层的一个结构体,三个微服务都用到了,这样会导致代码耦合
- 没有依赖关系的串行调用改为并行调用
微服务网关
微服务网关的作用是在用户第一个网关服务器,你按照业务服务相关需求,给网关分流,相比云主机厂商提供的负载均衡器,强大在于你可以根据自己业务去分流,同时还以可以实现鉴权、校验、聚合、缓存等自定义服务,而云主机的负载均衡器只是一个简单按照流量给你负载均衡请求,不具有自定义编程性质。
简单实现流程:
- 启动一个微服务网关,用于注册和发现服务,提供统一的对外域名和端口,如 127.0.0.1:80
- 将大项目拆分成多个微小服务,如商城订单服务、商城商品服务,每个服务对应 『不同域名』或『相同域名不同端口』,如 127.0.0.1:81 和 127.0.0.1:82
- 前端调用后端接口时,直接请求微服务网关(如 127.0.0.1:80),然后微服务网关再根据路由归属,将请求转发到对应微服务模块的 域名+端口 下
- 最后前端的请求会在对应微服务模块下处理后,将响应结果转发到微服务网关,再由微服务网关返回响应结果给前端
如果不用微服务网关,则另有两种选择:
- 选择一: 不同的服务,使用不同的域名访问 (前端需要对接多个域名)
- 选择二: 不同的服务使用不同的路由前缀,使用 nginx 来定向 (前端需要改很多个接口)
微服务的事务处理怎么实现好
- 2PC,两阶段提交
- TCC,Try-Confirm-Cancel
- 消息队列,最大尝试
- 人工补偿