随笔分类 -  原理&故事

讲一些理论性的东西,不涉及具体技术。讲一些有趣的故事,让生活更美好!
摘要:本文讨论java集合容器中的几种元素数量获取的方式,命题很小,但是也足以让我们思考一些东西。 所谓计数:即是给出所在容器的元素总数的方式。一般能想到的就是两种方式:一是使用某个字段直接存储该计数值,二是在请求计数值时临时去计算所有元素数量。貌似本文的答案已经出来了。好吧,那我们还是从源码的角度来验证 阅读全文
posted @ 2020-07-05 10:55 阿牛20 阅读(1581) 评论(0) 推荐(0) 编辑
摘要:zuul 作为springCloud 的全家桶组件之一,有着不可或缺的分量。它作为一个普通java API网关,自有网关的好处: 避免将内部信息暴露给外部; 统一服务端应用入口; 为微服务添加额外的安全层; 支持混合通信协议; 降低构建微服务的复杂性; 微服务模拟与虚拟化; zuul 基本上已经被s 阅读全文
posted @ 2020-06-07 22:01 阿牛20 阅读(1654) 评论(0) 推荐(1) 编辑
摘要:我们现在用得非常多互联网下载文件,非常直观。有一个下载按钮,然后我点击了下载,然后文件慢慢就下载到本地了。就好像是一个复制的过程。 而既然是互联网,那么必然会是使用网络进行传输的。那么到底是怎样传输的呢? 当然,下载文件有两种方式:一是直接针对某个文件资源进行下载,无需应用开发代码;二是应用代码临时 阅读全文
posted @ 2020-05-19 12:18 阿牛20 阅读(17998) 评论(0) 推荐(2) 编辑
摘要:本文所说的session是单机版本的session, 事实上在当前的互联网实践中已经不太存在这种定义了。我们主要讨论的是其安全共享的实现,只从理论上来讨论,不必太过在意实用性问题。 1. session 的意义简说 大概就是一个会话的的定义,客户端有cookie记录,服务端session定义。用于确 阅读全文
posted @ 2020-05-16 22:16 阿牛20 阅读(1110) 评论(1) 推荐(0) 编辑
摘要:上篇我们讲了Dubbo中有一个非常本质和重要的功能,那就是服务的自动注册与发现,而这个功能是通过注册中心来实现的。上篇中使用zookeeper实现了注册中心的功能,同时了提了dubbo中有其他许多的注册中心的实现。 今天我们就来看看另一个注册中心的实现吧: redis 。 1. dubbo在 Red 阅读全文
posted @ 2020-05-08 18:01 阿牛20 阅读(5687) 评论(0) 推荐(1) 编辑
摘要:Dubbo中有一个非常本质和重要的功能,那就是服务的自动注册与发现,而这个功能是通过注册中心来实现的。而dubbo中考虑了外部许多的注册组件的实现,zk,redis,etcd,consul,eureka... 各自实现方式各有不同,但是对外表现都是一致的:都实现了 Registry 接口! 今天我们 阅读全文
posted @ 2020-05-05 17:37 阿牛20 阅读(1846) 评论(0) 推荐(1) 编辑
摘要:前两篇中,我们看到了dubbo在负载均衡和服务路由方面的实现,它为集群功能提供了必要的功能。 今天我们再来看另一个集群组件的实现:集群容错。 1. dubbo 集群容错简介 为了避免单点故障,现在的应用通常至少会部署在两台服务器上。对于一些负载比较高的服务,会部署更多的服务器。对于服务消费者来说,同 阅读全文
posted @ 2020-05-02 20:49 阿牛20 阅读(1961) 评论(0) 推荐(1) 编辑
摘要:上一篇中,我们介绍了dubbo的负载均衡实现,见识了几种常用的负载均衡算法。就单个功能而言,似乎dubbo并没有太多的突出之处。事实上,一个成功的产品不必每个地方都要打破常规。更重要的是其全局优化的架构设计,以及如何使用现有的优秀解决方案为己服务。 本篇将介绍另一种集群环境中的高可用实现:路由服务的 阅读全文
posted @ 2020-05-01 17:20 阿牛20 阅读(2689) 评论(0) 推荐(0) 编辑
摘要:dubbo作为分布式远程调用框架,要保证的点很多,比如:服务注册与发现、故障转移、高性能通信、负载均衡等等! 负载均衡的目的是为了特定场景下,能够将请求合理地平分到各服务实例上,以便发挥所有机器的叠加作用。主要考虑的点如:不要分配请求到挂掉的机器,性能越好的机器可以分配更多的请求。。。 一般负载均衡 阅读全文
posted @ 2020-04-19 22:10 阿牛20 阅读(4159) 评论(0) 推荐(2) 编辑
摘要:nginx作为高效的http服务器和反向代理服务器,值得我们深入了解。 我们带着几个问题,深入了解下nginx的工作原理。首先是开篇:nginx是如何启动的? nginx是用c写的软件,github地址: https://github.com/nginx/nginx 其目录结构如下,我们主要关注 s 阅读全文
posted @ 2020-04-06 16:26 阿牛20 阅读(1745) 评论(0) 推荐(0) 编辑
摘要:请求转发一般的原因为: 1. 该请求自身无法处理,需要转发给对应的服务器处理; 2. 为实现负载均衡,使用路由服务,选择目标实例进行转发; 在集群模式下,请求可以打到任何一台redis服务器上。然而并不是所有的服务器都会处理真正的请求,而是只有符合redis slot规则的实例才会处理真正的请求; 阅读全文
posted @ 2020-03-22 16:38 阿牛20 阅读(2962) 评论(0) 推荐(0) 编辑
摘要:JDBC 是java中的一个数据连接技术,它提供了统一的 API 允许用户访问任何形式的表格数据,尤其是存储在关系数据库中的数据。 虽然目前JDBC已经基本被隐藏在了许多数据库框架之后,但是其底层原理从未变过。所以,多一点了解JDBC还是有意义的。 JDBC 之所以能提供统一的API,是基于对所有数 阅读全文
posted @ 2020-03-11 11:08 阿牛20 阅读(4909) 评论(0) 推荐(2) 编辑
摘要:业务最初的应用场景中,我们也许使用单机redis就可以应付业务要求,但并非一直可行。 比如单机的读写能力问题,单机的可用性问题,单机的数据安全性问题。这些都是许多互联网应用经常会遇到的问题,也基本上都有一套理论去解决它,只是百花齐放。 哨兵是Redis中解决高可用问题的解决方案之一,我们就一起来看看 阅读全文
posted @ 2020-03-08 19:35 阿牛20 阅读(2396) 评论(0) 推荐(0) 编辑
摘要:谈到发布订阅模式,相信不会陌生,典型的观察者模式的实现。然而从表面来看,本地实现一个wait/notify通知、register/update调用, 实现一个远程mq服务, 还有本文说的 pub/sub, 其实道理都差不多。只是,同样的需求,针对不同的环境,实现上往往是有天壤之别的。 所以,我们就来 阅读全文
posted @ 2020-02-23 15:09 阿牛20 阅读(2256) 评论(0) 推荐(0) 编辑
摘要:前面几篇文章,我们完全领略了redis的string,hash,list,set数据类型的实现方法,相信对redis已经不再神秘。 本篇我们将介绍redis的最后一种数据类型: zset 的相关实现。 本篇过后,我们对redis的各种基础功能,应该不会再有疑惑。有可能的话,我们后续将会对redis的 阅读全文
posted @ 2020-02-02 22:08 阿牛20 阅读(3997) 评论(0) 推荐(0) 编辑
摘要:上两篇我们讲了hash和list数据类型相关的主要实现方法,同时加上前面对框架服务和string相关的功能介绍,已揭开了大部分redis的实用面纱。 现在还剩下两种数据类型: set, zset. 本篇咱们继续来看redis中的数据类型的实现: set 相关操作实现。 研究过jdk的hashmap和 阅读全文
posted @ 2020-02-01 09:32 阿牛20 阅读(1439) 评论(0) 推荐(0) 编辑
摘要:上一篇讲了hash数据类型的相关实现方法,没有茅塞顿开也至少知道redis如何搞事情的了吧。 本篇咱们继续来看redis中的数据类型的实现: list 相关操作实现。 同样,我们以使用者的角度,开始理解list提供的功能,相应的数据结构承载,再到具体实现,以这样一个思路来理解redis之list。 阅读全文
posted @ 2020-01-29 13:40 阿牛20 阅读(3002) 评论(0) 推荐(1) 编辑
摘要:上一篇文章从根本上理解了set/get的处理过程,相当于理解了 增、改、查的过程,现在就差一个删了。本篇我们来看一下删除过程。 对于客户端来说,删除操作无需区分何种数据类型,只管进行 del 操作即可。 零、删除命令 del 的定义 主要有两个: del/unlink, 差别是 unlink 速度会 阅读全文
posted @ 2020-01-23 21:24 阿牛20 阅读(2922) 评论(0) 推荐(0) 编辑
摘要:经过前两篇的介绍,我们对整个redis的动作流程已经有比较清晰的认识。 接下来就是到具体的命令处理方式的理解了,想来我们用这些工具的意义也是在此。虽然没有人觉得,一个set/get方法会有难度,但是我们毕竟不是很清楚,否则也不至于在谈到深处就懵逼了。 我觉得本文的一个重要意义就是: 让set/get 阅读全文
posted @ 2020-01-22 17:37 阿牛20 阅读(2946) 评论(0) 推荐(0) 编辑
摘要:上一篇文章,我们从框架层面,主要介绍了redis的启动过程,以及主要的命令处理流程逻辑。这些更多的都是些差不多的道理,而要细了解redis,则需要更细节的东西。 今天我们稍微内围的角度,来看看几个命令执行的重要方法,深入理解下redis的魅力所在。 首先,我们通过上一章知道,processComma 阅读全文
posted @ 2020-01-20 18:51 阿牛20 阅读(750) 评论(0) 推荐(0) 编辑