NATS与NSQ的介绍和比较
轻量消息中间件NATS与NSQ的介绍和比较NATS1. 语言server:GO官方支持client库:GO、C等
2. 设计特点高效稳定可用轻量支持多种消息策略(at-most-once,at-least-once)支持多种模式streaming下提供可配置的消息持久化
3. 多种消息发布模式生产-消费(发布-订阅)模式
一对多两种策略:at-most-once(只保证w/tcp的可靠性):消息无接受者时,则该消息丢失。即消息发送后不关心是否有接收。该策略以降低可靠性换取了性能(吞吐量)。可靠性由使用者自行设计保证。at-least-once:在消息可靠性要求更高的场合,使用nats streaming。监控消息是否到达每一个订阅者。降低性能(吞吐量)换取可靠性。
请求-响应模式
点对点/一对多。发布者发布消息需要收到响应。接受者可提前将响应放入“信箱”中。发布者只接收第一个响应。(如何配置一对多模型接收多个响应?)
队列订阅与协同工作
订阅的不是主题,而是队列。是一种负载均衡和容灾策略。队列中每个消息,随机发给一个订阅者。订阅者数量可随时增减。 (具体如何分配合 ...
NATS和NATS Streaming
NATS和NATS StreamingNATS源码安装
12345# Go clientgo get github.com/nats-io/nats.go/# Servergo get github.com/nats-io/nats-server
二进制:https://nats.io/download/nats-io/gnatsd/
When using or transitioning to Go modules support:
123456789# Go client latest or explicit versiongo get github.com/nats-io/nats.go/@latestgo get github.com/nats-io/nats.go/@v1.9.1# For latest NATS Server, add /v2 at the endgo get github.com/nats-io/nats-server/v2# NATS Server v1 is installed otherwise# go get github.com/nats-i ...
NATS Streaming
NATS StreamingNATS Streaming 概念NATS Streaming是一个由NATS驱动的数据流系统,用Go编程语言编写。 NATS Streaming服务器的可执行文件名是nats-streaming-server。 NATS Streaming与核心NATS平台无缝嵌入,扩展和互操作。 NATS Streaming服务器作为Apache-2.0许可下的开源软件提供。 Synadia积极维护和支持NATS Streaming服务器。
特点除了核心NATS平台的功能外,NATS Streaming还提供以下功能:
增强的消息协议 - NATS Streaming使用谷歌协议缓冲区实现自己的增强型消息格式。这些消息通过二进制数据流在NATS核心平台进行传播,因此不需要改变NATS的基本协议。NATS Streaming信息包含以下字段:
序列 - 一个全局顺序序列号为主题的通道 - 主题 - 是NATS Streaming 交付对象 - 答复内容 - 对应"reply-to"对应的对象内容 - 数据 - 真是数据内容 - 时间戳 - ...
Nats管理服务器
Nats管理服务器安装NATS服务器有许多方法可以安装NATS服务器。
从二进制安装GitHub版本页面上始终提供最新的官方发行版二进制文件。可以使用以下平台:
Linux (x86, x86_64, ARM)
Windows (x86, x86_64)
macOS
平台特定方法
以下方法可能并非全部安装最新发布的版本
GO
确保设置了Go环境,然后使用go get进行安装。
1go get github.com/nats-io/nats-server
Docker Hub
Docker Hub上提供了最新的官方Docker镜像。Windows
在Windows上,可以通过Chocolatey安装NATS服务器:
1choco install nats-server
macOS
在macOS上,可以通过Homebrew安装NATS服务器:
1brew install nats-server
测试您的安装要测试您的安装,您可以调用NATS服务器二进制文件,没有选项,也没有配置文件(没有身份验证,没有群集)。
1nats-server
当服务器成功启动时,您将看到NATS服 ...
MySql查询不区分大小写解决方案
MySql查询不区分大小写解决方案(两种)当我们输入不管大小写都能查询到数据,例如:输入 aaa 或者aaA ,AAA都能查询同样的结果,说明查询条件对大小写不敏感。
解决方案一于是怀疑Mysql的问题。做个实验:直接使用客户端用sql查询数据库。 发现的确是大小不敏感 。
通过查询资料发现需要设置collate(校对)。
collate规则:
_bin: 表示的是binary case sensitive collation,也就是说是区分大小写的
_cs: case sensitive collation,区分大小写
_ci: case insensitive collation,不区分大小写
解决方法
1.可以将查询条件用binary()括起来。 比如:
1select * from TableA where binary columnA ='aaa';
2.可以修改该字段的collation 为 binary
比如:
1ALTER TABLE TABLENAME MODIFY COLUMN COLUMNNAME VARCHAR(50) BIN ...
mysql分组查询,同组拼接合并
mysql分组查询同组拼接合并使用函数:GROUP_CONCAT( imei SEPARATOR ‘|’)
1select car_id,GROUP_CONCAT( imei SEPARATOR '|') as all_imei from location_device where car_id is not NULL GROUP BY car_id
hystrix-go源码分析
转载:https://www.cnblogs.com/li-peng/p/11050563.html
hystrix-go源码分析阅读源码的过程,就像是在像武侠小说里阅读武功秘籍一样,分析高手的一招一式,提炼出精髓,来增强自己的内力。之前的帖子说了一下微服务的雪崩效应和常见的解决方案,太水,没有上代码怎么叫解决方案。github上有很多开源的库来解决雪崩问题,比较出名的是Netflix的开源库hystrix。集流量控制、熔断、容错等于一身的java语言的库。今天分析的源码库是 hystrix-go,他是hystrix的的go语言版,应该是说简化版本,用很少的代码量实现了主要功能。很推荐朋友们有时间读一读。
使用简单hystrix的使用是非常简单的,同步执行,直接调用Do方法。
1234567err := hystrix.Do("my_command", func() error { // talk to other services return nil}, func(err error) error { // do ...
go微服务库
微服务库限流器漏桶算法 令牌桶算法github.com/didip/tollboothgithub.com/juju/ratelimitgolang.org/x/time/rate
go.uber.org/ratelimit
熔断器github.com/afex/hystrix-go 服务降级 限流 容错 熔断github.com/streadway/handygithub.com/sony/gobreaker
GitHub - alibaba/sentinel-golang: Sentinel Go version (Reliability & Resilience) [*]
系统监控github.com/prometheus/client_golanggithub.com/prometheus/common
链路追踪opentracing+Jaegergithub.com/ ...
gomicro深度学习
gomicro深度学习1.整体架构介绍产品嘴里的一个小项目,从立项到开发上线,随着时间和需求的不断激增,会越来越复杂,变成一个大项目,如果前期项目架构没设计的不好,代码会越来越臃肿,难以维护,后期的每次产品迭代上线都会牵一发而动全身。项目微服务化,松耦合模块间的关系,是一个很好的选择,随然增加了维护成本,但是还是很值得的。
微服务化项目除了稳定性我个人还比较关心的几个问题:
一: 服务间数据传输的效率和安全性。
二: 服务的动态扩充,也就是服务的注册和发现,服务集群化。
三: 微服务功能的可订制化,因为并不是所有的功能都会很符合你的需求,难免需要根据自己的需要二次开发一些功能。
go-micro是go语言下的一个很好的rpc微服务框架,功能很完善,而且我关心的几个问题也解决的很好:
一:服务间传输格式为protobuf,效率上没的说,非常的快,也很安全。
二:go-micro的服务注册和发现是多种多样的。我个人比较喜欢etcdv3的服务服务发现和注册。
三:主要的功能都有相应的接口,只要实现相应的接口,就可以根据自己的需要订制插件。
1.1通信流程go-mic ...
etcd集群配置
etcd集群配置1234567891011121314151617etcd 命令含义`--name` etcd集群中的节点名,这里可以随意,可区分且不重复就行`--listen-peer-urls`监听的用于节点之间通信的url,可监听多个,集群内部将通过这些url进行数据交互(如选举,数据同步等) `--initial-advertise-peer-urls`建议用于节点之间通信的url,节点间将以该值进行通信。`--listen-client-urls`监听的用于客户端通信的url,同样可以监听多个。`--advertise-client-urls`建议使用的客户端通信url,该值用于etcd代理或etcd成员与etcd节点通信。`--initial-cluster-token etcd-cluster-1`节点的token值,设置该值后集群将生成唯一id,并为每个节点也生成唯一id,当使用相同配置文件再启动一个集群时,只要该token值不一样,etcd集群就不会相互影响。-`-initial-cluster`也就是集群中所有的initial-advertise-peer-u ...
gomicro服务发现
gomicro服务发现安装工具安装golang
1234567891011121314#下载地址 https://studygolang.com/dlwget https://studygolang.com/dl/golang/go1.12.5.linux-amd64.tar.gz#gopathmkdir -p ~/goproject/srcmkdir -p ~/goproject/binmkdir -p ~/goproject/pkg#配置环境 ~/.bashrcexport GOROOT=<go root path>export GOPATH=<gopath>export PATH=$PATH:$GOROOT/bin:/$GOPATH/binexport GOPROXY=https://goproxy.cn
安装protoc
github上下载一个cpp包:https://github.com/google/protobuf/releases make make install安装即可
直接下载编译好的二进制可执行文件:https://github. ...
管理多个JDK版本
管理多个JDK版本一、测试背景:
项目对外提供JAR包,需要测试该JAR包对不同JDK版本(1.6至1.9版本)的兼容性。下面主要介绍在兼容性测试中,JDK多版本共存时如何配置环境变量,以及如何在IDE中切换JDK版本。
二、JDK多版本共存时环境配置
下载并安装需要的JDK版本(下载地址)
测试需要,本人分别下载和安装了JDK1.9,JDK1.8,JDK1.7和JDK1.6四个版本。
配置环境变量-创建五个JAVA_HOME。
JAVA6_HOME:存放JDK1.6的安装路径;
JAVA7_HOME:存放JDK1.7的安装路径;
JAVA8_HOME:存放JDK1.8的安装路径;
JAVA9_HOME:存放JDK1.9的安装路径。
JAVA_HOME:若需JDK1.6版本变量值设为%JAVA6_HOME%,若需1.9版本变量值设为%JAVA9_HOME%,便于切换。
配置环境变量-创建CLASSPATH,变量值为.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
配置环境变量-Path,新增值为 ...
go语言游戏框架
【服务器框架】
https://github.com/davyxu/cellnet cellnet是一个组件化、高扩展性、高性能的开源服务器网络库
https://github.com/davyxu/tabtoy 游戏客户端,服务器的策划表格数据导出
https://github.com/xiaonanln/goworld/ GoWorld是一个分布式的游戏服务器引擎,理论上支持无限横向扩展
http://gonet2.github.io/ 新一代游戏服务器骨架
https://github.com/yiv/yivnet 微服务架构游戏服务器
https://github.com/Golangltd/LollipopGo 全球服游戏服务器框架
https://github.com/name5566/leaf/ A game server framework in Go (golang)
https://github.com/liangdas/mqant 简洁,高效,高性能的分布式游戏服务器框
https://github.com/heroiclabs/nakama Distribu ...
网络游戏服务器开发框架浅谈
网络游戏服务器开发框架浅谈
LoginGate服务器
LoginServer服务器
GameGate服务器
GameServer服务器
IMServer服务器
AIServer服务器
CenterServer服务器
BillingServer服务器
WebServices服务器
DBServer服务器
GMServer服务器
LoginGate:登陆网关服务器,将所有的LoginServer服务器地址暴露给最终用户,每个LoginGate服务可以挂接n个LoginServer,将最终用户的所有请求转发给目标LoginServer。当最终用户通过此服务完成登陆后,会与该服务断开连接,断开连接前,服务器会将数据上报给GameGate服务。
LoginServer:登陆服务器,仅作于内部服务与LoginGate进行连接,所有的最终用户请求由LoginGate过滤后,转发过来进行处理。与LoginGate的所有通信都是明文,即未加密数据。
GameGate:游戏网关服务器,与LoginGate协作完成最终用户的登陆过程,每一个服务会连接到唯一一个LoginGate服务上进行注册,Login ...
Git打标签
Git打标签列出标签123$ git tagv0.1v1.3
你也可以使用特定的模式查找标签。 例如,Git 自身的源代码仓库包含标签的数量超过 500 个。 如果只对 1.8.5 系列感兴趣,可以运行:
1234567891011$ git tag -l 'v1.8.5*'v1.8.5v1.8.5-rc0v1.8.5-rc1v1.8.5-rc2v1.8.5-rc3v1.8.5.1v1.8.5.2v1.8.5.3v1.8.5.4v1.8.5.5
创建标签Git 使用两种主要类型的标签:轻量标签(lightweight)与附注标签(annotated)。
一个轻量标签很像一个不会改变的分支 - 它只是一个特定提交的引用。
然而,附注标签是存储在 Git 数据库中的一个完整对象。 它们是可以被校验的;其中包含打标签者的名字、电子邮件地址、日期时间;还有一个标签信息;并且可以使用 GNU Privacy Guard (GPG)签名与验证。 通常建议创建附注标签,这样你可以拥有以上所有信息;但是如果你只是想用一个临时的标签,或者因为某些原因不想要保存那些信息,轻量标签 ...
多个Git账户免密码登录配置
多个 Git 账户免密码登录配置摘要目前使用 git 作为文件版本控制工具的开发者越来越多,同时一个开发者可以拥有多个不同 git 服务器的帐号或者同一个 git 服务器的不同帐号。 例如,小明在公司有个公司搭建的 git 服务器帐号用于工作开发,同时在目前流行的 github 和 bitbucket 上也有帐号,在业余时间 fork 一些项目,然后做一些 contributes. 这时小明就会遇到一个问题,账户这么多,如果每次使用 git 软件在终端进行 add, commit 后,需要 push 到本地仓库对应的远程服务器时,如果没有事先配置好 ssh 免密码登录或是其他密钥管理方法, 每次都需要输入对应的服务器账户密码来进行安全认证。 有没有什么方法可以一劳永逸地解决这个多 git 账户自动匹配免密码登录问题呢? 本文描述了在 Terminal 环境下使用 ssh 协议的多个不同 git 服务器帐号的 git 仓库如何自动匹配免密码登录的方法。
快速预览主要解决两个问题,免密码登录 和 多账户自动匹配,前者可以使用 ssh 公私钥对解决,后者通过编辑 ssh 配置 ...
gogs安装使用
源码安装安装依赖基本依赖
Go 语言:版本 >= 1.8
安装 Go 语言如果您的系统已经安装要求版本的 Go 语言,可以跳过此小节。
下载使用root用户来演示,所以工作目录在/root/
123cd ~wget https://studygolang.com/dl/golang/go1.12.1.linux-amd64.tar.gztar xvf go1.12.1.linux-amd64.tar.gz
设置环境请设置和您系统环境对应的路径:
123456789cd ~mkdir -p $HOME/goproject/srcmkdir -p $HOME/goproject/pkgmkdir -p $HOME/goproject/binecho 'export GOROOT=$HOME/go' >> $HOME/.bashrcecho 'export GOPATH=$HOME/goproject' >> $HOME/.bashrcecho 'export PATH=$PAT ...
Docker快速入门—Docker-Compose
Docker快速入门——Docker-Compose一、Docker-Compose简介1、Docker-Compose简介Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。Docker-Compose将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)。Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名。一个工程当中可包含多个服务,每个服务中定义了容器运行的镜像,参数,依赖。一个服务当中可包括多个容器实例,Docker-Compose并没有解决负载均衡的问题,因此需要借助其它工具实现服务发现及负载均衡。Docker-Compose的工程配置文件默认为docker-compose.yml,可通过环境变量COMPOSE_FILE或-f参数自定义配置文件,其定义了多个有依赖关系的服务及每个服务运行的容器。使用一个Dockerfile模板文件,可以让用户很方便的定义 ...
Docker快速入门—Docker镜像制作
Docker快速入门——Docker镜像制作一、Dockerfile脚本1、Dockerfile脚本简介Dockerfile是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容就是描述该层应当如何构建。Dockerfile文件示例如下:
1234567891011121314151617## Dockerfile文件格式# This dockerfile uses the ubuntu image# VERSION 2 - EDITION 1# Author: docker_user# Command format: Instruction [arguments / command] ..# 1、第一行必须指定 基础镜像信息FROM centos# 2、维护者信息MAINTAINER docker_user docker_user@email.com# 3、镜像操作指令RUN yum install -y nginx# 4、容器启动执行指令CMD /usr/sbin/nginx
Dockerfile分为四部分:基础镜像信息、维 ...
Docker快速入门—Docker常用命令
Docker快速入门——Docker常用命令一、Docker命令简介1、Docker命令简介Docker的命令清单可以通过运行sudo docker或者sudo docker help命令查看。Docker容器技术在不断演化过程中,Docker的子命令已经达到41个,其中核心子命令(例如:run)还会有复杂的参数配置。Docker命令根据功能和使用场景可以分为4个部分。
2、Docker用户组Docker守护进程绑定的是一个unix socket,而不是TCP端口,默认的属主是root,其它用户可以使用sudo命令来访问该套接字文件。为了避免每次运行docker命令的时候都需要输入sudo,可以创建一个docker用户组,并把相应的用户添加到docker分组里面。当docker进程启动的时候,会设置该套接字可以被docker分组的用户读写。新建用户组docker之前,查看用户组中有没有docker组cat /etc/group | grep docker创建docker分组sudo groupadd docker将用户加入docker组sudo usermod -aG docke ...