他山之石之Byzantine Generals Problem

论文出处: https://people.eecs.berkeley.edu/~luca/cs174/byzantine.pdf

Reliable computer systems must handle malfunctioning components that give confilicting information to different parts of the system. This situation can be expressed abstractly in terms of a group of generals of the Byzantine army camped with their troops around an enmemy city. Communicating only by messenger, the generals must agree upon a common battle plan. However, one or more of them may be traitors who will try to confuse the others. The problem is to find an algorithm to ensure that the loyal generals will reach agreement.

一个可靠的计算系统需要得当的处理其子部件因紊乱而向系统的其他部分发送相左的消息的情况。 这种情况可以抽象为以下场景:

一群拜占庭将军围着一座敌城驻扎了多个军团,每个军团存在一位将军。在只能通过信使通信的情况下,他们需要决定一个共同的作战行动。 其中的几位将军有可能是叛徒,会不遗余力得误导其他人。 问题的关键就是找出一个算法,从而确保所有的忠将作出一致的决定。

[译]用GoLang实现微服务(四)

此系列文章介绍如何用GoLang实践微服务, 分十篇。此为其四。
原著作者:Ewan Valentine
原文连接:https://ewanvalentine.io/microservices-in-golang-part-3/
友情提示:系列文章的后五篇翻译请移步至wuYin’s blog

初稿 -> 润色

上一篇文章中, 我们创建用户(User)服务,并且引入了数据库来保存数据。这回,我们希望用户微服务能安全的保存用户密码,并且有完整的机制来验证用户,从而在我们的几个微服务之间分发安全秘钥以互相沟通。

请特别注意,我重构了项目结构,现在每个微服务都是一个单独的仓库,不再共处于一个父目录之下了。这样做更方便于代码的部署。你们大概记得,我一开始是想把所有微服务都放在一个仓库下的,但后来发现这样做使我很难管理 Go 项目的依赖,总是遇到一些冲突。随着每个项目的独立,我有必要讲讲如何测试,运行和部署一个个微服务。与此同时,由于各个微服务的独立,我们目前也不能使用 docker-compose 了,但这对我们的影响暂时不大。如果你对此有什么好的建议,欢迎给我写邮件

此外,你需要手动运行数据库了,就像下面这样:

$ docker run -d -p 5432:5432 postgres
$ docker run -d -p 27017:27017 mongo

独立出来的项目代码链接如下:

[译]用GoLang实现微服务(三)

此系列文章介绍如何用GoLang实践微服务, 分十篇。此为其三。
原著作者:Ewan Valentine
原文连接:https://ewanvalentine.io/microservices-in-golang-part-3/
友情提示:系列文章的后五篇翻译请移步至wuYin’s blog

初稿 -> 润色

上一篇文章中, 我们了解了go-micro 以及 Docker的基础。同时引入了我们的第二个微服务,货船服务(vessel-service)。那么在此文中,我们将要了解一下 docker-compose,并学会用它更好的运行和管理部署在本地的众多微服务。此外,我们还会稍微讲一下几种不同的数据库以及写下我们的第三个微服务!

[译]用GoLang实现微服务(二)

此系列文章介绍如何用GoLang实践微服务, 分十篇。此为其二。
原著作者:Ewan Valentine
原文连接:https://ewanvalentine.io/microservices-in-golang-part-2/
友情提示:系列文章的后五篇翻译请移步至wuYin’s blog

初稿 -> 润色

上一篇文章中, 我们大致掌握了如何用gRPC来构建微服务。在这篇文章中,我们要介绍如何容器化(Dockerize)我们的微服务,在此过程中,我们将引入使用go-micro以及写下我们的第二个微服务。

[译]用GoLang实现微服务(一)

此系列文章介绍如何用GoLang实践微服务, 分十篇。此为其首。
原著作者:Ewan Valentine
原文连接:https://ewanvalentine.io/microservices-in-golang-part-1/
友情提示:系列文章的后五篇翻译请移步至wuYin’s blog

初稿 -> 润色

导言

在本文中,我们将了解一些基础的概念,术语。同时将创建我们的第一个微服务,尽管它会非常简陋。

在接下来的文章中,我们会陆续创建以下微服务:

  • consignments (货运)
  • inventory (仓库)
  • users (用户)
  • authentication (认证)
  • roles (角色)
  • vessels (货船)

完整的技术栈如下:golang, mongodb, grpc, docker, Google Cloud, Kubernetes, NATS, CircleCI, Terrafrom and go-micro.

在你跟随此文学习时,请务必设置合适的GOPATH,以及使用这个git仓库(每篇文章对应一个分支)。

另外,我的工作平台是Macbook,所以如果你的工作平台有所不同,那么文章中的些许地方需要相应的改动,比如Makefiles中的$GOPATH$(GOPATH),请您自行关注。