[NFV] 虚拟网络
承接上篇,本篇中将利用上篇构建的虚拟路由器实现几个简单的网络结构,并将测试不同路由协议。
承接上篇,本篇中将利用上篇构建的虚拟路由器实现几个简单的网络结构,并将测试不同路由协议。
近期接触到了 NFV (Network Function Virtulization),简单来说就是通过虚拟化技术,在服务器、云主机上构建虚拟的网络设备(交换机、路由器等),从灵活性、可扩展性、维护成本这些方面,是要优于专有网络硬件设备的。
NFV 主要依托KVM、LXD等虚拟化技术,在 VM 中利用 Quagga、Open vSwitch 等实现相应的功能,当然,基于容器 (Docker) 或者公有云私有云 (如 OpenStack 等) 的应用也是可以的。
本文主要内容:LXD,使用 LXD 构建虚拟路由器。
内容提要:Kubernetes
原作者:Ewan Valentine
原文链接:https://ewanvalentine.io/microservices-in-golang-part-8/
前文中,我们使用了 micro 工具包中的 RPC 代理网关,使得从外部调用 RPC 方法成为可能,以此为基础,我们构建了一个简单的 web 端用户界面
在原本系列的第七章中,作者介绍了如何使用 Terraform 对 IaaS ( 如 Google Cloud 等) 上的实例进行编排管理,不过由于译者日常使用的是服务器的集群,且考虑到网络和费用状况,这章的内容其实帮助不大,有兴趣的可以参考原文。
综上,直接进入系列第八章的内容 —— 将服务迁移到 Kubernetes。这其实也是译者学习与翻译此系列文章的出发点。
内容提要:API GATEWAY & UI
原作者:Ewan Valentine
原文链接:https://ewanvalentine.io/microservices-in-golang-part-6/
前文中我们从事件驱动架构出发,关注了 go-micro 和原生 go 中事件驱动的一般实现。这一节中我们将从 web 端出发,探寻客户端与微服务交互的方法。
micro 工具集 已经为我们提供了 web 端服务从外部直接调用我们内部 rpc 的方法。
我们将为货流平台创建一个用户界面,包括登录页面、创建 consignment 的接口。通过这节的学习我们可以将之前的内容全部联系起来。
内容提要:事件驱动 & NATS
原作者:Ewan Valentine
原文链接:https://ewanvalentine.io/microservices-in-golang-part-5/
上文中,我们接触到了用户认证与 JWT。在这篇文章中,我们将会使用到 go-micro 的服务代理功能。
正如之前文章中所提到的,go-micro 是一个可拔插式的架构,它可以使用很多常用开源插件,参见 plugins repo,你可以看到它所支持的插件。
在本节中,我们会用到 NATS 代理插件。
OpenWhisk 是由 IBM 开源的一个 FaaS 计算平台,在2016年贡献给了开源社区,2019年正式成为 Apache 基金会的顶级项目。
OpenWhisk 本身是一个事件驱动 (Event driven architecture) 的 FaaS (Function as a Service) 计算平台,用户只需要关注业务代码的逻辑,将操作代码发送给 OpenWhisk ,并提供所需的数据流,OpenWhisk 就能自动的对计算资源进行扩展。开发者无需关心相关的基础设施架构,虽说理论上有效的提高了开发效率,可以使开发人员可以将精力放在代码逻辑上,不过 Serverless 平台的开发体验还是颇受诟病的,由于无法接触到实际的运行环境,不管是开发还是 debug 都比较不方便,只通过 log 方式调试错误。
单纯为了解决这个问题,只需要在 Dockerfile
中将程序入口定义为:
1 | ENTRYPOINT exec command "$0" "$@" |
更全面一点,Dockerfile
中 RUN
CMD
ENTRYPOINT
有何不同,又分别适应什么样的场景?
请看下文
参考官方文档,比较建议使用Linux发行商提供的官方cloud images进行二次定制。
内容提要:微服务的认证
原作者:Ewan Valentine
原文链接:https://ewanvalentine.io/microservices-in-golang-part-4/
上文中,我们创建了user服务,并且开始将用户信息存储到数据库中。现在我们需要一种更安全的保存密码的方式,并且需要在微服务中引入密钥分发和用户鉴权的机制。
注意,现在我把我们的服务拆分成了多个仓库,这确实更容易部署一些,其实一开始我确实是想把所有的代码都放到一起的,但是后来我发现这样很难管理Go项目的依赖,总是引起很多冲突(译者注:你知道我踩了多少坑吗!),之后我也会开始说下该怎么独立的运行和测试微服务了。
UPDATE 2020/05/04: