groupcache 源码系列七 实例及最终总结

2019-03-28  本文已影响0人  合肥黑
一、多结点实例

改造groupcache 源码系列四 Sink ByteView的简单例子,放弃掉那些复杂的解析参数,简单粗暴一点:

    //本地peer
    peers := groupcache.NewHTTPPool("http://127.0.0.1:8001")
    //设置集群信息
    peers_addrs := []string{"http://127.0.0.1:8001",
    "http://127.0.0.1:8002", "http://127.0.0.1:8003"}
    peers.Set(peers_addrs...)
    http.ListenAndServe("127.0.0.1:8001", nil)

当我访问http://127.0.0.1:8001/config?key=price,我打印了额外的辅助信息:

look up for price from groupcache
get data from peer: http://127.0.0.1:8002
get data from peer result error dial tcp 127.0.0.1:8002: connectex: 
No connection could be made because the target machine actively refused it.
look up for price from config_file

可以看到尝试去8002请求数据,但是那个节点,我们根本没有部署啊。在goland中重新建立一个工程,改一下代码吧,虽然有点麻烦,胜在简单粗暴……

    //本地peer
    peers := groupcache.NewHTTPPool("http://127.0.0.1:8002")
    //设置集群信息
    peers_addrs := []string{"http://127.0.0.1:8001",
    "http://127.0.0.1:8002", "http://127.0.0.1:8003"}
    peers.Set(peers_addrs...)
    http.ListenAndServe("127.0.0.1:8002", nil)

仅仅改一下self,并且把自己启动起来,当然不要忘记复制那个groupcache.conf,然后先把8002跑一下试试。如果ok,就去把8001那个工程重启一下,然后重新访问,错误不见了,拿到了正确的数据:

look up for price from groupcache
get data from peer: http://127.0.0.1:8002
get data from peer value: 12

现在有一个问题,如果把第二个工程8002中的groupname改一下,会出现什么情况呢?答案就是8002正常访问,但是8001已经不能通过节点8002拿到数据了,因为GetRequest传的groupname不同了:

look up for price from groupcache
get data from peer: http://127.0.0.1:8002
get data from peer result error server returned: 404 Not Found
look up for price from config_file
二、总结

参考
grgoupcache源码走读(三):groupcache的特性和使用案例

上一篇 下一篇

猜你喜欢

热点阅读