闷棍暴打面试官 SpringCloud源码系列 : SpringCloud的前世今生
Posted 20K+
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了闷棍暴打面试官 SpringCloud源码系列 : SpringCloud的前世今生相关的知识,希望对你有一定的参考价值。
给 20K+ 加星标, 助力 20K+
1
单机架构 VS 微服务架构 哪个是21世纪的Web领域的趋势 ?
答案: 微服务架构是单机架构的未来, 但不是银弹多用于增长型业务!
如果你是一位软件行业从业者,尤其是从事服务器端或者后台系统软件开发,相信近年来一定被层出不穷的商业名词所包围:NoSQL、Big Data、Web-scale、Sharding、Eventual consistency、ACID、CAP理论、云服务、MapReduce和Real-time等,所有这些其实都围绕着如何构建高效存储与数据处理这一核心主题。
过去十年,在数据库领域与分布式系统方面涌现了许多引人瞩目的进展,由此深刻地影响了如何构建上层应用系统。分析这些激动人心的变化背后,你会发现有以下几个非常重要的驱动因素:互联网公司,包括Google、Yahoo! 、Amazon、Facebook、LinkedIn、Microsoft,以及Twitter等,它们每天都在面对海量数据和负载,迫使其不断创新,并改进支撑系统以更有效地处理这种量级的数据。
商业方面因素,如敏捷开发、测试驱动和对市场机会做出快速反应等,都要求尽量缩短产品开发周期,因此系统中的数据模型也要足够灵活以方便调整。
硬件方面,CPU主频增长日趋缓慢,而多核系统成为新常态,网络速度则依旧保持快速发展,这就意味着并行分布式系统将会成为业界主流。
<数据密集型应用系统设计>
2
先有SpringCloud 还是先有 微服务 ?
答案: 先有微服务后有SpringCloud !2014年3月25日 敏捷开发教父 Martin Fowler 在 Microservices 一文中 对于 Microservice Architecture 进行了条理清晰的论述, 向世人展示了进可攻退可守的微服务架构思想, 奠定了后来者对 微服务的认知.
早期 SpringCloud & Angel 系列基于Spring Boot 1.2.x, 而1.2版本最早诞生于 2014年12月11日,也就是说至少晚了8个月多! 其中很多设计思想也来源于前者! (数据来源: github) 又一个活生生的学术界驱动工业界的例子. 所以大家有空还是要关注一下 学术界大牛们的新作.才能保证走在技术最前沿.
3
微服务的定义
笔者通过翻阅 Martin Fowler 发表的文章 Microservices , 将微服务理念梳理为以下 7 点
通过服务进行组件化: 组件是独立可替换和可升级的软件单元。微服务架构将使用库,但是它们将自己的软件组成组件的主要方式是分解成服务。我们将库定义为链接到程序并使用内存中函数调用进行调用的组件,而服务则是进程外组件,它们通过某种机制(例如Web服务请求或远程过程调用)进行通信。
分散治理: 集中治理的后果之一是倾向于在单一技术平台上实现标准化。经验表明,这种方法是束手无策的-并非每个问题都是钉子,也不是每个解决方案都是锤子。我们更喜欢使用正确的工具来完成工作,而整体式应用程序可以在一定程度上利用不同的语言,但这并不常见。
分散数据管理: 数据管理的分散化以多种不同的方式呈现。从最抽象的角度讲,这意味着系统的世界概念模型将有所不同。在大型企业中进行集成时,这是一个常见问题,客户的销售视图将与支持视图不同。在销售视图中被称为客户的某些内容可能根本不会出现在支持视图中。那些具有相同属性的属性可能具有不同的语义,并且(更差的)公共属性具有不同的语义。
智能端点和哑管道: 在不同流程之间建立通信结构时,我们已经看到了许多产品和方法,这些产品和方法强调在通信机制本身中投入大量智慧。一个很好的例子是企业服务总线(ESB),其中ESB产品通常包括用于消息路由,编排,转换和应用业务规则的复杂工具。
基础设施自动化: 我们希望尽可能地放心我们的软件正在运行,因此我们运行了许多自动化测试。升级工作软件的渠道意味着我们可以自动部署 到每个新环境。
失败设计: 使用服务作为组件的结果是,需要对应用程序进行设计,以便它们可以容忍服务故障。由于供应商不可用,任何服务呼叫都可能失败,客户必须尽可能优雅地响应此请求。与单片设计相比,这是一个缺点,因为它引入了额外的处理复杂性。结果是微服务团队不断反思服务故障如何影响用户体验。Netflix的Simian Army 在工作日内导致服务甚至数据中心发生故障,以测试应用程序的弹性和监视能力。
进化设计: 每当您尝试将软件系统分解为组件时,您都会面临如何划分各个部分的决定-我们决定对应用程序进行分割的原则是什么?组件的关键属性是独立替换和可升级性的概念[13] -这意味着我们寻找可以想象重写组件而不影响其协作者的观点。实际上,许多微服务组通过明确期望许多服务将被废弃而不是长期发展而将其进一步发展。
没接触过微服务的小伙伴看完晕倒了过去,
以上是关于闷棍暴打面试官 SpringCloud源码系列 : SpringCloud的前世今生的主要内容,如果未能解决你的问题,请参考以下文章
再见面试官:Spring,SpringMVC,SpringBoot,SpringCloud 有什么区别和联系?