在“著名的推特论战:Microservices vs. Monolithic”一文中,我们曾分享过Netflix、ThougtWorks及Etsy工程师在Microservices上的辩论。在看完整个辩论过程后,或许会有一大部分人认同面向服务这个架构体系。然而事实上,Microservices的执行却并不简单。那么究竟如何才能打造一个高效的面向服务架构?这里我们不妨看向MixRadio首席架构师Steve Robbins的分享。 以下为译文 MixRadio提供了一个免费的音乐流服务,通过学习用户的收听习惯以交付一个定制化的电台,而用户需要做的只是去点击一些简单的按钮。通过极其简易的交互,MixRadio通过“移动优先”的方式提供了一个难以置信的定制化等级。它适用于任何人去发现新的音乐,不只是狂热的音乐发烧友。使用MixRadio就像打开一台收音机,但一切都在你的掌握之中——轻点Play Me,你的私人广播电台随之开启。基于地域流派和风格,MixRadio包括了数以百计的手工歌单、创建歌单功能,当然不能缺少保存喜爱的歌单并离线播放,这样即使没有互联网,美妙的音乐仍然可以继续。 当下服务已经在Windows Phone、Windows 8、Nokia Asha以及Web上可用,而支撑这些应用的后端系统则经过了数年的打磨,下面我们一起看看系统的架构概括。 架构综述在2009年,我们如愿获得了重构后端系统的机会。而衍变到现在,后端系统已经由一系列RESTful服务组成,也就是大家经常说的“Microservices”。这些系统的功能、大小、开发语言、数据存储都各不相同,然而有一些共性是必不可少的,比如一些良好定义的RESTful API、独立扩展、监视能力。围绕这些核心服务,系统还拥有两个相似的代理服务,通过配置以提供RESTful资源的子集,它们被用于不同功能。“Internal Tooling API”代理服务器拥有内部API以提供客户服务、内容管理、歌单发布、监视以及其他场景使用的工具,客户端应用及第三方开发者使用的 RESTful API通过“External API auth layer”开放,这个服务同样负责执行适当的许可权限以及授权方案,比如OAuth2。 对于终端用户,通过API服务的应用程序范围非常广。我们提供了独立的HTML5网站、以及适用于Nokia电话和搭载Windows 8系统的设备应用,同时我们还开放部分相同的API给第三方开发者。下面我们不会公布过多的系统架构细节,如果想有更多详细了解可以查看我同事Nathan之前发布的文章。我们将对系统主要部分进行高度综述,下图显示了系统中由50多个Microservices构成的组件: 使用的技术基于开源,我们务实地选择合适的工具以完成任务,下面一起看系统中重度使用的技术堆栈: 语言
存储
基础设施
监视
架构原则为了保持50多个Microservices API的一致性,我们在URL、结构、分页、排序、包装、语言代码等处理上都制定了标准;但是在一个开放的文化下,我们通常使用原则而非硬性规定来保持一致性。我们的服务需要遵循以下的条款:
遵循这些内部原则,对于外部公开API,我们有一些附加标准:
使用视图API的一个例子就是应用中艺术家详情分页,数据从多个源中抽取——艺术家个人简介、图片、推特、gigs(混合了风格、热门歌曲、朋友听过的歌曲、相似的艺术家)。通过将这些集合到“view”中,应用每次都可以获得5千字节左右的数据。 |