Tim:服务管理框架的尝试

标签: tim 服务 管理 | 发表时间:2011-08-13 22:41 | 作者:(author unknown) Shengbin
出处:http://simple-is-better.com/

大型软件系统开发需要模块化,在分布式系统中,模块化通常是将功能分成不同的远程服务(RPC)来实现。比如可以用Java RMI、Web Service、Facebook开源的Thrift等一些技术。同样,在一个大型系统中,服务化之后服务的可维护、可管理、可监控以及高可用、负载均衡等因素同服务本身同样重要。

服务管理目前并无直接解决方案,Thrift作者Mark Slee提到

It’s also possible to use Thrift to actually build a services management tool. i.e. have a central Thrift service that can be queried to find out information about which hosts are running which services. We have done this internally, and would share more details or open source it, but it’s a bit too particular to the way our network is set up and how we cache data. The gist of it, though, is that you have a highly available meta-service that you use to configure your actual application server/clients.

Source: [Thrift] Handling failover and high availability with thriftservices

如果开发一个自己的服务管理框架,需要具备以下功能

  • 快速失败,这个在本厂意义重大,很多远程服务调用是在关键路径中,它可以容忍失败,但是不能容忍堵塞
  • failover,客户端failover支持,并支持自动失效探测及恢复调用
  • 中心化配置及推送功能,所有client在同一时刻配置的一致性,并且client会跟配置中心保持长连
  • 负载均衡策略:支持round robin,least active, consistent hash,或者基于脚本的动态路由策略。这个都是由配置中心来控制
  • 动态启用及停用服务及节点:可以动态启动及停用服务(热发布),由于有推送功能,相对容易实现
  • 跨语言:支持client能使用常见主流语言来访问
  • 版本管理:同一服务可以有不同的版本并存
  • 访问统计及动态运行参数查看:可以对方法级别进行访问统计及实时观察

访问策略

服务框架倾向于直连的方案,即client是直接连接server,而不会增加中间物理上的代理层,服务框架只做中心配置、访问策略、服务发现、配置通知等职责。

路由的特殊需求

通常的服务访问,使用上述round robin等3种策略即可,但是在实际工程实践中,我们发现有些不同的需求。比如计数这样的远程服务,读操作可随机访问一台远程节点,但写操作需要访问所有的服务节点才能实现。因此我们需要有广播式的访问需求。由于计数服务对实时性和一致性要求较高,不适合采用异步如Pub/Sub这样方式去实现,因此在client还需要支持同步的广播调用。

耦合及侵入的矛盾

在设计服务管理系统之前,我们希望不跟一种具体的技术(如Thrift)绑定,比如client和server服务实现方不需要太多关心底层技术。但是在实际实现过程中碰到不少矛盾。

IDL侵入

在使用Thrift之后服务实现很难绕过Thrift IDL,使用方需要自己维护IDL以及Thrift生成的代码,服务框架支持将Thrift服务注册到配置系统中。虽然也可以绕过IDL来实现服务,但是框架相关功能的实现和维护成本比较高。

RPC框架的侵入

Thrift Transport可以使用TCP(Socket)或者是HTTP
这个也是非常好的特性,在某些情况Transport使用HTTP会带来很多便利,使用HTTP虽然有一些额外开销,但是HTTP的周边配套设施的完善足够抵消这种开销。使用TCP很多状态实时监控都需要服务系统从头做起。

Thrift的Version与服务的version存在一定的重复
服务牵涉到版本管理,我们希望通过发现服务来管理,但是Thrift本身也有版本的设计。

这些矛盾的本质就是服务框架需要的一些功能是自己实现还是依赖Thrift来实现,很多Thrift使用方如Twitterrpc-client干脆就直接在Thrift框架基础上增强。

虽然存在上述一些待解决问题,厂内第一个使用服务框架管理的服务即将上线,很快每天会有数十亿的调用将会在此之上产生,同时也会有新的挑战出现。


