9 吃胖点儿

尚未进行身份认证

我要认证

“学会求知,学会做事,学会共处,学会做人。”致自己共勉 。技术探讨可以加281954986

等级
TA的排名 6k+

软件研发的这些误区,你中了吗?

阿里妹导读:软件研发过程中如何让工作变得更简单高效?事务性工作应该更关注需求还是更关注任务?是持续发布还是批量发布?本文将从七个方面聊一聊软件研发过程中常见的误区及正确姿势,分享研发过程中的那些 Dos 和 Dont's。结束了一天的工作,拖着疲惫的身躯,坐在马桶上,回顾一天的工作,发现有那么多的不值得,明显没有价值贡献的任务,却干了一大杯;明明可以好好工作,却硬要表演得很忙似的;明明有机器帮我们干活,却硬着头皮逐字逐句读代码;明明别人家已经持续交付了,而我们依然觉得批量来一把更经济实惠。哥很难,.

2020-07-11 10:18:57

Nginx开发之限流

Nginx不仅可以做Web服务器、做反向代理、负载均衡,还可以做限流系统。此处我们就Nginx为例,介绍一下如何配置一个限流系统。Nginx使用的限流算法是漏桶算法。(1)是安装Nginx。Nginx的安装我们在8.5.7中已经详细叙述过,此处简单再提一下:如果你的Linux是Ubuntu或Debian,使用apt-get安装,在命令行中输入以下命令: $ sudo apt-get update$ sudo apt-get install nginx如果是CentOS,使用yu..

2020-07-11 10:03:05

技术选型必看经典:RabbitMQ 七战 Kafka,差异立现

作为一个有丰富经验的微服务系统架构师,经常有人问我,“应该选择RabbitMQ还是Kafka?”。基于某些原因, 许多开发者会把这两种技术当做等价的来看待。的确,在一些案例场景下选择RabbitMQ还是Kafka没什么差别,但是这两种技术在底层实现方面是有许多差异的。不同的场景需要不同的解决方案,选错一个方案能够严重的影响你对软件的设计,开发和维护的能力。这篇文章会先介绍RabbitMQ和Apache Kafka内部实现的相关概念。紧接着会主要介绍这两种技术的主要不同点以及他们各自的优缺..

2020-07-06 18:25:59

生产问题系列一次机房停电引发的思考

一次机房停电引发的思考今天早上到公司的时候,接到开发反馈 DEV 环境所有接口都卡,耗时都在一分钟以上,严重影响开发正常工作,然后通过网关的日志定位到原因是因为 kafka 集群不可用(总共 3 个 broker,前一天晚上机房停电导致 leader 节点挂了),导致网关的反爬过滤器里面发送 kafka 消息的代码 kafkaTemplat.send 阻塞了 60s,当时在想这个 send 方法不是异步的吗,为什么会阻塞 60s?于是查阅了一些资料,大致搞清楚了原因,这里稍作整理,分享给可能踩坑或者以及

2020-07-05 23:25:45

redis开发之跳表 skiplist的用法

前言跳跃表结构在Redis中的运用场景只有一个,那就是作为有序列表 Zset的使用。跳跃表的性能可以保证在查找,删除,添加等操作的时候在对数期望时间内完成,这个性能是可以和平衡树来相比较的,而且在实现方面比平衡树要优雅,这就是跳跃表的长处。跳跃表的缺点就是需要的存储空间比较大,属于利用空间来换取时间的数据结构。接下来我们思考三个问题:思考三个问题 跳跃表的底层结构是什么样的,为什么可以支撑它在对数期望时间内完成基本操作(增删改查)? 在跳跃表中,完成一个元素的增删改查的详细...

2020-07-05 23:12:16

es开发之聚合数据结果不精确

1、实战开发遇到聚合问题请教一个问题,ES 在聚合的时候发生了一个奇怪的现象聚合的语句里面size设置为10和大于10导致聚合的数量不一致,这个size不就是返回的条数吗?会影响统计结果吗?dsl语句摘要(手机敲不方便,双引号就不写了):aggs:{topcount:{terms:{field:xx,size:10}}}就是这个size,设置10和大于10将会导致聚合结果不一样,难道是es5.x的bug吗?以上是实战中的真实问题,基于这个问题,有了本篇文章。本文探讨的聚合主要指:ter

2020-07-05 20:10:31

生产的一个问题的通彻思考:Eureka注册中心集群如何实现客户端请求负载及故障转移?

