项目地址:https://github.com/tal-tech/cdsClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS)。它有着优异的性能,可以快速部署和运行。不过要想使用ClickHouse搭建起数仓用于数据分析,一个重要的问题就是数据如何进入ClickHouse?我们希望数据源的变化能够自动实时地被同步到ClickHouse,而且支持方便的动态的添加新的数据源(新的数据库,表),能够自动的生成对应数据源的schema。go-zero 团队使用go语言围绕Cl...
-
Go 大数据生态迎来重要产品 CDS
-
Golang 限流器的使用和实现
限流器是服务中非常重要的一个组件,在网关设计、微服务、以及普通的后台应用中都比较常见。它可以限制访问服务的频次和速率,防止服务过载,被刷爆。 限流器的算法比较多,常见的比如令牌桶算法、漏斗算法、信号量等。本文主要介绍基于漏斗算法的一个限流器的实现。文本也提供了其他几种开源的实现方法。 基于令牌桶的限流器实现 在golang 的官方扩展包 time 中(github/go/time),提供了一个基于令牌桶算法的限流器的实现。 原理 令牌桶限流器,有两个概念: 令牌:每次都需要拿到令牌后,才可以访问...
-
Go 中基于 IP 地址的 HTTP 限流
如果你想限制一个正在运行的 HTTP 服务的请求量,你可以使用现有的轮子工具,比如说 [github.com/didip/tollbooth](https://github.com/didip/tollbooth) ,但是如果写一些简单的东西,你自己去实现也没有那么难。 我们可以用这个包 `x/time/rate` 。 在这篇教程中,我们将基于用户的 IP 地址构造一个简单的限流中间件。 ## Pure HTTP Server 我们来开始构建一个简单的 HTTP 服务,这...
-
雪崩利器 hystrix-go 源码分析
阅读源码的过程,就像是在像武侠小说里阅读武功秘籍一样,分析高手的一招一式,提炼出精髓,来增强自己的内力。 之前的帖子说了一下微服务的雪崩效应和常见的解决方案,太水,没有上代码怎么叫解决方案。github上有很多开源的库来解决雪崩问题,比较出名的是Netflix的开源库hystrix。集流量控制、熔断、容错等于一身的java语言的库。今天分析的源码库是 hystrix-go,他是hystrix的的go语言版,应该是说简化版本,用很少的代码量实现了主要功能。很推荐朋友们有时间读一读。 使用简单 hy...
-
Go框架解析-gin
前言 今天是我golang框架阅读系列第三篇文章,今天我们主要看看gin的框架执行流程。关于golang框架生命周期源码阅读下面是我的计划: 计划 状态 Go框架解析-beego done Go框架解析-iris done Go框架解析-gin done Go框架解析-echo doing Go框架解析-revel doing Go框架解析-Martini doing 再完成各个golang框架生命周期的解析之后,我会计划对这几个框架的优略进行一个系列分析,由于业内大多都是性能分析的比较多,我可...
-
关于收集,标准化和集中化处理Golang日志的一些建议
依赖分布式系统的公司组织和团队经常使用Go语言编写其应用程序,以利用Go语言诸如通道和goroutine之类的并发功能。如果你负责研发或运维Go应用程序,则考虑周全的日志记录策略可以帮助你了解用户行为,定位错误并监控应用程序的性能。 这篇文章将展开聊一些用于管理Go日志的工具和技术。我们将首先考虑要使用哪种日志记录包来满足各种记录要求。然后会介绍一些使日志更易于搜索和可靠,减少日志资源占用以及使日志消息标准化的技术。 日志包的选择 Go标准库的日志库非常简单,仅仅提供了print,panic和f...
-
线上大量CLOSE_WAIT的原因深入分析
本文载自 https://juejin.im/post/5c0cf1ed6fb9a04a08217fcc 这一次重启真的无法解决问题了:一次 MySQL 主动关闭,导致服务出现大量 CLOSE_WAIT 的全流程排查过程。 近日遇到一个线上服务 socket 资源被不断打满的情况。通过各种工具分析线上问题,定位到问题代码。这里对该问题发现、修复过程进行一下复盘总结。 先看两张图。一张图是服务正常时监控到的 socket 状态,另一张当然就是异常啦! 图一:正常时监控 图二:异常时监控 从图中的表...
-
Go Web编程--SecureCookie实现客户端Session管理
在Web应用开发中Session是在用户和服务器之间进行交换的非持久化交互信息。当用户登录时,可以在用户和服务器之间生成Session,然后来回交换数据,并在用户登出时销毁Session。gorilla/sessions软件包提供了易于使用的Go语言Session实现。该软件包提供了两种不同的实现。第一个是文件系统存储,它将每个会话存储在服务器的文件系统中。另一个是Cookie存储,它使用我们上篇文章讲的SecureCookie在客户端上存储会话。同时还提供了用户自定义Session存储实现的选...
-
微服务-高并发下接口如何做到优雅的限流
#### 什么是限流?为什么要限流 通俗的来讲,一根管子往池塘注水,池塘底部有一个口子往外出水,当注水的速度过快时,池塘的水会溢出,此时,我们的做法换根小管子注水或者把注水管子的口堵住一半,这就是限流,限流的目的就是为了防止池塘的水溢出,放在软件开发中,一台硬件的CPU和内存总归是有限的,能处理的请求量是有一个阈值的,就跟人的精力一样是有限的,超过这个限度系统就会异常,人就会生病。 明白了什么是限流,为什么要限流,那么互联网公司在各种业务大促中,为了保证系统不被流量压垮,会在系统流量...
-
Go Web 编程--如何确保Cookie数据的安全传输
什么是Cookie Cookie(也叫Web Cookie或浏览器Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态。Cookie使基于无状态的HTTP协议记录稳定的状态信息成为了可能。 Cookie主要用于以下三个方面: 会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息) 个性化设置(如用户自定义设置、主题等) 浏览器行为跟踪(如...
-
Go框架解析-gin
前言 今天是我golang框架阅读系列第三篇文章,今天我们主要看看gin的框架执行流程。关于golang框架生命周期源码阅读下面是我的计划: 计划 状态 Go框架解析-beego done Go框架解析-iris done Go框架解析-gin done Go框架解析-echo doing Go框架解析-revel doing Go框架解析-Martini doing 再完成各个golang框架生命周期的解析之后,我会计划对这几个框架的优略进行一个系列分析,由于业内大多都是性能分析的比较多,我可...
-
Gin(一):Hello Gin
更多文章 狂点 -> ISLAND 什么是 Gin Gin 是一个用 Golang 写的 http web 框架。 这是来自 Gin Github 上的描述。 开发环境 GoLand 2019.2 EAP GoLang 1.11.5 采用 Go Modules 进行管理 快速入门 用 GoLand 新建项目的时候,我们选择 Go Modules(vgo) ,填写我们的项目地址和项目名称,我们命名为 GinHello 。 点击 Create ,此时 Goland 为我们生成了项目目录,Go 项目的...
-
Micro In Action(尾声): 分布式计划任务
# Micro In Action(尾声): 分布式计划任务 ![Micro In Action](https://s1.ax1x.com/2020/03/28/GkhGy4.png) > 本文作者:Che Dan > > 原文链接:https://medium.com/@dche423/micro-in-action-9-cron-job-dabec09058e1 本文是《Micro In Acton》 系列的最后一篇。 我们在前面的文章中已经探讨过了利于Micro...
-
Micro In Action(七):熔断与限流
[Micro In Action](https://s1.ax1x.com/2020/03/28/GkW63D.png) > 本文作者:Che Dan > > 原文链接:https://medium.com/@dche423/micro-in-action-7-cn-ce75d5847ef4 本文是[Micro](https://micro.mu/)系列文章的第七篇。前面文章覆盖了创建与调用服务的基本流程。 接下来我们将转到一些高级特性。 今天来谈谈**熔断与限流**。 ...
-
Micro In Action(六):服务发现
![Micro In Action](https://s1.ax1x.com/2020/03/28/Gkcgw6.png) > 本文作者:Che Dan > > 原文链接:<https://medium.com/@dche423/micro-in-action-5-message-broker-d975c2f28a55> 本文是[Micro](https://micro.mu/)系列文章的第六篇。我们将从最基本的话题开始,逐步转到高级特性。 今天来谈谈Micro中的服务发...
-
Micro In Action(五):Message Broker
![Micro In Action](https://s1.ax1x.com/2020/03/18/8Da5pd.png) > 本文作者:Che Dan > > 原文链接:https://medium.com/@dche423/micro-in-action-5-message-broker-d975c2f28a55 本文是[Micro](https://micro.mu/)系列文章的第五篇。我们将从最基本的话题开始,逐步转到高级特性。今天的话题是 Message Broker。...
-
Micro In Action(四):Pub/Sub
![Micro In Action](https://s1.ax1x.com/2020/03/17/8a2858.png) > 本文作者:Che Dan > > 原文链接:https://medium.com/@dche423/micro-in-action-call-service-cn-5ac679194636 本文是[Micro](https://micro.mu/ "Micro")系列文章的第四篇。我们将以实际开发微服务为主线,顺带解析相关功能。从最基本的话题开始,逐步...
-
Micro In Action(三):调用服务
![](https://s1.ax1x.com/2020/03/14/8l7qSA.png) > 本文作者:Che Dan > > 原文链接:<https://medium.com/@dche423/micro-in-action-call-service-cn-5ac679194636> 本文是[Micro](https://micro.mu/)系列文章的第三篇。我们将以实际开发微服务为主线,顺带解析相关功能。从最基本的话题开始,逐步转到高级特性。 今天将讨论如何调用服务...
-
Micro In Action(二):项目结构与启动过程
> 本文作者:Che Dan,授权发布 > > 原文链接:https://medium.com/@dche423/micro-in-action-part2-cn-9bbc33d356eb 本文是[Micro](https://micro.mu/)系列文章的第二篇。我们将以实际开发微服务为主线,顺带解析相关功能。从最基本的话题开始,逐步转到高级特性。 --- ## 项目结构 在上篇文章中我们创建了一个简单的项目, 并过将它运行起来。本篇将继续这个旅程,先介绍项目结构...
-
Micro In Action(一):入门
![](https://s2.ax1x.com/2020/03/10/8FZ2kD.png) 这个系列聊一聊 [Micro](https://micro.mu/), 我们将以实际开发微服务为主线,顺带解析相关功能。从最基本的话题开始,逐步转到高级特性。 Micro 很强大,掌握后使用起来也相当便利。 但它的演进速度非常快, 导致其文档有严重缺失和滞后。 很多功能没有文档;很多基本问题不得不去 GitHub 上提 issue 或去 Slack 里面问,又得不到什么反馈。最后, 查...
-
带入gRPC:分布式链路追踪 gRPC-Opentracing-Zipkin
带入gRPC:分布式链路追踪 gRPC + Opentracing + Zipkin 原文地址:带入gRPC:分布式链路追踪 gRPC + Opentracing + Zipkin项目地址:https://github.com/EDDYCJY/go... 前言 在实际应用中,你做了那么多 Server 端,写了 N 个 RPC 方法。想看看方法的指标,却无处下手? 本文将通过 gRPC + Opentracing + Zipkin 搭建一个分布式链路追踪系统来实现查看整个系统的链路、性能等指标 ...
-
go平滑重启调研选型和项目实践
原文链接 github 什么是平滑重启 当线上代码需要更新时,我们平时一般的做法需要先关闭服务然后再重启服务. 这时线上可能存在大量正在处理的请求, 这时如果我们直接关闭服务会造成请求全部 中断, 影响用户体验; 在重启重新提供服务之前, 新请求进来也会502. 这时就出现两个需要解决的问题: 老服务正在处理的请求必须处理完才能退出(优雅退出) 新进来的请求需要正常处理,服务不能中断(平滑重启) 本文主要结合linux和Golang中相关实现来介绍如何选型与实践过程. 优雅退出 在实现优雅重启之...
-
Go微服务全链路跟踪详解
在微服务架构中,调用链是漫长而复杂的,要了解其中的每个环节及其性能,你需要全链路跟踪。 它的原理很简单,你可以在每个请求开始时生成一个唯一的ID,并将其传递到整个调用链。 该ID称为CorrelationID¹,你可以用它来跟踪整个请求并获得各个调用环节的性能指标。简单来说有两个问题需要解决。第一,如何在应用程序内部传递ID; 第二,当你需要调用另一个微服务时,如何通过网络传递ID。 什么是OpenTracing? 现在有许多开源的分布式跟踪库可供选择,其中最受欢迎的库可能是Zipkin²和Ja...
-
如何在 Golang API 中避免内存泄漏?
关注公众号:JongSunShine 获取更多资料 建议你在将Golang API投入生成之前阅读此文,此文是基于真实的线上问题修复经历,如有巧合,纯属踩雷! 几个星期前,在修复我们的主服务器的漏洞时,我们尝试了很多方法来调试和修复它,因为它已经投入生产几个星期了。 但是我们总是需要通过我们的自动缩放机制来缓解,使其看起来似乎一切正常。直到后来我们才明白,这是coding中出现了问题。01 架构 我们在整个系统架构中使用了微服务模式。 有一个网关 API (我们称之为主 API )为我们的用户(...