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 当服务器成功启动时,您将看到NA...
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) ...
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 { // ...
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-...
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-pee...
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://gith...
管理多个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 Distr...
网络游戏服务器开发框架浅谈
网络游戏服务器开发框架浅谈 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服务上进行注册,Lo...
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=$...
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 do...
Docker快速入门—Docker简介
Docker快速入门——Docker简介一、Docker简介1、Docker简介Docker是Docker Inc公司开源的一项基于Ubuntu LXC技术构建的应用容器引擎,源代码托管在GitHub上,完全基于go语言开发并遵守Apache2.0协议开源。Docker可以让开发者打包应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux版本机器上,也可以实现虚拟化。Docker容器完全使用沙箱机制,容器相互之间不会有任何接口,并且容器性能开销极低。Docker最初是在Ubuntu 12.04上开发实现的,RedHat从RHEL6.5开始对Docker 进行支持。Docker最初基于LXC实现,从0.7版本后开始去除LXC,转而使用自行开发的libcontainer。从1.11开始,进一步演进为使用runC和containerd。Docker官网:http://www.docker.comGithub Docker源码:https://github.com/docker/docker 2、Docker引擎Docker引擎是一个客户端服务器应用程序,包...
Dockerfile定制镜像
https://github.com/yeasy/docker_practice Dockerfile定制镜像镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么无法重复的问题、镜像构建透明性的问题、体积的问题就都会解决。这个脚本就是 Dockerfile。 Dockerfile是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。 此处以定制 nginx 镜像为例,使用 Dockerfile 来定制。 在一个空白目录中,建立一个文本文件,并命名为 Dockerfile : 123$ mkdir mynginx$ cd mynginx$ touch Dockerfile 其内容为: 12FROM nginxRUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html 这个 ...
Docker数据卷的使用
Docker数据卷的使用Docker中的数据可以存储在类似于虚拟机磁盘的介质中,在Docker中称为数据卷(Data Volume)。数据卷可以用来存储Docker应用的数据,也可以用来在Docker容器间进行数据共享。 数据卷呈现给Docker容器的形式就是一个目录,支持多个容器间共享,修改也不会影响镜像。使用Docker的数据卷,类似在系统中使用 mount挂载一个文件系统。 1)一个数据卷是一个特别指定的目录,该目录利用容器的UFS文件系统可以为容器提供一些稳定的特性或者数据共享。数据卷可以在多个容器之间共享。 2)创建数据卷,只要在docker run命令后面跟上-v参数即可创建一个数据卷,当然也可以跟多个-v参数来创建多个数据卷,当创建好带有数据卷的容器后,就可以在其他容器中通过--volumes-froms参数来挂载该数据卷了,而不管该容器是否运行。也可以在Dockerfile中通过VOLUME指令来增加一个或者多个数据卷。 3)如果有一些数据想在多个容器间共享,或者想在一些临时性的容器中使用该数据,那么最好的方案就是你创建一个数据卷容器,然后从该临时性的容器...