云原生开启架构演化新轨道

张亮

当当架构部负责人。主要负责分布式中间件及私有云平台的搭建。乐于分享,拥抱开源,主导两个自研项目Elastic-Job和Sharding-JDBC都已正式开源。擅长以Java为主的分布式架构以及以Mesos为主的云平台方向,推崇代码优雅化,对于如何编写出具有强表现力的代码有深入研究。

信息技术从出现伊始到渐成主流,其趋势经历了软件、开源和云三个阶段。

1.软件改变世界。作为信息时代最重要的载体,互联网越来越成为当今社会关注的焦点,互联网的基石之一——软件正在迅速地改变着这个世界。

2.开源改变软件。随着开源文化的认可度越来越高,使用优秀的开源产品作为基础构架快速搭建系统以实现市场战略,成为当今的最优资源配比方案。

3.云吞噬开源。对互联网近乎100%可用性的需要,仅通过开源产品搭建并运维一个高可用、高度弹性化的平台并非易事。因此,提供技术思路的同时,进一步提供整套云解决方案,以保障不断扩展的非功能需求,是当今新一代互联网平台的追求。

在信息技术的大潮中,每一次通信的升级,都会对世界的合作模式产生改变。随着智能手机出现以及 4G 信号的普及,互联网应用由 PC 端迅速转向更加自由的移动端。在技术方面,为了应对更加巨大的规模,单纯的分布式系统已经难以驾驭。技术圈也因此契机开启了一个概念爆发的时代,SOA、DevOps、容器、CI\CD、微服务、Service Mesh 等概念层出不穷,而Docker、Kubernetes、Mesos、Spring Cloud、gRPC等一系列产品的出现,标志着云时代真正的到来。

  • 云时代下的互联网架构变迁

互联网应用的业务特征决定它和企业级应用有诸多不同:

1 . 海量用户

互联网应用几乎无差别地服务于全世界所有的用户,与服务于局域网用户的企业级应用相比,用户量基数差距很大,由海量用户产生的数据量也会成几何级增长。

2 . 产品迭代迅速

随着业务模式的快速拓展,互联网应用功能推陈出新的速度越来越快。在当今如此快节奏的时代,时间成本非常关键。

3 . 7*24不间断服务

互联网应用作为一个面向全球的服务,时区的差异使得应用必须保证全天随时可用,每次宕机都会产生很大的损失。

4 . 流量突增

不同类型的互联网公司有着各自不同的流量突增场景。比如,电商类公司会在双十一这样的大促期间流量突增几十倍甚至上百倍,社交类公司会在热点事件爆发的时候流量突增。

5 . 业务组合复杂

很多互联网公司都是跨界巨头。以电商行业举例,在应用系统层面大致会划分为卖场、交易、订单、仓储、物流等主流程系统;搜索、推荐、社区、会员、客服、退换货等面向用户的前端系统;商品、价格、库存、配货、促销、供应链等面向后台员工的后端系统;以及广告、商家、支付、清算、财务、报表等面向合作伙伴的辅助系统。而每个应用系统又会划分为很多子系统。一个粗略的电商系统业务架构图如下。

由于互联网行业业务特征的特殊性以及势不可挡的扩张速度,相应底层支撑的技术挑战也越来越大。由规模而衍生的问题包括海量数据、响应迟缓、稳定性差、伸缩性差、系统繁多和开发困难等。因此针对这些问题,互联网的技术架构也在逐渐的转变,向集中式 、分布式 、云平台的方向演进。

  • 从集中式到分布式架构

集中式架构又叫单体式架构,在Web2.0模式并未大规模兴起时十分流行。后来,基于Web应用的B/S(Browser/Server)架构逐渐取代了基于桌面应用的C/S(Client/Server)架构。B/S架构的后端系统大都采用集中式架构,它当时以优雅的分层设计,统一了服务器后端的开发领域。

1 . 传统的三层架构模型

在web 2.0刚开始流行的时候,互联网应用与企业级应用并没有本质的区别,集中式应用分为标准的3层架构模型:数据访问层、服务层和逻辑控制层。每个层之间既可以共享领域模型对象,也可以进行更加细致的拆分。

2 . 分布式架构、SOA和服务化

对于互联网应用规模的迅速增长,集中式架构并无法做到无限制的提升系统的吞吐量,而分布式系统架构在理论上为吞吐量的上升提供了无限扩展的可能。因此,用于搭建互联网应用的服务器也渐渐地放弃了昂贵的小型机,转而采用大量的廉价PC服务器。

随着分布式系统架构的普及,越来越多的互联网公司在重新审视一个并不是崭新,但却一直难于落地的概念,那就是 SOA。SOA 最主要是面向宏观层面的架构,其带来的收益也最能在宏观的高层次上体现出来,因此,很多业界专家都认为SOA概念过于抽象、不接地气。微观SOA则面向团队和个人,涉及具体的服务在业务、架构和开发上的考虑,架构体系上包括服务治理、服务编排等。在微观层面的SOA则更容易讨论和实施。

由于分布式系统非常复杂,因此产生了大量的分布式中间件和分布式数据库用于简化分布式系统的开发。服务化的架构设计理念也被越来越多的公司所认同。2011 年前后,阿里巴巴公司开源的 Dubbo 是对后世影响深远的一款分布式服务框架,也彻底的掀起了为早已拉开帷幕的分布式和SOA时代的最强音。服务发现、负载均衡、失效转移、动态扩容、数据分片、调用链路监控等分布式系统的核心功能也一个个趋于成熟。

3 . 自动化运维

随着分布式系统的愈加成熟,大规模应用和复杂的系统构成也随之而来,企业内部服务器数量的大幅增长,使得出现故障的服务器频次也大幅增加,手工运维成为瓶颈,自动化运维应运而生来。

