2008年,在一次软件架构设计高端课程中,有人将中国传统的“五至”与软件工程做了形象的类比,提到从事软件开发工作的工程师要“以物为本”。这次课程学习让我印象深刻,也让刚刚从事软件开发工作的我第一次对“架构”这个词有了直观而深刻的认识,这次课程学习成了我后来的架构师之路的灯塔。
在“五至”中,对“物、志、礼”进行了明确的排序:先有物,而后有志,最后有礼,所以重点是“物”。我们把这种思想对应到软件工程的项目实践中,可以这样理解:物就是最终的交付物,即软件产品;志对应项目的利益相关人;而礼则对应项目的过程管理。这样的排序不无道理,在项目实践过程中,应该以最终的交付物为中心,所以我们必须重视架构设计,只有经过完善的架构设计,才能呈现最好的软件产品。在项目的初期就要做好架构设计,达到“物之所至”;协调项目的利益相关方,达成共识,达到“志亦至焉”;在项目的进行过程中,做好项目管理和流程监控,达到“礼亦至焉”。
由上可知,软件架构是决定软件工程成败的首要因素,架构之道就是面对不同的问题域找到最佳的技术实现方案。在软件工程中,技术架构同时受到组织、流程管理的影响,然而软件产品最终能否成功仍然需要“以物为本”。
与时俱进
纵观计算机产业,过去的半个世纪,遵从摩尔定律的规律,计算力一直保持着大跨度的提高。1956年,英特尔创始人戈登·摩尔提出,集成电路的集成度每两年会翻一番;而后这个周期缩短到18个月,微处理器的性能每隔18个月提高1倍。然而,硅芯片已逼近物理和经济成本上的极限,许多专业人士纷纷预测,摩尔定律在不久的将来会失效。界时,我们会面临CPU性能提升放缓,计算力增长势微的局面。同时云计算、大数据、物联网、边缘计算、人工智能等技术的进一步成熟所产生的海量数据,却加大了对后端数据中心计算力的需求。
数字化经济的快速发展和云计算给底层IT系统带来的巨大变革正是当下微服务架构快速发展的时代背景。Gartner预计,从2018年到2022年,PaaS将成为未来的主流平台交付模式,而PaaS平台需要更加灵活的云原生应用架构做技术支撑,微服务架构正是云原生架构落地的关键技术。
正所谓“大道至简”,微服务本身是一个化繁为简的过程,它采用细粒度的分布式架构模式,通过系统化的思考方式,将纷繁复杂的业务逻辑映射到底层技术。在软件构建方面,微服务倾向于使用面向服务和领域驱动设计(Domain Driven Design)的方法论,将现实中的问题投影到对象的世界。“抽象、分解、扩展、复用”是常见的微服务构建系统的内功心法。然而软件开发没有“银弹”,架构设计还要从使用、性能、成本、效率、团队、收益等多方面权衡(Trade-off),进行综合考虑。
微服务架构的目标是,将业务与技术的复杂度进行分离,使业务更专注于实现对客户的价值交付,而将非功能需求封装在平台或者底层SDK中。目前在企业的应用开发中,Spring Boot和Spring Cloud平台作为微服务的技术开发框架,依然占据主流地位;而伴随容器和Kubernetes平台的崛起,结合自动化和DevOps持续交付流程,微服务可以显著提升应用交付的效率和产品的质量,此外。微服务还有如下优势:
l 更加快速地响应业务需求。
l 可提升应用的开发效率。
l 可满足对云原生的支持。
l 可满足系统的弹性、扩展性的需求。
l 容错性及生产就绪特性可保证服务的高可用。
l 有标准化的服务实现和交付方式。
l 基于“不可变基础设施”模式,可以减少环境因素的影响。
l 可提升系统性能及资源利用率。
传统粗放式的开发和运维方式将逐渐被取代,而更加高效、智能化、自动化的开发和运维方式将使每个人从中获益。当前,微服务和云原生应用架构还在快速演进之中,其间充满了机遇和挑战。作为软件从业人员,面对技术的更新迭代,我们唯有整装待发,才能与时俱进。
关于本书
本书的原理篇将深入讲解当前微服务架构的理念和方法论;实践篇主要讲解Spring Boot和Spring Cloud微服务框架体系;进阶篇关注微服务发展的技术趋势。本书既涵盖了我多年在传统电信企业中积累的分布式架构设计经验,也涵盖了互联网金融行业的前沿技术实践;本书既有我在大型项目中的经历分享和痛点复盘,也有开源软件的案例介绍,以及当下微服务技术趋势的深度剖析和预测。在本书的代码案例中,使用的是Spring Boot 1.5.11,在进阶篇中使用了Spring Boot 2.x,这两种版本在使用和配置方面有诸多不同,并且其中一些功能仅支持JDK1.8及以上版本,读者在阅读中需要注意。
内容结构
本书在结构上从3个层次深入解读微服务架构,希望读者能够循序渐进地深入了解微服务架构的理论及技术实践;当然,具备一定微服务架构经验的工程师也可以根据需要选择性地阅读。
l 原理篇
原理篇主要讲解微服务的概念、微服务与云原生的关系、微服务的主要特性及设计哲学、采用微服务的前提、微服务构建的理论基础及基本原则,以及领域驱动设计和微服务构建方法论、DevOps方法论等相关知识。
l 实践篇
实践篇主要对微服务架构落地的脚手架、关键技术、系统集成、数据架构、持续交付、服务治理监控等重要技术话题展开讲解。另外,针对初学者对Spring Boot和Spring Cloud体系“入门容易、精通难”的问题,实践篇中结合框架源码详细解构了Spring Boot的框架底层运行机制,并具体介绍了Spring Cloud核心治理组件及其工作原理,还会讲解如何基于开源软件做扩展性开发。
l 进阶篇
进阶篇主要介绍函数式编程、响应式微服务架构设计原理、常用的响应式编程框架、Spring Boot 2新特性,讲解Kubernetes工作原理、微服务与云原生生态的技术融合演进、微服务未来的技术发展趋势。
由于我在编写本书的同时需要兼顾工作,时间和精力有限,书中难免有不足之处,恳请广大读者批评指正。
致谢
首先感谢工作中的各位同事,感谢生活中的朋友,感谢宜信公司的高蕾涵同学,感谢电子工业出版社董英老师的鼓励和帮助,因为你们我才有动力完成这本书。最后,谨以此书献给我的妻子和家人,感谢你们对我工作的大力支持!