APP下载

基于微服务的大型网站架构设计

2018-01-16陶璐

科技视界 2018年28期
关键词:微服务

陶璐

【摘 要】微服务构架(Microservice Architecture)体系表述的应用设计方案是一个相对单独运转工作的构架体系。这种构架体系以工作自动部署、运转速率、点到点的重组、结合以及数据控制和语言控制的分散性上面展开。微服务这种架构风格就是把一组小服务演化成为一个单一的应用的一种方法。每个应用都运行在自己的进程中,并通过轻量级的机制保持通信,就像HTTP这样的API[1]。这些服务要基于业务场景,并使用自动化部署工具进行独立的发布。可以有一个非常轻量级的集中式管理来协调这些服务,可以使用不同的语言来编写服务,也可以使用不同的数据存储。通常微服务可以针对性的完成一些功能,如订单统计、用户统计等。微服务在实际运用中都是一个拥有自我规律和自适应的小型多边形应用程序。个别的微服务还将向别的微服务以及客户端发送API。当完成Web UI,运算中的云VM(2)以及DOCKER容器[3]都可以成为一个实例。

【关键词】服务构架;微服务;SOA;单块服务

中图分类号: TP312 文献标识码: A 文章编号: 2095-2457(2018)28-0210-002

DOI:10.19694/j.cnki.issn2095-2457.2018.28.096

【Abstract】Microservice architecture is used to describe the design of an independent software application deployment,This architecture is around business capabilities,automated deployment,end to end above decentralized control and the integration of language and data.This microservice architecture style is a group of small service evolution has become a method for a single application.Each application runs in its own process,and maintain communication through a lightweight mechanism,such as HTTP API.These services should be based on the business scene,publish and use automated deployment tool independently.There can be a very lightweight centralized management to coordinate these services,you can use different language services,can also use different data storage.A microservice typically performs a specific function,such as order management,customer management,etc.each of the micro services is a miniature hexagonal application that has its own business logic and adapters.Some microservices will also release API to other micro services and application clients.Other micro services to complete a Web UI,run-time,each instance may be a cloud VM or Docker container.

【Key words】Service Architecture;Microservice;SOA;Monolith

1 微服務与SOA的区别

SOA的提出是在企业计算领域,就是要将紧耦合的系统,划分为面向业务的,粗粒度,松耦合,无状态的服务[4]。服务发布出来供其他服务调用,一组互相依赖的服务就构成了SOA架构下的系统。基于这些基础的服务,可以将业务过程用类似BPEL流程的方式编排起来,而BPEL反映的是业务处理的过程,这些过程对于业务人员更为直观,调整也比hardcode的代码更容易。当然企业还需要对服务治理,比如服务注册库,监控管理等。我们知道企业计算领域,如果不是交易系统的话,并发量都不是很大的,所以大多数情况下,一台服务器就容纳将许许多多的服务,这些服务采用统一的基础设施,可能都运行在一个应用服务器的进程中。虽然说是面向服务了,但还是单一的系统。

而微服务架构大体是从互联网企业兴起的,由于大规模用户,对分布式系统的要求很高,如果像企业计算那样的系统,伸缩就需要多个容纳许许多多的服务的系统实例,前面通过负载均衡使得多个系统成为一个集群。但这是很不方便的,互联网企业迭代的周期很短,一周可能发布一个版本,甚至可能每天一个版本,而不同的子系统的发布周期也是不一样的。而且,不同的子系统也不像原来企业计算那样采用集中式的存储,使用昂贵的Oracle存储整个系统的数据,或使用MongoDB、HBase[5]、Cassandra和其他NoSQL[6]数据库和Redis、MemCache等。那么就倾向采用以子系统为分割,不同的子系统采用自己的架构,那么各个服务运行自己的Web容器中,当需要增加计算能力的时候,只需要增加这个子系统或服务的实例就好了,当升级的时候,可以不影响别的子系统。这种组织方式大体上就被称作微服务架构。

Microservice与SOA相比,Microservice强调分布式系统的特性,如横向可伸缩性,服务识别,负载均衡,故障扭转,高可用。互联网开发对服务治理提出了更多的要求,比如多版本,比如灰度升级,比如服务降级,比如分布式跟踪,这些都是在SOA实践中重视不够的。Docker容器技术的出现,为微服务提供了更便利的条件,比如更小的部署单元,每个服务可以通过类似Node.js或Spring Boot的技术运行在自己的进程中[7]。可能在几十台计算机中运行成千上万个Docker容器,每个容器都运行着服务的一个实例。随时可以增加某个服务的实例数,或者某个实例崩溃后,在其他的计算机上再创建该服务的新的实例。