4 . 解放交付的DevOps

DevOps 方法论的出现弥补了开发与运维之间的鸿沟。DevOps在软件开发和交付流程中强调在产品管理、软件开发以及运维之间的沟通与协作。DevOps是一种公司文化的变迁,它代表了开发、运维和测试等环节之间的协作,因此DevOps可以由多种工具组成一个完整的DevOps工具链,如下图所示。

  • 从分布式到云原生架构

云计算的本质是按需分配资源和弹性计算。顾名思义,云原生应用,即指专门为在云平台部署和运行而设计的应用

云原生应用并非完全颠覆传统的应用设计模式,而是将传统应用模式提升和修改,让其更加适合在云平台上运行。大部分传统应用即使不做任何改动也可以在基于 Linux 操作系统内核的云平台运行,但是这种仅以能够部署和能够运行为目的的模式只能将云主机当作物理机一样使用,不能真正的利用云平台所带来的能力。让应用能够利用云平台实现资源按需使用和弹性伸缩,是云原生应用重点关注的地方。

云原生的本质是一种模式,它要求云原生应用满足可用性和伸缩性,具备自动化部署和管理的能力,可随处运行,并且能够通过持续集成、持续交付工具提升研发、测试与发布的效率。

1 . 新纪元的分水岭 - 容器技术

过去几年云平台在不断地发展,但应用程序在云平台运行,仍然需要为不同的开发语言安装相应的运行时环境。虽然自动化运维工具可以降低环境搭建的复杂度,但仍然不能从根本上解决环境的问题。

Docker 的出现成为了软件开发行业新的分水岭;容器技术的成熟,也标志技术新纪元的开启。Docker让开发工程师可以将他们的应用和依赖封装到一个可移植的容器中。就像当年智能手机的出现改变了整个手机行业的游戏规则一样,Docker 也大有席卷整个软件行业,并且进而改变行业游戏规则的趋势。通过集装箱式的封装,开发和运维都以标准化的方式发布的应用,异构语言不再是桎梏团队的枷锁。

2 . 新纪元的编排&调度系统

而 Kubernetes、Mesos 和Docker swarm则为云原生应用提供的强有力的编排和调度能力,它们是云平台上的分布式操作系统。

Kubernetes 是目前世界上关注度最高的开源项目,它是一个出色的容器编排系统。Kubernetes 出身于互联网行业的巨头 Google 公司,它借鉴了由上百位工程师花费十多年时间打造 Borg 系统的理念,通过极其简易的安装,以及灵活的网络层对接方式,提供一站式的服务。

Mesos则更善于构建一个可靠的平台,用以运行多任务关键工作负载,包括 Docker 容器、遗留应用程序(例如 Java )和分布式数据服务(例如 Spark、Kafka、Cassandra、Elastic )。Mesos 采用两级调度的架构,开发人员可以很方便的结合公司业务场景自定制MesosFramework。

通过 Docker、Kunernetes 以及 Mesos 的出色表现,为运维工程师的工作模式带来了颠覆性的改变。他们再也无需像照顾宠物那样精心的照顾每一台服务器,而是只需要像照顾牲畜那样,将出问题的服务器汰换掉即可。业务开发工程师不必再过分关注非功能需求,只需专注自己的业务领域即可。而中间件开发工程师,则需要开发出健壮的云原生中间件,用来连接业务应用与云平台。

3 . 微服务

单体应用虽然简单且深入人心,但是随着越来越多的应用被部署在云端,它的劣势就体现的愈加明显。因为应用变更的范围和周期被捆绑在一起,即使只变更应用的一部分,也需要重新构建并部署整个单体应用,而且无法对需要更多资源的部分模块单独扩展,而是必须将整个应用整体扩展。这样粗粒度的划分,不利于系统的管理和资源的利用。因此,人们越来越倾向于将应用合理的拆分。

在过去几年中,微服务已经迅速的成为了技术圈最热门的术语之一,微服务是一种架构风格,它将一个复杂的单体应用分解成为多个独立部署的微型服务,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制,如:RESTFul API。服务可以使用不同的开发语言和数据存储技术。通过微服务的拆分,系统可以更加自由的所需资源分配到所需的应用中,而不是直接扩展整个应用。

采用微服务架构风格的团队将围绕业务组织团队而非围绕技术组织团队,这一点和DevOps有异曲同工之妙。单体式架构将大型应用拆分时,通常需要根据技术层面划分为UI团队、后端开发团队好数据库团队。这种团队的划分方式,使得简单的更改也会导致跨团队协作。

在容器技术、编排系统等开源社区的推动下,以及微服务等开发理念的带动下,应用上云已经是不可逆转的趋势。

随着云化技术的不断进展,云原生的概念有应运而生。在现有业务代码不改变的情况下,分布式系统无缝入云,那么需要改变的就是中间件。因此分布式中间件向云原生中间件的变迁是真正的重点。

————

以上内容节选自《Java云原生:新一代分布式中间件架构》一书,预计2018年与大家见面。(扫码关注作者公众号点亮架构,走进全新架构世界。)

  • 内容简介

互联网架构不断演化,经历了从集中式架构到分布式架构,再到云原生架构的过程。云原生因能解决传统应用升级缓慢、架构臃肿、不能快速迭代等问题而成为未来云端应用的目标。本书首先介绍了架构演化及云原生的概念,让读者对基础概念有一个准确的了解。接着阐述容器调度、服务化、分布式等体系的原理,讲解分布式中间件设计方法。最后辅以实战,以中心化和平台化角度切入,深度揭秘两大开源项目Elastic-Job和Sharding-JDBC的实现。

张亮和众咖合著的《高可用架构(第1卷)》正在热卖中!点击阅读原文了解详情!