深解微服务架构:从过去,到将来

http://www.uml.org.cn/zjjs/im...
clipboard.pngsql

微服务的诞生

微服务架构(MicroserviceArchitect)是一种架构模式,它提倡将单块架构的应用划分红一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每一个服务运行在其独立的进程中,服务与服务间采用轻量级的通讯机制互相沟通。每一个服务都围绕着具体业务进行构建,而且可以被独立的部署到生产环境、类生产环境等。数据库

微服务架构虽然诞生的时间并不长,但其在各类演讲、文章、书籍上所出现的频率已经让不少人意识到它对软件架构领域所带来的影响。编程

其实,微服务的诞生并不是偶然。它是互联网高速发展,敏捷、精益、持续交付方法论的深刻人心,虚拟化技术与DevOps文化的快速发展以及传统单块架构没法适应快速变化等多重因素的推进下所诞生的产物:架构

http://www.uml.org.cn/zjjs/im...
clipboard.png并发

背景1 :互联网行业的快速发展运维

过去的十年中,互联网对咱们的生活产生了翻天覆地的变化。购物、打车、订餐、支付,甚至美甲、洗车等,想到的,想不到的活动均可以经过互联网完成,愈来愈多的传统行业公司也开始依赖互联网技术打造其核心竞争优点。互联网时代的产品一般有两类特色:需求变化快和用户群体庞大。在这种状况下,如何从系统架构的角度出发,构建灵活、易扩展的系统,快速应对需求的变化;同时,随着用户量的增长,如何保证系统的可伸缩性、高可用性,成为系统架构面临的挑战。编程语言

背景2 : 敏捷、精益方法论的深刻人心分布式

纵观IT行业过去的十年,敏捷、精益、持续交付等价值观、方法论的提出以及实践,让不少组织意识到应变市场变化、提升响应力的重要性。精益创业(Lean Startup)帮助组织分析并创建最小可实行产品(Minimum Viable Product),经过迭代持续改进;敏捷方法帮助组织消除浪费,经过反馈不断找到正确的方向;持续交付帮助组织构建更快、更可靠、可频繁发布的交付机制。通过这些方法论以及实践的推行和尝试后,从宏观上而言,大部分组织已经基本上造成了一套可遵循、可参考、可实施的交付体系。这时候,逐渐完善并改进各个细节的需求就会更增强烈。所谓细节,就是相似如何找到灵活性高、扩展性好的架构方式、如何用更有效的技术、工具解决业务问题等。函数式编程

背景3 : 虚拟化技术与DevOps文化的快速发展函数

虚拟化技术和基础设施自动化(Infrastructure As Code)的快速发展极大的简化了基础设施的建立、配置以及系统的安装和部署。譬如云平台的成熟以及像Chef、Puppet、Ansible等工具的使用,让更多的基础设施可以经过自动化的方式动态建立。同时,容器化技术的发展以及Docker的出现,更是将虚拟化技术推向了一个前所未有的高潮。另外,DevOps文化的推行打破了传统开发与运维之间的壁垒,帮助组织造成更高效的、开发与运维高度协做的交付团队。这些技术与文化的快速发展,极大程度上解决了传统环境建立难、配置难以及‘最后一千米’的部署难、交付难等问题,成为推进微服务诞生、发展的重要因素之一。

背景4 : 单块架构系统面临的挑战

几年前咱们熟悉的传统IT系统,也能够称之为单块架构系统,是以技术分层,譬如逻辑层、数据层等。但随着用户需求个性化、产品生命周期变短、市场需求不稳定等因素的出现,单块架构系统面临着愈来愈多的挑战。所以,如何找到一种更有效的、更灵活、更适应当前互联网时代需求的系统架构方式,成为你们关注的焦点。

因此说,微服务的诞生决不是偶然,是多重因素推进下的必然产物。

微服务与SOA

SOA简述

