待处理

浅谈微服务架构、容器技术与K8S

2018-11-20  本文已影响131人  广州嘉为科技
关注嘉为科技,获取运维新知

企业应用系统:从单体应用走向微服务架构;从裸金属走向容器。

如果在诸多热门云计算技术诸如容器、微服务、DevOps、OpenStack等之中,找出一个最火的方向,那么可能非微服务莫属。尽管话题炙手可热,但对传统行业来说,微服务落地和方法论目前处于起步阶段。

单体架构

对于传统企业来说,数字化转型的需求日益迫切,其IT架构面临着互联网融合业务中海量用户和快速迭代的巨大挑战。当前,我们所开发的应用,不管是运行在局域网中还是部署在云端的,都采用了单体架构、分布式架构或微服务架构其中的一种。

其中,采用单体架构的应用数量最多,我们将这种应用简称为单体应用。我们可以将单体应用理解为主要的业务逻辑模块(我们编写的代码模块,不包括独立的中间件)运行在一个进程中的应用,最典型的是跑在Tomcat中的Java Web应用,不管这个应用在内部划分了多少模块,以及是否采用了MVC的分层架构,它都是一个单体应用,因为所有模块都运行在一个Tomcat容器中,位于一个进程里,如图所示是目前应用最为广泛的基于Sping Framework的单体应用的架构图。

单机应用有哪些好处和劣势呢?

好处

劣势

分布式架构、SOA架构

面对上述的单体应用存在的如此多的问题,怎么解决呢?我们自然而然能够想到:拆。

没错,确实是这样。我们可以将一个庞大的单体应用拆分成多个服务模块,然后再将这些服务模块按照业务逻辑串起来,对外提供应用服务。这就是SOA(面向服务架构)的思路。

SOA:即面向服务的架构(SOA),是集成多个较大组件(一般是应用)的一种机制,它们将整体构成一个彼此协作的套件。一般来说,每个组件会从始至终执行一块完整的业务逻辑,通常包括完成整体大action所需的各种具体任务与功能。组件一般都是松耦合的,但这并非SOA架构模式的要求。

下图是一个典型的SOA架构的应用。

然而SOA架构也存在一些问题:比如单个拆分出来的模块可能依然比较大,包含多个服务,无法实现更小的服务单元的敏捷交付;并且服务与服务之间耦合性依然比较强;再比如,ESB总线很容易成为整个系统的性能瓶颈等等。

微服务架构

怎么办呢?继续拆,并且在拆的同时改变了所使用的底层承载的技术以及服务之间的关联方式。

这就是微服务架构+容器技术。

容器和微服务相辅相成,两大技术成熟的时间点非常契合。容器技术的成熟为微服务提供了得天独厚的客观条件。轻量化的容器是微服务的最佳运行环境,微服务应用只有在容器环境下才能保障运维效率的提升。同时,微服务应用架构对外在组件的管理会变得困难,需要用容器平台去管理中间件,才能发挥出更大价值。

在分布式技术发展早期,出现过一个基于RPC技术的“伟大的分布式平台”,这个平台的梦想是实现所有语言、所有平台、所有厂商的各种IT系统的分布式互联互通,这就是CORBA,可惜这个由IBM、Sun Microsystems、苹果、微软等IT公司联手发起的伟大创举最终失败。

之后,一些CORBA技术专家聚集在一起,继续沿着CORBA的梦想前进,最终打造出一款优秀的分布式架构基础平台——ZeroC ICE。ICE基于高性能的RPC通信技术,跨语言,跨平台, 拥有杰出的性能。凭借强大的技术实力,ZeroC公司屹立至今,虽然当年的IT霸主SUN早已不在,但ZeroC公司依然因为拥有很多关键领域的大客户而健康成长。同时,ZeroC公司于2005年发布的ICE 3.0首次实现了IceGrid。在现在看来,IceGrid具备了微服务架构平台的所有关键特性,可被认为是第一个公开发行的、支持多语言的、功能完备的微服务架构基础平台,如图所示是IceGrid的完整示意图。

从图可以看到,IceGrid具备微服务架构的核心特性。

总体上,微服务架构平台的核心组成就是上述组件,下图所示为典型的微服务架构平台的结构示意图。

