概览

下面这张图就是我们将要搭建的项目的概览图。我们将开始写第一个微服务之后我们会一点点完成这张图的所有内容。

讲解:

白色虚线的方框内: docker swarm集群,运行在一个或多个节点上。

蓝色方框内: Spring cloud/Netflix OSS提供的支持系统,或者其他服务,比如zipkin

黄色方框/白色方框: 一个微服务。

运行资源消耗

为什么我们要用go来写微服务?除啦有意思和有效率,另一个主要原因是go在运行时消耗的内存非常小。下面这张图对比了Spring boot,Spring cloud和go.(都是基于运行在docker swarm上的微服务)

quotes-service是基于spring boot.compservice和accountservice是基于go.两个都是基于http服务器并且有许多库来和spring cloud集成。

但是内存消耗现在还要考虑么?我们现在不是有GB级别的RAM能轻松负载一个java应用么?

可以这么说,但是对于一个大企业,他们不止运行几十个微服务,甚者成百上千的微服务。这样的话减少资源消耗就能省下很多钱。

来看一下亚马逊主机的价格:

第二列为cpu数量,第四列为RAM大小。

我们看到当RAM增加一倍,价钱也随着增加一倍。如果你的cpu足够,就不必为缺少内存而要多花一倍的钱,后面我们也会看到go的服务在处理请求时甚至比spring boot 在闲置的时候少。

微服务非功能性要求

这篇博客不仅仅关于go搭建微服务,更是如何在spring cloud环境下运行和搭建符合真正用于生产环境的微服务产品。包括:

中心化配置

服务发现

日志

分布式探寻

熔断

负载均衡

边缘

监测

安全

这些内容都应该在为服务里实现,不仅仅是用go,其他的语言,例如,java,python,写微服务产品时也应该实现这些功能.在这篇博客中我会尽量从go语言角度覆盖这些内容。

另一方面要考虑的是关于微服务的实现,你可能听过:

HTTP/RPC/REST/SOAP/任何形式的APIS

持久化数据的API (DB clients, JDBC, O/R mappers)

消息处理API (MQTT, AMQP, JMS)

测试 (单元测试,integration, system, acceptance test)

编译工具/CI/CD

我会讲解这其中的一些。

在docker swarm上运行

概览中我们看到我们的服务会运行在docker swarm中,这意味着我们所有的服务,包括支持服务(服务器配置,边缘等)和微服务程序都会运行在docker swarm中。在这个项目结束时,我们运行:

docker service ls

我们会看到下面这些服务

![图片上传中...]

注意:上面这些服务远多于我们在第五章里搭建的s

go微服务占用很小的内存-但是性能怎么样?对编程语言做有意义的基测很难。从基测网站上提交的算法上看,go比java8大部分时间会快。go大部分情况和c++差不多快,但在一些基测上,要慢很多。就是说,对于普通的微服务工作-负载HTTP/RPC,序列化/反序列化数据结构,网络吞吐方面,go可以表现的不错。

另一个重要的特性是go具有垃圾回收功能,在go 1.5GC的垃圾回收中只需要停顿几微秒。go的垃圾回收也许不是那么成熟,但是在1.2之后,他表现的很稳定。更为惊奇的是,你可以更改通过更改整个栈相对于类的大小,来更改垃圾回收的性能。

然而,我们在测试性能的同时会写我们的第一个微服务,之后我们会加入熔断,追踪,日志等功能。在我们加入越来越多的功能之后,我们会用Gatling来测试我们的性能。

启动时间

另一个go的特性是它的启动速度非常快。一个普通的HTTP服务器加上一些路由和json序列化功能的服务在几百毫秒就可以启动。当我们在docker中运行时,我们可以运行它们在几秒之内。然而,一个spring boot的微服务需要至少10秒。这个看起来好像没什么影响,但是在你需要快速应对大流量的处理时将会非常有用。

静态链接二进制

另一个优点go的静态链接的二进制包含所有的依赖在一个可执行的二进制文件中,我们可以把这个包放在docker容器中。同时这个文件不大,一般来说10-20MB。这样我们就能得到一个很简单的dokerfile.我们可以用一个很基本的docker镜像来开始。我用的是 iron/base,这个镜像大约6MB。

FROM iron/base

EXPOSE 6868

ADD eventservice-linux-amd64 \

ENTRYPOINT ["./eventservice-linux-amd64", "-profile=test"]

换句话说,不需要JVM或者其他运行的组件,只需要这个镜像里标准的c库

我们之后会讲解如何编译二进制文件和-profile=test是什么意思。

总结

这篇博客中,我们介绍为什么要用go来做微服务。主要原因是:

小的内存消耗

性能良好

静态链接二进制文件的方便

下一篇文章中,我们会开始写第一个微服务。

