随笔分类 -  原理&故事

讲一些理论性的东西,不涉及具体技术。讲一些有趣的故事,让生活更美好!
摘要:redis是用c语言的写的缓存服务器,有高性能和多种数据类型支持的特性,广受互联网公司喜爱。 我们要分析其启动过程,首先就要先找到其入口。 当然我们应该是要先分析 Makefile 文件,然后找到最终编译成的文件,然后再顺势找到C语言入口 main(); 这里咱们就不费那事了,一是这事很枯燥,二是我 阅读全文
posted @ 2020-01-13 16:19 阿牛20 阅读(1585) 评论(0) 推荐(2) 编辑
摘要:分布式应用,会存在各种问题。而要解决这些难题,除了要应用自己做一些监控埋点外,还应该有一些外围的系统进行主动探测,主动发现。 APM工具就是干这活的,SkyWalking 是国人开源的一款优秀的APM应用,已成为apache的顶级项目。 今天我们就来实践下 SkyWalking 下吧。 实践目标: 阅读全文
posted @ 2019-12-02 20:35 阿牛20 阅读(7926) 评论(0) 推荐(1) 编辑
摘要:MQ解耦了生产者和消费者,前提是有一个稳定强大的消息服务,我们只管与之通信即可。 所以,和MqServer通信是什么样的?难否? 0. 发送端demo 只需要设置下 nameServer, 就可以实现发送mq消息了。简单易用,是好产品的必备特征。 具体实现过程,且让我们深入一点了解。 1. 消息发送 阅读全文
posted @ 2019-12-01 16:46 阿牛20 阅读(1524) 评论(0) 推荐(0) 编辑
摘要:我们可以把loghub当作一个消息中间件来使用。如果能知道当前的消费进度,自然好了,否则消费情况一无所知,总是有点慌! loghub消费分两种情况,一是普通消费,二是消费组消费; 消费组消费,loghub服务端会记录消费情况,这时可以通过调用服务端API进行偏移信息查询。 普通消费则不同,需要自行维 阅读全文
posted @ 2019-11-29 18:06 阿牛20 阅读(1084) 评论(0) 推荐(0) 编辑
摘要:消息中间件是为解耦生产者和消费者的目的,三大服务点:解耦、异步、削峰。 现在的的互联网系统中,mq已经必备基础设施了,我们已明显感觉它的必要性与强大。然而,它的本质是啥?存储转发系统罢了! MQ有很多成熟产品,以RocketMQ作为切入点,成本较低。MQ主要角色为:生产者、消费者、消息服务端。 本文 阅读全文
posted @ 2019-11-29 09:39 阿牛20 阅读(1787) 评论(2) 推荐(0) 编辑
摘要:为充分利用机器性能,人们发明了多线程。但同时带来了线程安全问题,于是人们又发明了同步锁。 这个问题自然人人知道,但你真的了解同步锁吗?还是说你会用其中的上锁与解锁功能? 今天我们就一起来深入看同步锁的原理和实现吧! 一、同步锁的职责 同步锁的职责可以说就一个,限制资源的使用(线程安全从属)。 它一般 阅读全文
posted @ 2019-11-24 13:55 阿牛20 阅读(4559) 评论(0) 推荐(0) 编辑
摘要:因为ZK有watch机制,可以随时发现一些数据的变化,从而达到数据的及时性。 ZK的所有读操作都可以设置watch监视点: getData, getChildren, exists. 写操作则是不能设置监视点的。 监视有两种类型:数据监视点和子节点监视点。创建、删除或者设置znode都会触发这些监视 阅读全文
posted @ 2019-11-22 09:35 阿牛20 阅读(8466) 评论(0) 推荐(0) 编辑
摘要:通过前些文章,我们已经完全从整体架构和数据接入方面理解了ZK的前情工作。接下来,我们就来看ZK的正式工作吧。 本文以 setData /a data 这个命令作为出发点,来观察zk是如何处理来自客户端的数据更新操作的吧! 首先,我们需要明确各个角色所担任的工作,然后才能更好的理解其工作流程。我们以 阅读全文
posted @ 2019-11-06 19:01 阿牛20 阅读(1485) 评论(0) 推荐(0) 编辑
摘要:通过前面几篇文章,我们可以从整体上看到zk是如何处理网络数据的宏观架构。 本文我们从细节着手,看一下一个tcp的包是如何转换到内部的数据流处理的。 一、监听用户请求socket 基于NIO的端口监听,获取tcp数据流。 二、从连接中解析数据 接上一个nio提交过来的连接后,由 SelectorThr 阅读全文
posted @ 2019-10-29 12:07 阿牛20 阅读(1113) 评论(0) 推荐(0) 编辑
摘要:我们知道,zk就是一个个处理链组成的。 但是,这些处理链是在什么创建的呢? ZooKeeper 中有三种角色的服务节点存在: Leader, Follower, Observer . 而每个服务节点的承担的任务是不一样的,所以处理任务的逻辑是不一样的。而在ZK中,则是巧妙的通过责任链模式将各自节点的 阅读全文
posted @ 2019-10-25 18:54 阿牛20 阅读(1347) 评论(0) 推荐(0) 编辑
摘要:ZooKeeper 作为优秀的分布系统协调组件,值得一探究竟。它的启动类主要为: 1. 单机版的zk 使用 ZooKeeperServerMain 2. 集群版的zk 使用 QuorumPeerMain 与用户端各服务端之间存在着各种通信!当然主要分为三个: 1. 客户端与zk的通信; 2. 各zk 阅读全文
posted @ 2019-10-23 18:50 阿牛20 阅读(3010) 评论(0) 推荐(0) 编辑
摘要:我们有些场景,是需要使用 多线各一起执行某些操作的,比如进行并发测试,比如进行多线程数据汇总。 自然,我们可以使用 CountDownLatch, CyclicBarrier, 以及多个 Thread.join()。 虽然最终的效果都差不多,但实际却各有千秋。我们此处主要看 CyclicBarrie 阅读全文
posted @ 2019-10-17 10:37 阿牛20 阅读(927) 评论(0) 推荐(0) 编辑
摘要:所谓异步任务,就是不在当前线程中进行执行,而是另外起一个线程让其执行。那么当前线程如果想拿到其执行结果,该怎么办呢? 如果我们使用一个公共变量作为结果容器,两个线程共用这个值,那么应该是可以拿到结果的,但是这样一来,对业务就会造成侵入干扰了,因为你始终得考虑将这个共享变量传入到这个异步线程中去且要维 阅读全文
posted @ 2019-10-13 13:59 阿牛20 阅读(4492) 评论(0) 推荐(1) 编辑
摘要:在某些时候,我们可能想基于字符串做一些事情,比如:针对同一用户的并发同步操作,使用锁字符串的方式实现比较合理。因为只有在相同字符串的情况下,并发操作才是不被允许的。而如果我们不分青红皂白直接全部加锁,那么整体性能就下降得厉害了。 1. 为什么选择string做锁? 因为string的多样性,看起来s 阅读全文
posted @ 2019-09-23 18:24 阿牛20 阅读(1951) 评论(1) 推荐(1) 编辑
摘要:如今,我们想要开发一个网络应用,那是相当地方便。不过就是引入一个框架,然后设置些参数,然后写写业务代码就搞定了。 写业务代码自然很重要,但是你知道: 你的数据是怎么来的吗?通过网络传输过来的呗。 你知道网络是通过什么方式传输过来的吗?光纤呗,TCP/IP协议呗。 看起来都难不住我们的同学们,但是,以 阅读全文
posted @ 2019-09-12 21:59 阿牛20 阅读(1721) 评论(0) 推荐(1) 编辑
摘要:模型一词,原本是好理解的,名词,大概就是一个缩小版的实际产品的意思。 当然了,你可以去查查百科,模型其实不只可以描述实物,还可以描述虚拟物件。我们主要来看看后者。(百科: https://baike.baidu.com/item/模型/1741186?fr=aladdin) 当模型这在软件行业使用时 阅读全文
posted @ 2019-09-01 15:09 阿牛20 阅读(2073) 评论(0) 推荐(0) 编辑
摘要:面试过程中,各面试官一般都会教科书式的问你几个多线程的问题,但又不知从何问起。于是就来一句,你了解多线程吗?拜托,这个好伤自尊的! 相信老司机们对于java的多线程问题处理,稳如老狗了。你问我了解不?都懒得理你。 不过,既然是面对的是面试官,那你还得一一说来。 今天我们就从多个角度来领略下多线程技术 阅读全文
posted @ 2019-08-25 15:52 阿牛20 阅读(2386) 评论(0) 推荐(1) 编辑
摘要:随着业务的发展,数据量剧增,我们一些简单报表大盘类的任务,就不能简单的依赖于RDBMS了,而是依赖于数仓之类的大数据平台。 数仓有着巨量数据的存储能力,但是一般都存在一定数据延迟,所以要想完全依赖数数仓来解决实时报表问题,是困难的。 其实,所谓的实时报表,往简单了说就是: 对现在的一些数据进行加减乘 阅读全文
posted @ 2019-08-18 10:57 阿牛20 阅读(6100) 评论(0) 推荐(4) 编辑
摘要:天下武功,无坚不摧,唯快不破!所以我们重视速度没毛病! 老话说:不要过早优化。赞同! 我们在写代码过程中,有时可能就是为了追求所谓的性能,然后,就给自己挖坑了。 关于开发速度,我有以下几点思考: 1. 程序运行速度的思考:不能只为了速度而丢弃了:扩展性,高内聚性,低耦合性;还要站在更高层次来考虑问题 阅读全文
posted @ 2019-08-16 23:35 阿牛20 阅读(405) 评论(0) 推荐(0) 编辑
摘要:做一个系统,如果不做监控,是不完善的。 如果为做一个快速系统,花力气去做监控,是不值得的。(监控系统不是你想做,想做就能做的。) 因此,我们有必要具备一个能够快速建立监控体系的能力。即使你只是一个普通开发人员!(说不定明天就要叫你去领兵大操练呢) 个人觉得,做监控要有三个核心能力: 1. 持续收集数 阅读全文
posted @ 2019-07-05 19:05 阿牛20 阅读(3712) 评论(0) 推荐(2) 编辑