Go chassis是一个go语言微服务开发框架
通过这篇文章中,我将从设计思路到源码剖析来深度分析Go Chassis。并且介绍自己在实践过程中的go语言性能调优和最佳实践,最后将使用go chassis编写一个http服务,此为上篇,将主要介绍go chassis的运行机制
项目地址:https://github.com/go-chassis/go-chassis/
为什么我们要用go语言来开发微服务?
go依然是一门新兴的语言,和java比它还非常年轻,不过随着kubenetes和docker等项目的成功,可以说go语言已经成为了非常好的中间层开发语言,并且逐渐流行起来。
编译速度快,支持多平台,内存占用低,轻量级协程等。
他的协程设计降低了开发者门槛,让更多人可以轻松地编写支持高并发的后台服务
为什么使用Go chassis
当你要解决微服务模式带来的新问题的时候你要实现多少代码来处理分布式带来的复杂度?
我相信一个成熟的开发框架需要2万行以上的代码。而go chassis正是这样一个框架
-
go chassis集成了很多的功能,提供了一站式服务,能够让用户在一个方案中,获得路由管理,注册发现,负载均衡,限流,指标监控,分布式追踪等大量功能。
-
go chassis是一个协议中立的开发框架,它不仅支持http,也支持rpc协议,甚至可以集成mysql等中间件的协议。并将它们纳入统一的治理。
-
go chasis支持Istio控制面板,也就是说你可以将它与envoy进行混合使用,只需要使用istio即可,它支持原生的istio配置管理。以此使服务吞吐提升,CPU占用降低。
-
go chassis是插件化设计,支持用户开发定制模块,并接入到框架中
go chassis特性
主要有以下几点:
-
插件化注册中心: 默认支持Service Center,kubernetes,istio
-
动态治理框架: 通过此框架,开发者可实现进程运行时配置热加载
-
插件化协议: 开发者可实现自己的RPC协议,默认实现了 http 和highway(RPC)
-
熔断降级: 支持根据超时,并发,错误率等进行服务的熔断
-
容错:支持重试次数等配置,并支持backoff退让重试,
-
路由管理: 可根据流量权重和Header匹配等配置规则,轻松实现金丝雀发布
-
客户端负载均衡: 支持定制策略
-
限流: 支持客户端和服务端限流
-
插件化Cipher: 支持开发者自定义加解密工具,并应用于AKSK和TLS 证书
-
处理链: 可支持在通信的过程中加入定制的业务逻辑
-
Metrics: 支持自动导出Prometheus格式的运行时监控数据
-
Tracing: 使用opentracing,支持用户快速对接不同分布式追踪系统
-
Logger: 日志工具支持扩展并下沉到不同存储中
-
治理: 可通过动态治理框架,在运行时热加载,熔断,负载均衡,路由等配置信息
设计目标
-
最大的灵活性和扩展性
协议是允许开发者灵活扩展的,在通信管道中任意的插入自己的特殊业务逻辑。
-
易用性
开发者可以用最小化的配置和