Presto 服务发现机制
吃个瓜
网上Presto有两个版本:prestosql/prestodb,大家喜欢称为社区版和Facebook版,除了包名,现在看还没多大的区别。但是这两家都在称自己是***offical***的,惊喜不?主要原因是两者是同一波人搞的。原Facebook Presto的三位核心另外拉了一个项目。为啥呢?facebook虽然开源了presto,但是并不怎么搭理开源社区的各位,还是围着自家转,文档什么的都是少到可怜。那三位有些不爽了,毕竟脱离了广大群众的软件不是好软件。总体来说,Presto也算是起了个早床,赶了个晚集。
导火索
大家引入Presto的时候感觉真是爽,查询速度飞起。突然有一天发现Presto抛出异常,报出的错误是和某某节点通信异常。鬼就鬼在这个节点ip不存在,后来发现是因为presto在k8s上的worker pod重启了,上面的ip呢是重启前的ip地址。其根源是冬冬在bbs上有讲的内存设置问题,同时也引发了另一个思考:Presto on k8s时不能按ip来进行通信,因为ip是浮动的。 那么有没有办法用域名呢?
问题解决的路径
获取worker信息
要想解决问题,首先就得把问题了解透彻了,怎么知道集群中有哪些worker?worker怎么标识的?
Presto的页面上能看到有几个节点,可以从证明Presto的coordinate肯定知道这个信息。圈里一般的玩法是提供个api或者是存储位置让用户看。正如瓜中所述,Presto的使用文档格式清晰,排版漂亮,但都是些基础的配置,你想找点高深的配置或者接口,就得费点心了。Presto的源码里面有个文档文件夹,绝对的宝库。
presto-docs/src/main/sphinix/
子文件夹rest中包含了rest接口的所有说明,可知通过接口 /v1/node 能拿到coordinater上worker的信息。标准的返回:
{
"uri":"http://10.209.57.156:8080",
"recentRequests":25.181940555111073,
"recentFailures":0.0