有不少热心的朋友,都私下问我,搞了这么多年的 java ,为什么现在开始搞golang了,首先java不存放弃,搞golang了并不代表java不好, 还是看具体的场景, springcloud 的微服务解决方案香不香,很香,对于java熟悉的人员来说,可以通过 spring boot和springcloud,非常代价低的从单体应用迁移到微服务应用里,但是有2个问题,1是摆脱不了java的依赖,2.springcloud的微服务解决方案,对springcloud的注入性太强,这里可以单独开个文章来讨论了, 云原生,service mesh,java这块就有些欠缺了。
另外,以前写纯后台的通信底层,都是用 netty 进行实现,以前没有netty的时候,自己也写过,有了netty,写起来更方便了,不过和golang的程序来说,还是感觉golang写起来爽,只是golang的面向对象的思想,实现起来很别扭,但是无影响对golang的喜爱。 java的项目,做复杂的和多个系统交互,对性能要求不是特别苛刻的,非常好,比较发展的早,各种封装的包和框架很多,拿起来就可以用,golang可以做较底层的一些功能开发,业务上不复杂,但是对技术的一些考虑要求较高的,非常合适,而且golang作为云原生里的组件服务是非常好的,golang和k8s简直就是绝配,
今天这里要介绍的是golang的promethus的改进, prometheus是个非常好的产品, GPE 里的便是Promethues。 java里作为prometheus的支持,非常的简单,在springcloud的组件里,已经默认就支持了prometheus的metrics。 golang里同样也已经有prometheus的包,支持产生prometheus的metrics, 只是这个prometheus的包,只是支持原生包里的net/http作为http通道,我们现在都没有用net/http做http通道,考虑到更高的性能支持使用的是fasthttp作为http通道,这样prometheus的包就完全使用不了,只能进行prometheus的改进,使之支持promethus的fasthttp。
祭出终极武器,直接阅读prometheus的源码,了解功能后进行改造。
prometheus的主要功能包,prometheus,promethushttp,promethuesencode,clientmodel, prometheus是核心包,http负责http的路由通信,encode进行各种文本协议的编码,clientmodel是监控指标对象的模型类。
除了promethushttp以外的其他包,都是可以直接拿来用的,需要改造的就是promethushttp。 这里采用的方法,没有直接去修改代码,而是做了个第三方的包,把fasthttp支持的进行了封装,还是使用fasthttp-router作为路由。
测试代码
PostMan测试
Grafana的测试就没有做了。
Grafana是个非常好的产品,非常喜欢用,有对监控系统,APM系统感兴趣的,可以看看相关介绍。