gprc知识整理

1grpc概述grpc是一个高性能、开源的rpc框架,目前提供了多种语言版本,基于HTTP/2标准设计,拥有双向流、流控、头部压缩、单TCP连接上的多复用请求特性,接口描述语言使用protobuf。grpc调用流程:客户端发起调用,即在程序中调用某个方法;对请求信息使用protobuf进行对象序列化后发给服务端;服务端接收请求后,解码请求信息,进行业务逻辑处理;对处理结果使用protobuf进行对象序列化压缩后返回给客户端;客户端接收到服务端响应后,解码结果。grpc优点:[...]

继续阅读 »

配置文件viper库

1viper概述viper是Go应用程序的完整配置解决方案。在构建现代化应用程序的过程中,开发人员可以通过使用viper而不必考虑配置文件的格式问题,可以被认为是所有应用程序配置需求的注册表。它支持功能:设置默认值从JSON,TOML,YAML,HCL和Java属性配置文件中读取实时观看和重新读取配置文件(可选)从环境变量中读取从远程配置系统(etcd或Consul)读取,并观察变化从命令行标志读取从缓冲区读取设置显式值

继续阅读 »

TLS和SSL

1.1TLS/SSL基本概念SSL(SecureSocketLayer安全套接层)是基于HTTPS下的一个协议加密层,起初是因为HTTP在传输数据时使用的是明文,是不安全的,为了解决这一隐患网景公司(Netscape)推出了SSL安全套接字协议层,SSL是基于HTTP标准并对TCP传输数据时进行加密,在HTTP和TCP之间,所以HPPTS是HTTP+SSL/TCP的简称。TLS(TransportLayerSecurity)是传输层安全性协议,是IETF把SSL经过标准化的传输协议,可以看作是SSL的升级版,目的是保障互联网通信提供安全性和数据完整性。事实上我们现在用的都是TLS,但因为历史上习惯了SSL这个称呼。目前应用最广泛的是TLS1.0,但是主流浏览器都已经实现了TLS1.2的[...]

继续阅读 »

etcd基础与使用

etcd基础与使用1etcd简介etcd是一个高可用的分布式的键值对存储系统,常用做配置共享和服务发现,由CoreOS公司发起的一个开源项目,受到ZooKeeper与doozer启发而催生的项目,名称”etcd”源自两个想法,即Unix的”/etc”文件夹和”d”分布式系统。”/etc”文件夹是用于存储单个系统的配置数据的地方,而etcd用于存储大规模分布式的配置信息,etcd有如下特点:简单:基于HTTP+JSON的API,用curl就可以轻松使用。可信:使用Raft算法充分实现了分布式。安全:可选SSL客户认证机制。

继续阅读 »

网格交易策略

1网格交易历史来源网格交易的思路来源于信息论之父香农,上世纪40年代的某一天,香农在黑板上给大家演示了他的投资理论:在任何一个价位,用资金的50%买入资产作为起始仓位,当价格上涨一定幅度就卖出一部分仓位套现,当价格下跌一定幅度就买入一部分仓位补仓,保持仓位和现金的比例始终为50%:50%,香农始终采用了半仓的持仓方式,保持每年复利29%,直到50岁得了老年痴呆症,才没能延续辉煌。2网格策略根据香农仓位和现金1:1交易思路拓展为n:1,n表示网格数量,1表示一份投资金额,把投资金额平均分布在n个网格上,随着行情在网格范围内波动,行情下跌时逐步加仓,行情上涨时逐步减仓,持仓会跟着行情动态变化,通过低买高卖赚取利润。[...]

继续阅读 »

根据服务名称查看golang程序的profile信息

go语言本身带有runtime/pprof包,使用pprof可以查看程序profile信息(例如cpu、内存、goroutine等)。一个项目中可能有很多服务,这些服务部署在k8s集群或不同节点,如果想查看某个服务的profile信息(前提是开启profile功能),通常需要找到该服务对应节点ip和端口,如果服务部署在k8s集群,可以通过端口映射、端口转发、ingress等方式获取服务的profile信息,有点麻烦,特别是服务多了之后,不容易管理和查看,为了方便管理,希望只需要知道服务名称就可以获取到对应服务的profile信息,不需要知道ip和端口,通过服务名称就可以查看该服务的profile信息。具体实现步骤:(1)使用自定义的路由(/goprofile/your-server-name)替换默认路由(/de[...]

继续阅读 »

go语言开发规范

1代码格式化go默认已经有了gofmt工具,但是建议使用goimport工具,这个在gofmt的基础上增加了自动删除和引入包,目前IDE基本都支持goimports,安装goimports:gogetgolang.org/x/tools/cmd/goimports对import的包进行分组管理,用换行符分割,而且标准库作为分组的第一组。如果你的包引入了三种类型的包,有标准库包、程序内部包、第三方包,建议采用如下方式进行组织你的包:import("fmt""os""kmg/a"[...]

继续阅读 »

prometheus基础和使用

1prometheus介绍Prometheus是一个云原生计算基础项目,是一个系统和服务监控系统。它以给定的时间间隔从配置的目标收集指标,评估规则表达式,显示结果,并且如果观察到某些条件为真,则可以触发警报。prometheus的主要区别特征是:一个多维数据模型(时间序列由指标名称定义和设置键/值尺寸)一个灵活的查询语言来利用这一维度不依赖于分布式存储;单个服务器节点是自治的时间序列集合通过HTTP上的拉模型进行通过中间网关支持推送时间序列通过服务发现或静态配置发现目标多种图形和仪表板支持模式支持分层和水平联合

继续阅读 »

rabbitmq基础和使用

官网:https://www.rabbitmq.com/1rabbitmq概述RabbitMQ是一套开源(MPL)的消息队列服务软件,是由LShift提供的一个AdvancedMessageQueuingProtocol(AMQP)的开源实现,由以高性能、健壮以及可伸缩性出名的Erlang写成。RabbitMQ内建的集群功能可以实现其高可用,允许消费者和生产者在RabbitMQ节点崩溃的情况下继续工作,同时可以通过添加更多的节点来提高消息处理的吞吐量。单个节点的RabbitMQ会将这些metadata保存到内存中,同时对于那些[...]

继续阅读 »

go news

数据来源:https://github.com/gocn/news2020-11-02go模块,可美化控制台输出Go中的哈希表实现

继续阅读 »