自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

一个真实、有温度的无名小卒

公众号:焗个面包

  • 博客(180)
  • 收藏
  • 关注

原创 kafka consumer group设计的巧妙以及讨厌的rebalance

文章目录一.consumer group的特性二.特性导致的好处三.每个group如何管理它的offset四.Rebalance一.consumer group的特性consumer group下可能有一个或多个consumer实例group ID是一个字符串,在一个kafka集群中,它标识唯一的consumer group一个consumer group下面的实例只能消费一个主题的分区,当然这个分区也能被其它consumer group消费二.特性导致的好处由上面三个特性,我们能想到kaf

2020-06-20 14:49:48 521

原创 es加快查询速度的小套路

一. es查询速度与内存的关系当我们向es里面写数据的时候,实际上都会写到磁盘文件里面去,查询的时候,os会将磁盘文件里的数据自动缓存到file system cache中去。所以es的性能非常依赖机器的内存,当机器内存比较小的时候查询速度就会受到限制,如果我们给filesystem cache更多的内存,尽量让内存可以容纳所有的idx segment file索引数据文件,那么搜索的时候就基本是在走内存的,少了从磁盘随机io到内存中,查询速度立马变成ms级别。二. 没有银弹的优化手段所以从上面es查

2020-06-13 23:18:28 2984

原创 那些不能使用kafka默认的配置有哪些?

前言毫无疑问首先需要了解kafka各组件的概念,然后我个人觉得在日常的开发中其实去熟悉kafka的集群配置是非常重要且优先级很高的一环,因为原理性的东西很多,想去学习源码更不是一天两天就能做完的事,但是生产环境的kafka集群配置不当可能会引发未知且棘手的问题,最后一查问题根源就出在开始最简单的配置上。Broker端配置log.dirslog.dirs这个参数没有默认值,必须要去指定!!!它指定了Broker需要使用的若干个文件路径,它的格式比如:/home/kafka1,/home/kafka2

2020-06-09 22:59:59 440

原创 (六)go-kit集成jaeger实现服务链路追踪

前言微服务架构是一个分布式架构,实际开发中,我们按照业务要求划分服务单元,一套系统往往由多个业务单元构成。在这个场景中,一个请求肯能要经历多个业务单元的处理才能完成响应,如果出现了异常或者错误,很难定位。在往常的查询中我们往往会采取查询日志的办法定位问题,这种方法是个办法,但不是个好办法,我们需要一件工具来解放自己,在这种背景下就可以引入我们的链路追踪工具。安装jaeger通过docker安装jaeger环境:sudo docker run -d -e COLLECTOR_ZIPKIN_HTTP_PO

2020-06-02 13:28:56 771

原创 (五)go-kit 利用prometheus和grafana实现 API监控

