是一个轻量级的分布式定时任务管理平台,它非常轻量小巧,使用简单,我们可以上传、暂停/启动任务,克隆一个任务,修改任务的执行命令,或者查看任务的调度状态、执行日志,开发人员可以采用自己最熟悉的编程语言来编写任务程序,可以是一个控制台程序,也可以是一段 shell 脚本,上传至平台后设置定时执行规则即可。 我要晨读

已有846人晨读

自动化容器的部署、升级和复制; 随时扩展或收缩容器规模,实现容器的弹性扩展; 以集群的方式运行、管理跨机器的容器,并且提供容器间的负载均衡; Kubernetes的自我修复机制使得容器集群总是运行在用户期望的状态。 我要晨读

已有476人晨读

在《Clean Architecture: A Craftsman’s Guide to Software Structure and Design》一书中,著名作家 Robert “Uncle Bob” Martin 提出了一种具有一些重要特性的体系结构,如框架、数据库和接口的可测试性和独立性。 我要晨读

已有697人晨读

我花了很多时间来思考如何在 Go 中处理错误是最好的。我真希望能有一种简单直接的方式来处理错误,一些我们只要让 Go 程序员记住就能使用的规则,就像教数学或字母表一样。 我要晨读

已有827人晨读

本系列文章总共四篇,主要帮助大家理解 Go 语言中一些语法结构和其背后的设计原则,包括指针、栈、堆、逃逸分析和值或者指针传递。这是最后一篇,重点介绍在代码中使用值和指针的数据和语义的设计哲学。 我要晨读

已有555人晨读

随着公司体系的不断庞大,各种服务越来越多,程序员往往需要操心很多代码以外的事情如资源申请、环境配置、性能安全等,导致了开发效率低下。在ECUG 10周年的大会上,同程旅游的首席架构师王晓波分享了同程旅游从传统架构转变为微服务架构,再从微服务架构转变为Serverless架构这个过程中的一些经验,旨在让程序员的开发能更加纯粹快乐,专注于代码。 我要晨读

已有573人晨读

上回在 用 Go 写一个轻量级的 ssh 批量操作工具 里提及过,我们做 Golang 并发的时候要对并发进行限制,对 goroutine 的执行要有超时控制。那会没有细说,这里展开讨论一下。 我要晨读

已有480人晨读

thrift 最初是 facebook 开发使用的 rpc 通信框架,后来贡献给了 apache 基金会,出来得比较早,几乎支持所有的后端语言,使用非常广泛,是不可不知的一个网络框架 和 grpc 一样,需要先定义通信协议,然后实现自己业务逻辑,下面还是通过一个简单示例(之前的echo程序)说明 thrift 的用法 我要晨读

已有598人晨读

微服务体系的发展并不是一蹴而就的,经过了2014年前后的低潮期,微服务概念顶层的泡沫逐渐褪去,那些真正能够在企业落地的实践在一轮又一轮的大浪淘沙后被甄别、沉淀。这篇文章希望讨论一些在团队中实行微服务架构时值得考虑的『增值项目』,它们中的一些看起来已经是理所应当的,而另一些似乎和微服务并没有必然的关联,但许多经验能够证明这些项目都是保障微服务系统长期运作并最大化发挥其Scale Out能力值得投入的高附加值实践。 我要晨读

已有556人晨读

我们有一个对延迟很敏感的模块,这个模块需要访问网络中的另一台机器去取一个时间戳。实现一次分布式事务,需要执行这个操作两次,如果这里拿时间戳慢了,整个事务的延迟就会上升。理论上内网环境同机房一次网络的round trip应该在0.5ms以内,大部分简单读请求应该落在1ms,80%请求的延迟预期也是4ms以内。有客户反鐀说这里有30ms以上的延时,在内网环境用sysbench跑OLTP测试了一下能够复现,于是查了一下这个问题。 我要晨读

已有1005人晨读

想了解Go内置类型的内存布局的契机,是一次在调试“不同类型的小对象频繁创建对gc性能的影响”时发现map的gc性能不佳,而作为对比的包含slice的struct却很好。这里总结Go runtime里map的实现,可以解释这个问题。 我要晨读

已有900人晨读

如果你只是想写一个自己用的小网站,或许你不需要框架,但如果你是要开发一个投入生产运营的网站,那么你肯定会需要一个框架,而且是需要一个好的 Web 框架。 我要晨读

已有947人晨读

go-monitor基于golang开发,是一个轻量的,用于服务质量监控并实现分析告警的工具。go-monitor目前并不是一个独立的服务,而是希望被大多数基于golang开发的项目如同引入一个日志组件一样使用。 我要晨读

已有680人晨读

Go语言中的goroutine虽然相对于系统线程来说比较轻量级,但是在高并发量下的goroutine频繁创建和销毁对于性能损耗以及GC来说压力也不小。充分将goroutine复用,减少goroutine的创建/销毁的性能损耗,这便是grpool对goroutine进行池化封装的目的。例如,针对于100W个执行任务,使用goroutine的话需要不停创建并销毁100W个goroutine,而使用grpool也许底层只需要几千个goroutine便能充分复用地执行完成所有任务。经测试,在高并发下grpool的 我要晨读

已有782人晨读

最近做 B 站弹幕分析 的项目,学习 Jieba 中文分词的动态规划算法,发现自己的算法知识待系统的学习,遂读 Sedgewick 的《算法 C 实现第三版》,这一系列算法的代码放在 Github,文章会同步到 SF,随意转载。 我要晨读

已有448人晨读

协程是Golang中的轻量级线程,麻雀虽小五脏俱全,Golang管理协程时也必然会涉及到协程之间的切换:阻塞的协程被切换出去,可运行的协程被切换进来。我们在本章节就来仔细分析下协程如何切换。 我要晨读

已有703人晨读

Poseidon 系统是由 360 开源的日志搜索平台,目前已经用到了生产环节中,可以在数百万亿条、数百 PB 大小的日志数据中快速分析和检索特定字符串。因为 Golang 得天独厚的支持并发编程,Poseidon 的核心搜索引擎、发报器、查询代理是用 Golang 开发的,在核心引擎查询、多天查询、多天数据异步下载中大量使用了 goroutine+channel 。 我要晨读

已有503人晨读