基于ZeroC Ice的微服务架构指南
微服务架构的概念、术语及其思想都不复杂,复杂的是具体实践过程中所涉及的框架、产品、API及配套的相关开发和运维工具。因此,本章先基于ZeroC Ice的微服务架构实践一个具体的微服务项目开发全过程,有了这个实践过程,在下一章继续学习微服务架构的相关理论时,我们就能更深刻、更直观地理解微服务架构了。
阅读本章之前,我们假设你已经熟悉ZeroC Ice的基本概念和基本用法。
ZeroC lce的前世今生
ZeroC Ice对于很多资深软件工程师或架构师来说并不陌生,特别是对于在电信领域有多年基础开发经验的IT人来说,ZeroC lce是一个很好很强大的RPC架构,腾讯很早就研究(使用)过ZeroCIce,其之后开源的RPC架构Tars在设计理念和实现方面也参考和借鉴了ZeroC Ice的很多方面。
通过前面章节的学习,我们知道,在早期的分布式系统中,RPC技术(框架)是关键的热点技术之一,而高性能、支持多语言跨平台开发的超级RPC架构一直是其终极目标,最早进多语言跨平台尝试的RPC技术是出师未捷身先死的CORBA。
CORBA出现于1991年,是当时几个IT巨头联手发起的支持多语言跨平台开发的超级分布式中间件平台,一度是学院派的“阵地”及商业巨头兜售自己的企业级产品的重要棋子,而在SUN的J2EE 和微软的 DOM 技术兴起后,CORBA因为缺乏企业市场而快速消亡。虽然CORBA已死,但它留下来很多影响深远的珍贵资产,包括SUN的J2EE、微软的DOM技术、后面IBM及微软联手发起的Web Service技术及留存至今的ZeroC Ice,都是在其直接或间接影响下出现的。
ZeroC lce可以说是完美继承了CORBA 的使命和精华,首次实现了支持多语言可跨平台的梦想。同时,相对于CORBA 的指数级复杂程度,ZeroC Ice可谓是很轻量级的平台,它剥离了很多华而不实的功能特性,很容易上手。转眼20多年过去了,无数知名软件公司消失了,甚至SUN这样的巨头也消失了,但仅凭借一个ZeroC lce产品就能延续至今,最大的功劳应当归当年勇敢“反叛”CORBA 的技术老兵,他们组建了ZeroC公司,打出“反叛之冰”的旗号,坚持CORBA 的初心和梦想,潜心打造了一个跨平台的RPC产品,在电信、金融等高端行业吸引了不少客户,并且几十年如一日地坚守代码界的工匠精神,不断优化和扩展ZeroC Ice,如今又彻底开源了其代码,不管是这家公司的精神还是其产品和源码本身,都值得我们学习。
ZeroC公司的Ice产品目前是一个系列,国内大部分人只熟悉它的RPC架构和产品部分,以C++的技术人员为主,这部分技术也是最早用于电信和金融等行业的,高性能和稳定性是它的两大口碑。不过ZeroC Ice的精华却是2005年左右发布的IceGrid,可被认为是第一个公开发行的、支持多语言的、功能完备的微服务架构平台,比之后的各种微服务架构要早很多年。至于为什么没有用微服务(Micro Service)这个词,是因为那时候IT界更流行另一个词——网格计算(Grid Computing),这个词诞生于20世纪90年代,其目标是把大量机器整合成一个虚拟的超级机器以支持超大规模的分布式计算,我们也可以将其理解为现在云计算 (CloudComputing)的前身,所以ZeroC公司以Grid命名其最新的分布式计算框架产品为IceGrid,也就再正常不过了。
从 Kubernetes、Docker Swarm这类最新的基于容器技术的分布式计算平台来看,IceGrid当年所设计的架构、实现方式、运维工具都已经深刻影响许多的后来者,因为跨越的时间很久了,所以我们不能简单地说是“抄袭或模仿”,我们只能说“英雄所见略同”,站在巨人的肩膀上,牛顿才能发现苹果闪耀的不为世人所知的光芒。
如下所示是IceGrid及Kubernetes 与 Docker Swarm的架构图。
首先,整个服务器集群中的机器被分为两类:Master 及 Worker,其中 Master 只有一台或少量几台,为整个集群的控制中心,上面部署着一些控制器类的软件,这些软件与每台Worker上运行的Agent类软件双向交互,在Master机器上可能还部署着一个Registry进程,存储了整个系统的数据,包括集群的信息,状态、已发布的应用的信息,各类服务的地址,以及可用性等信息,甚至包括集群节点采集报告的机器性能信息。我们要发布的应用则采用某种格式的文本文件(如xml、json、yaml)描述架构信息,其中架构被标准化建模为Service 为主的逻辑对象,然后通过Master 提供的工具自动发布到 Worker集群中,大大降低了运维的复杂度和工作量,而 Kubernetes等新一代的集群系统由于采用了容器技术,大大增强了平台的自动化能力,具体表现在应用发布、自我监控和自动修复、自动扩容、滚动升级方面,可以说是一个革命性的进步。
ZeroC lce微服务架构指南
前面我们说过,虽然ZeroC lceGrid (简称IceGrid)是早于微服务架构概念出现的,但IceGrid完全符合微服务架构的理念,当我们采用IceGrid来实施一个具体的微服务架构时,涉及的知识点如下图所示。