Go语言中文网 为您找到相关结果 14

微服务实战(四):服务发现的可行方案以及实践案例

这是关于使用微服务架构创建应用系列的第四篇文章。第一篇介绍了微服务架构的模式,讨论了使用微服务架构的优缺点。第二和第三篇描述了微服务架构内部的通讯机制。这篇文章中,我们将会探讨服务发现相关问题。 为什么要使用服务发现?设想一下,我们正在写代码使用了提供REST API或者Thrift API的服务,为了完成一次服务请求,代码需要知道服务实例的网络位置(IP地址和端口)。传统应用都运行在物理硬件上,服务实例的网络位置都是相对固定的。例如,代码可以从一个经常变更的配置文件中读取网络位置。 而对于一个现代的,基于云微服务的应用来说,这却是一个很麻烦的问题。其架构如图所示: 服务实例的网络位置都是动态分配的,而且因为扩展、失效和升级等需求,服务实例会经常动态改变,因此,客户端代码需要使用一种更加复杂...阅读全文

博文 2016-03-04 10:25:26 hokingyang

机器互 Ping 检测工具SmartPing

SmartPing为一个各机器(点)间间互PING检测工具,支持互PING,单向PING,绘制拓扑及报警功能 ##功能 ## 机器间互PING,单向PING,绘图 绘制互PING间机器的拓扑及报警功能 本系统设计为无中心化原则,所有的数据均存储自身点中,默认数据循环保留1个月时间,由自身点的数据绘制 出PING包 的状态,由各其他点的数据绘制 进PING包 的状态,并API接口获取其他点数据绘制整体PING拓扑图,拓扑图中存在报警功能,报警规则为Thresholchecksec秒钟内发现大于等于Thdoccnum次延迟超过Thresholdavgdelay毫秒或丢包率大于Thresholdloss%即报警,若设置报警声音则会同时有Alertsound声音提醒。 **注意:** 目...阅读全文

开源项目 2017-03-25 13:00:20 gy-games

rpc、sync.Pool学习

前段时间,因为rpc使用的conn阻塞,导致了一个非常意外的问题,静下心来学习了go的rpc包的代码。梳理了一下运行逻辑: 1. 客户端Client执行Call发出请求(内部为Call-》Go-》send)将请求向服务端打包。每次请求,都写入一个Request头,而具体业务则作为Body。 2. 服务端Server得到数据,先读取Request,并根据Request中的ServiceMethod属性,寻找之前注册的Service方法,并运行。 3. 得到的结果后,server调用call,将数据回传。数据写入之前,会根据Request对应给出Response来作为消息头。 在了解代码的过程中,发现server的代码或许是为了减少request、response头的内存GC,通过指...阅读全文

go 钉钉报警

