grpc使用实践

1grpc概述grpc是一个高性能、开源的rpc框架,目前提供了多种语言版本,基于HTTP/2标准设计,拥有双向流、流控、头部压缩、单TCP连接上的多复用请求特性,接口描述语言使用protobuf。在grpc中,一共有四种调用方式:一元RPC(unaryRPC):称为单次RPC,也就是一问一答RPC请求,是最基础最常用的调用方式。服务端流式RPC(Server-sideStreamingRPC):是一个单向流,客户端发起一次普通RPC请求,服务端通过流式返回数据集。客户端流式RPC(Client-sideStrea[...]

继续阅读 »

配置文件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基础和使用

rabbitMQ简介rabbitMQ是一个广泛使用的开源消息队列系统,它实现了高级消息队列协议(AMQP)标准,为分布式应用程序提供了强大的消息传递功能。rabbitMQ是Erlang语言编写的,具有高度的可扩展性和可靠性,因此被广泛用于构建分布式、异步的消息通信系统。消息队列的概念消息队列是一种通信模式,用于在不同组件、服务或应用程序之间传递消息。它允许发送者将消息放入队列,而接收者可以从队列中获取消息,实现了解耦、异步通信和数据传递的目标。消息队列通常用于处理以下情况:异步通信:发送方和接收方之间不需要立即响应,提高了系统的可伸缩性和性能。任务排队:将需要处理的任务放入队列,由工作进程异步执行。解耦[...]

继续阅读 »

mongoDB基础和使用

官网:https://www.mongodb.orgmogodb是文档数据库,存储的是文档(Bson,json的二进制数据),内部执行引擎为JS解析器(谷歌v8),把文档储存成bson结构,在查询是转换为JS对象,可以通过熟悉的JS语法来操作。mogodb和传统数据库区别:传统数据库:结构化数据,设计了表结构后,每一行内容的列的类型是固定的。mogodb文档数据库:表下的每篇文档都可以有自己独立的数据结构(json对象都可以有自己独特的属性和值)1安装mongodb1.1在主机安装和启动mongodb(1)安装mongodb

继续阅读 »