在IceGrid之后,比较有影响力的开源微服务架构框架有Dubbo与 Spring Cloud,两者都是Java语言体系内的微服务框架,并不支持其他语言。与IceGrid相比,其完备性还达不到平台(Platform)的高度,目前只能被称为框架(Framework)。下表给出了Dubbo 与Spring Cloud的主要功能对比。

Spring Cloud相对而言更加全面,开源更有保障,同时开创性地实现了微服务架构框架中诸如断路器、流量仪表板、服务网关等特性,同时提供了在分布式开发中所需的很多基础组件(API),例如配置管理、全局锁、分布式会话和集群状态管理等。Spring Cloud的核心是原来在 Netflix 公司内部广泛使用、经过实践考验、非常成熟的微服务框架——Netflix OSS,所以,Spring Cloud一度吸引了很多人的眼球。

基于K8S的容器平台

在Spring Cloud之后成功的微服务架构基本都与容器技术挂钩了,其中最成功、影响也最大的当属Kubernetes平台了,与之相似的还有Docker公司推出的Docker Swarm(在2017年年底,Docker Swarm 也支持Kubernetes了)。

对比Kubernetes与IceGrid,我们会发现两者有很多相似性。

Kubernetes与IceGrid在微服务架构基础设施方面有以下两个显著区别。

那么,在采用微服务架构模式后都有哪些好处呢?如下所述。

我们知道,任何技术都有两面性,即优点与缺点并存,那么,微服务架构的最大缺点是什么呢?

答案是大大增加了开发工作量并带来了固有的复杂性。比如,开发者需要掌握某种RPC通信技术,并且在客户端的逻辑中增加远程服务的调用代码,在某些情况下,他们必须通过写代码来处理RPC速度过慢或者调用失败等复杂问题。

相对于在单体应用中仅需在编程层面进行方法调用就可以访问其他服务,微服务架构中的服务调用方式则显得更加复杂和难以捉摸。因此,一个单体应用或者简单的分布式系统要想彻底微服务化,其代价还是很大的。

因此企业在判断自己的应用是否需要微服务化的时候,需要综合考虑应用的重要性、改造的代价与收益、技术风险等,综合考虑是否有必要将某个单体应用或者一般的分布式架构应用改造成微服务架构的应用。毕竟,改造是有成本的,而且改造完毕之后,也无法保证能够解决所有问题。

我们知道,在当下而言,微服务基本上是和容器绑定在一起的,微服务化之后的应用一般而言是需要运行在容器上的。而一个具有一定规模的单体应用,微服务化之后,可能对应成百上千个微服务,这些微服务的资源调度、更新发布、运维管理、销毁回收、自动扩缩容等等综合起来会变成一个很庞大的工作量,如何应对呢?

答案是使用K8S为核心的构建的容器平台,来进行整体的用来支撑微服务化应用的容器的管理。这里面涉及到资源的管理,例如计算资源、网络资源、存储资源、镜像资源;同时还涉及到微服务应用层面的管理,例如应用的创建、应用的部署管理、应用的弹性伸缩管理、应用的日志管理和监控管理;另外,还包括与其他流程或者工具链的打通,比如与DevOps流程的集成和打通,与企业现有日志管理平台的集成与打通,与企业监控和告警平台的集成与打通,与企业备份系统的集成和打通,以及与企业的大数据、数据挖掘等平台的集成与打通。

事实上,在腾讯蓝鲸研发运营一体化平台中,已经集成了基于K8S深度定制的容器管理平台,并且该平台与蓝鲸整体PaaS平台的其他功能模块,比如CMDB、作业平台、编排引擎、大数据平台、管控平台、DevOps工具链等原生集成,构建了针对容器和微服务应用生命周期管理的完整工具箱,助力企业实现容器和微服务应用的全方位管理。

在后面的文章中,将与各位讨论,基于K8S的容器平台是能够实现哪些方面的管理,以及是如何实现的。

蓝鲸平台试用Tips

蓝鲸社区版

如果您想先简单了解蓝鲸研发运营一体化平台,或者企业规模较小但想用更为先进的自动化运维管理方式进行IT运维管理,推荐您先试用蓝鲸社区版。
蓝鲸社区版已经开源,您可以登录蓝鲸智云官网免费下载。网址:
http://bk.tencent.com/download/

蓝鲸企业版
当然,蓝鲸企业版拥有更为丰富的功能,更适合企业级客户使用。如您有需要试用或者测试,联系嘉为吧!​​​​

上一篇下一篇

猜你喜欢

热点阅读