代码 package main import ( "bytes" "encoding/json" "fmt" "io/ioutil" "net/http" ) const webhook_url = "https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" func dingToInfo(s string) bool { content, data := make(map[string]string), make(map[string]interface{}) content["content"] = s data...阅读全文

博文 2019-04-04 15:35:09 295631788

tendermint快速入门

区块链应用已经从单纯电子现金发展到去中心化投票等更多的领域,但是区块链这样 的分布式系统的开发还存在一些困难的问题:安全、可靠性、敏捷度、以及一致性保证等等。 Tendermint的目的就是致力于解决分布式系统开发中像公示算法这样的技术难点,而让Tendermint 区块链应用开发者可以将关注点集中在业务逻辑上。 > 如果希望快速掌握基于Tendermint的区块链开发,推荐汇智网的在线互动课程: [Tendermint区块链开发详解](http://xc.hubwiz.com/course/5bdec63ac02e6b6a59171df3?affid=go7878), 技术问题可以咨询课堂助教。 ## Tendermint简介 Tendermint萌芽于比特币、以太坊这样的加密货币,它的目...阅读全文

go http请求会阻塞

go新手,照着书本打,写一个简单的web服务器,成功运行。浏览器也能访问。 问题: 在运行的exe窗口,鼠标多点几下,多划,多拖动几下,在用浏览器发出请求,会阻塞,浏览器一直在转圈,然后在exe服务端窗口,按下ctrl + c ,这个时候,请求又正常了, 服务端每次接受请求时,会执行这个代码,fmt.Println("Hellor"),在窗口输出,有时候阻塞了就输出不了,直到按ctrl + c又正常了, 是什么原因,如何避免这个问题? 求...阅读全文

设计模式-05-命令模式

命令模式 概述 在开发中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是什么。我们希望做到只需在程序运行时指定具体的请求接收者即可,可以使用命令模式来进行设计,消除请求发送者与请求接收者彼此之间的耦合,让对象之间的调用关系更加灵活。 实现 使用一个音乐播放器的例子,有播放,暂停和停止播放三种命令。 总结与分析 命令模式的本质是对命令进行封装,将发出和执行命令的责任分割开。命令模式中的每一个命令都是一个操作,请求方发出请求,要求执行一个操作;接收的一方收到请求,并执行操作。 代码实现: 命令模式(php/go...阅读全文

博文 2019-04-11 10:34:41 疯狂的卡卡

Go语言DefaultClient没有设置请求超时

今天看到这篇文章:Don’t use Go’s default HTTP client。总结起来就是直接使用Go语言的http.Post,http.Get等方法时,底层连接使用的是DefaultClient。而DefaultClient没有设置请求超时: // DefaultClient is the default Client and is used by Get, Head, and Post. var DefaultClient = &Client{} 因此,如果服务器端如果一直无响应的话,就会把当前发出请求的goroutine挂死。因此如果要使用DefaultClient,一定要留心这个陷阱...阅读全文

最近写了一个用来报警发送微信模板消息的应用

> 点这里 [GitHub的地址](https://github.com/SugarAYuan/WeChatAlarm) > 将来我打算把日志系统也融入其中,还有定时脚本之类的,到时候再做个页面勾勾选选就解决配置问题。 > 有写的不好的地方请大家多多指正哈:)谢谢~~ - 首先更改配置文件(config.toml)中的APPID和SECRET然后运行脚本 ```shell ./alarm 服务器已启动监听端口为:9200 ``` - 第二步 注意config中的模板ID配置完后要将相应的模板配置写入到template.json中 ```json //添加模板ID的json配置在template.json中 //例如 { "对应模板id": { "first": { "value": "", ...阅读全文

博文 2018-05-10 10:11:10 SugarAYuan

Golang微服务框架-Mico

Mico是一个工具集合,通过将微服务架构抽象成一组工具。隐藏了分布式系统的复杂性。为开发人员提供更简洁的概念。Mico主要由三部分组成:go-mico:开发SDK,包含了RPC框架,服务发现、消息订阅/发布等功能。go-plugins:mico插件。mico:Mico提供的管理工具,包含了API网关,仪表盘,RPC代理等功能。go-mico: services:微服务,提供了对微服务功能开发的封装,可以快速创建一个微服务。client:RPC客户端,提供了诸如 服务发现/负载均衡/RPC代理和调用,以及失败时的重试/超时/上下文等功能。server:RPC服务端,提供了如何实现RPC请求的方法,功能逻辑主要使用这个实现。codec:数据编码模块,提供将程序调用数据转换成RPC调用数据的功能,...阅读全文

博文 2020-01-20 15:32:43 皮斯勒夫

go语言学习笔记之并发编程

载 : http://www.cnblogs.com/agateriver/archive/2010/05/31/1741473.html 1. 通过通讯共享内存(Share by communicating): Do not communicate by sharing memory; instead, share memory by communicating. 不要通过内存共享进行通讯;应当通过通讯来共享内存。使用信道(channels)来控制变量的访问可以更为容易地编写出清晰、正确的程序。 2. Goroutines: 为什么创造goroutine这个新词? 原因就是现有的术语,比如线程、协程、进程等等都不能精确的表达其所要表达的内涵(译者在这里也建议不要将其翻译成中文,因为中文里也...阅读全文

golang协程同步的几种方式

最不靠谱的sleep package main import ( "fmt" "time" ) func main() { go func() { fmt.Println("Goroutine 1") }() go func() { fmt.Println("Goroutine 2") }() time.Sleep(time.Second * 1) // 睡眠1秒,等待上面两个协程结束 2.goroutine / channel 最佳组合拳 package main import ( "fmt" ) func main() { ch := make(chan struct{}) count := 2 // count 表示活动的协程个数 go func() { fmt.Println("Go...阅读全文

阿里巴巴淘票票专家分享:如何利用阿里云ARMS,搭建国际化在线售票的业务监控系统

摘要: 淘票票为了开拓国际业务,需要做国际化的在线售票,并选择了阿里云新加坡节点作为技术方案,项目上线后急需一套自动化的监控系统代替人肉维护监控。看了ARMS的功能说明,发现其刚好以很低的接入成本来满足我们业务实时监控的需求。 阿里巴巴旗下-淘票票 王伟 撰稿 1. 简介 淘票票为了开拓国际业务,需要做国际化的在线售票,并选择了阿里云新加坡节点作为技术方案,项目上线后急需一套自动化的监控系统代替人肉维护监控。看了ARMS的功能说明,发现其刚好以很低的接入成本来满足我们业务实时监控的需求,因此决定采用阿里云的业务实时监控服务(ARMS)做业务监控。 业务的基本需求是需要实时大盘和报警功能,对要实时统计订票接口的各种状态进行统计和报警,包括: 订票成功率,从业务层面看是...阅读全文