摘要: 前言 近几个月刚从.NET转到GO,入职了一个使用GO微服务的互联网公司。因为需要熟悉公司的微服务架构和适应新公司的节奏,所以最近没时间写博客,现在简单做个总结。 转GO的经历 自学GO 上一年的八月份,我开始自学GO。GO很容易上手,看了一遍语法之后,基本可以自己写点东西了。但是单凭掌握语法,显然 阅读全文
posted @ 2020-12-09 23:39 烟花易冷人憔悴 阅读(1976) 评论(3) 推荐(3) 编辑
摘要: 前言 是控制分布式系统之间同步访问共享资源的一种方式。在分布式系统中,常常需要协调他们的动作。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要互斥来防止彼此干扰来保证一致性,在这种情况下,便需要使用到分布式锁。 etcd分布式锁设计 1. :任意时刻, 阅读全文
posted @ 2020-05-22 16:19 烟花易冷人憔悴 阅读(4152) 评论(3) 推荐(2) 编辑
摘要: 前言 上篇文章介绍了如何实现gRPC负载均衡,但目前官方只提供了 和`round_robin round_robin 加权随机法`。 可以根据服务器的处理能力而分配不同的权重,从而实现处理能力高的服务器可承担更多的请求,处理能力低的服务器少承担请求。 自定义负载均衡策略 gRPC提供了 和`V2Pi 阅读全文
posted @ 2020-05-20 17:04 烟花易冷人憔悴 阅读(7062) 评论(8) 推荐(3) 编辑
摘要: 前言 "上篇" 介绍了如何使用 实现服务发现,本篇将基于etcd的服务发现前提下,介绍如何实现gRPC客户端负载均衡。 gRPC负载均衡 gRPC官方文档提供了关于gRPC负载均衡方案 "Load Balancing in gRPC" ,此方案是为gRPC设计的,下面我们对此进行分析。 1、对每次调 阅读全文
posted @ 2020-05-18 20:39 烟花易冷人憔悴 阅读(12516) 评论(0) 推荐(2) 编辑
摘要: 前言 "etcd环境安装与使用" 文章中介绍了etcd的安装及 使用,本篇将介绍如何使用etcd实现服务发现功能。 服务发现介绍 服务发现要解决的也是分布式系统中最常见的问题之一,即在同一个分布式集群中的进程或服务,要如何才能找到对方并建立连接。本质上来说,服务发现就是想要了解集群中是否有进程在监听 阅读全文
posted @ 2020-05-14 18:50 烟花易冷人憔悴 阅读(6320) 评论(1) 推荐(3) 编辑
摘要: etcd简介 etcd是开源的、高可用的分布式key-value存储系统,可用于配置共享和服务的注册和发现,它专注于: 简单:定义清晰、面向用户的API(gRPC) 安全:可选的客户端TLS证书自动认证 快速:支持每秒10,000次写入 可靠:基于Raft算法确保强一致性 etcd与redis差异 阅读全文
posted @ 2020-05-09 16:37 烟花易冷人憔悴 阅读(2602) 评论(0) 推荐(2) 编辑
摘要: Docker简介 Docker是基于Linux容器技术(LXC),使用Go语言实现的开源项目,诞生于2013年,遵循Apache2.0协议。Docker自开源后,受到广泛的关注和讨论。 Docker在开发和运维中的优势 更快的交付和部署 使用Docker,开发人员可以使用镜像来快速构建一套标准的开发 阅读全文
posted @ 2020-05-06 20:59 烟花易冷人憔悴 阅读(3638) 评论(0) 推荐(0) 编辑
摘要: 前言 最近优化 "gin+vue的前后端分离项目" 代码时候,发现代码中对请求数据的校验比较繁琐,于是想办法简化它。最终我发现了 "go playground/validator" 开源库很好用。 优化前代码 代码如下: 发现每个方法都这样校验数据,很繁琐。 优化代码 这里使用 "go playgr 阅读全文
posted @ 2020-04-28 19:27 烟花易冷人憔悴 阅读(2997) 评论(0) 推荐(0) 编辑
摘要: 前言 我们通常把 用作内部通信,而使用 进行外部通信。为了避免写两套应用,我们使用 "grpc gateway" 把 转成 。服务接收到 请求后, 把它转成 进行处理,然后以 形式返回数据。本篇代码以上篇为基础,最终转成的 支持 验证、数据验证,并添加 文档。 gRPC转成HTTP 编写和编译pro 阅读全文
posted @ 2020-04-26 20:44 烟花易冷人憔悴 阅读(9583) 评论(17) 推荐(2) 编辑
摘要: 前言 上篇介绍了 "go grpc middleware" 的 、`grpc_auth grpc_recovery grpc_validator`,它可以对gRPC数据的输入和输出进行验证。 创建proto文件,添加验证规则 这里使用第三方插件 "go proto validators" 自动生成验 阅读全文
posted @ 2020-04-23 15:23 烟花易冷人憔悴 阅读(9557) 评论(11) 推荐(4) 编辑
摘要: 前言 上篇介绍了gRPC中TLS认证和自定义方法认证,最后还简单介绍了gRPC拦截器的使用。gRPC自身只能设置一个拦截器,所有逻辑都写一起会比较乱。本篇简单介绍 "go grpc middleware" 的使用,包括 、`grpc_auth grpc_recovery`。 go grpc midd 阅读全文
posted @ 2020-04-22 10:29 烟花易冷人憔悴 阅读(10608) 评论(0) 推荐(5) 编辑
摘要: 前言 前面篇章的gRPC都是明文传输的,容易被篡改数据。本章将介绍如何为gRPC添加安全机制,包括TLS证书认证和Token认证。 TLS证书认证 什么是TLS TLS(Transport Layer Security,安全传输层),TLS是建立在 TCP协议之上的协议,服务于应用层,它的前身是SS 阅读全文
posted @ 2020-04-16 08:52 烟花易冷人憔悴 阅读(8033) 评论(2) 推荐(2) 编辑
摘要: 前言 gRPC默认的请求的超时时间是很长的,当你没有设置请求超时时间时,所有在运行的请求都占用大量资源且可能运行很长的时间,导致服务资源损耗过高,使得后来的请求响应过慢,甚至会引起整个进程崩溃。 为了避免这种情况,我们的服务应该设置超时时间。前面的 "入门教程" 提到,当客户端发起请求时候,需要传入 阅读全文
posted @ 2020-04-15 08:45 烟花易冷人憔悴 阅读(11161) 评论(5) 推荐(0) 编辑
摘要: 前言 上一篇介绍了 ,客户端不断的向服务端发送数据流,在发送结束或流关闭后,由服务端返回一个响应。本篇将介绍 。 :客户端和服务端双方使用读写流去发送一个消息序列,两个流独立操作,双方可以同时发送和同时接收。 情景模拟:双方对话(可以一问一答、一问多答、多问一答,形式灵活)。 新建proto文件 新 阅读全文
posted @ 2020-04-14 15:13 烟花易冷人憔悴 阅读(6281) 评论(3) 推荐(1) 编辑
摘要: 前言 上一篇介绍了 ,客户端发送请求到服务器,拿到一个流去读取返回的消息序列。 客户端读取返回的流的数据。本篇将介绍 。 :与 相反,客户端不断的向服务端发送数据流,而在发送结束后,由服务端返回一个响应。 情景模拟:客户端大量数据上传到服务端。 新建proto文件 新建client_stream.p 阅读全文
posted @ 2020-04-14 11:20 烟花易冷人憔悴 阅读(5155) 评论(0) 推荐(0) 编辑
摘要: 前言 上一篇介绍了 ,当数据量大或者需要不断传输数据时候,我们应该使用流式RPC,它允许我们边处理边传输数据。本篇先介绍 。 :客户端发送请求到服务器,拿到一个流去读取返回的消息序列。 客户端读取返回的流,直到里面没有任何消息。 情景模拟:实时获取股票走势。 1.客户端要获取某原油股的实时走势,客户 阅读全文
posted @ 2020-04-13 20:30 烟花易冷人憔悴 阅读(10138) 评论(3) 推荐(2) 编辑
摘要: 前言 gRPC主要有4种请求和响应模式,分别是 、`服务端流式(Server side streaming RPC) 客户端流式(Client side streaming RPC) 双向流式(Bidirectional streaming RPC)`。 :客户端发起请求并等待服务端响应。 :客户端 阅读全文
posted @ 2020-04-10 16:04 烟花易冷人憔悴 阅读(6594) 评论(0) 推荐(2) 编辑
摘要: 前言 gRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。 在 gRPC 里客户端应用可以像调用本地对象一样直接调用另一台不同的机器上服务端应 阅读全文
posted @ 2020-04-09 20:36 烟花易冷人憔悴 阅读(6836) 评论(0) 推荐(4) 编辑
摘要: 前言 依赖注入的好处和特点这里不讲述了,本篇文章主要介绍gin框架如何实现依赖注入,将项目解耦。 项目结构 ├── cmd 程序入口 ├── common 通用模块代码 ├── config 配置文件 ├── controller API控制器 ├── docs 数据库文件 ├── models 数 阅读全文
posted @ 2019-11-06 14:52 烟花易冷人憔悴 阅读(3785) 评论(0) 推荐(0) 编辑
摘要: 前言 随着Go 1.13发布,GOPROXY默认值 在中国大陆不能被访问。 七牛云顺势推出 ,以利于中国开发者更好使用Go Modules。 使用教程 (1)升级到Go1.13 (2)运行 (3)运行 可以通过运行 查看(2)、(3)步骤是否设置成功 (4)在项目根目录下执行 执行成功后生成go.m 阅读全文
posted @ 2019-10-22 11:12 烟花易冷人憔悴 阅读(2125) 评论(0) 推荐(0) 编辑