《使用Gin框架构建分布式应用》阅读笔记:p251-p271

《用Gin框架构建分布式应用》学习第14天,p251-p271总结,总21页。

一、技术总结

1.Docker & Docker Compose

复制代码
version: "3.9" 

services:
  api:
    image: api
    environment:
      - MONGO_URI=mongodb://admin:password@mongodb:27017/test?authSource=admin&readPreference=primary&ssl=false
      - MONGO_DATABASE=demo
      - REDIS_URI=redis:6379
    networks:
      - api_network
    external_links:
      - mongodb
      - redis
    scale: 5

  dashboard:
    image: dashboard
    networks:
      - api_network

  redis:
    image: redis
    networks:
      - api_network
    ports:
      - 6379:6379

  mongodb:
    image: mongo:4.4.3
    networks:
      - api_network
    ports:
      - 27017:27017
    environment:
      - MONGO_INITDB_ROOT_USERNAME=admin
      - MONGO_INITDB_ROOT_PASSWORD=password

  nginx:
    image: nginx
    ports:
      - 80:80
    volumes:
      - $PWD/nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - api
      - dashboard
    networks:
      - api_network
  
  reddit-trending:
    image: web
    environment:
      - MONGO_URI=mongodb://admin:password@mongodb:27017/test?authSource=admin&readPreference=primary&ssl=false
      - MONGO_DATABASE=demo2
    networks:
      - api_network

networks:
  api_network:

这里补充一些书上没有说明的:

(1)version

version字段在新版的Docker Compose中已弃用。例如上面的代码:

复制代码
version: "3.9" 

可以删掉。

如果每个service都设置了相同的networks,那么external_links在新版的的 Docker Compose 中可以删除。例如上面的代码:

复制代码
external_links:
      - mongodb
      - redis

可以删掉。

2.Round Robin算法

Round Robin算法是Nginx的默认算法,Nginx 官方文档给出的说明(https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/)是:

Round Robin -- Requests are distributed evenly across the servers, with server weights taken into consideration. This method is used by default (there is no directive for enabling it)。

3.Nginx & Traefik

Nginx和Traefik属于同类软件,都用于负载均衡。书上介绍的是Nginx,本人工作中用的也是Nginx。默认使用的负载均衡算法是Round Robin。书上使用的是Docker 方式进行部署。

二、英语总结

1.topology

p251, The configuration specifies the environment variables and network topology that

the worker requires.

(1)topology: topos("place") + -logy("study")。c/u. study or places, structure of places,拓扑。

三、其它

阅读本书第14天,整本书已过半。书写得非常通俗易懂,统计了一下每天的"英语总结",算下只遇到了22个生词,但是阅读速度(20页/天)算下来还是非常慢。这时候英语已经不是阻碍,阻碍是概念的理解和应用。举个例子,作者在Dockerfile里面设置了WORKDIR:

复制代码
WORKDIR /go/src/github.com/api

单从字面意思上我们并不难理解,难理解的是:(1)WORKDIR的值设置为什么好?这里吐槽下,作者设置成/go/src/github.com/api,实际开发中我想没有多少人会使用github.com这样的名字作为项目的目录名称。(2)什么时候使用WORKDIR,什么时候不使用WORKDIR?(3)WORKDIR写在什么位置?

那么如何更好的去理解这里概念呢?这是本人的一些做法:(1)参与实际项目。这是最直接也是最快的方式,但也是最难的。因为一个人在实际工作中能做的往往就是一小部分,所以局限性很大。如果可以,最好是能参与一些开源项目。(2)多阅读。很多时候理解并不是"一步到位"的,而是"慢慢的",你看这本书理解不了,再看一本书可能就理解了。

四、参考资料

1. 编程

(1) Mohamed Labouardy,《Building Distributed Applications in Gin》:https://book.douban.com/subject/35610349

2. 英语

(1) Etymology Dictionary:https://www.etymonline.com

(2) Cambridge Dictionary:https://dictionary.cambridge.org

欢迎搜索及关注:编程人(a_codists)

相关推荐
Tony Bai9 小时前
“Go 2,请不要发生!”:如果 Go 变成了“缝合怪”,你还会爱它吗?
开发语言·后端·golang
灰子学技术17 小时前
go response.Body.close()导致连接异常处理
开发语言·后端·golang
源代码•宸1 天前
大厂技术岗面试之谈薪资
经验分享·后端·面试·职场和发展·golang·大厂·职级水平的薪资
有代理ip2 天前
Python 与 Golang 爬虫的隐藏优势
爬虫·python·golang
天远云服2 天前
天远车辆过户查询API微服务实战:用Go语言构建高性能车况溯源系统
大数据·微服务·架构·golang
女王大人万岁2 天前
Go标准库 sync 详解
服务器·开发语言·后端·golang
小高Baby@2 天前
session、cookie、Jwt-token
开发语言·后端·golang
Grassto2 天前
12 go.sum 是如何保证依赖安全的?校验机制源码解析
安全·golang·go·哈希算法·go module
小二·2 天前
Go 语言系统编程与云原生开发实战(第12篇)云原生部署实战:Helm Chart × GitOps × 多环境管理(生产级落地)
开发语言·云原生·golang
天空属于哈夫克32 天前
Go 语言实战:构建一个企微外部群“技术贴收藏夹”小程序后端
小程序·golang·企业微信