Figure 1: Facebook Service Management Console
(来源:http://www.slideshare.net/adityaagarwal/qcon Slide 27)

# 来源:Tim[后端技术]


在微博上关注: 新浪, 腾讯   投稿

最新招聘

更多>>

相关 [tim 服务 管理] 推荐:

Tim:服务管理框架的尝试

- Shengbin - python.cn(jobs, news)
大型软件系统开发需要模块化,在分布式系统中,模块化通常是将功能分成不同的远程服务(RPC)来实现. 比如可以用Java RMI、Web Service、Facebook开源的Thrift等一些技术. 同样,在一个大型系统中,服务化之后服务的可维护、可管理、可监控以及高可用、负载均衡等因素同服务本身同样重要.

Tim Cook 回信:War Eagle forever!

- qtwhat - 爱范儿 · Beats of Bits
我们知道乔布斯会回复用户的邮件,而且总是言语简短. 比较有意思的一次是口舌大战 Gawker 博客作者,那一次,似乎是因为 Ryan Tate 在邮件中提到乔布斯的偶像 Bob Dylan,使他无法淡定了. Tim Cook 是否会延续这种与用户直接对话的方式呢. 显然,已经有许多人开始给 Tim Cook 发邮件.

Tim O’Brien 插画设计

- shan - Poboo
Wesley Eggebrecht 插画. Audrey Kawasaki 最新插画作品. JrDragao 的Illustrations设计作品. Illustration 科幻设计. Illustrations 精彩设计. 水彩韵色下那栩栩如生名人插画~ (@i-oo). Dominic Marco最新插画~ (@i-oo).

关于Tim Cook你应该知道的一些事

- Huadong Wang - 36氪
这几天关于苹果前 CEO Steve Jobs 离任的消息以及各种评论可谓铺天盖地. 诚然,Steve Jobs 对于苹果的意义以及这些年来给苹果的成长带来的一切,我们无法从记忆中抹去. 但是,我们是不是忽略了另外一个重要人物. 对,他就是 Tim Cook,之前在 Steve Jobs 病休期间曾经带领公司的他,如今将接任苹果CEO的位置.

Tim Cook 致全体苹果员工信:苹果还是苹果

- MooM - 36氪
根据 Ars Technica 曝光的一封苹果内部邮件,Tim Cook 已经向全体苹果员工保证,苹果不会发生任何变化. 下面是 Tim Cook 给苹果全体员工发的邮件全文:. 我很期待这个在世界上最具创新力的公司当 CEO 的机会,加入苹果是我做过的最好的决定,能为苹果和乔布斯工作 13 年是我一生的荣耀,我和乔布斯一样,看好苹果的未来.

乔布斯的接班人Tim Cook是神马人物

- Jessica - 互联网的那点事
1998年年初,苹果公司的首席执行官 Steve乔布斯 把默默无闻的 Timothy D. Cook 招入公司,职责是负责这家衰落中的硅谷巨头一团糟的运营. 现在已经过去八年了,苹果在此辉煌,同时也成就了Cook在这家公司的首席运营官和二把手的地位. 但和苹果CEO乔布斯比较,公众对他的了解少之甚少.

2011 Vogue 機械陶瓷娃娃時尚攝影 - Tim Walker

- 秀 - KAIAK.TW | 城市美學的新態度
像陶瓷一樣脆弱且又受制於機械的身體,這是 Vogue 義大利推出的 10 月號專題,將模特兒 Kirsi Pyrhonen 與 Audrey Marnay 化妝成膚色陶瓷娃娃,身上穿著當季的最新復古時裝. 由造型師 Jacob K 巧手改造,加上機械的細節,模特兒彷彿變成真正的陶瓷娃娃,而透過攝影大師 Tim Walker 的鏡頭,融合了現實與幻想,給人想要好好疼惜這些娃娃的錯覺.

服务管理框架的尝试

- mk - Tim[后端技术]
大型软件系统开发需要模块化,在分布式系统中,模块化通常是将功能分成不同的远程服务(RPC)来实现. 比如可以用Java RMI、Web Service、Facebook开源的Thrift等一些技术. 同样,在一个大型系统中,服务化之后服务的可维护、可管理、可监控以及高可用、负载均衡等因素同服务本身同样重要.

用supervisord管理杂乱的服务

- Eric - 五四陈科学院-坚信科学,分享技术
以下内容由[五四陈科学院]提供. Supervisord是用Python实现的一款非常实用的进程管理工具,在批量服务化管理时特别有效. 如果上述遇到问题,请按如下操作. 依赖setuptools安装. [inet_http_server]前面的分号去掉;. 定义port=192.168.1.1:8888.