现主流前后端分离多数为:
前端:Vue/Angular/React
中间件:Nodejs
后端:Java/Go
前后端交互基于Nodejs作为中间层,不再直接进行交互。
SpringBoot
SpringCloud
RPC:Remote Procedure Call 远程过程调用。RPC被用来作为远程调用的框架,主要用于公司内部服务直接的互相调用,具有性能消耗低、传输效率高、服务治理方便等特点。
HTTP:RPC底层协议可以像HTTP一样基于TCP协议,也可以直接基于HTTP协议。HTTP主要用于对外的异构环境。
RPC框架需要三个角色:
场景:
人民群众有事拨打110电话,110指挥中心根据沟通获取人民群众的位置,派出就近的民警前往现场。
如上这就是一个RPC框架的场景,
人民群众就是 服务调用方,需要就近的民警出警;
110指挥中心就是 服务注册与发现的中心,对各地警力具有实时的掌握以及调度权限;
就近民警就是 服务提供方,能够及时的为人民群众排忧解难。
服务提供方在启动后需要向 服务注册与发现中心注册当前服务IP、端口、服务列表等信息;服务调用方在需要调用时向 服务注册与发现中心获取当前可提供服务的ip、端口、服务接口等信息,通过HTTP等协议进行通信。
Dubbo
https://segmentfault.com/a/1190000042674690
Spring Cloud
SpringCloud有五大核心组件,基于这五大组件构成了分布式微服务架构的解决方案。
https://blog.csdn.net/qq_36986510/article/details/127324912
REST:Representational State Transfer,表象状态转移。
RESTful是一种架构的规范与约束,目的是:统一接口。
REST要求,必须通过统一的接口来对资源执行各种操作。对于每个资源只能执行一组有限的操作。
满足:标准化、兼容性、抽象性、简单性、高性能。
接口幂等性:指调用某个接口1次或者n次,对访问资源产生的影响的结果都是一样的。
接口符合幂等性可以降低系统实现的复杂性,并能够保证资源状态的一致性。
CAP定理
分布式系统最多只能满足CAP理论中的2项
BASE理论
是对CAP理论的延伸,核心思想是:无法满足强一致性,也可以采用适合的方式达到最终一致性。
按架构区分:单体架构、分布式架构
单体架构
单体架构的数据一致性可以通过同一个数据库事务进行处理,数据库事务能够保证全部成功或全部回退。
分布式架构
分布式架构下,已无法满足 同一个数据库事务的前提,此时 分布式事务是解决分布式架构下数据一致性的方案。
现如今分布式事务有多种实现方案:2PC、3PC、TCC、本地消息表等解决方案,具体方案参考:Java面试题-分布式事务
常见TCC实现最终一致性:
TCC:Try-Confirm-Cancel ,两阶段提交的变种;先尝试执行业务,执行成功则更新成功状态;执行失败则更新失败状态。
Try:尝试联通服务并冻结所需要的资源。
Confirm:所有的Try都可行,则执行Confirm逻辑。
Cancel:当有服务宕机或资源无法满足冻结,则执行Cancel逻辑。
微服务的目的就是:有效拆分应用,实现敏捷开发和独立部署。
现在大数据时代下,PC、手机都能够发起请求,此时微服务对于一个系统而言,能够极大的降低系统的耦合度,适用于任何一个分布式系统。
SOA:面向服务的架构,在这种架构中,所有功能都定义为独立的服务,这些服务带有定义明确的可调用接口,能够以定义好的顺序调用这些服务来形成业务流程。
这两其实是差不多的,SOA关注的是服务重用,微服务在SOA的基础上,也关注业务划分。
纵向拆分:基于业务逻辑拆分,根据不同业务进行服务拆分。
横向拆分:从公共且功能独立的维度进行拆分。
根据业务场景进行实际分析;对于没有强一致性要求的业务和强一致性要求的业务对数据库的要求是不一样的。
微服务如何进行数据库管理
一般情况下,每个微服务之间是独立的,如果某个服务宕机,只会影响到当前服务,而不会对整个业务系统产生影响。但是,服务端可能会在多个微服务之间产生一条链式调用,并把整合后的信息返回给客户端。在调用过程中,如果某个服务宕机或者网络不稳定可能造成整个请求失败。
因此,为了应对微服务的链式调用异常,我们需要在设计微服务调用链时不宜过长,以免客户端长时间等待,以及中间环节出现错误造成整个请求失败。
此外,可以考虑使用消息队列进行业务解耦,并且使用缓存避免微服务的链式调用从而提高该接口的可用性。
在微服务复杂的链式调用中,我们会比单体架构更难以追踪与定位问题。因此,在设计的时候,需要特别注意。
一种比较好的方案是,当 RESTful API 接口出现非 2xx 的 HTTP 错误码响应时,采用全局的异常结构响应信息。
微服务安全