前言先抛一个问题给我聪明的读者,如果你们使用微服务SpringCloud-Netflix进行业务开发,那么线上注册中心肯定也是用了集群部署,问题来了:你了解Eureka注册中心集群如何实现客户端请求负载及故障转移吗?可以先思考一分钟,我希望你能够带着问题来阅读此篇文章,也希望你看完文章后会有所收获!背景前段时间线上Sentry平台报警,多个业务服务在和注册中心交互时,例如续约和注册表增量拉取等都报了Request execution failed with message : Conne

2020-07-01 19:54:45

Apache Kylin开发之概览

Apache Kylin 查询流程源码剖析 - 简书 可能是全网最深度的 Apache Kylin 查询剖析 - 简书一、什么是 KylinApche Kylin 是 Hadoop 大数据平台上的一个开源 OLAP 引擎。它采用多维立方体(Cube)预计算技术,可以将某些场景下的大数据 SQL 查询速度提升到亚秒级别。相对于之前的分钟乃至小时级别的查询速度。Apache Kylin 也是中国人主导的,第一个 Apche 顶级开源项目,在开源社区有较大影响力。Kylin 对于解决的问题有...

2020-07-01 17:16:24

spring之Hystrix从原理到实战剖析

背景分布式系统环境下,服务间类似依赖非常常见,一个业务调用通常依赖多个基础服务。如下图,对于同步调用,当库存服务不可用时,商品服务请求线程被阻塞,当有大批量请求调用库存服务时,最终可能导致整个商品服务资源耗尽,无法继续对外提供服务。并且这种不可用可能沿请求调用链向上传递,这种现象被称为雪崩效应。雪崩效应常见场景硬件故障:如服务器宕机,机房断电,光纤被挖断等。 流量激增:如异常流量,重试加大流量等。 缓存穿透:一般发生在应用重启,所有缓存失效时,以及短时间内大量缓存失效时。大量的缓存不命中

2020-06-30 16:28:10

hive开发之动态插入数据解析

往hive分区表中插入数据时,如果需要创建的分区很多,比如以表中某个字段进行分区存储,则需要复制粘贴修改很多sql去执行,效率低。因为hive是批处理系统,所以hive提供了一个动态分区功能,其可以基于查询参数的位置去推断分区的名称,从而建立分区。1.创建一个单一字段分区表hive> create table dpartition(id int ,name string ) partitioned by(ct string );2.往表里装载数据,并且动态建立分区...

2020-06-30 16:18:18

秒杀系统架构面试经典分析

秒杀业务分析正常电子商务流程: 查询商品 创建订单 扣减库存 更新订单 付款 卖家发货 秒杀业务的特性: 低廉价格 大幅推广 瞬时售空 一般是定时上架 时间短、瞬时并发量高 秒杀技术挑战假设某网站秒杀活动只推出一件商品,预计会吸引1万人参加活动,也就说最大并发请求数是10000,秒杀系统需要面对的技术挑战有:对现有网站业务造成冲击...

2020-06-29 20:57:35

一次非常有意思的sql优化