php调用go微服务,基于go搭建微服务实践教程 (一)相关推荐

  1. javaweb k8s_K8S微服务核心架构学习指南 ASP.NET Core微服务基于K8S 架构师必备Kubernetes教程...

    K8S微服务核心架构学习指南 ASP.NET Core微服务基于K8S 架构师必备Kubernetes教程 课程内容是关于Kubernetes微服务架构学习课程,基于K8S开展ASP.NET核心进行微 ...

  2. 案例 | 荔枝微课基于 kubernetes 搭建分布式压测系统

    王诚强,荔枝微课基础架构负责人.热衷于基础技术研发推广,致力于提供稳定高效的基础架构,推进了荔枝微课集群化从0到1的发展,云原生架构持续演进的实践者. 本文根据2021年4月10日深圳站举办的[腾讯云 ...

  3. 阿里云 ECS 7 天实践训练营 - day01 -基于ECS搭建FTP服务

    前段时间无意间看到了阿里云7天实践ECS训练营的活动,因为我本身自己也已经使用了两年的阿里云学生机,但是全凭自己的喜好来的,没有经过一个系统的训练,这次看到这个活动,便马上参加了,所以特在此记录每天的 ...

  4. 【微服务】SpringBoot 搭建微服务初体验

    SpringBoot 搭建微服务初体验 前言 Server端程序开发 1.创建Server项目,并添加依赖 2.引入依赖,完善配置文件 3.开发SQL语句 4.开发JavaBean 5.开发DAO接口 ...

  5. 大疆无人机基于自搭建RTMP服务端推流直播

    思路 大疆在手机端提供了软件DJI GO 4控制飞行参数等,其中包含自定义RTMP接口来向第三方推流进行直播业务,而我们可以利用这种直播的思路来完成画面传输. 环境 精灵Phantom 4 Pro V ...

  6. 基于 Gitee 搭建个人网站-入门教程

    免费开源项目,震撼上线,提供完整文档,欢迎各位股东:SpringBoot+VUE https://gitee.com/rodert/liawan-vue 前言 这是一篇基于Gitee搭建个人网站的保姆 ...

  7. 数据服务: 基于ApiJson作为数据服务底层引擎的调研

    文章目录 一.简介 1.优势 2.使用场景 3.对于前端 4.对于后端 二.核心 1.功能流程图 2.功能特点 三.ApijsonDemo使用 1.下载并打开项目 2.导入sql,配置db confi ...

  8. 基于go搭建微服务实践教程 (概览)

    原文:Go Microservices blog 翻译:秦伟格 转载请注明原文及翻译. 译者按:公司转向重新做一套支付系统,并打算用golang的微服务来实现.于是上网上找一找教程,发现中文教程都不是 ...

  9. Seata多微服务互相调用_全局分布式事物使用案例_Order-Module order微服务的配置搭建---微服务升级_SpringCloud Alibaba工作笔记0060

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 然后咱们说了我们的案例需要三个微服务,那么首先我们先去创建这个 订单微服务. 按照这个11个步骤来 ...

  10. 基于webpack4搭建Vue服务端渲染(SSR)

    前言 了解服务端渲染是偶然间一位朋友问了我Nuxt.js的问题,孤陋寡闻的我竟然不知道服务端渲染是什么!赶紧利用空余时间充电,了解大概后觉得正好能解决我当前正遇到的问题,随着我项目的功能逐步扩展首屏加 ...

最新文章

  1. ICinsights:中国芯片难达成既定的2025目标
  2. maven的依赖范围_Maven依赖范围
  3. [日推荐]『车价天天报』省钱买好车
  4. 【BZOJ 4555】 4555: [Tjoi2016Heoi2016]求和 (NTT)
  5. Linux中设置vim自动在运算符号两边加上空格
  6. asp.net + ajax + sqlserver 自动补全功能,asp.net+ajax+sqlserver自动补全功能实现解析
  7. linux下得到date命令,linux下date命令获得今天日期的用法
  8. Flask笔记-session安全问题(避免任务重复提交)
  9. 矩阵相乘Java版(第一个java程序)
  10. cocostudio学习之关于UIWidget需要add CCNode控件的问题
  11. 中国精英这才是真相:我们需要信仰,我们需要思想导师
  12. 【zbrush】毛发系统 -打散、分区、制作等
  13. 微软所有正版软件下载网站ITELLYOU
  14. Java大鱼吃小鱼简单_10分钟用scratch写一个大鱼吃小鱼的小游戏
  15. 心理月刊杂志心理月刊杂志社心理月刊编辑部2022年第11期目录
  16. 阿里云国际版如何将ECS云服务器中的数据备份到本地
  17. 【软考软件评测师】2020年下案例分析历年真题
  18. python基础知识
  19. 如何利用工具低成本构建华为云灾备方案?
  20. 记 随手科技2020届实习生笔试题(Java开发工程师)笔试题

热门文章

  1. python3使用paramiko
  2. RedHat系统的Yum安装
  3. Asp.net页面传值
  4. JCI标准认证对我国医院建设有什么意义?
  5. JSP脚本元素(声明 %! 表达式 %= 脚本 %)
  6. 用SecureCRSecurePortable查看动态日志
  7. crmjs区分窗口是否是高速编辑(2)
  8. ClassPathResource详解
  9. 拓端tecdat|R语言MCMC的rstan贝叶斯回归模型和标准线性回归模型比较
  10. 拓端tecdat|R语言生态学模拟对广义线性混合模型GLMM进行功率(功效、效能、效力)分析power analysis环境监测数据