微信号:we21cto

介绍:21CTO(21CTO.com)是中国项级技术专家的学习与服务平台.我们为CTO、技术总监、架构师等技术专家提供高质量的资讯、问答、活动等产品,同时与企业连接,提供技术咨询、研发、运维、技术支持、培训及人才招聘等服...

微服务+架构 = 敏捷

2017-01-11 23:33 孙爱红

文章导读:

本文为金兰软件技术负责人大苹果(孙爱红)的文章。金兰软件是从事企业大数据研发的美资企业。我们一起看,有着多年企业大数据研发经验的老司机给我们说点啥。



微服务+ 架构 = 敏捷


微服务架构简介





随着业务复杂性的增加、遗留代码及新增业务逻辑代码的不断添加,企业软件也逐渐庞大起来。几年、十几年的项目做下来,代码结构可能已经变得非常难以维护,系统组件之间的耦合性也不像当初设想的那么完美,而更多新的业务需求还在不断的加入进来,甚至新的独立系统也要不断的集成进来。软件研发和维护变得越来越像一个噩梦。


当新技术、新趋势不断涌现时,软件架构也在不断进化,以更好的解决研发和维护过程中出现的这些问题,让软件研发和维护更高效、错误率更低。上世纪80年代软件架构主要是运行在大型机上的事务系统,90年代之后,个人电脑带来了客户机服务器架构,


而进入2000年后,互联网的发展和数据的分布、同步则降低了基于事务的交易系统的核心地位。现如今,移动互联网、终端设备的多样化,则希望软件系统能够更好地适应用户的需求、随时随地的可访问。在这种情形下,更加灵活的微服务(Micro-service)架构出现了。


那么什么是微服务呢?实际上,微服务是可独立运行和部署的专注于更特定的、更集中的业务功能的服务组件。比如说多语言软件中,用于提供语言包功能的微服务、用于日志记录的微服务、用于用户权限认证的微服务等。


我们为什么需要微服务呢?微服务架构能解决我们当前遇到的什么问题?在传统的软件研发中,软件的功能都包含在同一个可执行的软件包中、或者类库、或者依赖于同一个数据库。然后编写完成的软件部署到一个CPU和内存足够大的服务器或者虚拟机上。


对于大多数一般的应用程序来说,这样做就已经足够了。但是,随着系统业务越来越复杂、系统越来越庞大,尤其是企业级应用,系统所需的资源越来越多,有限的CPU和内存会逐渐成为性能的瓶颈。在我做过的很多大型的企业系统中,几年、十几年不断的添加新功能、维护旧功能,系统的性能调优似乎成了后来的主要工作。不断的去优化复杂的数据库存储过程、不断的去重构复杂的程序代码,可是依然不太理想。


这个时候,我们开始想要把复杂的业务逻辑按照功能逐渐剥离出来,让它们有独立的可执行程序、独立的数据库、可以独立的编译打包部署,从而可以为这些独立的可执行程序分配程序运行所需的资源,相互不依赖,减少性能瓶颈。这些独立的微服务可以使用通用的协议,比如RESTful API来进行通信和交互。独立的微服务有很好的可扩展性,当某一个微服务有性能瓶颈时,只需要再多部署一些这样的服务,就能把性能压力分散开。所以,微服务是解决因资源限制而导致系统性能瓶颈的一个有效措施。


这种设计同时也遵循了软件设计上的关注点分离(Separation of Concerns,SOC)的原则。


而从大型软件的研发管理上来说,关注点更集中、可独立部署、执行的微服务,能让团队立即开始一个微服务的研发。从各个微服务起,逐个击破,让大型系统的成功研发、维护更可管理。尤其是在当下DevOps被广泛应用之时,更小单元的微服务能更容易地在DevOps平台上实现自动代码提交、编译、部署和测试。


另外,有了这些微服务组件,整个软件系统可以更容易的部署到云平台上。根据计算资源的需要,可以部署到一个或多个虚拟云平台上。也可以根据业务功能的需要,启动或关闭某一些微服务。所以,这种微服务的架构非常适应当前的云计算环境。




在这一篇文章中,我们简单介绍了微服务的背景知识、为什么需要使用微服务。


后面我会分三个部分给大家阐述。第二部分,将结合实际的案例,来说明微服务设计的原则、基于RESTful的微服务设计等。


在第三部分里,将结合Scrum敏捷模型、DevOps平台,介绍一下微服务是如何应用在这些场景下。


敬请期待。



作者:孙爱红 (金兰(大连)软件技术公司 技术负责人,21CTO社区会员)



 
21CTO 更多文章 大道至简:零基础构建轻量级HA流式计算系统 ... 微服务+架构 = 敏捷 微服务+架构 = 敏捷 《互联网高可用系统架构》预览版目录 互联网高可用系统架构概论(上)
猜您喜欢 8 张图理解 Java 浅析TCP握手欺骗 OKHTTP之缓存配置详解 纯CSS写的小雨打在窗户上效果 区块链需要关注的应用场景