摘要:在之前的文章中,我们说过,raft节点会在各自的状态里面不断的轮询,监听RPC请求事件。 下面我看下这个方法. hashicorp/raft.go Rpc请求处理 // processRPC is called to handle an incoming RPC request. This must
阅读全文
摘要:到目前为止,不管是哪门语言,应该都已经有一些raft协议的实现了。但是大家的实现也都是根据raft协议论文来的,根据自己的服务形态在细节上有一些差异而已,大体上是一样的,因此今天这里就以golang语言中的raft实现库为例,进行剖析,让大家实际感受下raft的流程。 hashicorp/raft
阅读全文
摘要:gossip 协议(gossip protocol)又称 epidemic 协议(epidemic protocol),是基于流行病传播方式的节点或者进程之间信息交换的协议,在分布式系统中被广泛使用,比如我们可以使用 gossip 协议来确保网络中所有节点的数据一样。 gossip 协议利用一种随机
阅读全文
摘要:安装nginx 因为nginx只有源码包,因此需要我们自己编译安装,另外它依赖一些其他软件,如下所示: [root@qsy22 nginx_pkg]# ll -rw . 1 root root 6209464 Oct 24 12:19 cpp-4.8.5-4.h1.x86_64.rpm -rw .
阅读全文
摘要:前言 ZooKeeper服务器会在本地处理只读请求(exists、getData和getChildren)。假如一个服务器接收到客户端的getData请求,服务器读取该状态信息,并将这些信息返回给客户端。因为服务器会在本地处理请求,所以ZooKeeper在处理以只读请求为主要负载时,性能会很高。我们
阅读全文
摘要:Rabbitmq大体上可以分为两部分(Exchange和MQ),所有发送给RabbitMQ的消息都会先交给Exchange, Exchange的功能类似于路由器,它会根据自身类型(fanout、direct、topic)以及binding信息决定一个消息该被放到哪一个MQ, 而MQ的功能在于暂时存储
阅读全文
摘要:尽管HAProxy非常稳定,但仍然无法规避操作系统故障、主机硬件故障、网络故障甚至断电带来的风险。所以必须对HAProxy实施高可用方案。 下面将介绍利用Keepalived实现的HAProxy热备方案。即两台主机上的两个HAProxy实例同时在线,其中权重较高的实例为MASTER,MASTER出现
阅读全文
摘要:在SpringCloud中,我们最常使用到的负载均衡库就是ribbon。 使用方式,一般是通过自动配置类注入,然后在类中定义负载均衡实例bean @Configuration public class RestTemplateConfig { @Value("${ssl.protocol:TLSv1
阅读全文
摘要:Feign是什么? 简单来说,feign是用在微服务中,各个微服务间的调用。它是通过声明式的方式来定义接口,而不用实现接口。接口的实现由它通过spring bean的动态注册来实现的。 feign让服务间的调用变得简单,不用各个服务去处理http client相关的逻辑。并且它里面集成了ribbon
阅读全文
摘要:在介绍spring的启动之前,先来说下启动过程中使用到的几个类 基本组件 1、BeanFactory:spring底层容器,定义了最基本的容器功能,注意区分FactoryBean 2、ApplicationContext:扩展于BeanFactory,拥有更丰富的功能。例如:添加事件发布机制、父子级
阅读全文
摘要:Java中的线程池,相信大家都接触过或者使用过,它里面到底是怎么运作的,不知道大家有没有去实际了解过?这篇文章将带领大家去看看它内部结构和实现原理。 继承关系 public class ThreadPoolExecutor extends AbstractExecutorService {} pub
阅读全文
摘要:一、源码解析 对python原生文件打补丁: import eventlet eventlet.monkey_patch() 跟踪进入该模块方法:eventlet.patcher#monkey_patch def monkey_patch(**on): ...... modules_to_patch
阅读全文
摘要:一、概述 wsgi服务启动并监听http请求的流程: 1.利用paste.deploy模块的loadapp函数加载指定服务(如proxy)的配置文件,获取到用户的application,即业务程序 2.调用wsgi.server,其中wsgi.server会绑定IP和端口,监听来自客户端的消息。并由
阅读全文
摘要:普通函数作用域 def outer(): outer_var = "i am is a outer var." def inner(): inner_var = "i am is a inner var." print(outer_var) print(inner_var) if __name__
阅读全文
摘要:大家应该都知道,python有一个GIL(全局解释器锁),用于控制多线程的并发行为。 注:GIL不是必须的,可以通过对每个资源单独加锁的方式去掉GIL,也就是将GIL换成更细粒度的锁。 GIL锁的实现 Linux上的POSIX线程的实现有如下行为: 1、同一个线程多次调用pthread_mutex_
阅读全文
摘要:如果你会用 C,添加新的 Python 内置模块会很简单。以下两件不能用 Python 直接做的事,可以通过 extension modules 来实现:实现新的内置对象类型;调用 C 的库函数和系统调用。 为了支持扩展,Python API(应用程序编程接口)定义了一系列函数、宏和变量,可以访问
阅读全文
摘要:三方库:keystonemiddleware 入口:auth_token/init.py#filter_factory()方法 通过之前的wsgi知识可以知道,消息在中间件中传递的时候是调用的中间件的call方法; 这里是调用了父类BaseAuthProtocol的call方法,然后调用到AuthP
阅读全文
摘要:一、服务的加载及初始化 osapi-karbor 服务启动的过程中,调用 deploy.loadpp 使用 config 方式从 api-paste.ini 文件来 load 名为osapi_karbor 的应用,其入口在文件的 **[composite:osapi_karbor]**部分: [co
阅读全文
摘要:基本所有的openstack服务都依赖 evenlet 完成各种并发任务,它的进程可分为两类: 1、 WSGIService: 接收和处理 http 请求,依赖eventlet.wsgi 的 wsgi server 处理 http 请求,比如nova-api 2、 Service: 接收和处理 rp
阅读全文
摘要:@ComponentScan VS @EnableAutoConfiguration 相同点: 两者都可以将带有@Component,@Service等注解的对象加入到ioc容器中。 不同点: 1.两者虽然都能将带有注解的对象放入ioc容器中,但是它们扫描的范围是不一样的。@ComponentSca
阅读全文
摘要:EnableAutoConfiguration注解 spring的自动配置就是得益于这个EnableAutoConfiguration注解: @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inhe
阅读全文
摘要:改造spring应用为tls模式 我们在使用springboot运行一个应用的时候,默认是http模式的,但是在生产环境中,一般都要求是https模式 具体做法如下: 1、生成证书(这里只是示例,生产环境需要严格通过CA签发) keytool -genkeypair -alias ts_https
阅读全文