代码改变世界

随笔档案-2019年06月

学习scala语言进行开发:

2019-06-27 18:01 by 乘着风去破浪, 295 阅读, 收藏, 编辑
摘要: 学习scala语言进行开发:练手:通过scala语言开发一个kafka的consumer程序:消费消息,并进行简单的打印log思考:把scala当成一个java语言的一个特殊的jar包来看待,这样有助于我们学习scala的部署运行环境和学习这门语言吗?变量如何声明?变量的类型如何声明?类型如何转换 阅读全文

如何顶一个logback的配置文件?

2019-06-27 11:33 by 乘着风去破浪, 196 阅读, 收藏, 编辑
摘要: 如何顶一个logback的配置文件?如何按照小时粒度来生成文件;如何定期删除超过一周的日志文件?如何定期删除日志,防止磁盘打满?https://logback.qos.ch/manual/appenders.html#TimeBasedRollingPolicy 阅读全文

思考:我们使用开源的东西,是不是要对它整体上提供什么要有个全面的了解呢,不然碰到问题,然后上网去搜,

2019-06-26 16:22 by 乘着风去破浪, 179 阅读, 收藏, 编辑
摘要: ES的功能还是非常完善的,对自身的monitor就非常全面,包括fs,jvm,os,process等。思考:我们使用开源的东西,是不是要对它整体上提供什么要有个全面的了解呢,不然碰到问题,然后上网去搜,然后找到一个点(功能),然后去使用。其实,我们事先有时不能对全面了解,那么我们一定要借助问题,找到 阅读全文

思考:如何做“访问安全的控制”

2019-06-26 16:18 by 乘着风去破浪, 241 阅读, 收藏, 编辑
摘要: 思考:如何做“访问安全的控制”服务端可以设置IP白名单;基本可用,适用于内部分布之间,但是不灵活;授权;access token等方式,这个需要再了解下开源的协议和实现;网络屏蔽;比如网络隔离,办公网和生产网络隔离; 阅读全文

写代码时,要想着运行态的事情

2019-06-26 16:17 by 乘着风去破浪, 193 阅读, 收藏, 编辑
摘要: 写代码时,要想着运行态的事情我们写代码的时候总认为我们的代码是运行在一个单用户,甚至是单线程的环境下,这个需要好好注意下。因为你的部分代码可能并不适合在多用户并发或者多线程的环境 阅读全文

如何检测应用程序中的网络超时的原因

2019-06-26 16:16 by 乘着风去破浪, 604 阅读, 收藏, 编辑
摘要: 如何检测应用程序中的网络超时的原因说明,A和B都是一个服务,A通过网络调用B如何排查B处理没有超时,但是A端有很多调用B的地方发生了超时呢?1.B写响应慢导致?2.B处理响应慢?3.transport的线程模型慢,导致按时达到的请求没有在timeout进行读处理,从而让A超时?4.还是数据的编解码耗 阅读全文

作为一个在Linux环境下的开发者,如果没有两台通过网络互连的机器来玩,

2019-06-26 16:13 by 乘着风去破浪, 221 阅读, 收藏, 编辑
摘要: 作为一个在Linux环境下的开发者,如果没有两台通过网络互连的机器来玩,那么,你对网络和linux的了解就不够日常。 阅读全文

思考:sql为什么那么强大,sql解决了什么问题?

2019-06-26 16:12 by 乘着风去破浪, 470 阅读, 收藏, 编辑
摘要: 思考:sql为什么那么强大,sql解决了什么问题?hive和spark都支持sql,ES 和flink也支持sql了解下spark为什么能够支持sql;flink为什么能够支持sql?SQL:Structured Query Language所以从字面可以看出来,只有结构化的数据才能sql查询,这个 阅读全文

如下架构的调整就是一种“移动算力”的情形

2019-06-26 16:11 by 乘着风去破浪, 201 阅读, 收藏, 编辑
摘要: 说明:B是一个网络服务的server 思考:如下流程进行调整?说明:如下架构的调整就是一种“移动算力”的情形A >B -- > redis -- > esA >redis > B -redis --> es调整后的架构优势:A优先读取redis,若成功,就无需再进行(网络调用)B服务了。如此一来就把 阅读全文

