随着RESTful、云计算、DevOps、持续交付等概念的深入人心,微服务(Microservices)逐渐成为系统架构的一个代名词。所谓微服务,实际上是一项在云中部署应用和服务的新技术。微服务可以在“自己的程序”中运行,并通过“轻量级设备与HTTP型API进行沟通”。微服务的关键在于该服务可以在自己的程序中运行。通过这一点我们就可以将服务公开与微服务架构(在现有系统中分布一个API)区分开来。在服务公开中,许多服务都可以被内部独立进程所限制。如果其中任何一个服务需要增加某种功能,那么就必须缩小进程范围。在微服务架构中,只需要在特定的某种服务中增加所需功能,而不影响整体进程。
那么,微服务流行起来的主要原因是什么?微服务是否是业界期待已久的企业架构解决方案?在对企业进行微服务改造过程中存在怎样的问题和挑战?在构建微服务开发团队时应该注意些什么?为此,CDSN对IBM Bluemix解决方案架构师胡香冬进行了专访。
实际上,一直以来,系统架构设计都是IT领域经久不衰的话题之一,是每个系统构建过程中极其关键的一部分,它决定了系统是否能够被正确、有效的构建。开发人员也一直在探索,寻找更优秀的架构设计方式来构建系统,在微服务架构之前,SOA是业界非常流行的一种系统架构,然而,伴随着微服务架构的出现,微服务架构已经逐渐成为系统架构的一个代名词,那么,微服务架构为什么会这么火呢?
在谈到这个问题时,胡香冬表示,微服务架构的流行一方面是各种技术条件发展水到渠成的结果,另一方面则是IT发展到现阶段对技术架构的要求,这个要求包括快速和业务对齐(alignbusiness)、快速理解和抽象业务(DDD)、快速敏捷开发(Lean、Agile)、快速反馈和交付(CI、CD、DevOps)。这两方面的原因,最终促使这样一种架构风格很快形成了一种主流,基本上占据了整个应用架构的领域。
胡香冬同时强调, SOA并不过时,也并非不流行了, SOA解决了那个时代要求SOA解决的问题, SOA强调要有服务化,要有标准化的接口,它解决了标准化接口之后不同编程语言的应用更好的集成和交互的问题,因此对企业架构的灵活性起到了非常好的效果。但SOA关注的是要提供标准化的接口,至于之后如何实现,如何划分,如何部署,则不关心,这可能和当时的客观技术要求有关。胡香冬认为,现在微服务的兴起,并不是全盘否定SOA,而是在接口标准化之后,下一步的开发部署需要敏捷化,面向业务,细粒度化,而这就需要微服务架构这样的新技术和新方法论来应对。
不过,微服务架构虽然是大多数企业所追求的系统架构。但是否所有的应用场景都适合这种架构呢?胡香冬从自己的经验给了这个问题一个否定的回答,她表示,实际上,微服务架构的典型应用大都需要直接面向众多消费者,或者说是重交互型类应用,这些应用场景大都需要利用微服务的很多特点,例如移动应用或者说涉及到物联网的应用场景,在这些交互型应用中应该说微服务架构都是必不可少的,但通常拥有这种应用场景的企业大多是一些创新企业或者是一些需要做创新应用的企业,对于这些企业来说,微服务架构是一种理想且适合的开发架构。但实际上,从IBM在企业市场上的情况来看,目前,很多传统的大型企业的用户,包括银行、航空公司等这些逐步从传统架构一步一步发展起来的企业,也面临一些新的需求,面临着需要给员工或客户提供移动化、物联网的各种渠道的接入方式的需求,那么,这些企业也需要使用微服务架构的模式,但对于这些企业来说,采用微服务的道路会有些痛苦,需要改造现有的一些应用,并逐步的把它变成微服务这种架构。
但胡香冬认为,并不是所有的企业现在都需要微服务架构,在企业决定使用微服务架构之前,通常需要先问自己为什么要做?就是说是什么样的原因促使企业要使用微服务架构,比如,企业有一个特别成熟的,交易性的应用,它本身的功能不需要什么变化,现在也运行良好,可以给别人提供应该提供的功能,没有任何问题,在这样的情况下,那就真的不需要对它进行改动。只有当企业的业务,第一,需要一些快速的变更、变化,应用上需要做比较多的改动,第二,企业应用很庞大,当系统需要伸缩的时候,不同的部分没有必要放到一起,并且它们的伸缩的规模不一样,第三,企业应用的开发需要敏捷性,只有在这三种情况下,企业去进行微服务架构的改造,才可能是会有收益,值得考虑的。
然而,要应用微服务架构,发挥微服务的优势,就需要对业务应用进行细颗粒的划分,但如何掌握划分的颗粒度,并且保证这种划分就是最优的划分方案,这对于所有的想使用微服务架构的企业来说都是一个巨大的挑战,胡香冬对此也表示赞同,她也认为这可能是世界上最难回答的问题之一,但基于自身的丰富实践经验,胡香冬还是给微服务的划分提供了一些相当有帮助的建议。胡香冬表示,企业在划分微服务时,特别不建议一上来就划分几十上百个微服务出来,而是在没有必要的情况下,先用整体的单体架构,然后根据企业的业务需求划分微服务。
实际上,微服务强调的是微服务模块的划分需与业务、功能的划分保持一致,这样,当对应用进行改动的时候,只需改动一个微服务即可或者说只要将这个改动交付给这一个团队就行,这就说明微服务模块的划分比较合理。而如果每次进行改动,都需要涉及到很多团队,涉及到很多模块,那通常可能就意味着模块划分不对。此外,从运维的角度来讲,比如说现在的互联网或电商网站,不同的功能需要的伸缩频率和水平一定是不一样的,举个例子,在京东上注册新用户的页面,它的访问频率和需要支撑的用户量和浏览商品下单的页面一定是完全不一样的。那么,如果要应对这种不同规模的用户访问,就必须把两种页面相应的服务和功能模块拆分开来,其他不需要改动的部分先不改动,通过这样的方式可以逐步的去进行微服务的划分,从而最终找到适合自身企业应用划分的颗粒度和最优的划分方法。
那么,IBM对于微服务有什么样的看法,微服务又给IBM带来哪些方面的益处呢?在谈到这个问题时,胡香冬表示,和现在的互联网公司不同,IBM其实是从传统的渠道上走过来的,从传统的架构走到SOA,再到今天的微服务,一路走来。在这个过程中,技术、架构、工具、产品发生了很大的变化,IBM也在随着时代的变化不断改变。比如说,IBM在SOA时代做了很多的中间件,包括应用服务器方面的一些工具和产品都是适应当时的需求而开发的,随着应用需求的变化,IBM自己也做了很多创新,包括在应用服务器WebSphere上的一些创新应用以及对像Java Script这样的新编程语言的支持等,都是IBM一直在不停探索和发展的表现,通过这种探索和发展,现在IBM在战略上主推的Bluemix云平台以微服务的架构作为IBM主打的架构风格,可以说是一个水到渠成的结果。而关于Bluemix,首先它是一个PaaS平台,它上面能够提供各种不同的应用运行时的选项,也提供了包括DevOPs、自动伸缩、监控这样的一系列的服务,这些服务就是对微服务架构的一种支撑,或者说在这个云平台上,IBM能够为用户提供开发基于微服务架构应用的环境,另外一方面,Bluemix平台本身的架构以及这个平台上提供的服务,它们本身也是使用微服务的架构来开发的,因此,它本身也得益于微服务架构。
胡香冬表示,实际上,微服务为开发和部署上带来的敏捷性,使得IBM也受益匪浅。胡香冬介绍说,在她刚来IBM做研发的时候,那个时候可能是一年会发布一个大版本,半年的时候发布一个小版本,而现在的每一次迭代都是按星期来进行,而之所以能够实现这样快速的开发迭代,资源的高效利用以及应用的快速更改和修复,这些都是和微服务架构密不可分的。
而在谈到开发人员应该如何利用微服务架构进行开发时,胡香冬分享了IBM在微服务开发方面的经验,她介绍说,IBM目前基本上整个公司都逐步在采用一些方法,去处理一些不确定性的问题,比如在做一些创新的应用时,首先要知道面向的是什么样的目标,需要解决的是什么样的问题,然后挖掘和分析用户的需求,最后,再使用一些敏捷的方式去进行开发,所以在微服务方面,IBM也是在不断尝试中进步,IBM内部会设立一个设计思维工作坊,开发团队会坐在一起去探讨要做的这个微服务到底应该提供什么样的能力,提供什么样的接口,它是给谁来用的,用户在使用时会有怎样的痛点,怎样才能让它更好用,然后将这些问题提炼出来,最后在开发方面,根据这些需求,首先要保证测试代码测试通过,然后在所有的测试代码都通过之后才去开发相应的正式代码,当然,这其中需要有一些相应的测试手段,需要开发测试人员主动的随机的去制造各种问题,把各种可能的情况都测试到,从而实现快速、敏捷、准确、高质量的集成和交付。
而对于建设微服务开发团队,胡香冬表示,在微服务开发团队中,所有团队的成员应该对整个小组负责的事情都能非常熟悉,而对于团队中的每个成员,相对于传统开发团队中每个成员仅需掌握一种技术,对微服务开发团队的成员的技术要求则是比较全面的,并且团队成员之间需要非常熟悉,然后可能需要采用结对编程模式,小组的每两人之间都结对过,每个人都能够对另一个人开发的东西有一定的了解。但胡香冬认为,对于企业来说,建设微服务团队最大的挑战应该还是企业文化和组织上的变化,因为微服务开发模式对于开发人员、开发团队的要求以及工作的模式是完全不一样的,整个工作节奏也是完全不一样的,因此,需要企业进行从文化、组织到模式上的全面改变。
至于开发人员,胡香冬认为,他们应该掌握微服务架构,虽然不是一定要使用微服务的开发模式,但至少需要对微服务的这种架构的理念和风格要有一定的了解,因为以后在开发一些稍大规模的应用的时候,不管是负责哪一部分,都要清楚这部分在整个应用中是什么样的地位,能够被别人怎么样来使用,要处理什么问题,而了解微服务架构是理解这些问题所必须具备的前提条件。
胡香冬表示,微服务现在比较热,也有一些比较成熟的框架,但随着互联网+、物联网等新概念,新理念的兴起,微服务架构对平台以及应用的开发测试以及运维等各个方面都带来很多新的挑战,有很多问题目前也还没有得到完美的解决,比如对微服务架构应用进行测试,如何容错,如何管理服务版本、访问权限,进行灵活的路由编排而不对每个为服务造成额外的影响等。而IBM也在持续地投入最强的团队,在平台支撑,微服务框架,微服务应用架构等各方面不断拓展创新。比如IBM日前联合Google, Lyft一起发布的开源微服务框架Istio就是这种努力的最新成果。
“虽然有这些问题,但也正说明了微服务架构具有很大的改进空间,而我认为在微服务架构方面应该还是会有很多新的创新的可能性。“胡香冬最后说。
为了更好的帮助大家了解和应用微服务架构,IBM胡香冬老师已经在CSDN直播了微服务实践课程,目前该课程回顾已经上线,希望观看视频课程的童鞋可以点击「阅读原文」查看。