2 传统网站架构模式

传统模式下我们所开发的服务对应的代码是由多个项目组成的,每个项目都具有一个明确的范围,来提供自身会相应的功能。如图1所示,以下项目在编辑过程中被逐个打成JAR包,最后统一打成WAR包。接着,我们将该WAR包上传至Web容器中,解压缩WAR包、重启服务器。在一系列操作执行后,我们就完成了服务的编译和部署。在这个WAR包里,含括了这些相关代码和所需功能的项目组织被称之为单块服务。在项目较小的情况下,这种代码组织方式还是可以接受的,更改代码后,测试开发者可以单独部署新编译的WAR包并测试这些更改。但是随着项目越来越大,整个开发过程需要很长时间:纵然只有一行代码被更改,开发者也要花费数十分钟甚至数小时来编译所有代码,然后花费大量时间重新部署新开发的产品来验证所做的修改正确与否。

假如部署应用程序很繁琐,但是为了测试自己的改进,那么开发者还需要在部署之前进行大量的环境设置,这使得软件开发者的工作异常的复杂和枯燥。正如您在图2中看到的,开发者用于编译和部署上所用的时间线图多于甚至超过了对代码进行测试更改的时间线图,可见效率已经变得十分低下。除此之外,因为按单块服务所组织的代码在生成过程中只出现一个具备所有功能项的WAR包,因而为了扩展服务容量只有选择反复生成WAR包。

如此以来对于资源的占用又是非常大的。以图3所示:服务中,负载的组件数值已到90%,可以理解为服务容量已经到了必须扩展的时候。而同时工作的另外三个组件还未能达到它所处理能力的20%。由于单块服务的每个组件都打包在同一个WAR包中,所以另外增加的一个服务模式则需要把扩展的组件上的负载减少到45%,但是也使其他组件的利用率更低[8]。单块服务之所以造成众多不便,主要是服务的所有功能都在一个WAR包内涵盖了。想要解决这个难题就需要运用微服务架构模式。

3 微服务架构模式

微服务架构模式就是把Web化整为零,生成众多小型的Wed服务。分解后的Web服务能够实现编译、部署,并在各自的API端口基础上达成联系[9]。

如图4所示,它们相互配合。作为一个整体为用户提供功能,又能自由扩容。使用微服务架构模式,开发者能够由编译、重新部署单个子服务来验证他们的变更,而无需整体重新编译,可以省去大量时间和精力。因为子服务之间是相对并立的,所以每个服务可以决定其最佳实现方式,使得这些子服务的开发变得更为便捷。最后,当运转中的系统发生了容量不足,我们只需要找到形成系统瓶颈对应的子服务项,并扩充该子服务的容量即可。

4 结语

以上介绍的就是微服务架构模式。事实中,这种构架模式是在不断的发展、进步、完善。在许多文献及研讨中,还没有就模式的标准实现和最佳实践形成一个大家一致认同的强有力的说法。因此,本文提到的一系列经验,也是在参考文献和讨论中达成的基本共识的。大家在实现自己的Microservice构架模式时,可以学习这些经验,也可以对微服务构架模式的体现方式作出一些调整来完成项目自身的需求。

【参考文献】(References)

[1]VILLAMIZAR M,GARCES O,CASTRO H,et al.Evaluating the monolithic and the microservice architecture pattern to deploy web applications in the cloud[C]//2015 10th Computing Colombian Conference,Bogota:IEEE,2015.

[2]Smith JE,Nair R.The architecture of virtual machines[J]. IEEE Transaction on Computer,2005,(5):32-38.

[3]Dua,Bangalore,Raja.Virtualization vs Containerization to Support Paa S.IEEE,2014,41:610-614.

[4]ERL T.Service-oriented architecture(SOA):concepts,technology,and design[J].Concepts,2005,118(2):33-37.

[5]Krisitina Chodorow.Scaling MongoDB.Sebastopol,CA:O'Reilly Media,2011.1-3

[6]Rick Cattell.Scalable SQL and NOSQL data stores.SIGMOD Record.2010.United States.Association for Computing Machinery.l2-13.

[7]RAUCH Guillermo.Smashing Node.js[M].America:Wiley,2012.

[8]王磊.微服务架构与实践[M].西安:电子工业出版社,2015.

[9]王磊.基于微服务架构,改造企业核心系统之实践.http://chuansong.me/n/969980351082.

[10]肖勤.微服務架构实践经验分享.http://www.csdn.net/article/2015-08-07/2825412.[2015-08-07].

猜你喜欢

微服务
微信公众平台在医院图书馆的应用现状调查
从单一模式系统架构往微服务架构迁移转化技术研究