越是松散和动态的,越要进行适当和合理的控制,不然会造成很多麻烦;(权衡之道-利弊(相依相存)分析)

2019-06-26 16:09 by 乘着风去破浪, 209 阅读, 收藏, 编辑
摘要: 越是松散和动态的,越要进行适当和合理的控制,不然会造成很多麻烦;(权衡之道-利弊(相依相存)分析)比如:支持动态字段的es,如果把ES当做一个关系数据库的替代品来存储业务模型数据,那么就需要对进入到索引的字段进行“准入”控制,不然,任何不加控制的字段都可以进入到索引,那么岂不是变得混乱; 阅读全文

缓存属于哪类的解决方案

2019-06-21 16:17 by 乘着风去破浪, 203 阅读, 收藏, 编辑
摘要: 缓存属于哪类的解决方案不是解决问题,而且避免问题;就是说不是直接优化调用端,而是要缓存的方式来对下一次请求进行响应; 阅读全文

对需求的理解深度影响你的设计水平:

2019-06-21 16:17 by 乘着风去破浪, 254 阅读, 收藏, 编辑
摘要: 对需求的理解深度影响你的设计水平:如果想让你开发一个支持二级权重的子召回,而你真的做了一个子召回,它仅仅支持二级权重的子召回,后面如果让你开发一个三级权重的子召回,你还得大动干戈改动代码吗?我们可以对这个需求进行分解,分析,二级权重的子召回,那么就分解为二级和权重两个部分,而权重的召回属于一个新的召 阅读全文

日志埋点不可少的点

2019-06-21 16:16 by 乘着风去破浪, 767 阅读, 收藏, 编辑
摘要: 日志埋点不可少的点有网络调用的代码块,有访问磁盘的代码块,因为这些地方都是大概率会阻塞和耗时的地方; 阅读全文

资源的使用:能节省的地方一定要节省,达不到节省条件的不能节省,该怎么用就怎么用(不要因为存储影响了计算,存储容量不是技术问题)?

2019-06-21 16:16 by 乘着风去破浪, 257 阅读, 收藏, 编辑
摘要: 资源的使用:能节省的地方一定要节省,达不到节省条件的不能节省,该怎么用就怎么用(不要因为存储影响了计算,存储容量不是技术问题)?比如,如果数据量小,而且高度重复的内容,可以用redis缓存,而且还可以进一步使用local cache;如果,如果一个app的用户基数月活8000万,那么存储这些用户维度 阅读全文

设置多少线程合适?并不是依据你cpu的核数而定的?

