在分布式系统中,排他性的资源访问方式,就叫做分布式互斥(Distributed Mutual Exclusion),而这种被互斥访问的共享资源,就叫做临界资源
分布式系统中解决分布式互斥主要有以下几种方式
集中式算法/中央服务器算法 我们引入一个协调者程序,得到一个分布式互斥算法。每个程序在需要访问临界资源时,先给协调者发送一个请求。 如果当前没有程序使用这个资源,协调者直接授权请求程序访问;否则,按照先来后到的顺序为请求程序“排一个号”。 如果有程序使用完资源,则通知协调者,协调者从“排号”的队列里取出排在最前面的请求,并给它发送授权消息。 拿到授权消息的程序,可以直接去访问临界资源。
集中式算法示意图:
如上图所示,协调者程序根 …
gRPC概述 概览
gRPC是Google开发并开源的一套语言中立的RPC框架
特点
语言中立 基于IDL文件定义服务,通过proto3工具生成指定语言的数据结构,服务端接口以及客户端Stub 通信协议基于标准的HTTP/2设计,支持双向流,消息头压缩,单TCP的多路复用,服务端推送等特性,可以在移动端设备上更加省电和节省流量 序列化支持Protocol Buffer 和JSON协议,该协议是一种语言无关的高性能序列化框架 服务端创建流程 gRPC服务端java版本的实现使用了Build模式,对底层服务绑定,transportServer和NettyServer的创建和实例化都做了封装和屏蔽,让服务调用者不用关心gRPC的调用细节
…
server 学习 服务注册: 在进行rpc方法调用前,需要先进行方法注册
func (server *Server) register(rcvr interface{}, name string, useName bool) error { //整个工作就是构造service对象,填充属性 //最后调用`sync.Map.LoadOrStore(sname,s)`方法完成服务注册 s := new(service) s.typ = reflect.TypeOf(rcvr) s.rcvr = reflect.ValueOf(rcvr) sname := reflect.Indirect(s.rcvr).Type().Name() …
RPC原理解析 简介: RPC 的全称是 Remote Procedure Call,即远程过程调用
具有以下作用:
屏蔽远程调用跟本地调用的区别,让我们感觉就是调用项目内的方法; 隐藏底层网络通信的复杂性,让我们更专注于业务逻辑。 TIPs:
使用rpc的场景是否合适, 什么是否需要开启压缩,根据配置,根据部署机器配置,根据网络环境,根据传输数据大小 调用过程超时处理,以及失败重试机制,例如dubbo的failfast,failover等 服务集群注意点 服务注册,发现,服务注册中心 服务治理,服务分组,服务别名,服务限流,服务降级,服务调用链,链路跟踪 服务监控,调用链监控,方法监控,数据指标监控(TPS,调用量,可用率,调用返 …