阿丸笔记

其他

硬吃一个P0故障,「在线业务」应该如何调优HBase参数?

1、背景由于种种原因,最近将核心业务生产使用的HBase迁移到了云上的弹性MapReduce(EMR)集群上,并使用了EMR的HBase组件默认参数配置。结果在流量高峰期出现了宿主机故障,挂掉了两个core节点(部署了region
2022年3月13日
其他

深入Netty逻辑架构,从Reactor线程模型开始

本文是Netty系列第6篇上一篇文章我们从一个Netty的使用Demo,了解了用Netty构建一个Server服务端应用的基本方式。并且从这个Demo出发,简述了Netty的逻辑架构。今天主要是深入学习下
2021年6月16日
其他

从一个Demo开始,揭开Netty的神秘面纱

5分钟,将重点围绕以下几个问题展开:如何用Netty编写一个Server端服务Demo从Demo看Netty的逻辑架构,初识各个组件1.编写一个Server端Demo1.1
2021年4月19日
其他

从I/O多路复用到Netty,还要跨过Java NIO包

本文是Netty系列第4篇上一篇文章我们深入了解了I/O多路复用的三种实现形式,select/poll/epoll。那Netty是使用哪种实现的I/O多路复用呢?这个问题,得从Java
2021年3月22日
其他

没搞清楚网络I/O模型?那怎么入门Netty

本文是Netty系列笔记第2篇Netty是网络应用框架,所以从最本质的角度来看,是对网络I/O模型的封装使用。因此,要深刻理解Netty的高性能,也必须从网络I/O模型说起。看完本文,可以回答这三个问题:五种I/O模型是什么?核心区别在哪里?同步=阻塞?异步=非阻塞?Netty的高性能,是采用了哪种I/O模型?1.掌握五种I/O模型的关键钥匙Unix系统下的五种基本I/O模型大家应该都有所耳闻,分为:blocking
2021年1月18日
其他

打算写一些Netty的文章了,先聊聊为什么要学习Netty

掌握Netty,修炼好“内功”。如果你也有兴趣,欢迎跟着我一起看一看、练一练吧。我会尽量结合源码与实战案例来剖析Netty
2021年1月11日
其他

2020实战复盘:如何从0到1搭建数据传输平台产品DTS?

2020年下半年的主要任务,就是从0到1搭建了数据传输服务平台产品。平稳上线后,基本达到预期,实现了最初的产品规划目标。这里做个复盘,记录下从0到1的过程,包括:产品设计整体技术架构核心模块的技术选型、原理与改造适配总结与展望1.什么是数据传输服务数据传输服务DTS(Data
2021年1月4日
其他

亿级大表分库分表实战总结(万字干货,实战复盘)

分库分表的文章网上非常多,但是大多内容比较零散,以讲解知识点为主,没有完整地说明一个大表的切分、新架构设计、上线的完整过程。因此,我结合去年做的一个大型分库分表项目,来复盘一下完整的分库分表从架构设计
2020年11月16日
其他

线上问题排查,一不小心踩到阿里的 arthas坑了

最近帮新来的校招同学排查一个线上问题,问题本身不是很难,但是过程中踩到了一个arthas的坑,挺有意思的。同时,也分享下在排查过程中使用的一些比较实用的工具,包括tcpdump、arthas、simpleHTTPServer等。希望能对大家有所帮助。1.问题描述新开发的一个功能,简单来说,就是读取数据库的数据展示在前台。本地启动服务调试,用postman调用api,返回数据显示正常,数据中的中文也正常。但是部署到线上环境后,通过chrome浏览器调用和postman调用接口,返回的非中文数据正常,但是中文显示乱码。2.排查思路这个问题的第一反应是请求的content-type有问题。不过在chrome浏览器中确认了请求的request和response的content-type都是application/json;charset=UTF-8,没有问题。然后又google了一番乱码问题,基本上都是说的spring的HttpMessageConverter问题或者content-type,都无法解决。只能深入排查一番了。排查的主要思路就是先确定乱码是哪一步产生的。一个就是数据库里查出来地方,需要用抓个包确认下,不过我们本地服务调用是正确的,那么这一步应该没有问题。一个是应用服务返回的地方,需要用抓个包确认下。在线上部署环境里,用tcpdump把对应的应用服务返回数据时抓个包。一个就是代码逻辑中存在数据转换,这个需要通过arthas看看线上应用的运行时数据情况。3.用tcpdump抓包看服务端响应3.1
2020年10月27日
其他

用ThreadLocal来优化下代码吧

最近接手了一个老项目,看到一个很有意思的现象。这个项目中大量的方法入参都会带上user信息,比如这样它的意图是希望在方法内使用user的信息,但是如此大范围的传递用户信息,第一感觉就是不优雅。那有什么办法可以优化一下呢?我们第一反应是,可以存一个全局变量,在初始位置将用户信息存入全局变量,然后在需要的地方去get一下。那在WEB应用中,每个请求都是一个独立线程,怎么去标记呢?可以用线程的id去作为map的key,将该请求的用户信息作为map的value。咦?很熟悉的感觉。没错,Java已经帮我们封装好了这么一个对象,它就是我们今天要说的ThreadLocal。什么是ThreadLocal如何使用ThreadLocal优化userid层层传递的问题ThreadLocal原理是啥ThreadLocal的实战要点1.什么是ThreadLocal先来看下JDK的注释:简单翻译过来,就是说:ThreadLocal提供了线程隔离的局部变量,通过get(
2020年9月30日
其他

「从零单排canal 07」 parser模块源码解析

基于1.1.5-alpha版本,具体源码笔记可以参考我的github:https://github.com/saigu/JavaKnowledgeGraph/tree/master/code_reading/canal本文将对canal的binlog订阅模块parser进行分析。parser模块(绿色部分)在整个系统中的角色如下图所示,用来订阅binlog事件,然后通过sink投递到store。parser模块应该来说是整个项目里面比较复杂的模块,代码非常多。因此,本文根据过程中的主线来进行展开分析,从
2020年8月21日
其他

「从零单排canal 06」 instance模块源码解析

基于1.1.5-alpha版本,具体源码笔记可以参考我的github:https://github.com/saigu/JavaKnowledgeGraph/tree/master/code_reading/canal关于instance的定义,可以参考前面的几篇源码解析,介绍的非常清楚。instance模块比较简单,我们重点了解以下几个问题instance配置模式有哪几种,如何根据配置创建instance?远端配置如何覆盖本地配置的?instance实例内部有哪些组件?1.基本结构instance模块下面也分为三个子模块,core、manager、spring。其中,core是instance的核心逻辑
2020年7月28日
其他

从零单排canal 01」 canal 10分钟入门(基于1.1.4版本)

版本(release_note),性能与功能层面有较大的突破,重要提升包括:整体性能测试&优化,提升了150%。原生支持prometheus监控。原生支持kafka消息投递。原生支持aliyun
2020年6月4日
自由知乎 自由微博
其他

「从零单排HBase 11」HBase二级索引解决方案

HBase一个令人惋惜的地方,就是不支持二级索引。因此,社区有了很多补充方案来填补HBase的二级索引能力的缺陷。今天,我们就来看看有哪些二级索引方案,通过对比各个方案的优缺点,并结合我们的具体场景做出二级索引方案选型。1.为什么需要二级索引HBase系统单纯从解决大数据实时读写问题角度出发,重点关注于分布式存储的扩展性、容错性、读写性能等方面,为此也牺牲了很多传统关系型数据库的功能,比如事务,SQL表达与分析等。实际上,这是NoSQL最初的含义,以解决大数据的实时存取为首要目标,提供简单的Get,Put,Scan接口,解决用户的大数据量存储的需求。因此,HBase完全是一个非常优秀的大数据实时存取引擎,解决了传统数据库的容量问题。就目前官方的HBase系统来说,并不支持二级索引,只有rowkey作为一级索引,
2020年5月14日
其他

HBase集群多租户实践

在HBase1.1.0发布之前,HBase同一集群上的用户、表都是平等的,大家平等共用集群资源。容易碰到两个问题:一是某些业务较其他业务重要,需要在资源有限的情况下优先保证核心重要业务的正常运行二是有些业务QPS常常很高,占用大量系统资源,导致其他业务无法正常运转。这是典型的多租户问题。因此,我们需要通过资源隔离来解决多租户问题,同时,需要考虑计算型业务与存储型业务混合部署来提高集群的资源利用率。1.基本概念1.1
2020年5月12日
其他

「从零单排HBase 09」HBase的那些数据结构和算法

17可以发现,布隆过滤器串中的第17位为0,因此可以确认w肯定不在集合A中。因为若w在A中,则第17位必定为1。如果有另外一个元素t,K次哈希值分别为:HASH_0(t)%N
2020年5月5日
其他

跟面试官侃半小时MySQL事务隔离性,从基本概念深入到实现

提到MySQL的事务,我相信对MySQL有了解的同学都能聊上几句,无论是面试求职,还是日常开发,MySQL的事务都跟我们息息相关。而事务的ACID(即原子性Atomicity、一致性Consistency、隔离性Isolation、持久性Durability)可以说涵盖了事务的全部知识点,所以,我们不仅要知道ACID是什么,还要了解ACID背后的实现,只有这样,无论在日常开发还是面试求职,都能无往而不利。为了大家更好的阅读体验,对ACID的深入分析将分为上下两篇。本篇为上篇,主要围绕ACID中的I,也就是“隔离性”展开,从基本概念,到隔离性的实现,最后以一个实战案例进行融会贯通。嗯,看完全部内容你都能理,那跟面试官侃半小时隔离性就没问题了。1.事务隔离性的基本概念1.1
2020年3月26日
其他

关于校招面试要怎么准备,这里有一些过来人的建议

最近很多同学咨询关于校招准备的问题,沟通下来发现发现了很多共性的问题,因此,今天总结一下这些问题,为希望进入互联网研发岗位的同学提供一些参考建议。1.专业有决定性影响吗?答案是否定的。最近几年经常负责面试社招和校招,校招也面试过很多非计算机专业的同学。实际上,能拿到offer的同学跟专业本身有一定关系(有什么关系后面会说),但没有决定性关系。尤其是校招和实习面试,不会对方向对口有特别严格的要求,这一点和社招是有巨大区别的。校招面试更偏向于看重个人的综合能力。所谓综合能力,一般由几个方面构成。1)基础知识的扎实掌握2)项目经验3)自驱力2.基础知识考察基础知识的积累是一个长期的过程,但是面试跟考试一样,还是有重点和必考点的。这里介绍一些常见的必考点(建议读者根据必考点自己梳理知识点,网上相关的面经太多了,就不展开罗列了)1)编程语言以Java为例集合的使用与原理(set、list、map等)多线程与并发编程(java内存模型、各种锁)JVM相关(各种GC算法、类加载机制)Java8特性2)数据结构与算法必考点。建议刷leetcode,做题型总结。数组、链表、贪心、动态规划、dfs等等。3)数据库知识以MySQL数据库为例存储结构(B+树)索引(聚簇索引、非聚簇索引、覆盖索引等等)事务(隔离级别、脏读幻读、MVCC、各种锁)4)操作系统与网络相关进程与线程TCP/IP拥塞控制5)常见框架(Spring\SpringMVC\Springboot\Mybatis等)的使用、核心原理与实现IOC与AOP的原理Bean的生命周期Mybatis使用的设计模式3.项目经验考察经常有同学问项目经历重不重要?答案是肯定的,非常重要!项目经验是面试中最关键的地方。如果说基础知识作为门槛石,那么项目经验考察的结果往往能决定你是否能成功在其他面试者中脱颖而出。项目经验常见问题如下:项目的整体感受或者一个架构图你在项目中负责什么模块使用了哪些技术有没有遇到什么困难,如何解决的面试官需要从你的项目中,深入去问你做过的东西,运用的知识,考察你对相关组件的掌握程度、总结能力、个人思考能力、解决问题的能力等多个方面。可以这么说,有一个好的项目,能好好总结,并在面试中体现思考力的,基本上offer就稳了。而非科班的同学最容易吃亏的地方也在这里,没有一个相关的项目经历,或者只能简单搭建一个项目,并不能很好深入去理解。那我的建议很简单,实习!尽量能找到一份相关的实习经验,并对自己的负责内容有深入的了解,能很好地总结并回答上述的问题,毕竟生产环境是增长经验最快的地方。那如果没有实习呢?或者说实习面试的时候问这项目经验呢?所谓万丈高楼平地起,做人只能靠自己~别无他法,只能自己尝试搭建一个方向相关的项目练手。不是简单搭建一下就完了,而是需要对相关组件做深入学习。并能根据不同的问题和场景,进行不断迭代和优化,把这个过程能总结下来,实际上也是一个非常出彩的项目。这里,我以一个WEB项目做例子。如何深入学习?1)你用了spring,知道@autowire是怎么把对象注入的吗?2)在用设计数据库表的时候,为什么推荐使用自增id呢?3)mybatis跟JDBC有什么关系?如何对自己的项目进行迭代和优化?1)你的代码有没有用什么设计模式?2)鉴权是怎么做的?有哪几种方式?有什么优缺点?3)数据库数据量大了怎么办?访问请求多了怎么办?类似这样的问题,如果都能回答的很好,相信我,你就能脱颖而出了!4.自驱力除了基础知识和项目经验,面试官们往往也喜欢问这样的问题:1)最近看什么书?2)关注什么最新技术?3)有没有什么博客或者个人项目?这些问题希望考察什么?就是一个面试者的自驱力。一个对技术保持热情,时刻关注技术发展,善于自我学习和自我总结的校招生,永远是校招面试场上最受欢迎的人。事实上,这个能力对非科班的同学更加重要。这也是我说的,面试跟专业有一定关系的原因之一,由于不是计算机专业毕业,所以很多计算机专业课程需要去自学,只有拥有强大的自驱能力,才能比其他计算机专业的同学做得更好,在面试中脱颖而出。5.其他需要重点注意的问题以下问题倒是真的跟专业有一定的相关性,需要非计算机专业的同学格外注意。那就是充分的信息收集。非科班同学可能相对缺少互联网研发学长的资源,因此,可能会缺乏获取岗位信息、面试信息等重要信息的渠道,因此,一定要发挥主观能动性,积极去寻找相关资源获取帮助。避免由于信息不对称而吃亏。切记切记!!希望对大家能有所帮助,顺利拿下offer,加油!原创:阿丸笔记(微信公众号:aone_note),欢迎
2020年3月16日
其他

