首页
精选文章RPC查看全文RPC是远程调用协议的简称,在分布式系统下,RPC是一个基础组件。不同于传统的Http调用或者SOA调用,RPC通过本地的stub,虽然调用远程的服务端,但是从调用方式来看,更像本地方法调用。RPC框架包括的组件如下: RPC本质上仍然是远程调用,所以其包括socket通信组件,socket通信一般采用epoll机制实现,socket传输的是将参数序列化之后的数据。 PRC分为client端和server端,server端处理用户发起的请求,client作为请求发起端。 Stub作为RPC调用的重要组成部分,是RPC调用可以用类似本地方法调用的关键,比如客户端Stub实现了Client调用的接口,接口的实现就是socket调用远程服务端。 RPC调用的地址是通过注册中心寻址的,服务端启动的时候把服务提供的地址,IP+port存储到配置中心,客户端调用之前,会首先从配置中心获取服务端地址列表,然后通过负载均衡机制选举其中一个地址进行调用。 注册中心 RPC服务的注册中心主要提供名字服务,类似于DNS系统,在注册中心注册服务之后,客户端可以通过命名获取这些服务的地址信息,进行通信。 所以注册中心既需要和服务端通信,也需要和客户端通信,服务端将自己的地址信息注册到地方的服务名字上(服务注册),注册中心进行进行相关信息的存储,客户端一般定期拉取服务的地址列表(服务发现)。 除了服务注册以及服务发现之外,注册中心一般还提供服务探活,服务剔除,服务权重等功能。 注册中心常用的实现方式有zookeeper,eureka、consul、Nacos等。 负载均衡 RPC框架的负载均衡机制一般是轮询、Hash、随机以及权重…Percolator查看全文Percolator算法是Google发明的一种分布式事务处理算法,用于在大规模数据存储系统中实现实时更新和查询,具有高可用性和高性能的特点。Percolator算法的核心思想是将大规模数据集合拆分成多个子集,每个子集被存储在不同的节点上,每个节点只负责处理自己所拥有的数据子集,然后使用两阶段提交协议来保证所有节点的数据一致性。具体来说,Percolator算法分为两个阶段: 1.写阶段(Write Phase):客户端向Percolator系统提交一个事务请求,系统先在一个全局性的写缓存(Write Buffer)中记录该请求,然后将该请求转发到对应的数据分片节点上去处理。 2.提交阶段(Commit Phase):在所有分片节点上处理完毕之后,将写缓存中记录的所有写操作和其它数据变更操作通过Gossip协议(一种点对点信息交换协议)进行广播,以通知其它节点更新自己的本地数据副本。每个节点根据全局的日志来进行操作,并通过Paxos算法(一种分布式一致性算法)来保证数据一致性。如果所有节点都执行成功,则事务提交成功,否则回滚操作。 Percolator算法的优点在于其高效的事务处理方式和高可用性。相比传统的分布式事务处理方式,Percolator算法将大事务拆分成小事务进行处理,可以避免数据争用和死锁等问题,同时也具有高扩展性和高可用性的特点。 Percolator算法目前已经应用于Google的多个大型数据存储系统中,例如Google搜索、Google+、Google AdWords等。 Percolator的实现使用了Bigtable和Timestamp Oracle。其中Bigtable主要用于数据以及事务信息的存储…SPI【Java】查看全文SPI是Java语言中的一种扩展机制。面向的对象的设计里,基于接口编程是模块之间交互的标准方式,模块之间使用接口而不是特定的实现类可以更好的实现扩展型。在模块进行装配的时候才确定接口的真正类型。 为了避免模块装配时硬编码指定实现类,java spi提供了到接口实现的路由功能,将装配的控制权移到了程序之外,使用配置来进行实现。 SPI全称是 service provider interface,SPI的实现一般位于独立的 JAR 包,在程序调用时候,可以实现自动的路由。 在jdk6里面引进了新的特性ServiceLoader。ServiceLoader的主要作用是用来装载一系列的service provider。 ServiceLoader可以通过配置文件来装载指定的service provider。服务的提供者提供了服务接口的若干实现,只需要在jar包的META-INF/services/目录创建一个以服务接口命名的文件,文件配置了实现该服务接口的具体实现类。 外部程序装配模块的时候,通过该jar包META-INF/services/里的配置文件找到具体的实现类名,并装载实例化,完成模块的注入。 SLF4J SLF4J(Simple logging Facade for Java)不是一个真正的日志实现,而是一个日志的抽象层( abstraction layer),该框架允许在实际使用的时候装配任意一个实现了抽象层的日志类库。 使用 SLF4J 的过程中上层应用只需要面向SLF4J接口编程,不需要关心具体的底层的日志框架,实现了上层应用和底层日志框架的解耦。 目前主流的日志框架例如log4j, logback都实现了… |
热门分类开源Golang消息队列JavaJavascriptLinuxMysqlNLPPHP事务内存管理分布式理论分类存储常用存储开源软件操作系统画图网络编程数据库算法虚拟化前端存储理论常用算法微服务数据结构算法应用计算机原理中间件共识算法分布式分治动态规划容器并发排序架构组件绘图工具网络协议编程语言理论算法思想树缓存架构C++字符串算法工程思想搜索
算法题库
精选内容 |