深度理解git rebase

根据我们的需要改变历史记录是Git的一项核心功能,这项功能为我们很多强大的工具,同时允许我们能够使用重构来实践软件设计原则。这些工具对新手甚至中级git用户来说可能有点吓人,但本文将为你揭开git-rebase的神秘面纱。 需要注意的是:通常不建议修改公共的、共享的或者稳定的分支。建议编辑个人分支与特性分支以及...

Go实现一个读写锁

当处理并发时,锁是最常用的编程语言工具,对于大多数应用而言,仅在使用数据时加锁,使用后释放即可。然而,对于一些对性能要求比较高的并发实现,锁的使用方式需要作出对应的优化。例如锁的 粒度 经常用于确保线程在尽可能短的时间内独占。 此外,使用锁时一个常用优化方法是使用 读写锁 ,本文即探讨读写锁的原理并给出相关实现。...

Java中的变型

什么是变型?维基百科上变型的定义: 变型是在计算机科学中,描述具有父/子型别关系的多个型别通过型别构造器、构造出的多个复杂型别之间是否有父/子型别关系的用语。 许多程序设计语言的类型系统支持子类型。例如,如果Cat是Animal的子类型,那么Cat类型的表达式可用于任何出现Animal类型表达式的地方。所谓的...

k8s基本组件及执行流程

什么是kubernetesKubernetes(简称k8s)是谷歌开源的容器编排管理工具,可以将docker理解为基础设施,而k8s则是用基础设施之上的上层建筑,并能够实现对docker的各种管理。它主要提供以下功能: 自动花容器部署和复制 支持容器服务的自动伸缩 将容器组织成组,并提供容器间的负载均衡 方便对...

IO模式和IO多路复用

现在操作系统都采用虚拟寻址,处理器先产生一个虚拟地址,通过地址翻译成物理地址(内存的地址),再通过总线的传递,最后处理器拿到某个物理地址返回的字节。 对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方)。 核空间:在liunx中,将最高的1G字节(从虚拟地址0xC0000000到0xFFFFF...

配置不同局域网ssh互联

最近新向实验室申请了三台服务器用于做毕业设计,但是因为不常在实验室,所以想到有没有一个好的方法能够做到即使不在实验室的局域网中也能够ssh到实验室的机器。也就是说做到从一个局域网中的A机器ssh至另一个局域网中的B机器。 其实大概想一下,就知道完全是可行的,毕竟A与B都联网了,没道理联网的机器却无法互相通信。但也...

AWS上kafka端口开放外网访问问题解决方法

目前公司采用ELK来存放以及利用日志,采用filebeat将日志发送至Kafka,之后再写一个python脚本作为消费者把Kafka内的日志拉取下来并打入到elasticsearch中,供后期查询检索使用。 本来这是一套比较完备的流程,但由于最近接了新的业务,而新产生的日志在对方的机器上,也就是说我们需要把Kaf...

druid hadoop index 任务性能调优

起因由于日常所做统计多数基于一份拼接日志,结合最近做的druid相关工作,很自然的想到把拼接日志一些统计常用字段select group by 出来通过 druid统计,这样就可以把自己从枯燥繁琐的统计脚本中解脱出来了。 性能调优但是在执行druid的index任务时遇到了任务执行时间过久的问题,由于集群...

druid内存占用过多问题排查

最近使用druid来做广告平台的实时分析,发现后台内存占用长期为48G(一共56G),起初怀疑是因为每天dataSource数据量较大,如果druid将所有数据加载进内存处理则会导致这么48G的内存占用;但是在对dataSource做reindex处理后,dataSource大小缩减为5M左右的情况下内存仍然没有...

airflow + celery 踩坑记录

初识 airflow其实早在去年就已经接触到 airflow 了,当时的需求是按小时拼接两份线上日志,而拼接操作必须依赖于两份日志的完整性。从这个需求出发,了解到了 airflow ,但迫于官方文档的晦涩难懂,再加上这个任务对 airflow 的需求不够强,就弃坑了;最后使用 python 脚本中一个 while...