早在1996年,Gartner就提出面向服务架构(SOA)。SOA阐述了“对于复杂的企业IT系统,应按照不一样的、可重用的粒度划分,将功能相关的一组功能提供者组织在一块儿为消费者提供服务”,其目的是为了解决企业内部不一样IT资源之间没法互联而致使的信息孤岛问题。

2002年,SOA被称做"现代应用开发领域最重要的课题之一",其正在帮助企业从资源利用的角度出发,将IT资源整合成可操做的、基于标准的服务,使其能被从新组合和应用。

可是,因为SOA自己的广义性以及抽象性,在其诞生的至关长一段时间内,人们对SOA存在着不一样的认知和理解。
http://www.uml.org.cn/zjjs/im...
clipboard.png

直到2000年左右,ESB(Enterprise Service Bus)、WebService、SOAP等这类技术的出现,才使得SOA渐渐落地。同时,更多的厂商像IBM、Oracle等也分别提出基于SOA的解决方案或者产品。

微服务与SOA

实际上,微服务架构并非一个全新的概念。仔细分析SOA的概念,就会发现,其和咱们今天所谈到的微服务思想几乎一致。那在SOA诞生这么多年后,为何又提出了微服务架构呢?

鉴于过去十几年互联网行业的高速发展,以及敏捷、持续集成、持续交付、DevOps,云技术等的深刻人心,服务架构的开发、测试、部署以及监控等,相比咱们提到的传统的SOA实现,已经截然不同,主要区别以下表所示:

http://www.uml.org.cn/zjjs/im...
clipboard.png

相比传统SOA的服务实现方式,微服务更具备灵活性、可实施性以及可扩展性,其强调的是一种独立测试、独立部署、独立运行的软件架构模式。

http://www.uml.org.cn/zjjs/im...
clipboard.png

微服务架构的定义
其实,即使了解了上面的介绍,也很难对微服务下一个准确的定义。就像NoSQL,咱们谈论了好几年的NoSQL,知道NoSQL表明着什么样的含义,也能够根据不一样的应用场景选择不一样的NoSQL数据库,可是咱们仍是很难对它下一个准确的定义。相似的,关于什么是‘函数式编程’,也或多或少存在一样的窘境。咱们能够轻松的选择不一样的函数式编程语言,能够轻松的写出函数式编程风格的代码,但很难对什么是函数式编程下一个准确的定义。

实际上,从业界的讨论来看,微服务自己并无一个严格的定义。不过,ThoughtWorks的首席科学家,马丁 -福勒先生对微服务的这段描述,彷佛更加具体、贴切,通俗易懂:

微服务架构:

微服务架构是一种架构模式,它提倡将单一应用程序划分红一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每一个服务运行在其独立的进程中,服务与服务间采用轻量级的通讯机制互相沟通(一般是基于HTTP协议的RESTful API)。每一个服务都围绕着具体业务进行构建,而且可以被独立的部署到生产环境、类生产环境等。另外,应当尽可能避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建。

总结下来,微服务架构中的核心部分包括如下几点:

小, 且专一于作一件事情;
独立的进程中;
轻量级的通讯机制;
松耦合、独立部署。

clipboard.png
Java架构群:897889510群内提供

总结

随着市场的快速发展,业务的不断扩大,单块架构应用面临着愈来愈多的挑战,其改造与重构势在必行。而微服务架构的诞生,是互联网高速发展,虚拟化技术应用以及持续交付、DevOps深刻人心的综合产物。随着用户需求个性化、产品生命周期变短,微服务架构是将来软件软件架构朝着灵活性、扩展性、伸缩性以及高可用性发展的必然方向。同时,以Docker为表明的容器虚拟化技术的盛行,将大大下降微服务实施的成本,为微服务落地以及大规模使用提供了坚实的基础和保障。欢迎工做一到五年的Java工程师朋友们加入Java架构群:897889510群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用本身每一分每一秒的时间来学习提高本身,不要再用"没有时间“来掩饰本身思想上的懒惰!趁年轻,使劲拼,给将来的本身一个交代!

相关文章
相关标签/搜索