GopherChina2017-5 Go的隐藏功能、微服务改造

Go的隐藏功能

//go: noescape
//go: noinline
//go: nosplit
//go: linkname
...

其它
// +build
//go: generate
package xxx // import "xxx"
//line


ezbuy:

东南亚跨境电商公司,从C#切换到Go,正在切换中
Go微服务治理实践

开发环境构建:Goflow

  • 开发环境统一化
  • 第三方依赖管理
  • 编译流程统一,含非go的语言
GopherChina2017-5 Go的隐藏功能、微服务改造_第1张图片

GopherChina2017-5 Go的隐藏功能、微服务改造_第2张图片

强迫不同的项目使用同样的第三方库

GopherChina2017-5 Go的隐藏功能、微服务改造_第3张图片

使用了subtree,submodule是存的引用,subtree是在一个库里(待确认),更新速度约为submodule的5倍


GopherChina2017-5 Go的隐藏功能、微服务改造_第4张图片
GopherChina2017-5 Go的隐藏功能、微服务改造_第5张图片
GopherChina2017-5 Go的隐藏功能、微服务改造_第6张图片
GopherChina2017-5 Go的隐藏功能、微服务改造_第7张图片

微服务选型:gRPC


GopherChina2017-5 Go的隐藏功能、微服务改造_第8张图片
GopherChina2017-5 Go的隐藏功能、微服务改造_第9张图片

通过拓展区分pb中的接口是内部还是外部


GopherChina2017-5 Go的隐藏功能、微服务改造_第10张图片

除了接口,有时需要提供SDK


GopherChina2017-5 Go的隐藏功能、微服务改造_第11张图片

使用internal来隔离


GopherChina2017-5 Go的隐藏功能、微服务改造_第12张图片

远程服务调用,做一些约定


GopherChina2017-5 Go的隐藏功能、微服务改造_第13张图片

服务发现


GopherChina2017-5 Go的隐藏功能、微服务改造_第14张图片
GopherChina2017-5 Go的隐藏功能、微服务改造_第15张图片
GopherChina2017-5 Go的隐藏功能、微服务改造_第16张图片

没找到好办法,规范服务调用的写法

GopherChina2017-5 Go的隐藏功能、微服务改造_第17张图片
GopherChina2017-5 Go的隐藏功能、微服务改造_第18张图片

分布式跟踪:调用栈、Context

  • sentry

  • 跨进程错误追踪,不一定要通过日志收集实现,比如使用Context


    GopherChina2017-5 Go的隐藏功能、微服务改造_第19张图片
  • 在go没有exception的情况下如何处理?利用context,包含一些额外信息

  • 死循环,用Context + TTL处理

GopherChina2017-5 Go的隐藏功能、微服务改造_第20张图片

跨数据中心:Gateway - 解决方案
Gateway之间相互感知,最终一致性


GopherChina2017-5 Go的隐藏功能、微服务改造_第21张图片
GopherChina2017-5 Go的隐藏功能、微服务改造_第22张图片
GopherChina2017-5 Go的隐藏功能、微服务改造_第23张图片

ezbuy为啥要从.net转go的“契机”以及对.net core的看法,知乎上的回答:
https://www.zhihu.com/question/32249717/answer/149679759

你可能感兴趣的:(GopherChina2017-5 Go的隐藏功能、微服务改造)