2019-06-19 20:31 by 乘着风去破浪, 663 阅读, 收藏, 编辑
摘要: 设置多少线程合适?并不是依据你cpu的核数而定的?如果是慢任务,不依赖下游服务(如果依赖,要考虑下游能否扛得住你转嫁给他的压力),当然是越多越好,多到切换开销的时长超过了处理时长(一般情况下,切换开销很难会超过处理时长的,这就是一个很普通存在的误解的滥用,会经常有人这么说,并据此来告诫人说一味增大线 阅读全文

网络服务超时分析:

2019-06-19 20:26 by 乘着风去破浪, 445 阅读, 收藏, 编辑
摘要: 网络服务超时分析: 第一个要怀疑的地方应该是服务端是否及时接收并处理了请求,关键点是找出及时性是否,通过客户端记录下发送时间,和客户端接收并开始处理时间, 把这两个时之差算出来,可以确定这个事情; 第二个要怀疑的地方就是,客户端处理耗时多长,从接收到处理,计算一个时长就可以知道了; 第三个,就是我们 阅读全文

思考:网络性能优化:网络 -- cpu -- 线程数 -- 单个任务耗时 --- qps --- 并发

2019-06-19 19:48 by 乘着风去破浪, 734 阅读, 收藏, 编辑
摘要: 思考:网络性能优化:网络 -- cpu -- 线程数 -- 单个任务耗时 qps 并发如果没有理清楚上述概念和它们之间的关系,那么优化会毫无章法;线程越多,利用上的线程越多,cpu的idle会约低,只到cpu低得不能再低,一般情况下,可以可劲用(idle为10%你遇到过吗?),但是要注意你的下游能否 阅读全文

计算并发和qps:

2019-06-19 19:33 by 乘着风去破浪, 3293 阅读, 收藏, 编辑
摘要: 计算并发和qps:假如你的网络服务的工作线程个数如果为24个,另外,单个请求耗时大概100ms,那么,你的并发是24个;你的qps可以达到240个,也就是一秒处理的任务数目(每个任务都被在100ms内被处理完成);有时,为了提高qps,一般在接收端都会设置一个接收任务的队列,用来缓冲请求,这个对请求 阅读全文

怎么利用好cpu?

2019-06-19 19:24 by 乘着风去破浪, 454 阅读, 收藏, 编辑
摘要: 怎么利用好cpu?短而快的任务放到线程池中才能压榨cpu,使得其飙升吗?那么,长慢(比如网络IO等等,造成cpu空闲,但是又不能做其他事情,那么,这种情况能不能增加线程池个数来优化一点呢)的任务放到线程池中能让cpu飙升吗?cpu是10核,那么线程池设置为10个或者20个就是合理的吗?不是的,对于有 阅读全文

架构的伸缩性:

2019-06-19 13:48 by 乘着风去破浪, 230 阅读, 收藏, 编辑
摘要: 架构的伸缩性:一般可伸的架构都是容易进行缩的,但是缩的架构如果很难伸,那么就需要优化 阅读全文

什么样的请求适合缓存?

2019-06-19 13:48 by 乘着风去破浪, 347 阅读, 收藏, 编辑
摘要: 什么样的请求适合缓存?请求不为空,如果为空每次都会击穿缓存;不经常变化的数据;对数据变化不敏感,对实时性要求不高,能够接受几分钟延时的;如果数据被删除了,还进行推荐有什么问题?能接受吗?如果使用了缓存,那么从缓存获取后,就相当于用缓存的内容代替了源,那么对源的后处理操作就转移到对获取到缓存后的内容的 阅读全文

关于“优化”这个事情的看法

2019-06-19 13:47 by 乘着风去破浪, 283 阅读, 收藏, 编辑
摘要: 关于“优化”这个事情的看法优化本身就是一个过程,因此不可能一步到位的,要控制优化的边界,逐步迭代; 阅读全文

缓存的时长思考:

2019-06-19 11:15 by 乘着风去破浪, 332 阅读, 收藏, 编辑
摘要: 缓存的时长思考:如果并发是60(qps)的话,那么不走缓存的情形,达到源上的并发还是60,如果采用了缓存,而且缓存设置为1秒,那么对源的并发(理想情况下的理论值)就减少到了原来的六十分之一,这种优化是非常富有成效的;缓存时间越长,对源的并发冲击会更小;引申:看似简单的设置和道理,有了新的延伸的认识或 阅读全文

思考:定义的价值

2019-06-19 11:15 by 乘着风去破浪, 224 阅读, 收藏, 编辑
摘要: 思考:定义的价值良好的定义是解决问题的一个基础,良好的定义应该具有简单性,扩展性等特性的,而且能够促进问题的快速解决;比如数据模型的建模,数据结构的设计都要用到“定义” 阅读全文

思考:线程池中执行网络调用任务的注意事项

2019-06-19 11:14 by 乘着风去破浪, 319 阅读, 收藏, 编辑
摘要: 思考:线程池中执行网络调用任务的注意事项把一个网络调用的程序放到线程池中进行执行,如果网络调用的时长太长就会造成线程池的枯竭调用超时时长越大,也容易造成线程池的枯竭,因此要学会“快速返回” 阅读全文

思考:关于redis是单线程,所以6核以上的机器部署redis是中浪费cpu的说法的思考

2019-06-19 11:14 by 乘着风去破浪, 2362 阅读, 收藏, 编辑
摘要: 思考:关于redis是单线程,所以6核以上的机器部署redis是中浪费cpu的说法的思考还得看cpu的频率,如果cpu的频率低,并且访问redis的并发很大,那么单个redis线程分摊(一个线程并不是一直都bind到一个固定的核上面的,其实这也是常遇到的错误的认知:单个线程就算用多核的机器也是浪费的 阅读全文

思考:能用redis缓存,就一定可以使用本机缓存(减少对redis的压力)吗?

2019-06-19 11:04 by 乘着风去破浪, 389 阅读, 收藏, 编辑
摘要: 思考:能用redis缓存,就一定可以使用本机缓存(减少对redis的压力)吗?如果容量小,是可以用本地缓存的,一般情况下距离(真实发生计算的)cpu越近的内存存储,它的容量都是受限的。 阅读全文

对缓存的粒度的思考和总结:

2019-06-18 10:38 by 乘着风去破浪, 895 阅读, 收藏, 编辑
摘要: 对缓存的粒度的思考和总结:缓存的粒度会影响缓存占用的容量,假如一个根据用户tag来查询用户偏好的文章,假设从查询出来的偏好中选10条来进行推荐(假设都大于10条),那么可以按照用户粒度进行缓存,缓存根据用户tag查询的结果,然后后面根据用户的ID从缓存中获取,然后再取10条;也可以按照tag粒度来缓 阅读全文

对计算的思考和总结:

2019-06-18 10:38 by 乘着风去破浪, 300 阅读, 收藏, 编辑
摘要: 对计算的思考和总结:设计一个大型的系统,要有一种能力,把算力和存储进行灵活转移的能力,而且要做好协调功能比如一台机器的算力不够了要进行任务分片进行分到其他机器执行,然后协调获取结果进行汇总宽度和深度之间的权衡就像时间和空间的权衡一样,都是计算机程序设计中的权衡!比如pipline的长度和宽度的权衡。 阅读全文

对本地缓存和分布式缓存的思考和总结:

2019-06-18 10:37 by 乘着风去破浪, 2080 阅读, 收藏, 编辑
摘要: 对本地缓存和分布式缓存的思考和总结:本地缓存的优势除了缓存这个点之外还有一个就是没有网络开销,在大并发量时用好本地缓存很重要;分布式缓存比如Redis,除了缓存这个优势的点之外,能够无限扩容量是另外一个比较重要的优势点,结合这个去在业务中使用缓存是很重要的 阅读全文

pipline的思考和总结

2019-06-18 10:37 by 乘着风去破浪, 412 阅读, 收藏, 编辑
摘要: pipline的思考和总结 Pipline中的某个阶段的并行度超过了四个,那么就可以拆成两个阶段,每个阶段包含两个并行,这样就把并行度的宽改成了pipline的长Pipline中的某个阶段的并行度超过了四个,那么就可以拆成两个阶段,每个阶段包含两个并行,这样就把并行度的宽改成了pipline的长,就 阅读全文

推荐系统和业务系统对比:

2019-06-18 10:36 by 乘着风去破浪, 468 阅读, 收藏, 编辑
摘要: 推荐系统和业务系统对比:推荐服务是一个可损服务业务系统是不可损标准的服务一般情况下业务系统流量小,并发小可损就是允许个别请求失败业务系统的事务性比较强性要求而推荐服务事务性低,数据更新后读取实时性要求不高这里的可损的意思指可损就是流程中某个阶段异常还可以继续执行不可损就是流程中一个阶段失败就需要回滚 阅读全文

认识事物的过程是:

2019-06-15 19:57 by 乘着风去破浪, 910 阅读, 收藏, 编辑
摘要: 认识事物的过程是:1.它是什么?(概念性的)(需要仔细阅读关于它是什么的描述,或者也可以从上下文来推断它是什么)2.它的功能是什么?(包括哪些特性以及功能)3.为什么要有它,或者说它为什么出现?(出现的背景以及存在的意义)(需要快速通读全文,了解上下文)4.以后会怎么发展(从发展的观点看它的优势和缺 阅读全文

思考:面向对象源码的解析和阅读需要注意和把握的点

2019-06-15 19:55 by 乘着风去破浪, 309 阅读, 收藏, 编辑
摘要: 思考:面向对象源码的解析和阅读需要注意和把握的点要搞懂业务就要理解好对象的组成和行为,对象是业务数据模型的抽象,也弄清楚模型的业务含义。而模型的动作或者基于模型所做的操作代表了业务的操作,代表了业务的场景,也要理解好。总之,要把握两点:数据模型(结构和组成部分),模型的操作 阅读全文

推荐系统中ES使用过程中遇到的问题:

2019-06-15 19:54 by 乘着风去破浪, 823 阅读, 收藏, 编辑
摘要: 推荐系统中ES使用过程中遇到的问题:1.在线业务要和离线业务分离;(不然离线的大量写或者聚合查都会导致资源紧张(cpu idle降低),进而导致在线业务查询响应变慢)2.控制full gc避免在业务高峰执行;3数据分布要均匀,如果不能保证自定义主键是均匀的,那么就使用ES默认的主键生成策略;4.来回 阅读全文

使用缓存功能要掌握住(心里有数)的点:

2019-06-15 19:53 by 乘着风去破浪, 212 阅读, 收藏, 编辑
摘要: 使用缓存功能要掌握住(心里有数)的点:你的缓存的时效性怎么样,因此你要知道你的程序是否更新了;使用了缓存,就要考虑缓存被击穿了怎么办,因为一般情况下海量请求下使用缓存才有意义,而且一旦击穿缓存就会对底层存储造成严重冲击; 阅读全文

思考:延迟决策是非常重要的

2019-06-15 19:53 by 乘着风去破浪, 891 阅读, 收藏, 编辑
摘要: 思考:延迟决策是非常重要的延迟决策可以收集更多的信息,而更多的信息,可以帮助我们看清真相,进而做出更加准确的决策;对了,这里不会太看中“机遇说” 阅读全文

优秀的代码的设计和组织架构

2019-06-15 19:52 by 乘着风去破浪, 841 阅读, 收藏, 编辑
摘要: 优秀的代码的设计和组织架构一块相同逻辑的代码在两处甚至多次用,就要考虑能否抽取到一处来,进行统一下;一个功能存在变数,就要考虑能否支持后续扩展,把变与不变抽取隔离,把变化的尽量可配置化;一块代码就执行一次,那么就要考虑是否要在启动的时候进行执行;一个实例就创建一个,那么就要考虑是否要在启动时直接通过 阅读全文

思考:为什么每一种开发语言的语法都是不一样的呢(语法设置的不一样的出发点是基于什么考虑)?如果设置成一样有什么不可行的吗?

2019-06-15 19:47 by 乘着风去破浪, 468 阅读, 收藏, 编辑
摘要: 思考:为什么每一种开发语言的语法都是不一样的呢(语法设置的不一样的出发点是基于什么考虑)?如果设置成一样有什么不可行的吗?每一种开发语言中有哪些语法是一样的?可以设置成不一样吗?语法不一样:比如go中定义结构体语法如下:type struct_variable_type struct { age i 阅读全文

分析一个突发问题的思考方法

2019-06-14 15:47 by 乘着风去破浪, 180 阅读, 收藏, 编辑
摘要: 分析一个突发问题的思考方法今天有什么变化,现象表现是什么?可能原因是什么?原因的原因是什么?而且短时间分析不出来就要考虑止损的策略和方法而且不要造成止损过程的二次故障所以应该找出一个相对操作容易风险小的方案 阅读全文

思考:架构师的前瞻性能力

2019-06-14 11:53 by 乘着风去破浪, 439 阅读, 收藏, 编辑
摘要: 思考:架构师的前瞻性能力要知道以后哪些地方会存在问题,比如并发上来后带来的问题,数据变多后带来的问题等等。而且要知道提前做好准备(心中要提前有一个成熟的方案),在合适的时候,时机成熟时(考虑各种核心因素,进行权衡)进行修复; 阅读全文

思考:不放心别人动自己还没有完善的工程代码,是一种什么心理?如何破局这种想法?

2019-06-14 11:52 by 乘着风去破浪, 211 阅读, 收藏, 编辑
摘要: 思考:不放心别人动自己还没有完善的工程代码,是一种什么心理?如何破局这种想法?我这边比较在意的有:对象和方法的命名的(可读性),DTO(等值对象的)的结构易扩展性,代码结构(方法和对象粒度)的可伸缩性(能够方便扩展和简单改写就能执行并行),还有非功能性比如异常的处理,日志收集等;还有一点是健壮性:包 阅读全文

思考:ES如何做去重:一个记录来回修改,而且存在并发的情况,可能会插入同样的几条记录。

2019-06-14 11:51 by 乘着风去破浪, 1512 阅读, 收藏, 编辑
摘要: 思考:ES如何做去重:一个记录来回修改,而且存在并发的情况,可能会插入同样的几条记录。记录中要有一个业务主键,根据这个来进行增删改;每次修改时要有一个修改时间(根据这个时间来删除最新的记录),而且增删改要是幂等操作(就是每次增删改都带上最新的文档的全部信息,结合ES新增或者修改前必须先删除,再重建的 阅读全文

如何(精准化)进行测试(防止带病上线):

2019-06-13 11:05 by 乘着风去破浪, 462 阅读, 收藏, 编辑
摘要: 如何(精准化)进行测试(防止带病上线):首先要知道自己调整了哪些,会影响哪些;本次测试的核心点是什么,需要回归哪些功能第一步,应该造数据,造的数据要满足需求,然后走一遍流程,看看请求响应的数据是否准确(或者DB等存储中存储的数据是否准确)(说明:造数据一定要符合业务或者接口规范(如果你对外提供接口) 阅读全文

关于搭建开发(测试)环境的必要性:

2019-06-11 11:38 by 乘着风去破浪, 1895 阅读, 收藏, 编辑
摘要: 关于搭建开发(测试)环境的必要性:如果用本地来测试,那么本地要来回切换(可能引起一些疑问,增加了排查问题的干扰性),而使用固定的机器部署成一个测试环境,那么就可以不用来回切换,提升测试联调效率;当然,如果进行自测,那么在本机启动相对较好,但是自测完成后,还是必须要走开发测试环境进行测试的,这个是少不 阅读全文

ES的均衡问题

2019-06-06 14:05 by 乘着风去破浪, 1399 阅读, 收藏, 编辑
摘要: ES的均衡问题Es两个问题:数据均匀分布(数据上的均衡问题)请求处理节点均匀分布(CPU等计算资源的均衡问题,即节点的均衡问题),分片和节点的均衡是两个评估es均衡问题的维度处理好这两个问题,es的均衡问题基本得到保证数据分布均匀是一回事,处理请求经常需要的数据(热数据)是另外一个看数据分布的问题如 阅读全文

排查问题中的因果论

2019-06-06 12:13 by 乘着风去破浪, 233 阅读, 收藏, 编辑
摘要: 排查问题中的因果论排查问题,分析问题要弄清两个事情:哪个是因,哪个是果,如果把因果混淆或者搞错了,那么分析的方向就会错误,分析的答案就是错的。由于线上服务的调用链很长的情况,分清因果更加重要; 阅读全文

你的设计和考虑一定是OK的吗,一定是最适合的吗?

2019-06-06 11:36 by 乘着风去破浪, 239 阅读, 收藏, 编辑
摘要: 你的设计和考虑一定是OK的吗,一定是最适合的吗?未必,但是有个方法可以提早证明你的设计的问题,那就是自己反问自己一下为什么这么设计,设计的好处是什么,你的理由是什么,而且要用数据说话,通过数据来佐证你是对的,而不是“麻木”地套用经验或者自以为是,自以为然(甚至还觉得自己了不起)。 阅读全文

测试的方法的宗旨是什么?

2019-06-03 16:00 by 乘着风去破浪, 315 阅读, 收藏, 编辑
摘要: 测试的方法的宗旨是什么?让一切透明化,至少结果是透明的,可以验证的;专业的测试技术和方法是让内部运行流程透明化,这个透明化就需要数据来表达,因此要收集全流程运行过程中的数据,然后收集到统一的地方进行分析和比对 阅读全文

在变化中做决策?

2019-06-03 16:00 by 乘着风去破浪, 244 阅读, 收藏, 编辑
摘要: 在变化中做决策?看看再说,有时一个事情是很重要,但是另外一个事情更重要,更着急因此要先解决当下火急的重要的,随着变化,随着发展,以前重要的问题可能显得不重要了。 阅读全文
点击右上角即可分享
微信分享提示