生产环境使用HBase,你必须知道的最佳实践

前面,我们已经打下了很多关于HBase的理论基础,今天,我们主要聊聊在实际开发使用HBase中,需要关注的一些最佳实践经验。1.Schema设计七大原则1)每个region的大小应该控制在10G到50G之间;2)一个表最好保持在
2020年3月15日
其他

核心特性region split

HBase拥有出色的扩展性,其中最依赖的就是region的自动split机制。1.split触发时机与策略前面我们已经知道了,数据写入过程中,需要先写memstore,然后memstore满了以后,flush写入磁盘,形成新的HFile文件。当HFile文件数量不断累积,Region
2020年3月11日
其他

全面认识HBase架构(建议收藏)

在网上看过很多HBaes架构相关的文章,内容深浅不一,直到发现了一篇MapR官网的文章https://mapr.com/blog/in-depth-look-hbase-architecture/#.VdMxvWSqqko,写得实在太生动了。因此,以这篇文章作为骨架,翻译了许多原文的内容,同时对一些细节进行自己的扩展,形成本文。1.HBase架构组成从物理结构上,HBase包含了三种类型的server,zookeeper、HMaster、region
2020年3月6日
其他

两文说透MySQL里的各种锁(下篇)

lock是前开后闭的。间隙锁本身是前开后开的。标准的事务隔离级别中,可重复读只解决脏读问题,无法解决幻读问题。但是在innodb中,用next-key
2020年2月22日
其他

两文说透MySQL里的各种锁(上篇)

【MySQL系列相关】1.聊一聊关于MySQL的count(*)2.为什么MySQL分库分表后总存储大小变大了?0.前言MySQL按照加锁的范围,分为全局锁、表级锁、行级锁。本文作为上篇,主要介绍MySQL的全局锁
2020年2月16日
其他

为什么MySQL分库分表后总存储大小变大了?

因为分表后,需要从老库全量同步数据到新库,数据同步平台开启多个线程进行同步,插入各个分表并不是按照递增的顺序插入的,因此,会产生巨量的“数据空洞”,造成存储空间变大。
2020年2月12日
其他

聊一聊关于MySQL的count(*)

自从大家对于MySQL数据库的稳定性有了更高的追求后,经常有小伙伴有这样的疑问,对于count(*)这样的操作,有没有正确的姿势,或者有没有可以优化的地方?
2020年2月9日