【微服务实战序列】这是关于使用微服务架构创建应用系列的第四篇文章。第一篇介绍了微服务架构的模式,讨论了使用微服务架构的优缺点。第二和第三篇描述了微服务架构内部的通讯机制。这篇文章中,我们将会探讨服务发现相关问题。 我要晨读
【微服务实战序列】在单体式应用中,各个模块之间的调用是通过编程语言级别的方法或者函数来实现的。但是一个基于微服务的分布式应用是运行在多台机器上的。一般来说,每个服务实例都是一个进程。在这篇文章中,我们将讨论系统服务之间如何通信。 我要晨读
【微服务实战序列】当你决定将应用作为一组微服务时,需要决定应用客户端如何与微服务交互。在单体式程序中,通常只有一组冗余的或者负载均衡的服务提供点。在微服务架构中,每一个微服务暴露一组细粒度的服务提供点。在本篇文章中,我们来看它如何影响客户端到服务端通信,同时提出一种API Gateway的方法。 我要晨读
【微服务实战序列】本文来自Nginx官方博客,是微服务系列文章的第一篇,主要探讨了传统的单体式应用的不足,以及微服务架构的优势与挑战。正如作者所说,微服务架构更适合用于构建复杂的应用,尽管它也有自己的不足。 读者将会从中学到方法,并且和单体式架构模式进行对比。 我要晨读
北京时间2016年2月18日凌晨,在Go 1.5发布 半年后,Go 1.6正式Release 了,与Go 1.5的“惊天巨变”(主要指Go自举)相比,Go 1.6的Change 算是很小的了。我们来看看Go 1.6中哪些变化值得我们关注。主要由:cgo、HTTP/2、Templates、Runtime GC 延迟等。 我要晨读
go-fuzz是一款随机测试(Random testing)工具。对于随机测试想必很多人都比较陌生,我也不例外。至少在接触go-fuzz之前,我从未在golang或其他编程语言中使用过类似的测试工具(c/c++开发者可以使用afl-fuzz),本文介绍 Go语言随机测试工具go-fuzz。 我要晨读
CockroachDB GC优化总结。本文中我们将分享几个非常有用的优化技巧用以改善许多常见的GC性能问题(接下来还将覆盖一些有趣的死锁问题)。我们将重点分享如何通过嵌套结构体、使用 sync.Pool、和复用后端数组减少内存分配和降低GC开销。 我要晨读
【Go语言TCP Socket编程】Golang的主要 设计目标之一就是面向大规模后端服务程序,网络通信这块是服务端 程序必不可少也是至关重要的一部分。在日常应用中,我们也可以看到Go中的net以及其subdirectories下的包均是“高频+刚需”,而TCP socket则是网络编程的主流。 我要晨读
D、GO、Rust 谁会在未来取代 C?为什么?每一个语言都有一些基础优势(我称之为“十倍优势”,因为在一定的基准上比较其他确实效率更高)和数个挑战。这些语言在未来能否取代 C 语言取决于它们如何利用它们的十倍优势,并且如何克服他们的数个挑战。 我要晨读
关于Go错误处理的资料和视频已有许多,Go authors们也在官方Articles和Blog上多次提到过一些Go error handling方面的一些tips和best practice,这里仅仅算是做个收集和小结,尽视野所及。 我要晨读
本文分析了Golang的socket文件描述符和goroutine阻塞调度的原理。代码中大部分是Go代码,小部分是汇编代码。完整理解本文需要Go语言知识,并且用Golang写过网络程序。更重要的是,需要提前理解goroutine的调度原理。 我要晨读
开源项目 分布式 NewSQL 数据库 TiDB 和 分布式缓存 Codis 的 创始人 刘奇,给大家介绍一下 NewSQL 与 TiDB 的设计实现, 未来的一些 Roadmap 以及 一些做开源项目的心得。 我要晨读
Go以简洁著称,但简洁中不乏值得玩味的小细节。这些小细节不如goroutine、interface和channel那样"高大上","屌 丝"得可能不经常被人注意到,但它们却对理解Go语言有着重要作用。关于Go,你可能不注意的7件事:本文较Low,适合初学者,高手可飘过:) 我要晨读
Golang在京东列表页实践总结:描述了目前的状况和为什么选择Go语言作为服务端语言。给出了一些设计架构图、遇到的一些问题和解决方案等。虽然没有过多的细节,但也值得一读。 我要晨读
var a, b, c = f() + v(), g(), sqr(u()) + v(); func f() int {return c}.... 这样一个复杂的变量初始化语句之后,a、b、c三个变量的值是多少呢?如果感觉迷惑,可以来看看这篇post:“理解Golang语句中的求值顺序”。 我要晨读
Go语言最有用的特性是将并发作为第一支持的语言,使用协程goroutine,非常容易实现代码的并发,这使得Go成为网络类应用的重要选择,本文以银行转账为例,阐述了Go1.5新版本中如何使用协程实现并发。该文还指出了在Go1.5版本之前默认所有协程只是运行在单个进程,并不支持多核CPU并行计算,1.5以后提升到支持多核。 我要晨读
Go 1.5中加入了一个experimental feature: vendor/。这个feature不是Go 1.5的正式功能,但却是Go Authors们在解决Go被外界诟病的包依赖管理的道路上的一次重要尝试。本文和大家一起来理解下vendor这个新feature。 我要晨读
是否担心自己的Go服务挂掉?supervisor是一个unix的系统进程管理软件,可以用它来管理apache、nginx等服务,若服务挂了可以让它们自动重启。当然也可以用来管理golang的进程。本文介绍如何使用 supervisor 管理 golang 进程。 我要晨读
Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其他分布式服务注册与发现的方案相比,Consul的方案更“一站式”,内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案等。本文是Consul的入门介绍,并用一些例子说明如何使用Consul实现服务的注册和发现。 我要晨读
无论使用任何编程语言开发应用,都离不开配置数据。配置数据提供的形式有多样,不外乎命令行选项(options)、参数(parameters),环境 变量(env vars)以及配置文件等。Golang也不例外。本文带领大家小结Golang程序配置方案。 我要晨读