前言我们的服务上线了,除了从日志可以查看一些运行情况外,其实现在服务接口对于我们来说是一个黑盒,我们不知道每个服务接口的延时,被调用次数等等指标的运行情况,我们更需要历史的指标数据知道我们的系统瓶颈在哪,然后对应去做相关的优化,如果想实时知道这些指标,就需要我们的api监控。本文代码地址地址(github地址)[https://github.com/lightTrace/cells/tree/master/cell-monitor]metric插件这里在/cell/register/middlewa

2020-06-02 11:36:45 1281

原创 (四)go-kit服务注册与发现

前言为什么需要服务注册与发现?在微服务架构下,原单体服务被拆分为多个服务独立部署,维护数量过多的服务地址,运维人员无法高效工作。所以,在微服务架构中引入了服务注册中心,用于接受和维护各个服务地址的地址信息。客户端或者网关可以通过注册中心查询目标服务地址,动态实现服务访问,并且在此基础上实现服务负载均衡。本文代码地址:gtihub地址1. 启动consul镜像本文基于consul进行服务注册,先基于docker启动一个consul,在docker目录下新建docker-compose-consul.

2020-06-02 11:10:47 783

原创 (三)go-kit服务接口限流

前言限流这层按说是应该在网关那做的,这里为了学习go kit暂时放在这里在middleware/rate.go使用gokit的endpointMiddleWare定义一个限流中间件,在main函数里面将要限流的接口用这个函数装饰一下,这个接口就能实现限流相关功能,本项目地址github地址1.限流原理常见的限流方法有令牌桶和漏桶令牌桶令牌桶算法的原理是系统会以一个恒定的速度往桶里放入令牌,而如果请求需要被处理,则需要先从桶里获取一个令牌,当桶里没有令牌可取时,则拒绝服务。漏桶漏桶算法思路很

2020-05-29 15:44:04 772

原创 (二)go-kit自定义error处理

前言本文介绍go-kit自定义error处理,本文地址github地址,这样做的目的是返回自定义的文本错误,将http状态码直接写进http status code里面,这有利于日志错误分类的收集和统计1.自定义一个解码函数MyErrorEncoder在util/myerror.go里面实现官方的error接口,便于实现我们自己定义的error方法,并且自定义一个解码函数MyErrorEncoderfunc MyErrorEncoder(_ context.Context, err error, w

2020-05-29 15:18:18 533

原创 (一)go-kit构建http服务

使用go-kit构建一个http服务1.创建servicegokit的设计理念,是将Service将作为核心业务逻辑实现部分。本文使用UserService实现IUserService接口获取用户姓名和更新用户姓名的服务,使用map模拟数据库存储更新数据2.创建endpoint使用endpoints.go创建请求、响应模型,即GetUserNameRequest,GetUserNameResponse…,gokit采用装饰着模式,把Service应该执行的逻辑封装到Endpoint方法中执行。

2020-05-29 14:59:17 1202

原创 (序)开箱go-ki从0开始搭建微服务

前言笔者目前从事go后端的微服务开发,用的是公司自研的框架,这个框架有好有坏,在业务的快速发展期让我们能迅速迭代业务,但是以成熟的微服务体系来看一些基础设施并不完善,而且我来的时候框架都做好了,主要是堆业务代码和性逻辑代码能优化。其实目前说起微服务,Java springcloud那套体系还是挺成熟的,而具体到go上面,对于我自己来说有点茫然,然后调研了几个go成熟的微服务框架,感觉从go kit这个微服务工具箱从0开始搭建自己的微服务会好些,使用go kit感觉会灵活些,扩展也比较方便,对于改造原有

2020-05-26 22:27:09 715

原创 拆轮子:一个接地气的go语言的开源网关(一)

前言最近刷github刷到一个go语言开发的网关,github地址是项目地址,首先看了看该网关的功能有:流量控制(Server或API级别)熔断(Server或API级别)负载均衡服务发现插件机制路由(分流,复制流量)API 聚合API 参数校验API 访问控制(黑白名单)API 默认返回值API 定制返回值API 结果CacheJWT AuthorizationAPI Metric导入PrometheusAPI 失败重试后端server的健康检查开放管理API(GRP

2020-05-15 18:15:53 665

原创 随笔-企图理解DDD的领域之代码能力下沉

今天一直在坐火车,一直在想以前很多大佬关于DDD的分析与拆解的文章,说实话光是其中比如限界上下文,子域,聚合根等等,这些抽象的术语就像拦路虎一样去了解DDD,真的想起来mvc,mvvc是多么容易让人理解呀,那真是个十分和谐且愉快的学习过程呢。好了,扯远了,首先我们都知道衡量代码写的好不好,复用性和内聚性是不可或缺的评价因素。同样这两个指标也是指导代码能力下沉的关键指标。大家肯定都会说这两个指标都...

2020-04-06 22:42:36 729

原创 什么时候的痛让我们觉得微服务好

笔者参与过小型对并发要求不高的政务系统到目前互联网公司快速迭代的微服务系统开发,单体与微服务的架构的优缺点介绍的很好了,我只谈谈自己什么时候真正能体会到微服务带来的的好处呢,就是当我们的系统业务越来越大的时候,然后每一次全部部署都会让你感到痛的时候,这个痛主要表现在两点:1.不同功能的发布时间羁绊:功能A做好了可以被部署了,但是功能B还在开发中,而且功能A和功能B还有千丝万缕联系,还必须要让功能...

2020-04-03 23:34:12 177

原创 以假想公司的视角来看微服务网关和BFF的演化

序本文主要通过虚拟一个公司的业务发展,来观看微服务网关和BFF的演化v1版本的soa服务在2010年左右有个叫highShop的电商互联网公司成立了,他有一定的业务规模,内部已经完成了单体应用拆分,soa服务化,采用的是浏览器–>nginx–>服务端web应用–>soa服务,这样的架构帮助highShop公司度过一段时期。时间转眼来到2012年,智能手机发展越来越快,无线...

2020-03-27 10:42:11 340

原创 流量突增限流策略

思考由于疫情,我们做的是互联网教育类,所以今年我们的产品流量增加了两倍,但是通过扩容加机器资源的方式完全扛住了,突然想到如果是爆发式的,假如流量突增10倍甚至20倍该如何处理呢?仔细思考了了一下这个问题,加上查找资料,就想简单写写有哪些方案。场景假如一个系统最大只能接受10w的并发访问量,现在我们有一个秒杀活动,秒杀活动开始的时候预计并发访问量可以达到100w。很明显100w远远超过系统正常...

2020-03-24 17:10:08 900

原创 简单的事做好之代码的错误处理

序无论什么语言,处理错误都不是一件难的事,但是想把每个错误处理写好符合规范并不是容易的事。我只是对我在编程过程中对处理错误的一些思考和教训,肯定不是全对的,如果你觉得我是错的或者你有更好的方法,请不吝指教。一.请不要忽略任何错误在任何时候我们都不应该忽略错误,大部分的错误都需要捕捉处理,除非一些不重要能容忍的错误可以打印出来,但一定不能忽略,不然会给维护带来非常大的困难二.错误需要一个字典...

2019-10-20 20:36:51 564

原创 后端接口签名的一点思考

好久没写博客了,打起字来都不知道怎么总结文字了。首先,明白一点,接口只要暴露在公网就没有了绝对的安全,我们使用https也好,jwt也好还是签名也罢,都是将我们接口协议被攻击的成本大大增加,使得黑客或者别有用心之人去衡量攻击我们的服务收益无限接近于0,但是难度无限增大。既然是一点思考,那么必然产生问题?1.为什么去做签名,或者说他的好处是什么?2.签名怎么做?3.签名和https的区别?...

2019-08-29 23:12:19 2354 1

原创 用echart玩点好玩的--酷炫热力图

先bb两句首先承认酷炫是标题党,哈哈哈,参考了echart的官网开发示例,对一些样式做了自己的改动,变得稍微极客一点,另外在html中使用了ajax获取现成json数据,如果你有接口的话可以直接请求接口!上效果图其中气泡的大小和颜色都是根据各省不同的人数来展示,颜色还可以你自己调整成你认为好看的,波纹是动态的辐射,感觉做的很low,直接用的官方文档调整的,应该有更帅的。代码地址:htt...

2019-03-19 22:37:59 5095

原创 当软件更改的成本代价越来越低,你的产品就会越来越强!!!

我今天看了一篇文章,大概是讲不是所有的公司都需要kubernets,里面讲的有些东西确实很中肯,但我觉得它是片面的。如果是一个互联网公司,即使你刚刚才成立,用户量很少,你也应该考虑使用例如kubernets类似的开源工具。为什么这么说呢?相信对于所有的程序员来说,需求的变动导致自己更改代码都是一件不怎么愉快的事,而这还仅仅是代码层面的改动。有天cto告诉你我们用户增量越来越大,考虑下集群的使...

2019-02-01 11:01:14 622

原创 mysql常用的优化操作

1. explain查看SQL执行计划在查询语句前加explain来查看SQL执行计划,其中五列比较重要:type列,连接类型。一个好的sql语句至少要达到range级别。杜绝出现all级别key列,使用到的索引名。如果没有选择索引,值是NULL。可以采取强制索引方式key_len列,索引长度rows列,扫描行数。该值是个预估值extra列,详细说明。注意常见的不太友好的值有:Usi...

2019-01-19 18:09:48 340

原创 我是一名go吹?

从性能上,依照公开的 benchmark,Golang 和 Java、Scala 大概在一个量级,是 Python 的 30 倍左右。其次 Golang 的编译速度较快,这点相对于 Java、Scala 具有比较明显的优势,再次其语言特性决定了 Golang 的开发效率较高,此外因为缺乏 trycatch 机制,使得使用 Golang 开发时对异常处理思考较多,因此其上线之后维护成本相对较低。但 ...

2019-01-17 16:25:46 610

原创 Java的通过管道来实现线程通信

前言与一点思考最近使用golang的channel并发编程非常爽,又快又方便还不用考虑什么线程不安全的问题,同时在想老相好Java的channel类似实现有没有呢?Java四种通信方式,分别是synchronized关键字,while(true)轮询,wait和notify以及java.io.Pipe,实际上这个java.io.Pipe和go的channel逻辑是相似的。Java管道的认识...

2019-01-17 15:31:56 743

原创 golang遍历channel时return问题

今天我在遍历channel里的数据的时候加入了业务代码,业务代码里有return,一但return之后遍历就停止了,例如:package mainimport ( "fmt" "sync" "time")func consumer(cname string, ch chan int) { //可以循环 for i := range ch 来不断从 channel 接...

2019-01-15 17:01:46 1026

原创 Jmeter模板化参数并发测试

http请求${cameraId}就是csv文件数据设置要扔进去的参数csv文件数据设置这个exist_id_8209.txt存放的就是cameraId,如下:15056079621715970021715616778024697721317004615056174078024694621715910278024663578024575815056122921715...

2019-01-09 18:27:53 634

原创 golang并发channel使用sync.WaitGroup保证所有协程结束并处理额外业务

问题描述假如一个http请求是很多的数组id,服务端拿到数组id去执行业务,但是这个业务执行的时间教长,肯定不能循环执行,要让golang的多协程发挥作用,但是我想对某些id返回的结果做特殊处理,必须保证所有的协程都跑完了才能返回结果,我发现将id放进channel然后多个协程去消费思路是正确的,但是要保证所有的协程精确的跑完,用sync.WaitGroup挺合适的,也许还有更好的办法,但是这是...

2019-01-09 16:01:54 1453

原创 Java static方法块只获取一次对象句柄供全局使用

前言说实话,以前没碰见过必须只获取一次对象供全局使用的地方,或者说多重复实例化获得新的句柄对程序也没什么影响,但是这种习惯是非常很不好的,比如我最近在向hdfs写入文件的时候我希望FileSystem fs这个句柄只获得一次,后面所有的fs操作都用这一个对象就行,因为有kerberos的验证,如果每次操作都需要获取FileSystem fs这个句柄一来浪费验证的时间,二来会多占用一点内存!代码...

2018-12-25 10:33:18 580

原创 Java操作hdfs出现的问题

前言需求是用golang保存数据到hdfs里面,但由于有kerberos的验证问题,golang的开源轮子没有验证的东西,遂放弃golang,使用Java来封装相关接口。具体的操作代码就不说了,说说几个遇到的问题。springboot 、hadoop日志冲突问题需要去除hadoop里面的slf4j相关以及tomcat的servlet的相关依赖<dependency> &...

2018-12-19 16:50:52 642

原创 windows安装Anaconda3,Anaconda3安装scrapy抓取链家数据入门例子

一 windows安装Anaconda3主要介绍scrapy在win7下的安装,这里的话并不推荐大家用python+pip安装,推荐使用Anaconda进行安装,为什么呢?因为如果你选择前者,填坑的过程可能会让你绝望,说不定会让你砸键盘、内分泌失调,所以强烈建议用Anaconda!不信的话大家可以试试!这里的话简单介绍一下anaconda的下载,下载地址为:https://www.anacon...

2018-12-12 19:40:05 1159 1

原创 linux mysql5.7以上设置中文字符集不在/mysql/my.cnf下面了

今天安装了最新的mysql,想改字符集为utf-8防止中文插入数据乱码,然后my.cnf配置文件啥都没有,改了也没用(手动笑哭)。正确姿势:1.vim编辑 /etc/mysql/mysql.conf.d/mysqld.cnf2.[mysqld]后面添加 character_set_server=utf8 保存退出3.#service mysql restart4.登录mysql...

2018-11-30 16:43:11 949

原创 五行命令使用docker搭建hadoop集群

前言如果个人想搭建一个hadoop集群玩玩,之前都是采用虚拟机的模式,每个节点都要一套配置,非常的复杂,在网上看到有大佬已经做好了镜像和脚本,拿来五行命令就能使用了!拉取镜像sudo docker pull kiwenlau/hadoop:1.0克隆仓库git clone https://github.com/kiwenlau/hadoop-cluster-docker桥接网络建...

2018-10-26 18:41:55 1149 2

原创 gitlab上CI/CD的一些小实践和理解

前言之前用jenkins做的CI/CI,现在在新公司的业务CI/CD的流程是全部跑在gitlab上面,弄了一两天终于算是能完全跑通了,其实归根到底还是要把持续集成的部署给拆开成链式的,一步步执行,即使每次迭代一点点东西也可以使得逻辑依然清晰。我这里主要记录三个主流程,代码只是部分展示,不能实践,只是简单的记录下自己的操作思路。三个流程:编译代码–打包成镜像推送到registry–远程让指定...

2018-10-19 17:59:19 2554

原创 go的协程及channel与web开发的一点小实践

前言之前在网上看go的协程和channel的东西,感觉都是一个main方法闯天下,并没有很好的体会到channel的美妙,然后自己花了点时间写了一点简单的demo,然后不断的变换,去看效果和输出。思路我用channel去实现产生累积的web请求,然后用sleep去休眠消费者协程造成处理业务场景的假象,然后开多个消费者协程去处理web请求。代码package mainimport (...

2018-10-11 20:54:13 1120

原创 基于Netty实现的WebSocket聊天室--支持多人同时在线及定时心跳检测

[代码地址](https://github.com/lightTrace/chat-room-by-netty)项目简介基于Netty实现的WebSocket聊天室,实现的功能如下:支持昵称登录;支持多人同时在线;同步显示在线人数;支持文字和表情的内容;浏览器与服务器保持长连接,定时心跳检测;快速启动将代码下载下来,导入idea为maven项目,启动HappyCh...

2018-10-10 14:35:45 3824

原创 netty创建聊天室服务端及单机并发测试结果

前言netty应该是Java网络通信开发的杀手级框架,它提供异步,事件驱动的网络应用程序框架和工具。至于netty的概念和优点很多,在此我就不献丑了,我纯粹实在官方文档的小例子基础上做一些测试以印证自己心中的想法。首先搭建一个netty服务端,新建一个maven项目,引入依赖: <dependency> <groupId&

2018-10-09 13:05:48 1502

原创 浅谈毕业院校对程序员的影响--蝴蝶如何飞的过沧海?

最近看到各大厂的的校招,看到985/211cs专业拿的offer我真是感叹不已,一是感叹行业趋势的重要性,因为同样的学校不同的专业拿到offer的待遇差别之大让人不胜唏嘘,二是感叹学校的名头太重要了,很多大厂筛简历除非是特别优秀的,211以下直接ctrl+d了。总是会有人不胜其烦的争论学校重要还是能力重要,这里永远是一个无法明确的答案,因为能力和学校的标签无法彻底割裂,因为学校的标签也是能力转换...

2018-10-01 19:45:09 535 2

原创 logrus hook输出日志到本地磁盘

logrus是go的一个日志框架,它最让人激动的应该是hook机制,可以在初始化时为logrus添加hook,logrus可以实现各种扩展功能,可以将日志输出到elasticsearch和activemq等中间件去,甚至可以输出到你的email和叮叮中去,不要问为为什么可以发现可以输入到叮叮中去,都是泪,手动笑哭!言归正传,这里就简单的通过hook机制将文件输出到本地磁盘。首先go get ...

2018-09-30 14:30:14 8778 2

原创 个人博客已开通

个人博客已开通:链接地址。采用Hexo+github+yilia,这里采用的主题是yilia。感觉大家都常用的next主题并不好用,每次点击栏目,表头也得跟着刷新,而且不做定制化的情况下,yilia的UI个人感觉比next的好看很多。域名是在阿里云之前活动1块钱购买的,直接添加一个解析域名的记录到yourgithubname.github.io即可。...

2018-09-28 12:09:40 973

原创 go调用python报错pkg-config: exec: "pkg-config": executable file not found in %PATH%

我开始是在windows环境下直接go get github.com/sbinet/go-python会报错pkg-config: exec: “pkg-config”: executable file not found in %PATH%后来查网上资料无果,全是复制粘贴一个人的,我只好看官方文档和报错来解决问题。官方文档写的是If go get + pkg-config failed...

2018-09-27 20:30:35 10624 6

原创 go使用grpc

前言最近需要使用grpc框架,然后到网上找资料,在此我强烈鄙视那些复制粘贴的家伙,第一步就错了go get google.golang.org/grpc 这个根本安装不起,是官方将代码迁移了,会报错:package google.golang.org/grpc: unrecognized import path "google.golang.org/grpc"(https fetch...

2018-09-26 19:35:35 2535 1

原创 两次面试的经历

由于想换一个新环境,也想能找到能覆盖我新学技术的真正的业务场景,毕竟虚拟机和云服务器的集群玩起来还是不过瘾,我在一个月前提了离职,然后分别于9月11号和9月14号参加两次面试。9月11号直接去的第一家公司,有笔试题都很基础,但是sql有关索引的部分可能不是最优的解决办法,但是我在纸上写了可能的几种更好的解决办法,但是不确定,因为一直在刷k8s和docker,反而像这种基本的数据库层面的东西没有太...

2018-09-26 15:33:26 1010

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除