一次非常有意思的 SQL 优化经历:从 30248.271s 到 0.001s互扯程序昨天 场景 索引优化 单列索引 多列索引 索引覆盖 排序 场景我用的数据库是mysql5.6,下面简单的介绍下场景课程表createtableCourse(c_idintPRIMARYKEY,namevarchar(10))数据100条学生表:createtableStudent(idintPRI...

2020-06-29 20:56:02

java线程池的原理和美团业务实践应用

随着计算机行业的飞速发展,摩尔定律逐渐失效,多核CPU成为主流。使用多线程并行计算逐渐成为开发人员提升服务器性能的基本武器。J.U.C提供的线程池ThreadPoolExecutor类,帮助开发人员管理线程并方便地执行并行任务。了解并合理使用线程池,是一个开发人员必修的基本功。本文开篇简述线程池概念和用途,接着结合线程池的源码,帮助读者领略线程池的设计思路,最后回归实践,通过案例讲述使用线程池遇到的问题,并给出了一种动态化线程池解决方案。一、写在前面1.1 线程池是什么线程池(Thread

2020-06-28 17:46:07

API接口接口-如何设计?安全如何保证?签名如何实现?防重如何实现?

说明:在实际的业务中,难免会跟第三方系统进行数据的交互与传递,那么如何保证数据在传输过程中的安全呢(防窃取)?除了https的协议之外,能不能加上通用的一套算法以及规范来保证传输的安全性呢?下面我们就来讨论下常用的一些API设计的安全方法,可能不一定是最好的,有更牛逼的实现方式,但是这篇是我自己的经验分享.一:token 简介Token:访问令牌access token, 用于接口中, 用于标识接口调用者的身份、凭证,减少用户名和密码的传输次数。一般情况下客户端(接口调用方)需要先向服务器端申请

2020-06-24 14:35:48

不要再 if...else了,才能看出你的编码功底

前言if...else 是所有高级编程语言都有的必备功能。但现实中的代码往往存在着过多的 if...else。虽然 if...else 是必须的,但滥用 if...else 会对代码的可读性、可维护性造成很大伤害,进而危害到整个软件系统。现在软件开发领域出现了很多新技术、新概念,但 if...else 这种基本的程序形式并没有发生太大变化。使用好 if...else 不仅对于现在,而且对于将来,都是十分有意义的。今天我们就来看看如何“干掉”代码中的 if...else,还代码以清爽。问题一:i.

2020-06-22 11:11:18

很有价值的提升RabbitMQ消费速度的一些实践

RabbitMQ是一个开源的消息中间件,自带管理界面友好、开发语言支持广泛、没有对其它中间件的依赖,而且社区非常活跃,特别适合中小型企业拿来就用。这篇文章主要探讨提升RabbitMQ消费速度的一些方法和实践,比如增加消费者、提高Prefetch count、多线程处理、批量Ack等。增加消费者这个道理比较容易理解,多个人搬砖的速度肯定比一个人要快很多。不过实际情况中还需要面对一些技术挑战,比如后端处理能力、并发冲突,以及处理顺序。后端处理能力:比如多个消费者都要操作数据库,那..

2020-06-16 20:21:07

业务修养篇-业务理解有偏差,产品和开发如何达成共识?

阿里妹导读:在考虑如何对业务模型进行抽象从而建立领域模型之前,必须解决业务与产品、开发之间“沟通”的问题。如何让业务人员和开发人员顺畅沟通,在业务流程设计中不遗漏成败攸关的业务场景?如何才能让业务沟通的过程顺畅过渡到架构设计、编码乃至测试?阿里巴巴技术专家李建结合团队的实际案例,分享了他们在使用 Event Storming(事件风暴) 进行领域建模时的经验、收获和思考。一 软件研发的困境“失效”的语言交流日常研发过程中不同角色经常需要进行各种交流:沟通业务需求、讨论产品原型...

2020-06-13 11:26:21

架构进阶篇之解决方案架构设计实践的方法、模型与思维

本文旨在探讨解决方案架构设计过程的方法,原则与逻辑思想以及根据经验提炼出的一套解决方案架构的方法。这是我前一段时间帮公司面试解决方案架构师时的感慨。跟几位 10+ 年经验的技术软件架构师面试下来,感觉技术能力都很过关, 尤其是对新技术,能从架构师的角度思考问题,对架构设计有成体系的理解与输出。但是,当我在围绕着一些比较宏观灵活的解决方案架构方法与思维上的问题时,比如: 跨领域发展的解决方案架构设计方法与模型 从模糊的商业问题或抽象的业务愿景落到解决方案的方式 如...

2020-06-13 10:20:05

spark的性能优化boss版

1.分配资源提交spark作业时,用的spark-submit shell脚本,里面调整对应的参数/usr/local/spark/bin/spark-submit \--class cn.spark.sparktest.core.WordCountCluster \--num-executors 3 \ 配置executor的数量--driver-memory 100m \ 配置driver的内存(影响不大)--executor-memory 100m \ 配置每个executor的.

2020-06-12 11:50:48

高并发:RocketMQ 削峰带项目地址的实战

MQ的主要特点为解耦、异步、削峰,该文章主要记录与分享个人在实际项目中的RocketMQ削峰用法,用于减少数据库压力的业务场景,其中RocketMQ的核心组件概念如下: Producer:生产发送消息 Broker:存储Producer发送过来的消息 Consumer:从Broker拉取消息并进行消费 NameServer:为Producer或Consumer路由到Broker 其中消费流程有以下几点是必须注意的: RocketMQ的Consumer获取消

2020-06-10 20:49:45

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv4
    勤写标兵Lv4
    授予每个自然周发布9篇以上(包括9篇)原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。